aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--demo/dist/demo.css2
-rw-r--r--demo/dist/demo.js7
-rw-r--r--demo/dist/demo.js.map2
-rw-r--r--demo/dist/demo.min.js2
-rw-r--r--demo/dist/demo.min.js.map2
-rw-r--r--demo/src/js/demo.js7
-rw-r--r--dist/plyr.css2
-rw-r--r--dist/plyr.js383
-rw-r--r--dist/plyr.js.map2
-rw-r--r--dist/plyr.min.js2
-rw-r--r--dist/plyr.min.js.map2
-rw-r--r--dist/plyr.polyfilled.js377
-rw-r--r--dist/plyr.polyfilled.js.map2
-rw-r--r--dist/plyr.polyfilled.min.js2
-rw-r--r--dist/plyr.polyfilled.min.js.map2
-rw-r--r--package.json10
-rw-r--r--readme.md4
-rw-r--r--src/js/controls.js14
-rw-r--r--src/js/listeners.js432
-rw-r--r--src/js/plyr.js109
-rw-r--r--src/js/support.js20
-rw-r--r--src/js/ui.js82
-rw-r--r--src/js/utils/animation.js14
-rw-r--r--src/sass/components/poster.scss7
-rw-r--r--src/sass/components/progress.scss1
-rw-r--r--src/sass/lib/mixins.scss1
26 files changed, 854 insertions, 636 deletions
diff --git a/demo/dist/demo.css b/demo/dist/demo.css
index ef86a0c9..d56a566c 100644
--- a/demo/dist/demo.css
+++ b/demo/dist/demo.css
@@ -1 +1 @@
-@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:300;src:url(https://cdn.plyr.io/static/fonts/gordita-light.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-light.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:400;src:url(https://cdn.plyr.io/static/fonts/gordita-regular.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-regular.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:500;src:url(https://cdn.plyr.io/static/fonts/gordita-medium.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-medium.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:600;src:url(https://cdn.plyr.io/static/fonts/gordita-bold.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-bold.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:900;src:url(https://cdn.plyr.io/static/fonts/gordita-black.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-black.woff) format("woff")}@keyframes fadein{0%{opacity:0}100%{opacity:1}}/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a,button.faux-link{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}*,::after,::before{box-sizing:border-box}body,html{display:flex;width:100%}html{background:linear-gradient(to left top,#4dc1ff,#0074b3);background-attachment:fixed;height:100%}body{align-items:center;display:flex;flex-direction:column;min-height:100%}.grid{flex:1;overflow:auto}main{margin:auto;padding-bottom:1px;text-align:center}aside{align-items:center;background:#fff;color:#55646b;display:flex;flex-shrink:0;justify-content:center;padding:15px;position:relative;text-align:center;text-shadow:none;width:100%}aside .icon{fill:#4baaf4;margin-right:10px}aside p{margin:0}aside a,aside button.faux-link{color:#4baaf4}aside a.tab-focus,aside button.tab-focus.faux-link{box-shadow:0 0 0 3px rgba(75,170,244,.35);outline:0}.grid{margin:0 auto;padding:20px}@media only screen and (min-width:768px){.grid{align-items:center;display:flex;max-width:1260px;width:100%}.grid>*{flex:1}}html{font-size:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-size:15px;font-size:.9375rem;color:#fff;font-family:Gordita,Avenir,"Helvetica Neue",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-weight:500;line-height:1.75;text-shadow:0 1px 1px rgba(0,0,0,.15)}button,input,select,textarea{font:inherit}p,small{margin:0 0 20px}small{font-size:13px;font-size:.8125rem;display:block}h1{font-size:64px;font-size:4rem;font-weight:600;letter-spacing:-.025em;line-height:1.2;margin:0 0 20px}.button,.button__count{align-items:center;background:#fff;border:0;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.1);color:#55646b;display:inline-flex;padding:15px;position:relative;text-shadow:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle}.button{font-weight:600;padding-left:20px;padding-right:20px;transition:all .2s ease}.button:focus,.button:hover{color:#343f4a}.button:focus::after,.button:hover::after{display:none}.button:hover{box-shadow:0 2px 2px rgba(0,0,0,.1);transform:translateY(-1px)}.button:focus{outline:0}.button.tab-focus{box-shadow:0 0 0 3px rgba(255,255,255,.35);outline:0}.button:active{transform:translateY(1px)}.button--with-count{display:inline-flex}.button--with-count .button .icon{flex-shrink:0}.button__count{animation:fadein .2s ease;margin-left:10px}.button__count::before{border:5px solid transparent;border-left-width:0;border-right-color:#fff;content:'';height:0;position:absolute;right:100%;top:50%;transform:translateY(-50%);width:0}header{padding-bottom:20px;text-align:center}header .call-to-action{margin-top:30px}@media only screen and (min-width:768px){header{margin-right:60px;max-width:360px;padding-bottom:40px;text-align:left}}.icon{fill:currentColor;height:16px;vertical-align:-3px;width:16px}a svg,button svg,button.faux-link svg,label svg{pointer-events:none}.btn .icon,a .icon,button.faux-link .icon{margin-right:6px}button.faux-link{background:0 0;border:0;border-radius:0;cursor:pointer;font:inherit;line-height:1.75;margin:0;padding:0;position:relative;text-align:inherit;text-shadow:inherit;-moz-user-select:text;vertical-align:baseline;width:auto}a,button.faux-link{border-bottom:1px dotted currentColor;color:#fff;font-weight:600;position:relative;text-decoration:none;transition:all .2s ease}a::after,button.faux-link::after{background:currentColor;content:'';height:1px;left:50%;position:absolute;top:100%;transform:translateX(-50%);transition:width .2s ease;width:0}a:focus,a:hover,button.faux-link:focus,button.faux-link:hover{border-bottom-color:transparent;outline:0}a:focus::after,a:hover::after,button.faux-link:focus::after,button.faux-link:hover::after{width:100%}a.tab-focus,button.tab-focus.faux-link{box-shadow:0 0 0 3px rgba(255,255,255,.35);outline:0}a.no-border::after,button.no-border.faux-link::after{display:none}li,ul{list-style:none;margin:0;padding:0}audio,img,video{max-width:100%;vertical-align:middle}nav{display:flex;justify-content:center;margin-bottom:20px}video{max-width:100%;vertical-align:middle}.plyr{border-radius:4px;box-shadow:0 2px 5px rgba(0,0,0,.2);margin:20px auto}.plyr.plyr--audio{max-width:480px}.plyr__video-wrapper::after{border:1px solid rgba(0,0,0,.15);border-radius:inherit;bottom:0;content:'';left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:3}.plyr__cite{display:none;margin-top:20px}.plyr__cite .icon{margin-right:4px}.plyr--audio~ul .plyr__cite--audio,.plyr--video:not(.plyr--youtube):not(.plyr--vimeo)~ul .plyr__cite--video,.plyr--vimeo~ul .plyr__cite--vimeo,.plyr--youtube~ul .plyr__cite--youtube{display:block}@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;direction:ltr;font-family:inherit;font-variant-numeric:tabular-nums;font-weight:500;line-height:1.7;max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease}.plyr audio,.plyr video{border-radius:inherit;height:auto;vertical-align:middle;width:100%}.plyr button{font:inherit;line-height:inherit;width:auto}.plyr:focus{outline:0}.plyr--full-ui{box-sizing:border-box}.plyr--full-ui *,.plyr--full-ui ::after,.plyr--full-ui ::before{box-sizing:inherit}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui button.faux-link,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4f5b5f;border-radius:2px;color:#fff;font-size:9px;line-height:1;padding:3px 4px}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{animation:plyr-fade-in .3s ease;bottom:0;color:#fff;display:none;font-size:12px;left:0;padding:10px;position:absolute;text-align:center;transform:translateY(-40px);transition:transform .4s ease-in-out;width:100%}.plyr__captions .plyr__caption{background:rgba(0,0,0,.8);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__captions .plyr__caption div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:13px;padding:20px}}@media (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr__control{background:0 0;border:0;border-radius:3px;color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;pointer-events:none;width:18px}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}.plyr__control.plyr__control--pressed .icon--not-pressed,.plyr__control.plyr__control--pressed .label--not-pressed,.plyr__control:not(.plyr__control--pressed) .icon--pressed,.plyr__control:not(.plyr__control--pressed) .label--pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;display:none;left:50%;padding:15px;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:2}.plyr__control--overlaid svg{height:20px;left:2px;position:relative;width:20px}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;justify-content:flex-end;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0;margin-right:auto}.plyr__controls .plyr__volume{margin-left:5px}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--video .plyr__controls{background:linear-gradient(transparent,rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;left:0;padding:35px 10px 10px;position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:2}.plyr--video .plyr__controls .plyr__control svg{-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__controls .plyr__control.plyr__tab-focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{background:#fff;border-radius:inherit;color:#4f5b5f;padding:10px}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__video-embed{height:0;padding-bottom:56.25%;position:relative}.plyr__video-embed iframe{border:0;height:100%;left:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr--full-ui .plyr__video-embed>.plyr__video-embed__container{padding-bottom:240%;position:relative;transform:translateY(-38.28125%)}.plyr__menu{display:flex;position:relative}.plyr__menu .plyr__control svg{transition:transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{animation:plyr-popup .2s ease;background:rgba(255,255,255,.9);border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:13px;margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:3}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container::after{border:4px solid transparent;border-top-color:rgba(255,255,255,.9);content:'';height:0;position:absolute;right:15px;top:100%;width:0}.plyr__menu__container [role=menu]{padding:7px}.plyr__menu__container [role=menuitem],.plyr__menu__container [role=menuitemradio]{margin-top:2px}.plyr__menu__container [role=menuitem]:first-child,.plyr__menu__container [role=menuitemradio]:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4f5b5f;display:flex;font-size:13px;padding:4px 11px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control>span{align-items:inherit;display:flex;width:100%}.plyr__menu__container .plyr__control::after{border:4px solid transparent;content:'';position:absolute;top:50%;transform:translateY(-50%)}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{border-left-color:rgba(79,91,95,.8);right:5px}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:500;margin:7px;margin-bottom:3px;padding-left:28px;position:relative;width:calc(100% - 14px)}.plyr__menu__container .plyr__control--back::after{border-right-color:rgba(79,91,95,.8);left:7px}.plyr__menu__container .plyr__control--back::before{background:#b7c5cd;box-shadow:0 1px 0 #fff;content:'';height:1px;left:0;margin-top:4px;overflow:hidden;position:absolute;right:0;top:100%}.plyr__menu__container .plyr__control--back.plyr__tab-focus::after,.plyr__menu__container .plyr__control--back:hover::after{border-right-color:currentColor}.plyr__menu__container .plyr__control[role=menuitemradio]{padding-left:7px}.plyr__menu__container .plyr__control[role=menuitemradio]::after,.plyr__menu__container .plyr__control[role=menuitemradio]::before{border-radius:100%}.plyr__menu__container .plyr__control[role=menuitemradio]::before{background:rgba(0,0,0,.1);content:'';display:block;flex-shrink:0;height:16px;margin-right:10px;transition:all .3s ease;width:16px}.plyr__menu__container .plyr__control[role=menuitemradio]::after{background:#fff;border:0;height:6px;left:12px;opacity:0;top:50%;transform:translateY(-50%) scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]::before{background:#1aafff}.plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]::after{opacity:1;transform:translateY(-50%) scale(1)}.plyr__menu__container .plyr__control[role=menuitemradio].plyr__tab-focus::before,.plyr__menu__container .plyr__control[role=menuitemradio]:hover::before{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:-5px;overflow:hidden;padding-left:25px;pointer-events:none}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:28px;color:#1aafff;display:block;height:20px;margin:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:3px;height:6px;-webkit-user-select:none;user-select:none;background-image:linear-gradient(to right,currentColor var(--value,0),transparent var(--value,0))}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;-webkit-appearance:none;margin-top:-4px}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:3px;height:6px;-moz-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:3px;height:6px}.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:3px;height:6px;-ms-user-select:none;user-select:none;color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper{background:0 0;border:0;border-radius:3px;height:6px;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:3px;height:6px;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;margin-top:0}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr__poster{background-color:#000;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .3s ease;width:100%;z-index:1}.plyr--stopped.plyr__poster-enabled .plyr__poster{opacity:1;pointer-events:none}.plyr__time{font-size:11px}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{background:rgba(255,255,255,.9);border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:12px;font-weight:500;line-height:1.3;margin-bottom:10px;opacity:0;padding:5px 7.5px;pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease;white-space:nowrap;z-index:2}.plyr__tooltip::before{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);bottom:-4px;content:'';height:0;left:50%;position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;border-radius:inherit;overflow:hidden;position:relative;z-index:0}.plyr__progress{display:flex;flex:1;left:7px;margin-right:14px;position:relative}.plyr__progress input[type=range],.plyr__progress__buffer{margin-left:-7px;margin-right:-7px;width:calc(100% + 14px)}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{font-size:11px;left:0}.plyr__progress__buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:6px;left:0;margin-top:-3px;padding:0;position:absolute;top:50%}.plyr__progress__buffer::-webkit-progress-bar{background:0 0;transition:width .2s ease}.plyr__progress__buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:6px}.plyr__progress__buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:6px;transition:width .2s ease}.plyr__progress__buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress__buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress__buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress__buffer{animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(47,52,61,.6) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.6) 50%,rgba(47,52,61,.6) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;color:transparent}.plyr--video.plyr--loading .plyr__progress__buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress__buffer{background-color:rgba(183,197,205,.66)}.plyr__volume{flex:1;position:relative}.plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr__volume{max-width:50px}}@media (min-width:768px){.plyr__volume{max-width:80px}}.plyr--is-ios .plyr__volume{display:none!important}.plyr--is-ios.plyr--vimeo [data-plyr=mute]{display:none!important}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:fullscreen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-moz-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size:21px}}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-moz-full-screen .plyr__captions{font-size:21px}}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-ms-fullscreen .plyr__captions{font-size:21px}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;bottom:0;left:0;position:fixed;right:0;top:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback .plyr__video-embed{overflow:visible}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr--fullscreen-fallback.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px}}.plyr__ads{border-radius:inherit;bottom:0;cursor:pointer;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:-1}.plyr__ads>div,.plyr__ads>div iframe{height:100%;position:absolute;width:100%}.plyr__ads::after{background:rgba(47,52,61,.8);border-radius:2px;bottom:10px;color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;z-index:3}.plyr__ads::after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:6px;left:0;margin:-3px 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr--no-transition{transition:none!important}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important}.plyr [hidden]{display:none!important}.no-border{border:0}[hidden]{display:none}.sr-only{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;opacity:.001;overflow:hidden;padding:0;position:absolute;width:1px} \ No newline at end of file
+@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:300;src:url(https://cdn.plyr.io/static/fonts/gordita-light.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-light.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:400;src:url(https://cdn.plyr.io/static/fonts/gordita-regular.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-regular.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:500;src:url(https://cdn.plyr.io/static/fonts/gordita-medium.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-medium.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:600;src:url(https://cdn.plyr.io/static/fonts/gordita-bold.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-bold.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:900;src:url(https://cdn.plyr.io/static/fonts/gordita-black.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-black.woff) format("woff")}@keyframes fadein{0%{opacity:0}100%{opacity:1}}/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a,button.faux-link{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}*,::after,::before{box-sizing:border-box}body,html{display:flex;width:100%}html{background:linear-gradient(to left top,#4dc1ff,#0074b3);background-attachment:fixed;height:100%}body{align-items:center;display:flex;flex-direction:column;min-height:100%}.grid{flex:1;overflow:auto}main{margin:auto;padding-bottom:1px;text-align:center}aside{align-items:center;background:#fff;color:#55646b;display:flex;flex-shrink:0;justify-content:center;padding:15px;position:relative;text-align:center;text-shadow:none;width:100%}aside .icon{fill:#4baaf4;margin-right:10px}aside p{margin:0}aside a,aside button.faux-link{color:#4baaf4}aside a.tab-focus,aside button.tab-focus.faux-link{box-shadow:0 0 0 3px rgba(75,170,244,.35);outline:0}.grid{margin:0 auto;padding:20px}@media only screen and (min-width:768px){.grid{align-items:center;display:flex;max-width:1260px;width:100%}.grid>*{flex:1}}html{font-size:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-size:15px;font-size:.9375rem;color:#fff;font-family:Gordita,Avenir,"Helvetica Neue",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-weight:500;line-height:1.75;text-shadow:0 1px 1px rgba(0,0,0,.15)}button,input,select,textarea{font:inherit}p,small{margin:0 0 20px}small{font-size:13px;font-size:.8125rem;display:block}h1{font-size:64px;font-size:4rem;font-weight:600;letter-spacing:-.025em;line-height:1.2;margin:0 0 20px}.button,.button__count{align-items:center;background:#fff;border:0;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.1);color:#55646b;display:inline-flex;padding:15px;position:relative;text-shadow:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle}.button{font-weight:600;padding-left:20px;padding-right:20px;transition:all .2s ease}.button:focus,.button:hover{color:#343f4a}.button:focus::after,.button:hover::after{display:none}.button:hover{box-shadow:0 2px 2px rgba(0,0,0,.1);transform:translateY(-1px)}.button:focus{outline:0}.button.tab-focus{box-shadow:0 0 0 3px rgba(255,255,255,.35);outline:0}.button:active{transform:translateY(1px)}.button--with-count{display:inline-flex}.button--with-count .button .icon{flex-shrink:0}.button__count{animation:fadein .2s ease;margin-left:10px}.button__count::before{border:5px solid transparent;border-left-width:0;border-right-color:#fff;content:'';height:0;position:absolute;right:100%;top:50%;transform:translateY(-50%);width:0}header{padding-bottom:20px;text-align:center}header .call-to-action{margin-top:30px}@media only screen and (min-width:768px){header{margin-right:60px;max-width:360px;padding-bottom:40px;text-align:left}}.icon{fill:currentColor;height:16px;vertical-align:-3px;width:16px}a svg,button svg,button.faux-link svg,label svg{pointer-events:none}.btn .icon,a .icon,button.faux-link .icon{margin-right:6px}button.faux-link{background:0 0;border:0;border-radius:0;cursor:pointer;font:inherit;line-height:1.75;margin:0;padding:0;position:relative;text-align:inherit;text-shadow:inherit;-moz-user-select:text;vertical-align:baseline;width:auto}a,button.faux-link{border-bottom:1px dotted currentColor;color:#fff;font-weight:600;position:relative;text-decoration:none;transition:all .2s ease}a::after,button.faux-link::after{background:currentColor;content:'';height:1px;left:50%;position:absolute;top:100%;transform:translateX(-50%);transition:width .2s ease;width:0}a:focus,a:hover,button.faux-link:focus,button.faux-link:hover{border-bottom-color:transparent;outline:0}a:focus::after,a:hover::after,button.faux-link:focus::after,button.faux-link:hover::after{width:100%}a.tab-focus,button.tab-focus.faux-link{box-shadow:0 0 0 3px rgba(255,255,255,.35);outline:0}a.no-border::after,button.no-border.faux-link::after{display:none}li,ul{list-style:none;margin:0;padding:0}audio,img,video{max-width:100%;vertical-align:middle}nav{display:flex;justify-content:center;margin-bottom:20px}video{max-width:100%;vertical-align:middle}.plyr{border-radius:4px;box-shadow:0 2px 5px rgba(0,0,0,.2);margin:20px auto}.plyr.plyr--audio{max-width:480px}.plyr__video-wrapper::after{border:1px solid rgba(0,0,0,.15);border-radius:inherit;bottom:0;content:'';left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:3}.plyr__cite{display:none;margin-top:20px}.plyr__cite .icon{margin-right:4px}.plyr--audio~ul .plyr__cite--audio,.plyr--video:not(.plyr--youtube):not(.plyr--vimeo)~ul .plyr__cite--video,.plyr--vimeo~ul .plyr__cite--vimeo,.plyr--youtube~ul .plyr__cite--youtube{display:block}@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;direction:ltr;font-family:inherit;font-variant-numeric:tabular-nums;font-weight:500;line-height:1.7;max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease}.plyr audio,.plyr video{border-radius:inherit;height:auto;vertical-align:middle;width:100%}.plyr button{font:inherit;line-height:inherit;width:auto}.plyr:focus{outline:0}.plyr--full-ui{box-sizing:border-box}.plyr--full-ui *,.plyr--full-ui ::after,.plyr--full-ui ::before{box-sizing:inherit}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui button.faux-link,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4f5b5f;border-radius:2px;color:#fff;font-size:9px;line-height:1;padding:3px 4px}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{animation:plyr-fade-in .3s ease;bottom:0;color:#fff;display:none;font-size:12px;left:0;padding:10px;position:absolute;text-align:center;transform:translateY(-40px);transition:transform .4s ease-in-out;width:100%}.plyr__captions .plyr__caption{background:rgba(0,0,0,.8);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__captions .plyr__caption div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:13px;padding:20px}}@media (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr__control{background:0 0;border:0;border-radius:3px;color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;pointer-events:none;width:18px}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}.plyr__control.plyr__control--pressed .icon--not-pressed,.plyr__control.plyr__control--pressed .label--not-pressed,.plyr__control:not(.plyr__control--pressed) .icon--pressed,.plyr__control:not(.plyr__control--pressed) .label--pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;display:none;left:50%;padding:15px;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:2}.plyr__control--overlaid svg{height:20px;left:2px;position:relative;width:20px}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;justify-content:flex-end;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0;margin-right:auto}.plyr__controls .plyr__volume{margin-left:5px}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--video .plyr__controls{background:linear-gradient(transparent,rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;left:0;padding:35px 10px 10px;position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:2}.plyr--video .plyr__controls .plyr__control svg{-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__controls .plyr__control.plyr__tab-focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{background:#fff;border-radius:inherit;color:#4f5b5f;padding:10px}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__video-embed{height:0;padding-bottom:56.25%;position:relative}.plyr__video-embed iframe{border:0;height:100%;left:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr--full-ui .plyr__video-embed>.plyr__video-embed__container{padding-bottom:240%;position:relative;transform:translateY(-38.28125%)}.plyr__menu{display:flex;position:relative}.plyr__menu .plyr__control svg{transition:transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{animation:plyr-popup .2s ease;background:rgba(255,255,255,.9);border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:13px;margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:3}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container::after{border:4px solid transparent;border-top-color:rgba(255,255,255,.9);content:'';height:0;position:absolute;right:15px;top:100%;width:0}.plyr__menu__container [role=menu]{padding:7px}.plyr__menu__container [role=menuitem],.plyr__menu__container [role=menuitemradio]{margin-top:2px}.plyr__menu__container [role=menuitem]:first-child,.plyr__menu__container [role=menuitemradio]:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4f5b5f;display:flex;font-size:13px;padding:4px 11px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control>span{align-items:inherit;display:flex;width:100%}.plyr__menu__container .plyr__control::after{border:4px solid transparent;content:'';position:absolute;top:50%;transform:translateY(-50%)}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{border-left-color:rgba(79,91,95,.8);right:5px}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:500;margin:7px;margin-bottom:3px;padding-left:28px;position:relative;width:calc(100% - 14px)}.plyr__menu__container .plyr__control--back::after{border-right-color:rgba(79,91,95,.8);left:7px}.plyr__menu__container .plyr__control--back::before{background:#b7c5cd;box-shadow:0 1px 0 #fff;content:'';height:1px;left:0;margin-top:4px;overflow:hidden;position:absolute;right:0;top:100%}.plyr__menu__container .plyr__control--back.plyr__tab-focus::after,.plyr__menu__container .plyr__control--back:hover::after{border-right-color:currentColor}.plyr__menu__container .plyr__control[role=menuitemradio]{padding-left:7px}.plyr__menu__container .plyr__control[role=menuitemradio]::after,.plyr__menu__container .plyr__control[role=menuitemradio]::before{border-radius:100%}.plyr__menu__container .plyr__control[role=menuitemradio]::before{background:rgba(0,0,0,.1);content:'';display:block;flex-shrink:0;height:16px;margin-right:10px;transition:all .3s ease;width:16px}.plyr__menu__container .plyr__control[role=menuitemradio]::after{background:#fff;border:0;height:6px;left:12px;opacity:0;top:50%;transform:translateY(-50%) scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]::before{background:#1aafff}.plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]::after{opacity:1;transform:translateY(-50%) scale(1)}.plyr__menu__container .plyr__control[role=menuitemradio].plyr__tab-focus::before,.plyr__menu__container .plyr__control[role=menuitemradio]:hover::before{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:-5px;overflow:hidden;padding-left:25px;pointer-events:none}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:28px;color:#1aafff;display:block;height:20px;margin:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:3px;height:6px;-webkit-user-select:none;user-select:none;background-image:linear-gradient(to right,currentColor var(--value,0),transparent var(--value,0))}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);height:14px;position:relative;transition:all .2s ease;width:14px;-webkit-appearance:none;margin-top:-4px}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:3px;height:6px;-moz-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);height:14px;position:relative;transition:all .2s ease;width:14px}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:3px;height:6px}.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:3px;height:6px;-ms-user-select:none;user-select:none;color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper{background:0 0;border:0;border-radius:3px;height:6px;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:3px;height:6px;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);height:14px;position:relative;transition:all .2s ease;width:14px;margin-top:0}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr__poster{background-color:#000;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;display:none;height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;z-index:1}.plyr--stopped.plyr__poster-enabled .plyr__poster{display:block}.plyr__time{font-size:11px}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{background:rgba(255,255,255,.9);border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:12px;font-weight:500;line-height:1.3;margin-bottom:10px;opacity:0;padding:5px 7.5px;pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease;white-space:nowrap;z-index:2}.plyr__tooltip::before{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);bottom:-4px;content:'';height:0;left:50%;position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;border-radius:inherit;overflow:hidden;position:relative;z-index:0}.plyr__progress{flex:1;left:7px;margin-right:14px;position:relative}.plyr__progress input[type=range],.plyr__progress__buffer{margin-left:-7px;margin-right:-7px;width:calc(100% + 14px)}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{font-size:11px;left:0}.plyr__progress__buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:6px;left:0;margin-top:-3px;padding:0;position:absolute;top:50%}.plyr__progress__buffer::-webkit-progress-bar{background:0 0;transition:width .2s ease}.plyr__progress__buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:6px}.plyr__progress__buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:6px;transition:width .2s ease}.plyr__progress__buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress__buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress__buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress__buffer{animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(47,52,61,.6) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.6) 50%,rgba(47,52,61,.6) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;color:transparent}.plyr--video.plyr--loading .plyr__progress__buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress__buffer{background-color:rgba(183,197,205,.66)}.plyr__volume{flex:1;position:relative}.plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr__volume{max-width:50px}}@media (min-width:768px){.plyr__volume{max-width:80px}}.plyr--is-ios .plyr__volume{display:none!important}.plyr--is-ios.plyr--vimeo [data-plyr=mute]{display:none!important}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:fullscreen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-moz-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size:21px}}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-moz-full-screen .plyr__captions{font-size:21px}}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-ms-fullscreen .plyr__captions{font-size:21px}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;bottom:0;left:0;position:fixed;right:0;top:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback .plyr__video-embed{overflow:visible}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr--fullscreen-fallback.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px}}.plyr__ads{border-radius:inherit;bottom:0;cursor:pointer;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:-1}.plyr__ads>div,.plyr__ads>div iframe{height:100%;position:absolute;width:100%}.plyr__ads::after{background:rgba(47,52,61,.8);border-radius:2px;bottom:10px;color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;z-index:3}.plyr__ads::after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:6px;left:0;margin:-3px 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr--no-transition{transition:none!important}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important}.plyr [hidden]{display:none!important}.no-border{border:0}[hidden]{display:none}.sr-only{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;opacity:.001;overflow:hidden;padding:0;position:absolute;width:1px} \ No newline at end of file
diff --git a/demo/dist/demo.js b/demo/dist/demo.js
index d68289b8..0b67f4d1 100644
--- a/demo/dist/demo.js
+++ b/demo/dist/demo.js
@@ -4147,9 +4147,10 @@ typeof navigator === "object" && (function () {
global: true
},
tooltips: {
- controls: true
+ controls: false,
+ seek: false
},
- clickToPlay: false,
+ // clickToPlay: false,
/* controls: [
'play-large',
'restart',
@@ -4207,7 +4208,7 @@ typeof navigator === "object" && (function () {
google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c'
},
ads: {
- enabled: true,
+ // enabled: true,
publisherId: '918848828995742'
}
});
diff --git a/demo/dist/demo.js.map b/demo/dist/demo.js.map
index c2b43156..42cb52c8 100644
--- a/demo/dist/demo.js.map
+++ b/demo/dist/demo.js.map
@@ -1 +1 @@
-{"version":3,"sources":["node_modules/raven-js/vendor/json-stringify-safe/stringify.js","node_modules/raven-js/src/utils.js","node_modules/raven-js/vendor/TraceKit/tracekit.js","node_modules/raven-js/vendor/md5/md5.js","node_modules/raven-js/src/configError.js","node_modules/raven-js/src/console.js","node_modules/raven-js/src/raven.js","node_modules/raven-js/src/singleton.js","demo/src/js/demo.js"],"names":["global","stringify","_window","isErrorEvent","isDOMError","isDOMException","isError","isObject","isPlainObject","isUndefined","isFunction","isString","isArray","isEmptyObject","each","objectMerge","truncate","objectFrozen","hasKey","joinRegExp","urlencode","uuid4","htmlTreeAsString","isSameException","isSameStacktrace","parseUrl","fill","supportsFetch","supportsReferrerPolicy","serializeKeysForMessage","serializeException","sanitize","require$$0","TraceKit","md5","RavenConfigError","Raven","RavenConstructor","isLive","window","location","host","config","install","document","addEventListener","context","selector","container","getElementById","shr","setup","count","classname","tabClassName","contains","event","target","classList","remove","keyCode","setTimeout","focused","activeElement","add","player","Plyr","debug","title","iconUrl","keyboard","tooltips","controls","clickToPlay","captions","active","keys","google","ads","enabled","publisherId","buttons","querySelectorAll","types","video","audio","youtube","vimeo","currentType","hash","replace","historySupport","history","pushState","toggleClass","element","className","state","newSource","type","init","length","source","sources","src","size","poster","tracks","kind","label","srclang","default","provider","Array","from","forEach","button","parentElement","querySelector","cite","setAttribute","removeAttribute","getAttribute","replaceState","i","s","o","g","r","a","m","GoogleAnalyticsObject","q","push","arguments","l","Date","createElement","getElementsByTagName","async","parentNode","insertBefore","ga"],"mappings":";;;;;;;;;;CAAA;;;;;;;;;;;CAWA,OAAO,GAAG,cAAc,GAAG,SAAS,CAAC;CACrC,oBAAoB,GAAG,UAAU,CAAC;;CAElC,SAAS,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE;GACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;KACxC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC;GACD,OAAO,CAAC,CAAC,CAAC;EACX;;CAED,SAAS,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE;GACvD,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC;EACzE;;;CAGD,SAAS,cAAc,CAAC,KAAK,EAAE;GAC7B,IAAI,GAAG,GAAG;;KAER,KAAK,EAAE,KAAK,CAAC,KAAK;KAClB,OAAO,EAAE,KAAK,CAAC,OAAO;KACtB,IAAI,EAAE,KAAK,CAAC,IAAI;IACjB,CAAC;;GAEF,KAAK,IAAI,CAAC,IAAI,KAAK,EAAE;KACnB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;OAClD,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;MACnB;IACF;;GAED,OAAO,GAAG,CAAC;EACZ;;CAED,SAAS,UAAU,CAAC,QAAQ,EAAE,aAAa,EAAE;GAC3C,IAAI,KAAK,GAAG,EAAE,CAAC;GACf,IAAI,IAAI,GAAG,EAAE,CAAC;;GAEd,IAAI,aAAa,IAAI,IAAI,EAAE;KACzB,aAAa,GAAG,SAAS,GAAG,EAAE,KAAK,EAAE;OACnC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;SACtB,OAAO,cAAc,CAAC;QACvB;OACD,OAAO,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;MAC9E,CAAC;IACH;;GAED,OAAO,SAAS,GAAG,EAAE,KAAK,EAAE;KAC1B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;OACpB,IAAI,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;OACnC,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;OACxD,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;OAEhE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;SAC1B,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9C;MACF,MAAM;OACL,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;MACnB;;KAED,OAAO,QAAQ,IAAI,IAAI;SACnB,KAAK,YAAY,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,KAAK;SACtD,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;EACH;;;;CCvED,IAAI,OAAO;GACT,OAAO,MAAM,KAAK,WAAW;OACzB,MAAM;OACN,OAAOA,cAAM,KAAK,WAAW;SAC3BA,cAAM;SACN,OAAO,IAAI,KAAK,WAAW;WACzB,IAAI;WACJ,EAAE,CAAC;;CAEb,SAAS,QAAQ,CAAC,IAAI,EAAE;GACtB,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC;EAClD;;;;CAID,SAAS,OAAO,CAAC,KAAK,EAAE;GACtB,QAAQ,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;KAC3C,KAAK,gBAAgB;OACnB,OAAO,IAAI,CAAC;KACd,KAAK,oBAAoB;OACvB,OAAO,IAAI,CAAC;KACd,KAAK,uBAAuB;OAC1B,OAAO,IAAI,CAAC;KACd;OACE,OAAO,KAAK,YAAY,KAAK,CAAC;IACjC;EACF;;CAED,SAAS,YAAY,CAAC,KAAK,EAAE;GAC3B,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,qBAAqB,CAAC;EACxE;;CAED,SAAS,UAAU,CAAC,KAAK,EAAE;GACzB,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,mBAAmB,CAAC;EACtE;;CAED,SAAS,cAAc,CAAC,KAAK,EAAE;GAC7B,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,uBAAuB,CAAC;EAC1E;;CAED,SAAS,WAAW,CAAC,IAAI,EAAE;GACzB,OAAO,IAAI,KAAK,KAAK,CAAC,CAAC;EACxB;;CAED,SAAS,UAAU,CAAC,IAAI,EAAE;GACxB,OAAO,OAAO,IAAI,KAAK,UAAU,CAAC;EACnC;;CAED,SAAS,aAAa,CAAC,IAAI,EAAE;GAC3B,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,iBAAiB,CAAC;EACnE;;CAED,SAAS,QAAQ,CAAC,IAAI,EAAE;GACtB,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,iBAAiB,CAAC;EACnE;;CAED,SAAS,OAAO,CAAC,IAAI,EAAE;GACrB,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,gBAAgB,CAAC;EAClE;;CAED,SAAS,aAAa,CAAC,IAAI,EAAE;GAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK,CAAC;;GAEvC,KAAK,IAAI,CAAC,IAAI,IAAI,EAAE;KAClB,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;OAC1B,OAAO,KAAK,CAAC;MACd;IACF;GACD,OAAO,IAAI,CAAC;EACb;;CAED,SAAS,kBAAkB,GAAG;GAC5B,IAAI;KACF,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;KACnB,OAAO,IAAI,CAAC;IACb,CAAC,OAAO,CAAC,EAAE;KACV,OAAO,KAAK,CAAC;IACd;EACF;;CAED,SAAS,gBAAgB,GAAG;GAC1B,IAAI;KACF,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC;KACjB,OAAO,IAAI,CAAC;IACb,CAAC,OAAO,CAAC,EAAE;KACV,OAAO,KAAK,CAAC;IACd;EACF;;CAED,SAAS,oBAAoB,GAAG;GAC9B,IAAI;KACF,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC;KACrB,OAAO,IAAI,CAAC;IACb,CAAC,OAAO,CAAC,EAAE;KACV,OAAO,KAAK,CAAC;IACd;EACF;;CAED,SAAS,aAAa,GAAG;GACvB,IAAI,EAAE,OAAO,IAAI,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;;GAExC,IAAI;KACF,IAAI,OAAO,EAAE,CAAC;KACd,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;KAChB,IAAI,QAAQ,EAAE,CAAC;KACf,OAAO,IAAI,CAAC;IACb,CAAC,OAAO,CAAC,EAAE;KACV,OAAO,KAAK,CAAC;IACd;EACF;;;;;;CAMD,SAAS,sBAAsB,GAAG;GAChC,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,KAAK,CAAC;;GAEnC,IAAI;;KAEF,IAAI,OAAO,CAAC,YAAY,EAAE;OACxB,cAAc,EAAE,QAAQ;MACzB,CAAC,CAAC;KACH,OAAO,IAAI,CAAC;IACb,CAAC,OAAO,CAAC,EAAE;KACV,OAAO,KAAK,CAAC;IACd;EACF;;CAED,SAAS,6BAA6B,GAAG;GACvC,OAAO,OAAO,qBAAqB,KAAK,UAAU,CAAC;EACpD;;CAED,SAAS,eAAe,CAAC,QAAQ,EAAE;GACjC,SAAS,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE;KACpC,IAAI,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;KAC5C,IAAI,QAAQ,EAAE;OACZ,OAAO,QAAQ,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC;MACnD;KACD,OAAO,cAAc,CAAC;IACvB;;GAED,OAAO,YAAY,CAAC;EACrB;;CAED,SAAS,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE;GAC3B,IAAI,CAAC,EAAE,CAAC,CAAC;;GAET,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;KAC3B,KAAK,CAAC,IAAI,GAAG,EAAE;OACb,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;SAClB,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC;MACF;IACF,MAAM;KACL,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;KACf,IAAI,CAAC,EAAE;OACL,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;SACtB,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC;MACF;IACF;EACF;;CAED,SAAS,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE;GAC/B,IAAI,CAAC,IAAI,EAAE;KACT,OAAO,IAAI,CAAC;IACb;GACD,IAAI,CAAC,IAAI,EAAE,SAAS,GAAG,EAAE,KAAK,EAAE;KAC9B,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACnB,CAAC,CAAC;GACH,OAAO,IAAI,CAAC;EACb;;;;;;;;;;CAUD,SAAS,YAAY,CAAC,GAAG,EAAE;GACzB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;KACpB,OAAO,KAAK,CAAC;IACd;GACD,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;EAC7B;;CAED,SAAS,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;GAC1B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;KAC3B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC3E;GACD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,CAAC,EAAE;KACxC,OAAO,GAAG,CAAC;IACZ;GACD,OAAO,GAAG,CAAC,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC;EAChE;;;;;;;;;CASD,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE;GAC3B,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;EAC1D;;CAED,SAAS,UAAU,CAAC,QAAQ,EAAE;;;GAG5B,IAAI,OAAO,GAAG,EAAE;KACd,CAAC,GAAG,CAAC;KACL,GAAG,GAAG,QAAQ,CAAC,MAAM;KACrB,OAAO,CAAC;;GAEV,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;KACnB,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;KACtB,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE;;;OAGrB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC,CAAC;MACtE,MAAM,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE;;OAEpC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;MAC9B;;IAEF;GACD,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;EAC3C;;CAED,SAAS,SAAS,CAAC,CAAC,EAAE;GACpB,IAAI,KAAK,GAAG,EAAE,CAAC;GACf,IAAI,CAAC,CAAC,EAAE,SAAS,GAAG,EAAE,KAAK,EAAE;KAC3B,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IACvE,CAAC,CAAC;GACH,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EACxB;;;;;CAKD,SAAS,QAAQ,CAAC,GAAG,EAAE;GACrB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,OAAO,EAAE,CAAC;GACvC,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;;;GAGxF,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;GAC3B,IAAI,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;GAC9B,OAAO;KACL,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;KAClB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;KACd,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;KACd,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,QAAQ;IACtC,CAAC;EACH;CACD,SAAS,KAAK,GAAG;GACf,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC;;GAEhD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,eAAe,EAAE;;;KAGlD,IAAI,GAAG,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;KAC7B,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;;;KAG5B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,MAAM,CAAC;;KAEnC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,MAAM,CAAC;;KAEpC,IAAI,GAAG,GAAG,SAAS,GAAG,EAAE;OACtB,IAAI,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;OACzB,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;SACnB,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QACb;OACD,OAAO,CAAC,CAAC;MACV,CAAC;;KAEF;OACE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;OACX,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;OACX,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;OACX,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;OACX,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;OACX,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;OACX,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;OACX,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;OACX;IACH,MAAM;;KAEL,OAAO,kCAAkC,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE;OACrE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC;SAC9B,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC;OACtC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;MACvB,CAAC,CAAC;IACJ;EACF;;;;;;;;;CASD,SAAS,gBAAgB,CAAC,IAAI,EAAE;;GAE9B,IAAI,mBAAmB,GAAG,CAAC;KACzB,cAAc,GAAG,EAAE;KACnB,GAAG,GAAG,EAAE;KACR,MAAM,GAAG,CAAC;KACV,GAAG,GAAG,CAAC;KACP,SAAS,GAAG,KAAK;KACjB,SAAS,GAAG,SAAS,CAAC,MAAM;KAC5B,OAAO,CAAC;;GAEV,OAAO,IAAI,IAAI,MAAM,EAAE,GAAG,mBAAmB,EAAE;KAC7C,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;;;;;KAKpC;OACE,OAAO,KAAK,MAAM;QACjB,MAAM,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC;OAC/E;OACA,MAAM;MACP;;KAED,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;KAElB,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KACtB,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;IACxB;;GAED,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;EACtC;;;;;;;;CAQD,SAAS,mBAAmB,CAAC,IAAI,EAAE;GACjC,IAAI,GAAG,GAAG,EAAE;KACV,SAAS;KACT,OAAO;KACP,GAAG;KACH,IAAI;KACJ,CAAC,CAAC;;GAEJ,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;KAC1B,OAAO,EAAE,CAAC;IACX;;GAED,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;GACrC,IAAI,IAAI,CAAC,EAAE,EAAE;KACX,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IACzB;;GAED,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;GAC3B,IAAI,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE;KACpC,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KACjC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;OACnC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;MAC5B;IACF;GACD,IAAI,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;GACrD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;KACzC,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;KACvB,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;KAC9B,IAAI,IAAI,EAAE;OACR,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;MAC1C;IACF;GACD,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;EACrB;;;;;CAKD,SAAS,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE;GAC7B,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;EACtB;;;;;CAKD,SAAS,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE;GAC7B,OAAO,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;EACzC;;;;;CAKD,SAAS,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE;GACjC,IAAI,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,OAAO,KAAK,CAAC;;GAE5C,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;GACpB,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;;GAEpB,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,CAAC;;;GAGnE,IAAI,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,EAAE,OAAO,KAAK,CAAC;;GAElE,OAAO,gBAAgB,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;EACzD;;;;;CAKD,SAAS,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE;GACxC,IAAI,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,CAAC;;GAElD,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;GAC5B,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;;;GAG5B,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,OAAO,KAAK,CAAC;;;GAGjE,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC;;;GAGpD,IAAI,CAAC,EAAE,CAAC,CAAC;GACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;KACvC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;KACf,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;KACf;OACE,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ;OACzB,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;OACrB,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;OACnB,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC;;OAE/B,OAAO,KAAK,CAAC;IAChB;GACD,OAAO,IAAI,CAAC;EACb;;;;;;;;;CASD,SAAS,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE;GAC3C,IAAI,GAAG,IAAI,IAAI,EAAE,OAAO;GACxB,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;GACrB,GAAG,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;GAC9B,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC;GAC3B,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC;GAC1B,IAAI,KAAK,EAAE;KACT,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/B;EACF;;;;;;;;CAQD,SAAS,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE;GAClC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;;GAE/B,IAAI,MAAM,GAAG,EAAE,CAAC;;GAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;KACrC,IAAI;OACF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;MAC/B,CAAC,OAAO,CAAC,EAAE;OACV,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;MAC7C;IACF;;GAED,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;EAC/B;;;CAGD,IAAI,6BAA6B,GAAG,CAAC,CAAC;;CAEtC,IAAI,4BAA4B,GAAG,EAAE,GAAG,IAAI,CAAC;CAC7C,IAAI,yBAAyB,GAAG,EAAE,CAAC;;CAEnC,SAAS,UAAU,CAAC,KAAK,EAAE;GACzB,OAAO,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;EACjD;;CAED,SAAS,QAAQ,CAAC,KAAK,EAAE;GACvB,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;EAC1C;;CAED,SAAS,cAAc,CAAC,KAAK,EAAE;GAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;KAC7B,IAAI,SAAS,GAAG,EAAE,CAAC;KACnB,OAAO,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACnC,MAAM;KACL,OAAO,KAAK,KAAK,QAAQ;KACzB,OAAO,KAAK,KAAK,SAAS;KAC1B,OAAO,KAAK,KAAK,WAAW;KAC5B;KACA,OAAO,KAAK,CAAC;IACd;;GAED,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;;GAGjD,IAAI,IAAI,KAAK,iBAAiB,EAAE,OAAO,UAAU,CAAC;GAClD,IAAI,IAAI,KAAK,gBAAgB,EAAE,OAAO,SAAS,CAAC;GAChD,IAAI,IAAI,KAAK,mBAAmB;KAC9B,OAAO,KAAK,CAAC,IAAI,GAAG,aAAa,GAAG,KAAK,CAAC,IAAI,GAAG,GAAG,GAAG,YAAY,CAAC;;GAEtE,OAAO,KAAK,CAAC;EACd;;CAED,SAAS,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE;GACrC,IAAI,KAAK,KAAK,CAAC,EAAE,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;;GAE9C,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;KACxB,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,EAAE,GAAG,EAAE;OAClD,GAAG,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;OAClD,OAAO,GAAG,CAAC;MACZ,EAAE,EAAE,CAAC,CAAC;IACR,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;KAC/B,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE;OAC7B,OAAO,eAAe,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;MACxC,CAAC,CAAC;IACJ;;GAED,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;EAC9B;;CAED,SAAS,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;GAC9C,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;;GAElC,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,6BAA6B,GAAG,KAAK,CAAC;GAC1E,OAAO,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,4BAA4B,GAAG,OAAO,CAAC;;GAE7E,IAAI,UAAU,GAAG,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;;GAE5C,IAAI,QAAQ,CAACC,WAAS,CAAC,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE;KAC7C,OAAO,kBAAkB,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAC1C;;GAED,OAAO,UAAU,CAAC;EACnB;;CAED,SAAS,uBAAuB,CAAC,IAAI,EAAE,SAAS,EAAE;GAChD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;GACjF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;;GAEpC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,EAAE;KAC/B,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC;IAChC,CAAC,CAAC;GACH,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,sBAAsB,CAAC;;GAErD,SAAS,GAAG,OAAO,SAAS,KAAK,QAAQ,GAAG,yBAAyB,GAAG,SAAS,CAAC;GAClF,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,SAAS,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;;GAEhD,KAAK,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE;KACzD,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACpD,IAAI,UAAU,CAAC,MAAM,GAAG,SAAS,EAAE,SAAS;KAC5C,IAAI,QAAQ,KAAK,IAAI,CAAC,MAAM,EAAE,OAAO,UAAU,CAAC;KAChD,OAAO,UAAU,GAAG,QAAQ,CAAC;IAC9B;;GAED,OAAO,EAAE,CAAC;EACX;;CAED,SAAS,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE;GACrC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC;KAChF,OAAO,KAAK,CAAC;;GAEf,IAAI,cAAc,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;GAC9C,IAAI,YAAY,GAAG,UAAU,CAAC;GAC9B,IAAI,SAAS,CAAC;;GAEd,IAAI;KACF,SAAS,GAAG,IAAI,CAAC,KAAK,CAACA,WAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1C,CAAC,OAAO,GAAG,EAAE;KACZ,OAAO,KAAK,CAAC;IACd;;GAED,SAAS,cAAc,CAAC,WAAW,EAAE;KACnC,IAAI,OAAO,CAAC,WAAW,CAAC,EAAE;OACxB,OAAO,WAAW,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE;SACnC,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC,CAAC;MACJ;;KAED,IAAI,aAAa,CAAC,WAAW,CAAC,EAAE;OAC9B,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE;SACtD,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;WAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;UACvB,MAAM;WACL,GAAG,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;UACzC;SACD,OAAO,GAAG,CAAC;QACZ,EAAE,EAAE,CAAC,CAAC;MACR;;KAED,OAAO,WAAW,CAAC;IACpB;;GAED,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;EAClC;;CAED,SAAc,GAAG;GACf,QAAQ,EAAE,QAAQ;GAClB,OAAO,EAAE,OAAO;GAChB,YAAY,EAAE,YAAY;GAC1B,UAAU,EAAE,UAAU;GACtB,cAAc,EAAE,cAAc;GAC9B,WAAW,EAAE,WAAW;GACxB,UAAU,EAAE,UAAU;GACtB,aAAa,EAAE,aAAa;GAC5B,QAAQ,EAAE,QAAQ;GAClB,OAAO,EAAE,OAAO;GAChB,aAAa,EAAE,aAAa;GAC5B,kBAAkB,EAAE,kBAAkB;GACtC,gBAAgB,EAAE,gBAAgB;GAClC,oBAAoB,EAAE,oBAAoB;GAC1C,aAAa,EAAE,aAAa;GAC5B,sBAAsB,EAAE,sBAAsB;GAC9C,6BAA6B,EAAE,6BAA6B;GAC5D,eAAe,EAAE,eAAe;GAChC,IAAI,EAAE,IAAI;GACV,WAAW,EAAE,WAAW;GACxB,QAAQ,EAAE,QAAQ;GAClB,YAAY,EAAE,YAAY;GAC1B,MAAM,EAAE,MAAM;GACd,UAAU,EAAE,UAAU;GACtB,SAAS,EAAE,SAAS;GACpB,KAAK,EAAE,KAAK;GACZ,gBAAgB,EAAE,gBAAgB;GAClC,mBAAmB,EAAE,mBAAmB;GACxC,eAAe,EAAE,eAAe;GAChC,gBAAgB,EAAE,gBAAgB;GAClC,QAAQ,EAAE,QAAQ;GAClB,IAAI,EAAE,IAAI;GACV,QAAQ,EAAE,QAAQ;GAClB,kBAAkB,EAAE,kBAAkB;GACtC,uBAAuB,EAAE,uBAAuB;GAChD,QAAQ,EAAE,QAAQ;EACnB,CAAC;;CCzoBF;;;;;;;;;;CAUA,IAAI,QAAQ,GAAG;GACb,mBAAmB,EAAE,IAAI;GACzB,KAAK,EAAE,KAAK;EACb,CAAC;;;CAGF,IAAIC,SAAO;GACT,OAAO,MAAM,KAAK,WAAW;OACzB,MAAM;OACN,OAAOF,cAAM,KAAK,WAAW,GAAGA,cAAM,GAAG,OAAO,IAAI,KAAK,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;;;CAGvF,IAAI,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC;CACtB,IAAI,gBAAgB,GAAG,GAAG,CAAC;;;CAG3B,IAAI,cAAc,GAAG,yGAAyG,CAAC;;CAE/H,SAAS,eAAe,GAAG;GACzB,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,CAAC,QAAQ,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;GAC5E,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;EAC/B;;CAED,SAAS,iBAAiB,GAAG;GAC3B,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,CAAC,QAAQ,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;;;GAG5E,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE;KAC7B;OACE,QAAQ,CAAC,QAAQ,CAAC,QAAQ;OAC1B,IAAI;OACJ,QAAQ,CAAC,QAAQ,CAAC,QAAQ;QACzB,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC;OAC5D;IACH;;GAED,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;EACjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCD,QAAQ,CAAC,MAAM,GAAG,CAAC,SAAS,mBAAmB,GAAG;GAChD,IAAI,QAAQ,GAAG,EAAE;KACf,QAAQ,GAAG,IAAI;KACf,aAAa,GAAG,IAAI;KACpB,kBAAkB,GAAG,IAAI,CAAC;;;;;;GAM5B,SAAS,SAAS,CAAC,OAAO,EAAE;KAC1B,oBAAoB,EAAE,CAAC;KACvB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxB;;;;;;GAMD,SAAS,WAAW,CAAC,OAAO,EAAE;KAC5B,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;OAC7C,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;SAC3B,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvB;MACF;IACF;;;;;GAKD,SAAS,cAAc,GAAG;KACxB,sBAAsB,EAAE,CAAC;KACzB,QAAQ,GAAG,EAAE,CAAC;IACf;;;;;;GAMD,SAAS,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE;KAC5C,IAAI,SAAS,GAAG,IAAI,CAAC;KACrB,IAAI,aAAa,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE;OAClD,OAAO;MACR;KACD,KAAK,IAAI,CAAC,IAAI,QAAQ,EAAE;OACtB,IAAI,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;SAC9B,IAAI;WACF,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;UACpE,CAAC,OAAO,KAAK,EAAE;WACd,SAAS,GAAG,KAAK,CAAC;UACnB;QACF;MACF;;KAED,IAAI,SAAS,EAAE;OACb,MAAM,SAAS,CAAC;MACjB;IACF;;GAED,IAAI,kBAAkB,EAAE,wBAAwB,CAAC;;;;;;;;;;;;;GAajD,SAAS,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;KAC1D,IAAI,KAAK,GAAG,IAAI,CAAC;;KAEjB,IAAI,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC;;KAEvD,IAAI,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC;;KAE1D,IAAI,kBAAkB,EAAE;OACtB,QAAQ,CAAC,iBAAiB,CAAC,mCAAmC;SAC5D,kBAAkB;SAClB,GAAG;SACH,MAAM;SACN,OAAO;QACR,CAAC;OACF,oBAAoB,EAAE,CAAC;MACxB,MAAM,IAAI,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;;;;;;OAMhD,KAAK,GAAG,QAAQ,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;OAC9C,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;MAC7B,MAAM;OACL,IAAI,QAAQ,GAAG;SACb,GAAG,EAAE,GAAG;SACR,IAAI,EAAE,MAAM;SACZ,MAAM,EAAE,KAAK;QACd,CAAC;;OAEF,IAAI,IAAI,GAAG,SAAS,CAAC;OACrB,IAAI,MAAM,CAAC;;OAEX,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,iBAAiB,EAAE;SACnD,IAAI,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;SAC3C,IAAI,MAAM,EAAE;WACV,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;WACjB,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;UACrB;QACF;;OAED,QAAQ,CAAC,IAAI,GAAG,gBAAgB,CAAC;;OAEjC,KAAK,GAAG;SACN,IAAI,EAAE,IAAI;SACV,OAAO,EAAE,OAAO;SAChB,GAAG,EAAE,eAAe,EAAE;SACtB,KAAK,EAAE,CAAC,QAAQ,CAAC;QAClB,CAAC;OACF,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;MAC7B;;KAED,IAAI,kBAAkB,EAAE;OACtB,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;MAClD;;KAED,OAAO,KAAK,CAAC;IACd;;GAED,SAAS,oBAAoB,GAAG;KAC9B,IAAI,wBAAwB,EAAE;OAC5B,OAAO;MACR;KACD,kBAAkB,GAAGE,SAAO,CAAC,OAAO,CAAC;KACrCA,SAAO,CAAC,OAAO,GAAG,qBAAqB,CAAC;KACxC,wBAAwB,GAAG,IAAI,CAAC;IACjC;;GAED,SAAS,sBAAsB,GAAG;KAChC,IAAI,CAAC,wBAAwB,EAAE;OAC7B,OAAO;MACR;KACDA,SAAO,CAAC,OAAO,GAAG,kBAAkB,CAAC;KACrC,wBAAwB,GAAG,KAAK,CAAC;KACjC,kBAAkB,GAAG,SAAS,CAAC;IAChC;;GAED,SAAS,oBAAoB,GAAG;KAC9B,IAAI,mBAAmB,GAAG,kBAAkB;OAC1C,SAAS,GAAG,QAAQ,CAAC;KACvB,QAAQ,GAAG,IAAI,CAAC;KAChB,kBAAkB,GAAG,IAAI,CAAC;KAC1B,aAAa,GAAG,IAAI,CAAC;KACrB,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5E;;;;;;;;;GASD,SAAS,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE;KAC3B,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;KACrC,IAAI,kBAAkB,EAAE;OACtB,IAAI,aAAa,KAAK,EAAE,EAAE;SACxB,OAAO;QACR,MAAM;SACL,oBAAoB,EAAE,CAAC;QACxB;MACF;;KAED,IAAI,KAAK,GAAG,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;KAC3C,kBAAkB,GAAG,KAAK,CAAC;KAC3B,aAAa,GAAG,EAAE,CAAC;KACnB,QAAQ,GAAG,IAAI,CAAC;;;;;;KAMhB,UAAU,CAAC,WAAW;OACpB,IAAI,aAAa,KAAK,EAAE,EAAE;SACxB,oBAAoB,EAAE,CAAC;QACxB;MACF,EAAE,KAAK,CAAC,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;;KAEhC,IAAI,OAAO,KAAK,KAAK,EAAE;OACrB,MAAM,EAAE,CAAC;MACV;IACF;;GAED,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;GAC7B,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;GACjC,MAAM,CAAC,SAAS,GAAG,cAAc,CAAC;GAClC,OAAO,MAAM,CAAC;EACf,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqDL,QAAQ,CAAC,iBAAiB,GAAG,CAAC,SAAS,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4ChE,SAAS,8BAA8B,CAAC,EAAE,EAAE;KAC1C,IAAI,OAAO,EAAE,CAAC,KAAK,KAAK,WAAW,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO;;KAEzD,IAAI,MAAM,GAAG,yIAAyI,CAAC;KACvJ,IAAI,KAAK,GAAG,uHAAuH,CAAC;;;KAGpI,IAAI,KAAK,GAAG,4JAA4J,CAAC;;KAEzK,IAAI,SAAS,GAAG,+CAA+C,CAAC;KAChE,IAAI,UAAU,GAAG,+BAA+B,CAAC;KACjD,IAAI,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KACjC,IAAI,KAAK,GAAG,EAAE,CAAC;KACf,IAAI,QAAQ,CAAC;KACb,IAAI,KAAK,CAAC;KACV,IAAI,OAAO,CAAC;KACZ,IAAI,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;;KAEvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;OAC5C,KAAK,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG;SACnC,IAAI,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SAC5D,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SACxD,IAAI,MAAM,KAAK,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;;WAEpD,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;WACvB,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;WACvB,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;UACxB;SACD,OAAO,GAAG;WACR,GAAG,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;WAChC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,gBAAgB;WAClC,IAAI,EAAE,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;WAChC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;WACjC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;UACpC,CAAC;QACH,MAAM,KAAK,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG;SACzC,OAAO,GAAG;WACR,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;WACb,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,gBAAgB;WAClC,IAAI,EAAE,EAAE;WACR,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;WACf,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;UACpC,CAAC;QACH,MAAM,KAAK,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG;SACzC,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;SAC1D,IAAI,MAAM,KAAK,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;;WAEnD,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;WACvB,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;WACvB,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;UACjB,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,YAAY,KAAK,WAAW,EAAE;;;;;WAKzE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,YAAY,GAAG,CAAC,CAAC;UACvC;SACD,OAAO,GAAG;WACR,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;WACb,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,gBAAgB;WAClC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;WACzC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;WACjC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;UACpC,CAAC;QACH,MAAM;SACL,SAAS;QACV;;OAED,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE;SACjC,OAAO,CAAC,IAAI,GAAG,gBAAgB,CAAC;QACjC;;OAED,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,EAAE;;;;;;SAMvD,IAAI,GAAG,GAAG,IAAI,cAAc,EAAE,CAAC;SAC/B,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SACpC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;;SAGf,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;WACtB,IAAI,MAAM,GAAG,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;;;;WAIpC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;;;WAG5B,IAAI,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;;;WAG9D,IAAI,UAAU,EAAE;aACd,IAAI,gBAAgB,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;;;;aAIrC,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;eACtC,gBAAgB,GAAG,iBAAiB,EAAE,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;cACpE;;;;aAID,OAAO,CAAC,GAAG,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7C;UACF;QACF;;OAED,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;MACrB;;KAED,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;OACjB,OAAO,IAAI,CAAC;MACb;;KAED,OAAO;OACL,IAAI,EAAE,EAAE,CAAC,IAAI;OACb,OAAO,EAAE,EAAE,CAAC,OAAO;OACnB,GAAG,EAAE,eAAe,EAAE;OACtB,KAAK,EAAE,KAAK;MACb,CAAC;IACH;;;;;;;;;;;;;;;GAeD,SAAS,mCAAmC,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;KAC5E,IAAI,OAAO,GAAG;OACZ,GAAG,EAAE,GAAG;OACR,IAAI,EAAE,MAAM;MACb,CAAC;;KAEF,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE;OAC/B,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC;;OAE7B,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;SACjB,OAAO,CAAC,IAAI,GAAG,gBAAgB,CAAC;QACjC;;OAED,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;SAC9B,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,EAAE;WAC1C,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE;aAC5C,OAAO,KAAK,CAAC;YACd,MAAM;aACL,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;aACxB,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI;aACxC;aACA,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;aACvC,OAAO,KAAK,CAAC;YACd;UACF;QACF;;OAED,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;OACjC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;OACzB,OAAO,IAAI,CAAC;MACb,MAAM;OACL,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC;MAC7B;;KAED,OAAO,KAAK,CAAC;IACd;;;;;;;;;;;GAWD,SAAS,qCAAqC,CAAC,EAAE,EAAE,KAAK,EAAE;KACxD,IAAI,YAAY,GAAG,oEAAoE;OACrF,KAAK,GAAG,EAAE;OACV,KAAK,GAAG,EAAE;OACV,SAAS,GAAG,KAAK;OACjB,KAAK;OACL,IAAI,CACG;;KAET;OACE,IAAI,IAAI,GAAG,qCAAqC,CAAC,MAAM;OACvD,IAAI,IAAI,CAAC,SAAS;OAClB,IAAI,GAAG,IAAI,CAAC,MAAM;OAClB;OACA,IAAI,IAAI,KAAK,iBAAiB,IAAI,IAAI,KAAK,QAAQ,CAAC,MAAM,EAAE;;SAE1D,SAAS;QACV;;OAED,IAAI,GAAG;SACL,GAAG,EAAE,IAAI;SACT,IAAI,EAAE,gBAAgB;SACtB,IAAI,EAAE,IAAI;SACV,MAAM,EAAE,IAAI;QACb,CAAC;;OAEF,IAAI,IAAI,CAAC,IAAI,EAAE;SACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,MAAM,KAAK,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG;SACvD,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB;;OAED,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE;SACpC,IAAI;WACF,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;UAChE,CAAC,OAAO,CAAC,EAAE,EAAE;QACf;;OAED,IAAI,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;SACpB,SAAS,GAAG,IAAI,CAAC;QAClB,MAAM;SACL,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;QACzB;;OAED,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;MAClB;;KAED,IAAI,KAAK,EAAE;;;OAGT,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;MACxB;;KAED,IAAI,MAAM,GAAG;OACX,IAAI,EAAE,EAAE,CAAC,IAAI;OACb,OAAO,EAAE,EAAE,CAAC,OAAO;OACnB,GAAG,EAAE,eAAe,EAAE;OACtB,KAAK,EAAE,KAAK;MACb,CAAC;KACF,mCAAmC;OACjC,MAAM;OACN,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,QAAQ;OAC3B,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,UAAU;OACxB,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,WAAW;MAC7B,CAAC;KACF,OAAO,MAAM,CAAC;IACf;;;;;;;GAOD,SAAS,iBAAiB,CAAC,EAAE,EAAE,KAAK,EAAE;KACpC,IAAI,KAAK,GAAG,IAAI,CAAC;KACjB,KAAK,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;;KAEnC,IAAI;OACF,KAAK,GAAG,8BAA8B,CAAC,EAAE,CAAC,CAAC;OAC3C,IAAI,KAAK,EAAE;SACT,OAAO,KAAK,CAAC;QACd;MACF,CAAC,OAAO,CAAC,EAAE;OACV,IAAI,QAAQ,CAAC,KAAK,EAAE;SAClB,MAAM,CAAC,CAAC;QACT;MACF;;KAED,IAAI;OACF,KAAK,GAAG,qCAAqC,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;OAC7D,IAAI,KAAK,EAAE;SACT,OAAO,KAAK,CAAC;QACd;MACF,CAAC,OAAO,CAAC,EAAE;OACV,IAAI,QAAQ,CAAC,KAAK,EAAE;SAClB,MAAM,CAAC,CAAC;QACT;MACF;KACD,OAAO;OACL,IAAI,EAAE,EAAE,CAAC,IAAI;OACb,OAAO,EAAE,EAAE,CAAC,OAAO;OACnB,GAAG,EAAE,eAAe,EAAE;MACvB,CAAC;IACH;;GAED,iBAAiB,CAAC,mCAAmC,GAAG,mCAAmC,CAAC;GAC5F,iBAAiB,CAAC,8BAA8B,GAAG,8BAA8B,CAAC;;GAElF,OAAO,iBAAiB,CAAC;EAC1B,GAAG,CAAC;;CAEL,YAAc,GAAG,QAAQ,CAAC;;CCzqB1B;;;;;;;;;;;;;;;;;;;;;;;CAuBA,SAAS,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE;GACrB,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC;GACtC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC;GAC9C,OAAO,CAAC,GAAG,IAAI,EAAE,KAAK,GAAG,GAAG,MAAM,CAAC,CAAC;EACrC;;;;;CAKD,SAAS,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE;GAC/B,OAAO,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5C;;;;;CAKD,SAAS,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;GAChC,OAAO,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAC5E;CACD,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;GAClC,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EAClD;CACD,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;GAClC,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EAClD;CACD,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;GAClC,OAAO,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EACzC;CACD,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;GAClC,OAAO,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EAC5C;;;;;CAKD,SAAS,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE;;GAEvB,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC;GAClC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC;;GAExC,IAAI,CAAC,CAAC;GACN,IAAI,IAAI,CAAC;GACT,IAAI,IAAI,CAAC;GACT,IAAI,IAAI,CAAC;GACT,IAAI,IAAI,CAAC;GACT,IAAI,CAAC,GAAG,UAAU,CAAC;GACnB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;GACnB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;GACpB,IAAI,CAAC,GAAG,SAAS,CAAC;;GAElB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;KACjC,IAAI,GAAG,CAAC,CAAC;KACT,IAAI,GAAG,CAAC,CAAC;KACT,IAAI,GAAG,CAAC,CAAC;KACT,IAAI,GAAG,CAAC,CAAC;;KAET,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;KAC3C,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;KAChD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;KAC/C,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;KACjD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;KAC/C,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;KAChD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;KACjD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;KAC/C,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;KAC/C,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;KACjD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;KAC7C,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;KAClD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;KAChD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;KAChD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;KAClD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;;KAEjD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;KAC/C,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;KAChD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;KAChD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;KAC5C,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;KAC/C,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;KAC9C,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;KACjD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;KAChD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;KAC9C,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;KACjD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;KAChD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;KAChD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;KACjD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;KAC9C,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;KAChD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;;KAElD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;KAC5C,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;KACjD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;KACjD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;KAChD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;KAChD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;KAChD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;KAChD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;KAClD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;KAC/C,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;KAC5C,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;KAChD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;KAC9C,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;KAC/C,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;KACjD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;KAChD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;;KAEhD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;KAC3C,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;KAChD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;KAClD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;KAC/C,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;KAChD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;KACjD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;KAC/C,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;KACjD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;KAC/C,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;KAChD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;KACjD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;KACjD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;KAC/C,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;KAClD,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;KAC/C,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;;KAEhD,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;KACrB,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;KACrB,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;KACrB,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACtB;GACD,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EACrB;;;;;CAKD,SAAS,SAAS,CAAC,KAAK,EAAE;GACxB,IAAI,CAAC,CAAC;GACN,IAAI,MAAM,GAAG,EAAE,CAAC;GAChB,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;GACjC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE;KAChC,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC;IACpE;GACD,OAAO,MAAM,CAAC;EACf;;;;;;CAMD,SAAS,SAAS,CAAC,KAAK,EAAE;GACxB,IAAI,CAAC,CAAC;GACN,IAAI,MAAM,GAAG,EAAE,CAAC;GAChB,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;GAC5C,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;KACrC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACf;GACD,IAAI,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;GAC/B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE;KAC/B,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IAChE;GACD,OAAO,MAAM,CAAC;EACf;;;;;CAKD,SAAS,OAAO,CAAC,CAAC,EAAE;GAClB,OAAO,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;EACvD;;;;;CAKD,SAAS,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE;GAC9B,IAAI,CAAC,CAAC;GACN,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;GAC1B,IAAI,IAAI,GAAG,EAAE,CAAC;GACd,IAAI,IAAI,GAAG,EAAE,CAAC;GACd,IAAI,IAAI,CAAC;GACT,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;GAChC,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE;KACpB,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtC;GACD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;KAC1B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;KAC/B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;IAChC;GACD,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;GACpE,OAAO,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;EACzD;;;;;CAKD,SAAS,QAAQ,CAAC,KAAK,EAAE;GACvB,IAAI,MAAM,GAAG,kBAAkB,CAAC;GAChC,IAAI,MAAM,GAAG,EAAE,CAAC;GAChB,IAAI,CAAC,CAAC;GACN,IAAI,CAAC,CAAC;GACN,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;KACpC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;KACxB,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACrE;GACD,OAAO,MAAM,CAAC;EACf;;;;;CAKD,SAAS,YAAY,CAAC,KAAK,EAAE;GAC3B,OAAO,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;EAC5C;;;;;CAKD,SAAS,MAAM,CAAC,CAAC,EAAE;GACjB,OAAO,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;EACjC;CACD,SAAS,MAAM,CAAC,CAAC,EAAE;GACjB,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;EAC5B;CACD,SAAS,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE;GACxB,OAAO,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;EACtD;CACD,SAAS,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE;GACxB,OAAO,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;EACnC;;CAED,SAAS,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE;GAC7B,IAAI,CAAC,GAAG,EAAE;KACR,IAAI,CAAC,GAAG,EAAE;OACR,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;MACvB;KACD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;IACvB;GACD,IAAI,CAAC,GAAG,EAAE;KACR,OAAO,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAChC;GACD,OAAO,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;EAChC;;CAED,SAAc,GAAG,GAAG,CAAC;;CCzQrB,SAAS,gBAAgB,CAAC,OAAO,EAAE;GACjC,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;GAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;EACxB;CACD,gBAAgB,CAAC,SAAS,GAAG,IAAI,KAAK,EAAE,CAAC;CACzC,gBAAgB,CAAC,SAAS,CAAC,WAAW,GAAG,gBAAgB,CAAC;;CAE1D,eAAc,GAAG,gBAAgB,CAAC;;CCLlC,IAAI,UAAU,GAAG,SAAS,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE;GAClD,IAAI,oBAAoB,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;GAC1C,IAAI,eAAe,GAAG,OAAO,CAAC;;GAE9B,IAAI,EAAE,KAAK,IAAI,OAAO,CAAC,EAAE;KACvB,OAAO;IACR;;GAED,IAAI,WAAW,GAAG,KAAK,KAAK,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC;;GAEvD,OAAO,CAAC,KAAK,CAAC,GAAG,WAAW;KAC1B,IAAI,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;KAEpC,IAAI,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KACpC,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;;KAE7E,IAAI,KAAK,KAAK,QAAQ,EAAE;OACtB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;;SAErB,GAAG;WACD,oBAAoB,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,gBAAgB,CAAC,CAAC;SAClF,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACrC,QAAQ,IAAI,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACjC;MACF,MAAM;OACL,QAAQ,IAAI,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;MACjC;;;KAGD,IAAI,oBAAoB,EAAE;;;OAGxB,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;MAC5E;IACF,CAAC;EACH,CAAC;;CAEF,aAAc,GAAG;GACf,UAAU,EAAE,UAAU;EACvB,CAAC;;CCzCF;;;;;;;;CAQA,IAAIC,cAAY,GAAG,KAAK,CAAC,YAAY,CAAC;CACtC,IAAIC,YAAU,GAAG,KAAK,CAAC,UAAU,CAAC;CAClC,IAAIC,gBAAc,GAAG,KAAK,CAAC,cAAc,CAAC;CAC1C,IAAIC,SAAO,GAAG,KAAK,CAAC,OAAO,CAAC;CAC5B,IAAIC,UAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;CAC9B,IAAIC,eAAa,GAAG,KAAK,CAAC,aAAa,CAAC;CACxC,IAAIC,aAAW,GAAG,KAAK,CAAC,WAAW,CAAC;CACpC,IAAIC,YAAU,GAAG,KAAK,CAAC,UAAU,CAAC;CAClC,IAAIC,UAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;CAC9B,IAAIC,SAAO,GAAG,KAAK,CAAC,OAAO,CAAC;CAC5B,IAAIC,eAAa,GAAG,KAAK,CAAC,aAAa,CAAC;CACxC,IAAIC,MAAI,GAAG,KAAK,CAAC,IAAI,CAAC;CACtB,IAAIC,aAAW,GAAG,KAAK,CAAC,WAAW,CAAC;CACpC,IAAIC,UAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;CAC9B,IAAIC,cAAY,GAAG,KAAK,CAAC,YAAY,CAAC;CACtC,IAAIC,QAAM,GAAG,KAAK,CAAC,MAAM,CAAC;CAC1B,IAAIC,YAAU,GAAG,KAAK,CAAC,UAAU,CAAC;CAClC,IAAIC,WAAS,GAAG,KAAK,CAAC,SAAS,CAAC;CAChC,IAAIC,OAAK,GAAG,KAAK,CAAC,KAAK,CAAC;CACxB,IAAIC,kBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;CAC9C,IAAIC,iBAAe,GAAG,KAAK,CAAC,eAAe,CAAC;CAC5C,IAAIC,kBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;CAC9C,IAAIC,UAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;CAC9B,IAAIC,MAAI,GAAG,KAAK,CAAC,IAAI,CAAC;CACtB,IAAIC,eAAa,GAAG,KAAK,CAAC,aAAa,CAAC;CACxC,IAAIC,wBAAsB,GAAG,KAAK,CAAC,sBAAsB,CAAC;CAC1D,IAAIC,yBAAuB,GAAG,KAAK,CAAC,uBAAuB,CAAC;CAC5D,IAAIC,oBAAkB,GAAG,KAAK,CAAC,kBAAkB,CAAC;CAClD,IAAIC,UAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;;CAE9B,IAAI,iBAAiB,GAAGC,SAAoB,CAAC,UAAU,CAAC;;CAExD,IAAI,OAAO,GAAG,0CAA0C,CAAC,KAAK,CAAC,GAAG,CAAC;GACjE,UAAU,GAAG,+DAA+D,CAAC;;CAE/E,SAAS,GAAG,GAAG;GACb,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;EACpB;;;CAGD,IAAI9B,SAAO;GACT,OAAO,MAAM,KAAK,WAAW;OACzB,MAAM;OACN,OAAOF,cAAM,KAAK,WAAW,GAAGA,cAAM,GAAG,OAAO,IAAI,KAAK,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;CACvF,IAAI,SAAS,GAAGE,SAAO,CAAC,QAAQ,CAAC;CACjC,IAAI,UAAU,GAAGA,SAAO,CAAC,SAAS,CAAC;;CAEnC,SAAS,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,EAAE;GAChD,OAAOQ,YAAU,CAAC,QAAQ,CAAC;OACvB,SAAS,IAAI,EAAE;SACb,OAAO,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACjC;OACD,QAAQ,CAAC;EACd;;;;;CAKD,SAAS,KAAK,GAAG;GACf,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;;GAE/D,IAAI,CAAC,YAAY,GAAG,CAACD,aAAW,CAAC,SAAS,CAAC,CAAC;GAC5C,IAAI,CAAC,aAAa,GAAG,CAACA,aAAW,CAAC,UAAU,CAAC,CAAC;GAC9C,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;GACnC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;GACtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;GACzB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;GAC1B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;GACvB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;GAC3B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;GACzB,IAAI,CAAC,cAAc,GAAG;;KAEpB,OAAO,EAAEP,SAAO,CAAC,cAAc,IAAIA,SAAO,CAAC,cAAc,CAAC,EAAE;KAC5D,MAAM,EAAE,YAAY;KACpB,YAAY,EAAE,EAAE;KAChB,UAAU,EAAE,EAAE;KACd,aAAa,EAAE,EAAE;KACjB,YAAY,EAAE,EAAE;KAChB,OAAO,EAAE,IAAI;KACb,mBAAmB,EAAE,IAAI;KACzB,0BAA0B,EAAE,IAAI;KAChC,gBAAgB,EAAE,CAAC;;KAEnB,YAAY,EAAE,GAAG;KACjB,eAAe,EAAE,EAAE;KACnB,eAAe,EAAE,IAAI;KACrB,UAAU,EAAE,IAAI;KAChB,UAAU,EAAE,CAAC;KACb,YAAY,EAAE,EAAE;IACjB,CAAC;GACF,IAAI,CAAC,cAAc,GAAG;KACpB,MAAM,EAAE,MAAM;KACd,SAAS,EAAE,IAAI;;;;;KAKf,cAAc,EAAE0B,wBAAsB,EAAE,GAAG,QAAQ,GAAG,EAAE;IACzD,CAAC;GACF,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;GACxB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;GAC/B,IAAI,CAAC,6BAA6B,GAAG,KAAK,CAAC,eAAe,CAAC;;;GAG3D,IAAI,CAAC,gBAAgB,GAAG1B,SAAO,CAAC,OAAO,IAAI,EAAE,CAAC;GAC9C,IAAI,CAAC,uBAAuB,GAAG,EAAE,CAAC;GAClC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;GACnB,IAAI,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;GACxB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;GAC3B,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;GACvB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;GAC/B,IAAI,CAAC,gBAAgB,CAAC;GACtB,IAAI,CAAC,SAAS,GAAGA,SAAO,CAAC,QAAQ,CAAC;GAClC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;GACvD,IAAI,CAAC,aAAa,EAAE,CAAC;;;GAGrB,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE;KACxC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACtE;EACF;;;;;;;;CAQD,KAAK,CAAC,SAAS,GAAG;;;;;GAKhB,OAAO,EAAE,QAAQ;;GAEjB,KAAK,EAAE,KAAK;;GAEZ,QAAQ,EAAE+B,QAAQ;;;;;;;;;GASlB,MAAM,EAAE,SAAS,GAAG,EAAE,OAAO,EAAE;KAC7B,IAAI,IAAI,GAAG,IAAI,CAAC;;KAEhB,IAAI,IAAI,CAAC,aAAa,EAAE;OACtB,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,0CAA0C,CAAC,CAAC;OACpE,OAAO,IAAI,CAAC;MACb;KACD,IAAI,CAAC,GAAG,EAAE,OAAO,IAAI,CAAC;;KAEtB,IAAI,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;;;KAGxC,IAAI,OAAO,EAAE;OACXnB,MAAI,CAAC,OAAO,EAAE,SAAS,GAAG,EAAE,KAAK,EAAE;;SAEjC,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,MAAM,EAAE;WACvD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;UAClC,MAAM;WACL,aAAa,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;UAC5B;QACF,CAAC,CAAC;MACJ;;KAED,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;;;;KAIjB,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;KACrD,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;;;KAGjF,aAAa,CAAC,YAAY,GAAGK,YAAU,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;KACpE,aAAa,CAAC,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM;SACtDA,YAAU,CAAC,aAAa,CAAC,UAAU,CAAC;SACpC,KAAK,CAAC;KACV,aAAa,CAAC,aAAa,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM;SAC5DA,YAAU,CAAC,aAAa,CAAC,aAAa,CAAC;SACvC,KAAK,CAAC;KACV,aAAa,CAAC,YAAY,GAAGA,YAAU,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;KACpE,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG;OACrC,CAAC;OACD,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,cAAc,IAAI,GAAG,EAAE,GAAG,CAAC;MACnD,CAAC;;KAEF,IAAI,sBAAsB,GAAG;OAC3B,GAAG,EAAE,IAAI;OACT,OAAO,EAAE,IAAI;OACb,GAAG,EAAE,IAAI;OACT,QAAQ,EAAE,IAAI;OACd,MAAM,EAAE,IAAI;MACb,CAAC;;KAEF,IAAI,eAAe,GAAG,aAAa,CAAC,eAAe,CAAC;KACpD,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,iBAAiB,EAAE;OAC3D,eAAe,GAAGJ,aAAW,CAAC,sBAAsB,EAAE,eAAe,CAAC,CAAC;MACxE,MAAM,IAAI,eAAe,KAAK,KAAK,EAAE;OACpC,eAAe,GAAG,sBAAsB,CAAC;MAC1C;KACD,aAAa,CAAC,eAAe,GAAG,eAAe,CAAC;;KAEhD,IAAI,kBAAkB,GAAG;OACvB,QAAQ,EAAE,IAAI;MACf,CAAC;;KAEF,IAAI,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC;KAC1C,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,iBAAiB,EAAE;OACtD,UAAU,GAAGA,aAAW,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;MAC1D,MAAM,IAAI,UAAU,KAAK,KAAK,EAAE;OAC/B,UAAU,GAAG,kBAAkB,CAAC;MACjC;KACD,aAAa,CAAC,UAAU,GAAG,UAAU,CAAC;;KAEtCkB,QAAQ,CAAC,mBAAmB,GAAG,CAAC,CAAC,aAAa,CAAC,mBAAmB,CAAC;;;KAGnE,OAAO,IAAI,CAAC;IACb;;;;;;;;;;GAUD,OAAO,EAAE,WAAW;KAClB,IAAI,IAAI,GAAG,IAAI,CAAC;KAChB,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;OAC7CA,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW;SACnC,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACrD,CAAC,CAAC;;OAEH,IAAI,IAAI,CAAC,cAAc,CAAC,0BAA0B,EAAE;SAClD,IAAI,CAAC,8BAA8B,EAAE,CAAC;QACvC;;OAED,IAAI,CAAC,sBAAsB,EAAE,CAAC;;OAE9B,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,QAAQ,EAAE;SAC7E,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC5B;;OAED,IAAI,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,sBAAsB,EAAE,CAAC;;;OAGvE,IAAI,CAAC,aAAa,EAAE,CAAC;;OAErB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;MAC/B;;KAED,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC;KAC5D,OAAO,IAAI,CAAC;IACb;;;;;;;GAOD,MAAM,EAAE,SAAS,GAAG,EAAE;KACpB,IAAI,IAAI,GAAG,IAAI;OACb,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;OACzB,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;OACrC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;;KAEvC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;KAChB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC;KAC3B,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KACpD,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;;KAErD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;;KAEhD,IAAI,CAAC,eAAe;OAClB,IAAI,CAAC,aAAa,GAAG,GAAG,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;;;;KAI7E,IAAI,CAAC,aAAa,EAAE,CAAC;IACtB;;;;;;;;;;GAUD,OAAO,EAAE,SAAS,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;KACrC,IAAIvB,YAAU,CAAC,OAAO,CAAC,EAAE;OACvB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;OAClB,IAAI,GAAG,OAAO,CAAC;OACf,OAAO,GAAG,EAAE,CAAC;MACd;;KAED,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnD;;;;;;;;;;GAUD,IAAI,EAAE,SAAS,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;KACrC,IAAI,IAAI,GAAG,IAAI,CAAC;;;KAGhB,IAAID,aAAW,CAAC,IAAI,CAAC,IAAI,CAACC,YAAU,CAAC,OAAO,CAAC,EAAE;OAC7C,OAAO,OAAO,CAAC;MAChB;;;KAGD,IAAIA,YAAU,CAAC,OAAO,CAAC,EAAE;OACvB,IAAI,GAAG,OAAO,CAAC;OACf,OAAO,GAAG,SAAS,CAAC;MACrB;;;;KAID,IAAI,CAACA,YAAU,CAAC,IAAI,CAAC,EAAE;OACrB,OAAO,IAAI,CAAC;MACb;;;KAGD,IAAI;OACF,IAAI,IAAI,CAAC,SAAS,EAAE;SAClB,OAAO,IAAI,CAAC;QACb;;;OAGD,IAAI,IAAI,CAAC,iBAAiB,EAAE;SAC1B,OAAO,IAAI,CAAC,iBAAiB,CAAC;QAC/B;MACF,CAAC,OAAO,CAAC,EAAE;;;;OAIV,OAAO,IAAI,CAAC;MACb;;KAED,SAAS,OAAO,GAAG;OACjB,IAAI,IAAI,GAAG,EAAE;SACX,CAAC,GAAG,SAAS,CAAC,MAAM;SACpB,IAAI,GAAG,CAAC,OAAO,KAAK,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;;OAEzD,IAAI,OAAO,IAAIA,YAAU,CAAC,OAAO,CAAC,EAAE;SAClC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAChC;;;;OAID,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;;OAE7E,IAAI;;;;;SAKF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC,OAAO,CAAC,EAAE;SACV,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC1B,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;SAClC,MAAM,CAAC,CAAC;QACT;MACF;;;KAGD,KAAK,IAAI,QAAQ,IAAI,IAAI,EAAE;OACzB,IAAIQ,QAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE;SAC1B,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpC;MACF;KACD,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;;KAEnC,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC;;;KAGjC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;KACzB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;;KAExB,OAAO,OAAO,CAAC;IAChB;;;;;;;GAOD,SAAS,EAAE,WAAW;KACpBe,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;;KAE5B,IAAI,CAAC,8BAA8B,EAAE,CAAC;KACtC,IAAI,CAAC,wBAAwB,EAAE,CAAC;KAChC,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACxB,IAAI,CAAC,eAAe,EAAE,CAAC;;KAEvB,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,6BAA6B,CAAC;KAC3D,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;;KAE/B,OAAO,IAAI,CAAC;IACb;;;;;;;;;;GAUD,wBAAwB,EAAE,SAAS,KAAK,EAAE;KACxC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,2CAA2C,EAAE,KAAK,CAAC,CAAC;KAC5E,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE;OAClC,SAAS,EAAE;SACT,IAAI,EAAE,sBAAsB;SAC5B,OAAO,EAAE,KAAK;QACf;MACF,CAAC,CAAC;IACJ;;;;;;;GAOD,8BAA8B,EAAE,WAAW;KACzC,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACzE/B,SAAO,CAAC,gBAAgB;OACtBA,SAAO,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;KAChF,OAAO,IAAI,CAAC;IACb;;;;;;;GAOD,8BAA8B,EAAE,WAAW;KACzCA,SAAO,CAAC,mBAAmB;OACzBA,SAAO,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;KACnF,OAAO,IAAI,CAAC;IACb;;;;;;;;;GASD,gBAAgB,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE;KACtC,OAAO,GAAGa,aAAW,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC;;KAEnE,IAAIZ,cAAY,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;;OAEhC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC;MACf,MAAM,IAAIC,YAAU,CAAC,EAAE,CAAC,IAAIC,gBAAc,CAAC,EAAE,CAAC,EAAE;;;;;OAK/C,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,KAAKD,YAAU,CAAC,EAAE,CAAC,GAAG,UAAU,GAAG,cAAc,CAAC,CAAC;OACrE,IAAI,OAAO,GAAG,EAAE,CAAC,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC;;OAE3D,OAAO,IAAI,CAAC,cAAc;SACxB,OAAO;SACPW,aAAW,CAAC,OAAO,EAAE;;;WAGnB,UAAU,EAAE,IAAI;WAChB,cAAc,EAAE,OAAO,CAAC,cAAc,GAAG,CAAC;UAC3C,CAAC;QACH,CAAC;MACH,MAAM,IAAIT,SAAO,CAAC,EAAE,CAAC,EAAE;;OAEtB,EAAE,GAAG,EAAE,CAAC;MACT,MAAM,IAAIE,eAAa,CAAC,EAAE,CAAC,EAAE;;;;OAI5B,OAAO,GAAG,IAAI,CAAC,0CAA0C,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;OACvE,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;MACjC,MAAM;;;;;;;OAOL,OAAO,IAAI,CAAC,cAAc;SACxB,EAAE;SACFO,aAAW,CAAC,OAAO,EAAE;WACnB,UAAU,EAAE,IAAI;WAChB,cAAc,EAAE,OAAO,CAAC,cAAc,GAAG,CAAC;UAC3C,CAAC;QACH,CAAC;MACH;;;KAGD,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;;;;;;;KAOjC,IAAI;OACF,IAAI,KAAK,GAAGkB,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;OAC3C,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;MACvC,CAAC,OAAO,GAAG,EAAE;OACZ,IAAI,EAAE,KAAK,GAAG,EAAE;SACd,MAAM,GAAG,CAAC;QACX;MACF;;KAED,OAAO,IAAI,CAAC;IACb;;GAED,0CAA0C,EAAE,SAAS,cAAc,EAAE,EAAE,EAAE;KACvE,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;KACpC,IAAI,OAAO,GAAGlB,aAAW,CAAC,cAAc,EAAE;OACxC,OAAO;SACL,0CAA0C,GAAGc,yBAAuB,CAAC,MAAM,CAAC;OAC9E,WAAW,EAAE,CAACK,KAAG,CAAC,MAAM,CAAC,CAAC;OAC1B,KAAK,EAAE,cAAc,CAAC,KAAK,IAAI,EAAE;MAClC,CAAC,CAAC;KACH,OAAO,CAAC,KAAK,CAAC,cAAc,GAAGJ,oBAAkB,CAAC,EAAE,CAAC,CAAC;;KAEtD,OAAO,OAAO,CAAC;IAChB;;;;;;;;;GASD,cAAc,EAAE,SAAS,GAAG,EAAE,OAAO,EAAE;;;;KAIrC;OACE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI;OACvC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;OAC1C;OACA,OAAO;MACR;;KAED,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;KACxB,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;;KAEf,IAAI,IAAI,GAAGf,aAAW;OACpB;SACE,OAAO,EAAE,GAAG;QACb;OACD,OAAO;MACR,CAAC;;KAEF,IAAI,EAAE,CAAC;;;;;KAKP,IAAI;OACF,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;MACtB,CAAC,OAAO,GAAG,EAAE;OACZ,EAAE,GAAG,GAAG,CAAC;MACV;;;KAGD,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;KACf,IAAI,KAAK,GAAGkB,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;;;KAG3C,IAAI,WAAW,GAAGrB,SAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;;;;KAKzD,IAAI,WAAW,IAAI,WAAW,CAAC,IAAI,KAAK,wBAAwB,EAAE;OAChE,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;MAC9B;;KAED,IAAI,OAAO,GAAG,CAAC,WAAW,IAAI,WAAW,CAAC,GAAG,KAAK,EAAE,CAAC;;KAErD;OACE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI;OACrC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;OAC5C;OACA,OAAO;MACR;;KAED;OACE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI;OACxC,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;OAChD;OACA,OAAO;MACR;;;;KAID,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,KAAK,EAAE,EAAE;;OAE/E,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC;;OAErE,OAAO,GAAGG,aAAW;SACnB;WACE,cAAc,EAAE,CAAC;UAClB;SACD,OAAO;QACR,CAAC;;;;;OAKF,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC;;OAE5B,IAAI,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;OACjD,IAAI,CAAC,UAAU,GAAG;;SAEhB,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE;QACzB,CAAC;MACH;;;KAGD,IAAI,IAAI,CAAC,WAAW,EAAE;OACpB,IAAI,CAAC,WAAW,GAAGH,SAAO,CAAC,IAAI,CAAC,WAAW,CAAC;WACxC,IAAI,CAAC,WAAW;WAChB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;MACxB;;;KAGD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;KAEjB,OAAO,IAAI,CAAC;IACb;;GAED,iBAAiB,EAAE,SAAS,GAAG,EAAE;KAC/B,IAAI,KAAK,GAAGG,aAAW;OACrB;SACE,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI;QACxB;OACD,GAAG;MACJ,CAAC;;KAEF,IAAIL,YAAU,CAAC,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE;OACtD,IAAI,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;;OAE3D,IAAIH,UAAQ,CAAC,MAAM,CAAC,IAAI,CAACM,eAAa,CAAC,MAAM,CAAC,EAAE;SAC9C,KAAK,GAAG,MAAM,CAAC;QAChB,MAAM,IAAI,MAAM,KAAK,KAAK,EAAE;SAC3B,OAAO,IAAI,CAAC;QACb;MACF;;KAED,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC9B,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE;OACjE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;MAC3B;KACD,OAAO,IAAI,CAAC;IACb;;GAED,SAAS,EAAE,SAAS,MAAM,2BAA2B;KACnD,IAAI,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;;KAE7C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;KACzC,IAAI,IAAI,CAAC,iBAAiB,EAAE;OAC1B,IAAI,CAAC,aAAa,EAAE,CAAC;MACtB;;KAED,OAAO,IAAI,CAAC;IACb;;;;;;;;GAQD,cAAc,EAAE,SAAS,IAAI,EAAE;;KAE7B,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC;;KAEhC,OAAO,IAAI,CAAC;IACb;;;;;;;;GAQD,eAAe,EAAE,SAAS,KAAK,EAAE;KAC/B,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;;KAEnC,OAAO,IAAI,CAAC;IACb;;;;;;;;GAQD,cAAc,EAAE,SAAS,IAAI,EAAE;KAC7B,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;;KAEjC,OAAO,IAAI,CAAC;IACb;;;;;;;GAOD,YAAY,EAAE,WAAW;KACvB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;;KAEzB,OAAO,IAAI,CAAC;IACb;;;;;;;GAOD,UAAU,EAAE,WAAW;;KAErB,OAAO,IAAI,CAAC,KAAK,CAACZ,WAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IACnD;;;;;;;;GAQD,cAAc,EAAE,SAAS,WAAW,EAAE;KACpC,IAAI,CAAC,cAAc,CAAC,WAAW,GAAG,WAAW,CAAC;;KAE9C,OAAO,IAAI,CAAC;IACb;;;;;;;;GAQD,UAAU,EAAE,SAAS,OAAO,EAAE;KAC5B,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,OAAO,CAAC;;KAEtC,OAAO,IAAI,CAAC;IACb;;;;;;;;;GASD,eAAe,EAAE,SAAS,QAAQ,EAAE;KAClC,IAAI,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;KAChD,IAAI,CAAC,cAAc,CAAC,YAAY,GAAG,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;KAC5E,OAAO,IAAI,CAAC;IACb;;;;;;;;;GASD,qBAAqB,EAAE,SAAS,QAAQ,EAAE;KACxC,IAAI,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC;KACtD,IAAI,CAAC,cAAc,CAAC,kBAAkB,GAAG,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;KAClF,OAAO,IAAI,CAAC;IACb;;;;;;;;;GASD,qBAAqB,EAAE,SAAS,QAAQ,EAAE;KACxC,IAAI,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC;KACtD,IAAI,CAAC,cAAc,CAAC,kBAAkB,GAAG,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;KAClF,OAAO,IAAI,CAAC;IACb;;;;;;;;;;;GAWD,YAAY,EAAE,SAAS,SAAS,EAAE;KAChC,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,SAAS,CAAC;;KAE1C,OAAO,IAAI,CAAC;IACb;;;;;;;GAOD,aAAa,EAAE,WAAW;KACxB,OAAO,IAAI,CAAC,sBAAsB,CAAC;IACpC;;;;;;;GAOD,WAAW,EAAE,WAAW;KACtB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC1B;;;;;;;GAOD,OAAO,EAAE,WAAW;KAClB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,KAAK,CAAC;KACjC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;OACvB,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE;SACjC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;SACpC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,uCAAuC,CAAC,CAAC;QAClE;OACD,OAAO,KAAK,CAAC;MACd;KACD,OAAO,IAAI,CAAC;IACb;;GAED,SAAS,EAAE,WAAW;;;;KAIpB,IAAI,WAAW,GAAGC,SAAO,CAAC,WAAW,CAAC;KACtC,IAAI,WAAW,EAAE;OACf,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;MAC5D;IACF;;GAED,gBAAgB,EAAE,SAAS,OAAO,EAAE;KAClC;OACE,CAAC,SAAS;;OAEV,OAAO;;KAET,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;;KAExB,IAAI,WAAW,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;KACxD,IAAI,CAAC,WAAW,EAAE;OAChB,MAAM,IAAIiC,WAAgB,CAAC,iBAAiB,CAAC,CAAC;MAC/C;;KAED,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;KACnC,IAAI,CAAC,GAAG,EAAE;OACR,MAAM,IAAIA,WAAgB,CAAC,aAAa,CAAC,CAAC;MAC3C;;KAED,IAAI,MAAM,GAAG,kBAAkB,CAAC;KAChC,IAAI,EAAE,GAAG,EAAE,CAAC;KACZ,EAAE,IAAI,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;KACxC,EAAE,IAAI,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;;KAE5B,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;KACpD,IAAI,IAAI,EAAE;OACR,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;OAClD,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;MACtD;;KAED,IAAI,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;;KAE9D,IAAI,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;KAC/C,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;KACpB,MAAM,CAAC,GAAG,GAAG,YAAY,GAAG,wBAAwB,GAAG,EAAE,CAAC;KAC1D,CAAC,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACxD;;;GAGD,kBAAkB,EAAE,WAAW;KAC7B,IAAI,IAAI,GAAG,IAAI,CAAC;KAChB,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;KACzB,UAAU,CAAC,WAAW;;OAEpB,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;MAC1B,CAAC,CAAC;IACJ;;GAED,aAAa,EAAE,SAAS,SAAS,EAAE,OAAO,EAAE;;KAE1C,IAAI,GAAG,EAAE,GAAG,CAAC;;KAEb,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO;;KAE/B,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;;KAExB,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;;KAEjF,IAAI,SAAS,CAAC,WAAW,EAAE;OACzB,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;OAC1C,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;MACtC,MAAM;OACL,GAAG,GAAG,SAAS,CAAC,iBAAiB,EAAE,CAAC;OACpC,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;MAC3B;;KAED,KAAK,GAAG,IAAI,OAAO;OACjB,IAAIjB,QAAM,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;SACxB,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QACzB;;KAEH,IAAI,SAAS,CAAC,WAAW,EAAE;;OAEzB,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;MAC9B,MAAM;;;OAGL,IAAI;SACF,SAAS,CAAC,SAAS,CAAC,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC;QAC9D,CAAC,OAAO,CAAC,EAAE;;QAEX;MACF;IACF;;;;;;;;GAQD,uBAAuB,EAAE,SAAS,OAAO,EAAE;KACzC,IAAI,IAAI,GAAG,IAAI,CAAC;KAChB,OAAO,SAAS,GAAG,EAAE;;;;OAInB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;;;;;OAK7B,IAAI,IAAI,CAAC,kBAAkB,KAAK,GAAG,EAAE,OAAO;;OAE5C,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC;;;;;;OAM9B,IAAI,MAAM,CAAC;OACX,IAAI;SACF,MAAM,GAAGI,kBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC,OAAO,CAAC,EAAE;SACV,MAAM,GAAG,WAAW,CAAC;QACtB;;OAED,IAAI,CAAC,iBAAiB,CAAC;SACrB,QAAQ,EAAE,KAAK,GAAG,OAAO;SACzB,OAAO,EAAE,MAAM;QAChB,CAAC,CAAC;MACJ,CAAC;IACH;;;;;;;GAOD,qBAAqB,EAAE,WAAW;KAChC,IAAI,IAAI,GAAG,IAAI;OACb,gBAAgB,GAAG,IAAI,CAAC;;;;;KAK1B,OAAO,SAAS,GAAG,EAAE;OACnB,IAAI,MAAM,CAAC;OACX,IAAI;SACF,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QACrB,CAAC,OAAO,CAAC,EAAE;;;SAGV,OAAO;QACR;OACD,IAAI,OAAO,GAAG,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC;;;;;OAKvC;SACE,CAAC,OAAO;UACP,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,UAAU,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC;;SAE5E,OAAO;;;;OAIT,IAAI,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC;OACpC,IAAI,CAAC,OAAO,EAAE;SACZ,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5C;OACD,YAAY,CAAC,OAAO,CAAC,CAAC;OACtB,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,WAAW;SAC5C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC9B,EAAE,gBAAgB,CAAC,CAAC;MACtB,CAAC;IACH;;;;;;;;GAQD,iBAAiB,EAAE,SAAS,IAAI,EAAE,EAAE,EAAE;KACpC,IAAI,SAAS,GAAGG,UAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KAC9C,IAAI,QAAQ,GAAGA,UAAQ,CAAC,EAAE,CAAC,CAAC;KAC5B,IAAI,UAAU,GAAGA,UAAQ,CAAC,IAAI,CAAC,CAAC;;;;;KAKhC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;;;;KAIpB,IAAI,SAAS,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI;OAC9E,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC;KACzB,IAAI,SAAS,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI;OAClF,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC;;KAE7B,IAAI,CAAC,iBAAiB,CAAC;OACrB,QAAQ,EAAE,YAAY;OACtB,IAAI,EAAE;SACJ,EAAE,EAAE,EAAE;SACN,IAAI,EAAE,IAAI;QACX;MACF,CAAC,CAAC;IACJ;;GAED,sBAAsB,EAAE,WAAW;KACjC,IAAI,IAAI,GAAG,IAAI,CAAC;KAChB,IAAI,CAAC,yBAAyB,GAAG,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC;;KAE7D,QAAQ,CAAC,SAAS,CAAC,QAAQ,GAAG,WAAW;OACvC,IAAI,OAAO,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,SAAS,EAAE;SAChD,OAAO,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACvE;OACD,OAAO,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;MAC9D,CAAC;IACH;;GAED,wBAAwB,EAAE,WAAW;KACnC,IAAI,IAAI,CAAC,yBAAyB,EAAE;;OAElC,QAAQ,CAAC,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,yBAAyB,CAAC;MAC9D;IACF;;;;;;GAMD,mBAAmB,EAAE,WAAW;KAC9B,IAAI,IAAI,GAAG,IAAI,CAAC;;KAEhB,IAAI,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC;;KAE5C,SAAS,UAAU,CAAC,IAAI,EAAE;OACxB,OAAO,SAAS,EAAE,EAAE,CAAC,EAAE;;;;SAIrB,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;SACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;WACpC,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;UACxB;SACD,IAAI,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;SAC/B,IAAIf,YAAU,CAAC,gBAAgB,CAAC,EAAE;WAChC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI;aACjB;eACE,SAAS,EAAE;iBACT,IAAI,EAAE,YAAY;iBAClB,IAAI,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,IAAI,aAAa,CAAC;gBAC7C;cACF;aACD,gBAAgB;YACjB,CAAC;UACH;;;;;SAKD,IAAI,IAAI,CAAC,KAAK,EAAE;WACd,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;UAC/B,MAAM;WACL,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;UAC/B;QACF,CAAC;MACH;;KAED,IAAI,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC;;KAE1D,SAAS,eAAe,CAAC,MAAM,EAAE;OAC/B,IAAI,KAAK,GAAGR,SAAO,CAAC,MAAM,CAAC,IAAIA,SAAO,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC;OACzD,IAAI,KAAK,IAAI,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE;SAC7EwB,MAAI;WACF,KAAK;WACL,kBAAkB;WAClB,SAAS,IAAI,EAAE;aACb,OAAO,SAAS,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;;eAE5C,IAAI;iBACF,IAAI,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE;mBACxB,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI;qBACxB;uBACE,SAAS,EAAE;yBACT,IAAI,EAAE,YAAY;yBAClB,IAAI,EAAE;2BACJ,MAAM,EAAE,MAAM;2BACd,QAAQ,EAAE,aAAa;2BACvB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,aAAa;0BAC1C;wBACF;sBACF;qBACD,EAAE,CAAC,WAAW;oBACf,CAAC;kBACH;gBACF,CAAC,OAAO,GAAG,EAAE;;gBAEb;;;;eAID,IAAI,MAAM,EAAE,YAAY,EAAE,eAAe,CAAC;;eAE1C;iBACE,eAAe;iBACf,eAAe,CAAC,GAAG;kBAClB,MAAM,KAAK,aAAa,IAAI,MAAM,KAAK,MAAM,CAAC;iBAC/C;;;iBAGA,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;iBACrD,eAAe,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;iBAC/C,MAAM,GAAG,SAAS,GAAG,EAAE;;;;mBAIrB,IAAI,CAAC,GAAG,EAAE,OAAO;;mBAEjB,IAAI,SAAS,CAAC;mBACd,IAAI;qBACF,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC;oBACtB,CAAC,OAAO,CAAC,EAAE;;;qBAGV,OAAO;oBACR;mBACD,IAAI,SAAS,KAAK,OAAO,EAAE,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;wBAC/C,IAAI,SAAS,KAAK,UAAU,EAAE,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;kBAChE,CAAC;gBACH;eACD,OAAO,IAAI,CAAC,IAAI;iBACd,IAAI;iBACJ,OAAO;iBACP,IAAI,CAAC,IAAI;mBACP;qBACE,SAAS,EAAE;uBACT,IAAI,EAAE,YAAY;uBAClB,IAAI,EAAE;yBACJ,MAAM,EAAE,MAAM;yBACd,QAAQ,EAAE,kBAAkB;yBAC5B,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,aAAa;wBAC1C;sBACF;oBACF;mBACD,EAAE;mBACF,MAAM;kBACP;iBACD,OAAO;iBACP,MAAM;gBACP,CAAC;cACH,CAAC;YACH;WACD,eAAe;UAChB,CAAC;SACFA,MAAI;WACF,KAAK;WACL,qBAAqB;WACrB,SAAS,IAAI,EAAE;aACb,OAAO,SAAS,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;eACxC,IAAI;iBACF,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,iBAAiB,GAAG,EAAE,CAAC,iBAAiB,GAAG,EAAE,CAAC,CAAC;gBAC/D,CAAC,OAAO,CAAC,EAAE;;gBAEX;eACD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;cAClD,CAAC;YACH;WACD,eAAe;UAChB,CAAC;QACH;MACF;;KAEDA,MAAI,CAACxB,SAAO,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;KACzDwB,MAAI,CAACxB,SAAO,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;KAC1D,IAAIA,SAAO,CAAC,qBAAqB,EAAE;OACjCwB,MAAI;SACFxB,SAAO;SACP,uBAAuB;SACvB,SAAS,IAAI,EAAE;WACb,OAAO,SAAS,EAAE,EAAE;aAClB,OAAO,IAAI;eACT,IAAI,CAAC,IAAI;iBACP;mBACE,SAAS,EAAE;qBACT,IAAI,EAAE,YAAY;qBAClB,IAAI,EAAE;uBACJ,QAAQ,EAAE,uBAAuB;uBACjC,OAAO,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa;sBAC9C;oBACF;kBACF;iBACD,EAAE;gBACH;cACF,CAAC;YACH,CAAC;UACH;SACD,eAAe;QAChB,CAAC;MACH;;;;KAID,IAAI,YAAY,GAAG;OACjB,aAAa;OACb,QAAQ;OACR,MAAM;OACN,kBAAkB;OAClB,gBAAgB;OAChB,mBAAmB;OACnB,iBAAiB;OACjB,aAAa;OACb,YAAY;OACZ,oBAAoB;OACpB,aAAa;OACb,YAAY;OACZ,gBAAgB;OAChB,cAAc;OACd,iBAAiB;OACjB,aAAa;OACb,aAAa;OACb,cAAc;OACd,oBAAoB;OACpB,QAAQ;OACR,WAAW;OACX,cAAc;OACd,eAAe;OACf,WAAW;OACX,iBAAiB;OACjB,QAAQ;OACR,gBAAgB;OAChB,2BAA2B;OAC3B,sBAAsB;MACvB,CAAC;KACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;OAC5C,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;MAClC;IACF;;;;;;;;;;;GAWD,sBAAsB,EAAE,WAAW;KACjC,IAAI,IAAI,GAAG,IAAI,CAAC;KAChB,IAAI,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC;;KAE1D,IAAI,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC;;KAE5C,SAAS,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE;OAC3B,IAAI,IAAI,IAAI,GAAG,IAAIQ,YAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE;SACxCgB,MAAI,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,IAAI,EAAE;WAC7B,OAAO,IAAI,CAAC,IAAI;aACd;eACE,SAAS,EAAE;iBACT,IAAI,EAAE,YAAY;iBAClB,IAAI,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC;gBACtE;cACF;aACD,IAAI;YACL,CAAC;UACH,CAAC,CAAC;QACJ;MACF;;KAED,IAAI,eAAe,CAAC,GAAG,IAAI,gBAAgB,IAAIxB,SAAO,EAAE;OACtD,IAAI,QAAQ,GAAGA,SAAO,CAAC,cAAc,IAAIA,SAAO,CAAC,cAAc,CAAC,SAAS,CAAC;OAC1EwB,MAAI;SACF,QAAQ;SACR,MAAM;SACN,SAAS,QAAQ,EAAE;WACjB,OAAO,SAAS,MAAM,EAAE,GAAG,EAAE;;;;aAI3B,IAAIf,UAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE;eACxD,IAAI,CAAC,WAAW,GAAG;iBACjB,MAAM,EAAE,MAAM;iBACd,GAAG,EAAE,GAAG;iBACR,WAAW,EAAE,IAAI;gBAClB,CAAC;cACH;;aAED,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACxC,CAAC;UACH;SACD,eAAe;QAChB,CAAC;;OAEFe,MAAI;SACF,QAAQ;SACR,MAAM;SACN,SAAS,QAAQ,EAAE;WACjB,OAAO,WAAW;;aAEhB,IAAI,GAAG,GAAG,IAAI,CAAC;;aAEf,SAAS,yBAAyB,GAAG;eACnC,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,UAAU,KAAK,CAAC,EAAE;iBAC3C,IAAI;;;mBAGF,GAAG,CAAC,WAAW,CAAC,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC;kBAC1C,CAAC,OAAO,CAAC,EAAE;;kBAEX;;iBAED,IAAI,CAAC,iBAAiB,CAAC;mBACrB,IAAI,EAAE,MAAM;mBACZ,QAAQ,EAAE,KAAK;mBACf,IAAI,EAAE,GAAG,CAAC,WAAW;kBACtB,CAAC,CAAC;gBACJ;cACF;;aAED,IAAI,KAAK,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;aAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;eACrC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;cACzB;;aAED,IAAI,oBAAoB,IAAI,GAAG,IAAIhB,YAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE;eACrEgB,MAAI;iBACF,GAAG;iBACH,oBAAoB;iBACpB,SAAS,IAAI,EAAE;mBACb,OAAO,IAAI,CAAC,IAAI;qBACd;uBACE,SAAS,EAAE;yBACT,IAAI,EAAE,YAAY;yBAClB,IAAI,EAAE;2BACJ,QAAQ,EAAE,oBAAoB;2BAC9B,OAAO,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa;0BAC9C;wBACF;sBACF;qBACD,IAAI;qBACJ,yBAAyB;oBAC1B,CAAC;kBACH;gBACF,CAAC;cACH,MAAM;;;eAGL,GAAG,CAAC,kBAAkB,GAAG,yBAAyB,CAAC;cACpD;;aAED,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACxC,CAAC;UACH;SACD,eAAe;QAChB,CAAC;MACH;;KAED,IAAI,eAAe,CAAC,GAAG,IAAIC,eAAa,EAAE,EAAE;OAC1CD,MAAI;SACFxB,SAAO;SACP,OAAO;SACP,SAAS,SAAS,EAAE;WAClB,OAAO,WAAW;;;;aAIhB,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;aACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;eACpC,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;cACxB;;aAED,IAAI,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;aACzB,IAAI,MAAM,GAAG,KAAK,CAAC;aACnB,IAAI,GAAG,CAAC;;aAER,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;eAClC,GAAG,GAAG,UAAU,CAAC;cAClB,MAAM,IAAI,SAAS,IAAIA,SAAO,IAAI,UAAU,YAAYA,SAAO,CAAC,OAAO,EAAE;eACxE,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;eACrB,IAAI,UAAU,CAAC,MAAM,EAAE;iBACrB,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;gBAC5B;cACF,MAAM;eACL,GAAG,GAAG,EAAE,GAAG,UAAU,CAAC;cACvB;;;aAGD,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE;eACvC,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;cACpC;;aAED,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;eAC7B,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;cACzB;;aAED,IAAI,SAAS,GAAG;eACd,MAAM,EAAE,MAAM;eACd,GAAG,EAAE,GAAG;eACR,WAAW,EAAE,IAAI;cAClB,CAAC;;aAEF,OAAO,SAAS;gBACb,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;gBACjB,IAAI,CAAC,SAAS,QAAQ,EAAE;iBACvB,SAAS,CAAC,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC;;iBAExC,IAAI,CAAC,iBAAiB,CAAC;mBACrB,IAAI,EAAE,MAAM;mBACZ,QAAQ,EAAE,OAAO;mBACjB,IAAI,EAAE,SAAS;kBAChB,CAAC,CAAC;;iBAEH,OAAO,QAAQ,CAAC;gBACjB,CAAC;gBACD,OAAO,CAAC,CAAC,SAAS,GAAG,EAAE;;iBAEtB,IAAI,CAAC,iBAAiB,CAAC;mBACrB,IAAI,EAAE,MAAM;mBACZ,QAAQ,EAAE,OAAO;mBACjB,IAAI,EAAE,SAAS;mBACf,KAAK,EAAE,OAAO;kBACf,CAAC,CAAC;;iBAEH,MAAM,GAAG,CAAC;gBACX,CAAC,CAAC;YACN,CAAC;UACH;SACD,eAAe;QAChB,CAAC;MACH;;;;KAID,IAAI,eAAe,CAAC,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE;OAC5C,IAAI,SAAS,CAAC,gBAAgB,EAAE;SAC9B,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;SAClF,SAAS,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,qBAAqB,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7E,MAAM,IAAI,SAAS,CAAC,WAAW,EAAE;;SAEhC,SAAS,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC;SACxE,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;QACnE;MACF;;;;;;KAMD,IAAI,MAAM,GAAGA,SAAO,CAAC,MAAM,CAAC;KAC5B,IAAI,mBAAmB,GAAG,MAAM,IAAI,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;KACrE,IAAI,sBAAsB;OACxB,CAAC,mBAAmB;OACpBA,SAAO,CAAC,OAAO;OACfA,SAAO,CAAC,OAAO,CAAC,SAAS;OACzBA,SAAO,CAAC,OAAO,CAAC,YAAY,CAAC;KAC/B,IAAI,eAAe,CAAC,QAAQ,IAAI,sBAAsB,EAAE;;OAEtD,IAAI,aAAa,GAAGA,SAAO,CAAC,UAAU,CAAC;OACvCA,SAAO,CAAC,UAAU,GAAG,WAAW;SAC9B,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SACtC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;;SAEpD,IAAI,aAAa,EAAE;WACjB,OAAO,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;UAC7C;QACF,CAAC;;OAEF,IAAI,0BAA0B,GAAG,SAAS,gBAAgB,EAAE;;;SAG1D,OAAO,kCAAkC;WACvC,IAAI,GAAG,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;;;WAG1D,IAAI,GAAG,EAAE;;aAEP,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;YAClD;;WAED,OAAO,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;UAChD,CAAC;QACH,CAAC;;OAEFwB,MAAI,CAACxB,SAAO,CAAC,OAAO,EAAE,WAAW,EAAE,0BAA0B,EAAE,eAAe,CAAC,CAAC;OAChFwB,MAAI,CAACxB,SAAO,CAAC,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,eAAe,CAAC,CAAC;MACpF;;KAED,IAAI,eAAe,CAAC,OAAO,IAAI,SAAS,IAAIA,SAAO,IAAI,OAAO,CAAC,GAAG,EAAE;;OAElE,IAAI,qBAAqB,GAAG,SAAS,GAAG,EAAE,IAAI,EAAE;SAC9C,IAAI,CAAC,iBAAiB,CAAC;WACrB,OAAO,EAAE,GAAG;WACZ,KAAK,EAAE,IAAI,CAAC,KAAK;WACjB,QAAQ,EAAE,SAAS;UACpB,CAAC,CAAC;QACJ,CAAC;;OAEFY,MAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE;SACjE,iBAAiB,CAAC,OAAO,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC;QAC1D,CAAC,CAAC;MACJ;IACF;;GAED,gBAAgB,EAAE,WAAW;;KAE3B,IAAI,OAAO,CAAC;KACZ,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE;OACnC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;;OAExC,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;SAClB,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;SACjB,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;;OAEpB,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;MAClB;IACF;;GAED,eAAe,EAAE,WAAW;;KAE1B,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,uBAAuB,EAAE;OAC/C,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;MACtE;IACF;;GAED,aAAa,EAAE,WAAW;KACxB,IAAI,IAAI,GAAG,IAAI,CAAC;;;KAGhBA,MAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE;OACtC,IAAI,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;OAC1B,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;OACrB,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;MAC5C,CAAC,CAAC;IACJ;;GAED,SAAS,EAAE,SAAS,GAAG,EAAE;KACvB,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;OAC1B,GAAG,GAAG,EAAE;OACR,CAAC,GAAG,CAAC,CAAC;;KAER,IAAI;OACF,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;MAC1C,CAAC,OAAO,CAAC,EAAE;OACV,MAAM,IAAIqB,WAAgB,CAAC,eAAe,GAAG,GAAG,CAAC,CAAC;MACnD;;KAED,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE;OACnD,MAAM,IAAIA,WAAgB;SACxB,gFAAgF;QACjF,CAAC;MACH;;KAED,OAAO,GAAG,CAAC;IACZ;;GAED,gBAAgB,EAAE,SAAS,GAAG,EAAE;;KAE9B,IAAI,YAAY,GAAG,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;;KAEtE,IAAI,GAAG,CAAC,QAAQ,EAAE;OAChB,YAAY,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,GAAG,YAAY,CAAC;MAClD;KACD,OAAO,YAAY,CAAC;IACrB;;GAED,uBAAuB,EAAE,SAAS,SAAS,EAAE,OAAO,EAAE;KACpD,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;KACxB,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI;OACvC,IAAI,EAAE,SAAS;OACf,OAAO,EAAE,KAAK;MACf,CAAC;;;KAGF,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;OACxB,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;MAC3C;IACF;;GAED,gBAAgB,EAAE,SAAS,SAAS,EAAE,OAAO,EAAE;KAC7C,IAAI,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;;KAErD,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;OAC3B,SAAS,EAAE,SAAS;OACpB,OAAO,EAAE,OAAO;MACjB,CAAC,CAAC;;KAEH,IAAI,CAAC,iBAAiB;OACpB,SAAS,CAAC,IAAI;OACd,SAAS,CAAC,OAAO;OACjB,SAAS,CAAC,GAAG;OACb,SAAS,CAAC,MAAM;OAChB,MAAM;OACN,OAAO;MACR,CAAC;IACH;;GAED,cAAc,EAAE,SAAS,SAAS,EAAE,OAAO,EAAE;KAC3C,IAAI,IAAI,GAAG,IAAI,CAAC;KAChB,IAAI,MAAM,GAAG,EAAE,CAAC;KAChB,IAAI,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE;OAC7CrB,MAAI,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE;SACvC,IAAI,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;SACvD,IAAI,KAAK,EAAE;WACT,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;UACpB;QACF,CAAC,CAAC;;;OAGH,IAAI,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE;SACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,cAAc,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;WACpE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC;UAC1B;QACF;MACF;KACD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;KAC9D,OAAO,MAAM,CAAC;IACf;;GAED,eAAe,EAAE,SAAS,KAAK,EAAE,YAAY,EAAE;;KAE7C,IAAI,UAAU,GAAG;OACf,QAAQ,EAAE,KAAK,CAAC,GAAG;OACnB,MAAM,EAAE,KAAK,CAAC,IAAI;OAClB,KAAK,EAAE,KAAK,CAAC,MAAM;OACnB,QAAQ,EAAE,KAAK,CAAC,IAAI,IAAI,GAAG;MAC5B,CAAC;;;;;;;KAOF,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;OACd,UAAU,CAAC,QAAQ,GAAG,YAAY,CAAC;MACpC;;KAED,UAAU,CAAC,MAAM,GAAG;;;OAGlB,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI;SACtC,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;;OAE7D,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;;OAEjD,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;MAC/C,CAAC;;KAEF,OAAO,UAAU,CAAC;IACnB;;GAED,iBAAiB,EAAE,SAAS,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;KAC3E,IAAI,eAAe,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,OAAO,IAAI,EAAE,CAAC,CAAC;KAClE;OACE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI;QACtC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;SAC7C,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;OACzD;OACA,OAAO;MACR;;KAED,IAAI,UAAU,CAAC;;KAEf,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;OAC3B,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC;;;OAGxC,MAAM,CAAC,OAAO,EAAE,CAAC;OACjB,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;MAC/B,MAAM,IAAI,OAAO,EAAE;OAClB,UAAU,GAAG;SACX,MAAM,EAAE;WACN;aACE,QAAQ,EAAE,OAAO;aACjB,MAAM,EAAE,MAAM;aACd,MAAM,EAAE,IAAI;YACb;UACF;QACF,CAAC;MACH;;KAED;OACE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI;OACrC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;OAC5C;OACA,OAAO;MACR;;KAED;OACE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI;OACxC,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;OAChD;OACA,OAAO;MACR;;KAED,IAAI,IAAI,GAAGC,aAAW;OACpB;;SAEE,SAAS,EAAE;WACT,MAAM,EAAE;aACN;eACE,IAAI,EAAE,IAAI;eACV,KAAK,EAAE,OAAO;eACd,UAAU,EAAE,UAAU;cACvB;YACF;UACF;SACD,WAAW,EAAE,OAAO;QACrB;OACD,OAAO;MACR,CAAC;;KAEF,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KAClC,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC,KAAK,KAAK,EAAE,EAAE;OACtC,EAAE,CAAC,KAAK,GAAG,4BAA4B,CAAC;MACzC;;;;;KAKD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE;OAC/C,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;OAC1C,OAAO,IAAI,CAAC,SAAS,CAAC;MACvB;;KAED,IAAI,CAAC,SAAS,CAAC,SAAS,GAAGA,aAAW;OACpC;SACE,IAAI,EAAE,SAAS;SACf,OAAO,EAAE,IAAI;QACd;OACD,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,EAAE;MAC/B,CAAC;;;KAGF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClB;;GAED,WAAW,EAAE,SAAS,IAAI,EAAE;;;KAG1B,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC;KAC/C,IAAI,IAAI,CAAC,OAAO,EAAE;OAChB,IAAI,CAAC,OAAO,GAAGC,UAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;MAC5C;KACD,IAAI,IAAI,CAAC,SAAS,EAAE;OAClB,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;OACzC,SAAS,CAAC,KAAK,GAAGA,UAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;MAClD;;KAED,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;KAC3B,IAAI,OAAO,EAAE;OACX,IAAI,OAAO,CAAC,GAAG,EAAE;SACf,OAAO,CAAC,GAAG,GAAGA,UAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACvE;OACD,IAAI,OAAO,CAAC,OAAO,EAAE;SACnB,OAAO,CAAC,OAAO,GAAGA,UAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAC/E;MACF;;KAED,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM;OAC7C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;KAE1C,OAAO,IAAI,CAAC;IACb;;;;;GAKD,gBAAgB,EAAE,SAAS,WAAW,EAAE;;;KAGtC,IAAI,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC;OAClC,OAAO;OACP,KAAK;OACL,IAAI,CAAC;;KAEP,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;OAClD,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;OAC9B;SACE,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC;SAC7B,CAACT,UAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;SACrBU,cAAY,CAAC,KAAK,CAAC,IAAI,CAAC;;SAExB,SAAS;;OAEX,IAAI,GAAGF,aAAW,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;OACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;SACxC,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;SACtB,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE;WACjD,IAAI,CAAC,OAAO,CAAC,GAAGC,UAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;UAC3E;QACF;OACD,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;MACnC;IACF;;GAED,YAAY,EAAE,WAAW;KACvB,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO;KACtD,IAAI,QAAQ,GAAG,EAAE,CAAC;;KAElB,IAAI,IAAI,CAAC,aAAa,IAAI,UAAU,CAAC,SAAS,EAAE;OAC9C,QAAQ,CAAC,OAAO,GAAG;SACjB,YAAY,EAAE,UAAU,CAAC,SAAS;QACnC,CAAC;MACH;;;KAGD,IAAId,SAAO,CAAC,QAAQ,IAAIA,SAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;OAC7C,QAAQ,CAAC,GAAG,GAAGA,SAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;MACtC;;KAED,IAAI,IAAI,CAAC,YAAY,IAAI,SAAS,CAAC,QAAQ,EAAE;OAC3C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,GAAG,EAAE,CAAC;OAC7C,QAAQ,CAAC,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC;MAC/C;;KAED,OAAO,QAAQ,CAAC;IACjB;;GAED,aAAa,EAAE,WAAW;KACxB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;KAC1B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC3B;;GAED,cAAc,EAAE,WAAW;KACzB,OAAO,IAAI,CAAC,gBAAgB,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC;IACpF;;;;;;;;;;;GAWD,aAAa,EAAE,SAAS,OAAO,EAAE;KAC/B,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;;KAE1B;OACE,CAAC,IAAI;OACL,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO;OAChC,OAAO,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW;;OAExC,OAAO,KAAK,CAAC;;;KAGf,IAAI,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE;OACzC,OAAOsB,kBAAgB,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;MAC9D,MAAM,IAAI,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE;;OAE9C,OAAOD,iBAAe,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;MAC3D;;KAED,OAAO,IAAI,CAAC;IACb;;GAED,gBAAgB,EAAE,SAAS,OAAO,EAAE;;KAElC,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;OACzB,OAAO;MACR;;KAED,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;;;;;KAK5B,IAAI,EAAE,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,CAAC,EAAE,OAAO;;KAElE,IAAI,KAAK,CAAC;KACV,IAAI;;;OAGF,IAAII,eAAa,EAAE,EAAE;SACnB,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM;SACL,KAAK,GAAG,OAAO,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAClD;;;OAGD,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;MACpC,CAAC,OAAO,CAAC,EAAE;;MAEX;;KAED,IAAI,CAAC,gBAAgB,GAAG,KAAK;;SAEzB,KAAK;;SAEL,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,IAAI,CAAC;;KAEtC,IAAI,CAAC,aAAa,GAAG,GAAG,EAAE,CAAC;IAC5B;;GAED,KAAK,EAAE,SAAS,IAAI,EAAE;KACpB,IAAI,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;;KAExC,IAAI,QAAQ,GAAG;SACX,OAAO,EAAE,IAAI,CAAC,cAAc;SAC5B,MAAM,EAAE,aAAa,CAAC,MAAM;SAC5B,QAAQ,EAAE,YAAY;QACvB;OACD,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;;KAEjC,IAAI,QAAQ,EAAE;OACZ,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC;MAC7B;;;KAGD,IAAI,IAAI,CAAC,cAAc,EAAE,OAAO,IAAI,CAAC,cAAc,CAAC;;KAEpD,IAAI,GAAGZ,aAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;;;KAGnC,IAAI,CAAC,IAAI,GAAGA,aAAW,CAACA,aAAW,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;KAC9E,IAAI,CAAC,KAAK,GAAGA,aAAW,CAACA,aAAW,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;;;KAGjF,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;;KAEzD,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;;;OAGrD,IAAI,CAAC,WAAW,GAAG;SACjB,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAC5C,CAAC;MACH;;KAED,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;;OAE5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;MACtC;;;KAGD,IAAI,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC;;;KAG5E,IAAI,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC;;;KAGhE,IAAI,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,GAAG,aAAa,CAAC,UAAU,CAAC;;KAE1E,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;;;KAGhC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,GAAG,EAAE;OACtC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAIF,eAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;SACrE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB;MACF,CAAC,CAAC;;KAEH,IAAIH,YAAU,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE;OAC1C,IAAI,GAAG,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;MACjD;;;KAGD,IAAI,CAAC,IAAI,IAAIG,eAAa,CAAC,IAAI,CAAC,EAAE;OAChC,OAAO;MACR;;;KAGD;OACEH,YAAU,CAAC,aAAa,CAAC,kBAAkB,CAAC;OAC5C,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC;OACvC;OACA,OAAO;MACR;;;;KAID,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;OACzB,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,sCAAsC,EAAE,IAAI,CAAC,CAAC;OACrE,OAAO;MACR;;KAED,IAAI,OAAO,aAAa,CAAC,UAAU,KAAK,QAAQ,EAAE;OAChD,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,aAAa,CAAC,UAAU,EAAE;SAC5C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAClC;MACF,MAAM;OACL,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;MAClC;IACF;;GAED,aAAa,EAAE,SAAS,IAAI,EAAE;KAC5B,OAAOqB,UAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IACzD;;GAED,QAAQ,EAAE,WAAW;KACnB,OAAOV,OAAK,EAAE,CAAC;IAChB;;GAED,qBAAqB,EAAE,SAAS,IAAI,EAAE,QAAQ,EAAE;KAC9C,IAAI,IAAI,GAAG,IAAI,CAAC;KAChB,IAAI,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;;KAExC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO;;;KAG5B,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;;;;;KAK9B,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;OACpE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,8BAA8B,EAAE,IAAI,CAAC,CAAC;OAC7D,OAAO;MACR;;;;;KAKD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;;;KAGvE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;;KAEtB,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,sBAAsB,EAAE,IAAI,CAAC,CAAC;;KAEtD,IAAI,IAAI,GAAG;OACT,cAAc,EAAE,GAAG;OACnB,aAAa,EAAE,WAAW,GAAG,IAAI,CAAC,OAAO;OACzC,UAAU,EAAE,IAAI,CAAC,UAAU;MAC5B,CAAC;;KAEF,IAAI,IAAI,CAAC,aAAa,EAAE;OACtB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;MACzC;;KAED,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;;;KAG3D;OACE,IAAI,CAAC,cAAc,CAAC,eAAe;OACnC,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,MAAM;OAC1C;OACA,IAAI,CAAC,iBAAiB,CAAC;SACrB,QAAQ,EAAE,QAAQ;SAClB,OAAO,EAAE,SAAS;aACd,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,GAAG,IAAI,GAAG,EAAE,IAAI,SAAS,CAAC,KAAK;aAC/D,IAAI,CAAC,OAAO;SAChB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACvB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,OAAO;QAC7B,CAAC,CAAC;MACJ;;KAED,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC;KAC/B,CAAC,aAAa,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,EAAE;OACxD,GAAG,EAAE,GAAG;OACR,IAAI,EAAE,IAAI;OACV,IAAI,EAAE,IAAI;OACV,OAAO,EAAE,aAAa;OACtB,SAAS,EAAE,SAAS,OAAO,GAAG;SAC5B,IAAI,CAAC,aAAa,EAAE,CAAC;;SAErB,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;WAC5B,IAAI,EAAE,IAAI;WACV,GAAG,EAAE,GAAG;UACT,CAAC,CAAC;SACH,QAAQ,IAAI,QAAQ,EAAE,CAAC;QACxB;OACD,OAAO,EAAE,SAAS,OAAO,CAAC,KAAK,EAAE;SAC/B,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,kCAAkC,EAAE,KAAK,CAAC,CAAC;;SAEnE,IAAI,KAAK,CAAC,OAAO,EAAE;WACjB,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;UACtC;;SAED,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;WAC5B,IAAI,EAAE,IAAI;WACV,GAAG,EAAE,GAAG;UACT,CAAC,CAAC;SACH,KAAK,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;SACjF,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC7B;MACF,CAAC,CAAC;IACJ;;GAED,YAAY,EAAE,SAAS,IAAI,EAAE;;KAE3B,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAGD,WAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;KAEhD,IAAI,gBAAgB,GAAG,IAAI,CAAC;KAC5B,IAAI,wBAAwB,GAAG,EAAE,CAAC;;KAElC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;OACxB,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;MAC7D;;KAED,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;OAChC,wBAAwB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;MAC7E;;KAED,IAAIO,eAAa,EAAE,EAAE;OACnB,wBAAwB,CAAC,IAAI,GAAG1B,WAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;OAErD,IAAI,mBAAmB,GAAGc,aAAW,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;OAC/D,IAAI,YAAY,GAAGA,aAAW,CAAC,mBAAmB,EAAE,wBAAwB,CAAC,CAAC;;OAE9E,IAAI,gBAAgB,EAAE;SACpB,YAAY,CAAC,OAAO,GAAG,gBAAgB,CAAC;QACzC;;OAED,OAAOb,SAAO;UACX,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC;UACxB,IAAI,CAAC,SAAS,QAAQ,EAAE;WACvB,IAAI,QAAQ,CAAC,EAAE,EAAE;aACf,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,MAAM;aACL,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,qBAAqB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;;;aAG/D,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC;aACzB,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACrC;UACF,CAAC;UACD,OAAO,CAAC,CAAC,WAAW;WACnB,IAAI,CAAC,OAAO;aACV,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;UACrE,CAAC,CAAC;MACN;;KAED,IAAI,OAAO,GAAGA,SAAO,CAAC,cAAc,IAAI,IAAIA,SAAO,CAAC,cAAc,EAAE,CAAC;KACrE,IAAI,CAAC,OAAO,EAAE,OAAO;;;KAGrB,IAAI,OAAO,GAAG,iBAAiB,IAAI,OAAO,IAAI,OAAO,cAAc,KAAK,WAAW,CAAC;;KAEpF,IAAI,CAAC,OAAO,EAAE,OAAO;;KAErB,IAAI,iBAAiB,IAAI,OAAO,EAAE;OAChC,OAAO,CAAC,kBAAkB,GAAG,WAAW;SACtC,IAAI,OAAO,CAAC,UAAU,KAAK,CAAC,EAAE;WAC5B,OAAO;UACR,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,EAAE;WACjC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;UACpC,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;WACvB,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;WAC5D,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;WACtB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;UACnB;QACF,CAAC;MACH,MAAM;OACL,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;;;OAG/B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;;;OAGlC,IAAI,IAAI,CAAC,SAAS,EAAE;SAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC;OACD,IAAI,IAAI,CAAC,OAAO,EAAE;SAChB,OAAO,CAAC,OAAO,GAAG,WAAW;WAC3B,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;WACzD,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;WACtB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;UACnB,CAAC;QACH;MACF;;KAED,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;;KAE1B,IAAI,gBAAgB,EAAE;OACpBY,MAAI,CAAC,gBAAgB,EAAE,SAAS,GAAG,EAAE,KAAK,EAAE;SAC1C,OAAO,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACtC,CAAC,CAAC;MACJ;;KAED,OAAO,CAAC,IAAI,CAACb,WAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC;;GAED,aAAa,EAAE,SAAS,IAAI,EAAE;KAC5B,IAAI,SAAS,GAAG,EAAE,CAAC;;KAEnB,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE;OACpB,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;SAC5B,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;SACtB,SAAS,CAAC,GAAG,CAAC,GAAG,OAAO,KAAK,KAAK,UAAU,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC;QAChE;MACF;;KAED,OAAO,SAAS,CAAC;IAClB;;GAED,SAAS,EAAE,SAAS,KAAK,EAAE;;KAEzB;OACE,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;QAClC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;OACzC;;OAEA,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI;SAC3B,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;SACnC,IAAI,CAAC,gBAAgB;SACrB,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAC5B,CAAC;MACH;IACF;;GAED,aAAa,EAAE,SAAS,GAAG,EAAE,OAAO,EAAE;KACpC,IAAIQ,aAAW,CAAC,OAAO,CAAC,EAAE;OACxB,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;MACjC,MAAM;OACL,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAGM,aAAW,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;MACjF;IACF;EACF,CAAC;;;CAGF,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC;CACzD,KAAK,CAAC,SAAS,CAAC,iBAAiB,GAAG,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC;;CAE/D,SAAc,GAAG,KAAK,CAAC;;CCxuEvB;;;;;;;;;CASA,IAAIb,SAAO;GACT,OAAO,MAAM,KAAK,WAAW;OACzB,MAAM;OACN,OAAOF,cAAM,KAAK,WAAW,GAAGA,cAAM,GAAG,OAAO,IAAI,KAAK,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;CACvF,IAAI,MAAM,GAAGE,SAAO,CAAC,KAAK,CAAC;;CAE3B,IAAIkC,OAAK,GAAG,IAAIC,KAAgB,EAAE,CAAC;;;;;;;;AAQnCD,QAAK,CAAC,UAAU,GAAG,WAAW;GAC5BlC,SAAO,CAAC,KAAK,GAAG,MAAM,CAAC;GACvB,OAAOkC,OAAK,CAAC;EACd,CAAC;;AAEFA,QAAK,CAAC,SAAS,EAAE,CAAC;;CAElB,aAAc,GAAGA,OAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCvB,UAAqB,GAAGC,KAAgB,CAAC;;;CClEzC;AACA;CAOA,CAAC,YAAM;CACH,QAAMC,SAASC,OAAOC,QAAP,CAAgBC,IAAhB,KAAyB,SAAxC;;CAEA;CACA;CACA,QAAIH,MAAJ,EAAY;CACRF,kBAAMM,MAAN,CACI,2DADJ,EAEEC,OAFF;CAGH;;CAEDC,aAASC,gBAAT,CAA0B,kBAA1B,EAA8C,YAAM;CAChDT,kBAAMU,OAAN,CAAc,YAAM;CAChB,gBAAMC,WAAW,SAAjB;CACA,gBAAMC,YAAYJ,SAASK,cAAT,CAAwB,WAAxB,CAAlB;;CAEA,gBAAIV,OAAOW,GAAX,EAAgB;CACZX,uBAAOW,GAAP,CAAWC,KAAX,CAAiB;CACbC,2BAAO;CACHC,mCAAW;CADR;CADM,iBAAjB;CAKH;;CAED;CACA,gBAAMC,eAAe,WAArB;;CAEA;CACAV,qBAASC,gBAAT,CAA0B,UAA1B,EAAsC,iBAAS;CAC3C,oBAAIG,UAAUO,QAAV,CAAmBC,MAAMC,MAAzB,CAAJ,EAAsC;CAClC;CACH;CACDD,sBAAMC,MAAN,CAAaC,SAAb,CAAuBC,MAAvB,CAA8BL,YAA9B;CACH,aALD;;CAOA;CACAV,qBAASC,gBAAT,CAA0B,SAA1B,EAAqC,iBAAS;CAC1C,oBAAIW,MAAMI,OAAN,KAAkB,CAAtB,EAAyB;CACrB;CACH;;CAED;CACA;CACAC,2BAAW,YAAM;CACb,wBAAMC,UAAUlB,SAASmB,aAAzB;;CAEA,wBAAI,CAACD,OAAD,IAAYd,UAAUO,QAAV,CAAmBO,OAAnB,CAAhB,EAA6C;CACzC;CACH;;CAEDA,4BAAQJ,SAAR,CAAkBM,GAAlB,CAAsBV,YAAtB;CACH,iBARD,EAQG,EARH;CASH,aAhBD;;CAkBA;CACA,gBAAMW,SAAS,IAAIC,IAAJ,CAASnB,QAAT,EAAmB;CAC9BoB,uBAAO,IADuB;CAE9BC,uBAAO,uBAFuB;CAG9BC,yBAAS,kBAHqB;CAI9BC,0BAAU;CACNtE,4BAAQ;CADF,iBAJoB;CAO9BuE,0BAAU;CACNC,8BAAU;CADJ,iBAPoB;CAU9BC,6BAAa,KAViB;CAW9B;;;;;;;;;;;;;;;;;CAiBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCAC,0BAAU;CACNC,4BAAQ;CADF,iBA7DoB;CAgE9BC,sBAAM;CACFC,4BAAQ;CADN,iBAhEwB;CAmE9BC,qBAAK;CACDC,6BAAS,IADR;CAEDC,iCAAa;CAFZ;CAnEyB,aAAnB,CAAf;;CAyEA;CACAzC,mBAAO0B,MAAP,GAAgBA,MAAhB;;CAEA;CACA,gBAAMgB,UAAUrC,SAASsC,gBAAT,CAA0B,eAA1B,CAAhB;CACA,gBAAMC,QAAQ;CACVC,uBAAO,OADG;CAEVC,uBAAO,OAFG;CAGVC,yBAAS,SAHC;CAIVC,uBAAO;CAJG,aAAd;CAMA,gBAAIC,cAAcjD,OAAOC,QAAP,CAAgBiD,IAAhB,CAAqBC,OAArB,CAA6B,GAA7B,EAAkC,EAAlC,CAAlB;CACA,gBAAMC,iBAAiBpD,OAAOqD,OAAP,IAAkBrD,OAAOqD,OAAP,CAAeC,SAAxD;;CAEA;CACA,qBAASC,WAAT,CAAqBC,OAArB,EAA8BC,SAA9B,EAAyCC,KAAzC,EAAgD;CAC5C,oBAAIF,OAAJ,EAAa;CACTA,4BAAQrC,SAAR,CAAkBuC,QAAQ,KAAR,GAAgB,QAAlC,EAA4CD,SAA5C;CACH;CACJ;;CAED;CACA,qBAASE,SAAT,CAAmBC,IAAnB,EAAyBC,IAAzB,EAA+B;CAC3B;CACA,oBACI,EAAED,QAAQhB,KAAV,KACC,CAACiB,IAAD,IAASD,SAASX,WADnB,IAEC,CAACA,YAAYa,MAAb,IAAuBF,SAAShB,MAAMC,KAH3C,EAIE;CACE;CACH;;CAED,wBAAQe,IAAR;CACI,yBAAKhB,MAAMC,KAAX;CACInB,+BAAOqC,MAAP,GAAgB;CACZH,kCAAM,OADM;CAEZ/B,mCAAO,uBAFK;CAGZmC,qCAAS,CACL;CACIC,qCACI,wEAFR;CAGIL,sCAAM,WAHV;CAIIM,sCAAM;CAJV,6BADK,EAOL;CACID,qCACI,wEAFR;CAGIL,sCAAM,WAHV;CAIIM,sCAAM;CAJV,6BAPK,EAaL;CACID,qCACI,yEAFR;CAGIL,sCAAM,WAHV;CAIIM,sCAAM;CAJV,6BAbK,EAmBL;CACID,qCACI,yEAFR;CAGIL,sCAAM,WAHV;CAIIM,sCAAM;CAJV,6BAnBK,CAHG;CA6BZC,oCACI,sEA9BQ;CA+BZC,oCAAQ,CACJ;CACIC,sCAAM,UADV;CAEIC,uCAAO,SAFX;CAGIC,yCAAS,IAHb;CAIIN,qCACI,yEALR;CAMIO,yCAAS;CANb,6BADI,EASJ;CACIH,sCAAM,UADV;CAEIC,uCAAO,QAFX;CAGIC,yCAAS,IAHb;CAIIN,qCACI;CALR,6BATI;CA/BI,yBAAhB;;CAkDA;;CAEJ,yBAAKrB,MAAME,KAAX;CACIpB,+BAAOqC,MAAP,GAAgB;CACZH,kCAAM,OADM;CAEZ/B,mCACI,6DAHQ;CAIZmC,qCAAS,CACL;CACIC,qCACI,6EAFR;CAGIL,sCAAM;CAHV,6BADK,EAML;CACIK,qCACI,6EAFR;CAGIL,sCAAM;CAHV,6BANK;CAJG,yBAAhB;;CAkBA;;CAEJ,yBAAKhB,MAAMG,OAAX;CACIrB,+BAAOqC,MAAP,GAAgB;CACZH,kCAAM,OADM;CAEZI,qCAAS,CACL;CACIC,qCACI,yCAFR;CAGIQ,0CAAU;CAHd,6BADK;CAFG,yBAAhB;;CAWA;;CAEJ,yBAAK7B,MAAMI,KAAX;CACItB,+BAAOqC,MAAP,GAAgB;CACZH,kCAAM,OADM;CAEZI,qCAAS,CACL;CACIC,qCAAK,4BADT;CAEIQ,0CAAU;CAFd,6BADK;CAFG,yBAAhB;;CAUA;;CAEJ;CACI;CAvGR;;CA0GA;CACAxB,8BAAcW,IAAd;;CAEA;CACAc,sBAAMC,IAAN,CAAWjC,OAAX,EAAoBkC,OAApB,CAA4B;CAAA,2BACxBrB,YAAYsB,OAAOC,aAAnB,EAAkC,QAAlC,EAA4C,KAA5C,CADwB;CAAA,iBAA5B;;CAIA;CACAvB,4BACIlD,SAAS0E,aAAT,oBAAwCnB,IAAxC,QADJ,EAEI,QAFJ,EAGI,IAHJ;;CAMA;CACAc,sBAAMC,IAAN,CAAWtE,SAASsC,gBAAT,CAA0B,aAA1B,CAAX,EAAqDiC,OAArD,CACI,gBAAQ;CACJI,yBAAKC,YAAL,CAAkB,QAAlB,EAA4B,EAA5B;CACH,iBAHL;CAKA5E,yBACK0E,aADL,mBACmCnB,IADnC,EAEKsB,eAFL,CAEqB,QAFrB;CAGH;;CAED;CACAR,kBAAMC,IAAN,CAAWjC,OAAX,EAAoBkC,OAApB,CAA4B,kBAAU;CAClCC,uBAAOvE,gBAAP,CAAwB,OAAxB,EAAiC,YAAM;CACnC,wBAAMsD,OAAOiB,OAAOM,YAAP,CAAoB,aAApB,CAAb;;CAEAxB,8BAAUC,IAAV;;CAEA,wBAAIR,cAAJ,EAAoB;CAChBpD,+BAAOqD,OAAP,CAAeC,SAAf,CAAyB,EAAEM,UAAF,EAAzB,EAAmC,EAAnC,QAA2CA,IAA3C;CACH;CACJ,iBARD;CASH,aAVD;;CAYA;CACA5D,mBAAOM,gBAAP,CAAwB,UAAxB,EAAoC,iBAAS;CACzC,oBAAIW,MAAMyC,KAAN,IAAe,UAAUzC,MAAMyC,KAAnC,EAA0C;CACtCC,8BAAU1C,MAAMyC,KAAN,CAAYE,IAAtB;CACH;CACJ,aAJD;;CAMA;CACA,gBAAIR,cAAJ,EAAoB;CAChB,oBAAMP,QAAQ,CAACI,YAAYa,MAA3B;;CAEA;CACA,oBAAIjB,KAAJ,EAAW;CACPI,kCAAcL,MAAMC,KAApB;CACH;;CAED;CACA,oBAAII,eAAeL,KAAnB,EAA0B;CACtB5C,2BAAOqD,OAAP,CAAe+B,YAAf,CACI;CACIxB,8BAAMX;CADV,qBADJ,EAII,EAJJ,EAKIJ,QAAQ,EAAR,SAAiBI,WALrB;CAOH;;CAED;CACA,oBAAIA,gBAAgBL,MAAMC,KAA1B,EAAiC;CAC7Bc,8BAAUV,WAAV,EAAuB,IAAvB;CACH;CACJ;CACJ,SArUD;CAsUH,KAvUD;;CAyUA;CACA;CACA;CACA,QAAIlD,MAAJ,EAAY;CACR,SAAC,UAASsF,CAAT,EAAYC,CAAZ,EAAeC,CAAf,EAAkBC,CAAlB,EAAqBC,CAArB,EAAwBC,CAAxB,EAA2BC,CAA3B,EAA8B;CAC3BN,cAAEO,qBAAF,GAA0BH,CAA1B;CACAJ,cAAEI,CAAF,IACIJ,EAAEI,CAAF,KACA,YAAW;CACP,iBAACJ,EAAEI,CAAF,EAAKI,CAAL,GAASR,EAAEI,CAAF,EAAKI,CAAL,IAAU,EAApB,EAAwBC,IAAxB,CAA6BC,SAA7B;CACH,aAJL;CAKAV,cAAEI,CAAF,EAAKO,CAAL,GAAS,IAAI,IAAIC,IAAJ,EAAb;CACAP,gBAAIJ,EAAEY,aAAF,CAAgBX,CAAhB,CAAJ;CACAI,gBAAIL,EAAEa,oBAAF,CAAuBZ,CAAvB,EAA0B,CAA1B,CAAJ;CACAG,cAAEU,KAAF,GAAU,CAAV;CACAV,cAAEzB,GAAF,GAAQuB,CAAR;CACAG,cAAEU,UAAF,CAAaC,YAAb,CAA0BZ,CAA1B,EAA6BC,CAA7B;CACH,SAbD,EAcI3F,MAdJ,EAeIK,QAfJ,EAgBI,QAhBJ,EAiBI,+CAjBJ,EAkBI,IAlBJ;CAoBAL,eAAOuG,EAAP,CAAU,QAAV,EAAoB,gBAApB,EAAsC,MAAtC;CACAvG,eAAOuG,EAAP,CAAU,MAAV,EAAkB,UAAlB;CACH;CACD;CACH,CAhXD","file":"demo.js","sourcesContent":["/*\n json-stringify-safe\n Like JSON.stringify, but doesn't throw on circular references.\n\n Originally forked from https://github.com/isaacs/json-stringify-safe\n version 5.0.1 on 3/8/2017 and modified to handle Errors serialization\n and IE8 compatibility. Tests for this are in test/vendor.\n\n ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE\n*/\n\nexports = module.exports = stringify;\nexports.getSerialize = serializer;\n\nfunction indexOf(haystack, needle) {\n for (var i = 0; i < haystack.length; ++i) {\n if (haystack[i] === needle) return i;\n }\n return -1;\n}\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);\n}\n\n// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106\nfunction stringifyError(value) {\n var err = {\n // These properties are implemented as magical getters and don't show up in for in\n stack: value.stack,\n message: value.message,\n name: value.name\n };\n\n for (var i in value) {\n if (Object.prototype.hasOwnProperty.call(value, i)) {\n err[i] = value[i];\n }\n }\n\n return err;\n}\n\nfunction serializer(replacer, cycleReplacer) {\n var stack = [];\n var keys = [];\n\n if (cycleReplacer == null) {\n cycleReplacer = function(key, value) {\n if (stack[0] === value) {\n return '[Circular ~]';\n }\n return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';\n };\n }\n\n return function(key, value) {\n if (stack.length > 0) {\n var thisPos = indexOf(stack, this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n\n if (~indexOf(stack, value)) {\n value = cycleReplacer.call(this, key, value);\n }\n } else {\n stack.push(value);\n }\n\n return replacer == null\n ? value instanceof Error ? stringifyError(value) : value\n : replacer.call(this, key, value);\n };\n}\n","var stringify = require('../vendor/json-stringify-safe/stringify');\n\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : typeof self !== 'undefined'\n ? self\n : {};\n\nfunction isObject(what) {\n return typeof what === 'object' && what !== null;\n}\n\n// Yanked from https://git.io/vS8DV re-used under CC0\n// with some tiny modifications\nfunction isError(value) {\n switch (Object.prototype.toString.call(value)) {\n case '[object Error]':\n return true;\n case '[object Exception]':\n return true;\n case '[object DOMException]':\n return true;\n default:\n return value instanceof Error;\n }\n}\n\nfunction isErrorEvent(value) {\n return Object.prototype.toString.call(value) === '[object ErrorEvent]';\n}\n\nfunction isDOMError(value) {\n return Object.prototype.toString.call(value) === '[object DOMError]';\n}\n\nfunction isDOMException(value) {\n return Object.prototype.toString.call(value) === '[object DOMException]';\n}\n\nfunction isUndefined(what) {\n return what === void 0;\n}\n\nfunction isFunction(what) {\n return typeof what === 'function';\n}\n\nfunction isPlainObject(what) {\n return Object.prototype.toString.call(what) === '[object Object]';\n}\n\nfunction isString(what) {\n return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isArray(what) {\n return Object.prototype.toString.call(what) === '[object Array]';\n}\n\nfunction isEmptyObject(what) {\n if (!isPlainObject(what)) return false;\n\n for (var _ in what) {\n if (what.hasOwnProperty(_)) {\n return false;\n }\n }\n return true;\n}\n\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsDOMError() {\n try {\n new DOMError(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsDOMException() {\n try {\n new DOMException(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsFetch() {\n if (!('fetch' in _window)) return false;\n\n try {\n new Headers(); // eslint-disable-line no-new\n new Request(''); // eslint-disable-line no-new\n new Response(); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n// https://caniuse.com/#feat=referrer-policy\n// It doesn't. And it throw exception instead of ignoring this parameter...\n// REF: https://github.com/getsentry/raven-js/issues/1233\nfunction supportsReferrerPolicy() {\n if (!supportsFetch()) return false;\n\n try {\n // eslint-disable-next-line no-new\n new Request('pickleRick', {\n referrerPolicy: 'origin'\n });\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsPromiseRejectionEvent() {\n return typeof PromiseRejectionEvent === 'function';\n}\n\nfunction wrappedCallback(callback) {\n function dataCallback(data, original) {\n var normalizedData = callback(data) || data;\n if (original) {\n return original(normalizedData) || normalizedData;\n }\n return normalizedData;\n }\n\n return dataCallback;\n}\n\nfunction each(obj, callback) {\n var i, j;\n\n if (isUndefined(obj.length)) {\n for (i in obj) {\n if (hasKey(obj, i)) {\n callback.call(null, i, obj[i]);\n }\n }\n } else {\n j = obj.length;\n if (j) {\n for (i = 0; i < j; i++) {\n callback.call(null, i, obj[i]);\n }\n }\n }\n}\n\nfunction objectMerge(obj1, obj2) {\n if (!obj2) {\n return obj1;\n }\n each(obj2, function(key, value) {\n obj1[key] = value;\n });\n return obj1;\n}\n\n/**\n * This function is only used for react-native.\n * react-native freezes object that have already been sent over the\n * js bridge. We need this function in order to check if the object is frozen.\n * So it's ok that objectFrozen returns false if Object.isFrozen is not\n * supported because it's not relevant for other \"platforms\". See related issue:\n * https://github.com/getsentry/react-native-sentry/issues/57\n */\nfunction objectFrozen(obj) {\n if (!Object.isFrozen) {\n return false;\n }\n return Object.isFrozen(obj);\n}\n\nfunction truncate(str, max) {\n if (typeof max !== 'number') {\n throw new Error('2nd argument to `truncate` function should be a number');\n }\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : str.substr(0, max) + '\\u2026';\n}\n\n/**\n * hasKey, a better form of hasOwnProperty\n * Example: hasKey(MainHostObject, property) === true/false\n *\n * @param {Object} host object to check property\n * @param {string} key to check\n */\nfunction hasKey(object, key) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction joinRegExp(patterns) {\n // Combine an array of regular expressions and strings into one large regexp\n // Be mad.\n var sources = [],\n i = 0,\n len = patterns.length,\n pattern;\n\n for (; i < len; i++) {\n pattern = patterns[i];\n if (isString(pattern)) {\n // If it's a string, we need to escape it\n // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n sources.push(pattern.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1'));\n } else if (pattern && pattern.source) {\n // If it's a regexp already, we want to extract the source\n sources.push(pattern.source);\n }\n // Intentionally skip other cases\n }\n return new RegExp(sources.join('|'), 'i');\n}\n\nfunction urlencode(o) {\n var pairs = [];\n each(o, function(key, value) {\n pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n });\n return pairs.join('&');\n}\n\n// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n// intentionally using regex and not <a/> href parsing trick because React Native and other\n// environments where DOM might not be available\nfunction parseUrl(url) {\n if (typeof url !== 'string') return {};\n var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n var query = match[6] || '';\n var fragment = match[8] || '';\n return {\n protocol: match[2],\n host: match[4],\n path: match[5],\n relative: match[5] + query + fragment // everything minus origin\n };\n}\nfunction uuid4() {\n var crypto = _window.crypto || _window.msCrypto;\n\n if (!isUndefined(crypto) && crypto.getRandomValues) {\n // Use window.crypto API if available\n // eslint-disable-next-line no-undef\n var arr = new Uint16Array(8);\n crypto.getRandomValues(arr);\n\n // set 4 in byte 7\n arr[3] = (arr[3] & 0xfff) | 0x4000;\n // set 2 most significant bits of byte 9 to '10'\n arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n var pad = function(num) {\n var v = num.toString(16);\n while (v.length < 4) {\n v = '0' + v;\n }\n return v;\n };\n\n return (\n pad(arr[0]) +\n pad(arr[1]) +\n pad(arr[2]) +\n pad(arr[3]) +\n pad(arr[4]) +\n pad(arr[5]) +\n pad(arr[6]) +\n pad(arr[7])\n );\n } else {\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @param elem\n * @returns {string}\n */\nfunction htmlTreeAsString(elem) {\n /* eslint no-extra-parens:0*/\n var MAX_TRAVERSE_HEIGHT = 5,\n MAX_OUTPUT_LEN = 80,\n out = [],\n height = 0,\n len = 0,\n separator = ' > ',\n sepLength = separator.length,\n nextStr;\n\n while (elem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = htmlElementAsString(elem);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n if (\n nextStr === 'html' ||\n (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)\n ) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n elem = elem.parentNode;\n }\n\n return out.reverse().join(separator);\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @param HTMLElement\n * @returns {string}\n */\nfunction htmlElementAsString(elem) {\n var out = [],\n className,\n classes,\n key,\n attr,\n i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n if (elem.id) {\n out.push('#' + elem.id);\n }\n\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push('.' + classes[i]);\n }\n }\n var attrWhitelist = ['type', 'name', 'title', 'alt'];\n for (i = 0; i < attrWhitelist.length; i++) {\n key = attrWhitelist[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push('[' + key + '=\"' + attr + '\"]');\n }\n }\n return out.join('');\n}\n\n/**\n * Returns true if either a OR b is truthy, but not both\n */\nfunction isOnlyOneTruthy(a, b) {\n return !!(!!a ^ !!b);\n}\n\n/**\n * Returns true if both parameters are undefined\n */\nfunction isBothUndefined(a, b) {\n return isUndefined(a) && isUndefined(b);\n}\n\n/**\n * Returns true if the two input exception interfaces have the same content\n */\nfunction isSameException(ex1, ex2) {\n if (isOnlyOneTruthy(ex1, ex2)) return false;\n\n ex1 = ex1.values[0];\n ex2 = ex2.values[0];\n\n if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;\n\n // in case both stacktraces are undefined, we can't decide so default to false\n if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;\n\n return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);\n}\n\n/**\n * Returns true if the two input stack trace interfaces have the same content\n */\nfunction isSameStacktrace(stack1, stack2) {\n if (isOnlyOneTruthy(stack1, stack2)) return false;\n\n var frames1 = stack1.frames;\n var frames2 = stack2.frames;\n\n // Exit early if stacktrace is malformed\n if (frames1 === undefined || frames2 === undefined) return false;\n\n // Exit early if frame count differs\n if (frames1.length !== frames2.length) return false;\n\n // Iterate through every frame; bail out if anything differs\n var a, b;\n for (var i = 0; i < frames1.length; i++) {\n a = frames1[i];\n b = frames2[i];\n if (\n a.filename !== b.filename ||\n a.lineno !== b.lineno ||\n a.colno !== b.colno ||\n a['function'] !== b['function']\n )\n return false;\n }\n return true;\n}\n\n/**\n * Polyfill a method\n * @param obj object e.g. `document`\n * @param name method name present on object e.g. `addEventListener`\n * @param replacement replacement function\n * @param track {optional} record instrumentation to an array\n */\nfunction fill(obj, name, replacement, track) {\n if (obj == null) return;\n var orig = obj[name];\n obj[name] = replacement(orig);\n obj[name].__raven__ = true;\n obj[name].__orig__ = orig;\n if (track) {\n track.push([obj, name, orig]);\n }\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns {string}\n */\nfunction safeJoin(input, delimiter) {\n if (!isArray(input)) return '';\n\n var output = [];\n\n for (var i = 0; i < input.length; i++) {\n try {\n output.push(String(input[i]));\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n// Default Node.js REPL depth\nvar MAX_SERIALIZE_EXCEPTION_DEPTH = 3;\n// 50kB, as 100kB is max payload size, so half sounds reasonable\nvar MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;\nvar MAX_SERIALIZE_KEYS_LENGTH = 40;\n\nfunction utf8Length(value) {\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\n\nfunction serializeValue(value) {\n if (typeof value === 'string') {\n var maxLength = 40;\n return truncate(value, maxLength);\n } else if (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'undefined'\n ) {\n return value;\n }\n\n var type = Object.prototype.toString.call(value);\n\n // Node.js REPL notation\n if (type === '[object Object]') return '[Object]';\n if (type === '[object Array]') return '[Array]';\n if (type === '[object Function]')\n return value.name ? '[Function: ' + value.name + ']' : '[Function]';\n\n return value;\n}\n\nfunction serializeObject(value, depth) {\n if (depth === 0) return serializeValue(value);\n\n if (isPlainObject(value)) {\n return Object.keys(value).reduce(function(acc, key) {\n acc[key] = serializeObject(value[key], depth - 1);\n return acc;\n }, {});\n } else if (Array.isArray(value)) {\n return value.map(function(val) {\n return serializeObject(val, depth - 1);\n });\n }\n\n return serializeValue(value);\n}\n\nfunction serializeException(ex, depth, maxSize) {\n if (!isPlainObject(ex)) return ex;\n\n depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;\n maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;\n\n var serialized = serializeObject(ex, depth);\n\n if (jsonSize(stringify(serialized)) > maxSize) {\n return serializeException(ex, depth - 1);\n }\n\n return serialized;\n}\n\nfunction serializeKeysForMessage(keys, maxLength) {\n if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();\n if (!Array.isArray(keys)) return '';\n\n keys = keys.filter(function(key) {\n return typeof key === 'string';\n });\n if (keys.length === 0) return '[object has no keys]';\n\n maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;\n if (keys[0].length >= maxLength) return keys[0];\n\n for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {\n var serialized = keys.slice(0, usedKeys).join(', ');\n if (serialized.length > maxLength) continue;\n if (usedKeys === keys.length) return serialized;\n return serialized + '\\u2026';\n }\n\n return '';\n}\n\nfunction sanitize(input, sanitizeKeys) {\n if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))\n return input;\n\n var sanitizeRegExp = joinRegExp(sanitizeKeys);\n var sanitizeMask = '********';\n var safeInput;\n\n try {\n safeInput = JSON.parse(stringify(input));\n } catch (o_O) {\n return input;\n }\n\n function sanitizeWorker(workerInput) {\n if (isArray(workerInput)) {\n return workerInput.map(function(val) {\n return sanitizeWorker(val);\n });\n }\n\n if (isPlainObject(workerInput)) {\n return Object.keys(workerInput).reduce(function(acc, k) {\n if (sanitizeRegExp.test(k)) {\n acc[k] = sanitizeMask;\n } else {\n acc[k] = sanitizeWorker(workerInput[k]);\n }\n return acc;\n }, {});\n }\n\n return workerInput;\n }\n\n return sanitizeWorker(safeInput);\n}\n\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isDOMError: isDOMError,\n isDOMException: isDOMException,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isPlainObject: isPlainObject,\n isString: isString,\n isArray: isArray,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\n supportsDOMError: supportsDOMError,\n supportsDOMException: supportsDOMException,\n supportsFetch: supportsFetch,\n supportsReferrerPolicy: supportsReferrerPolicy,\n supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,\n wrappedCallback: wrappedCallback,\n each: each,\n objectMerge: objectMerge,\n truncate: truncate,\n objectFrozen: objectFrozen,\n hasKey: hasKey,\n joinRegExp: joinRegExp,\n urlencode: urlencode,\n uuid4: uuid4,\n htmlTreeAsString: htmlTreeAsString,\n htmlElementAsString: htmlElementAsString,\n isSameException: isSameException,\n isSameStacktrace: isSameStacktrace,\n parseUrl: parseUrl,\n fill: fill,\n safeJoin: safeJoin,\n serializeException: serializeException,\n serializeKeysForMessage: serializeKeysForMessage,\n sanitize: sanitize\n};\n","var utils = require('../../src/utils');\n\n/*\n TraceKit - Cross brower stack traces\n\n This was originally forked from github.com/occ/TraceKit, but has since been\n largely re-written and is now maintained as part of raven-js. Tests for\n this are in test/vendor.\n\n MIT license\n*/\n\nvar TraceKit = {\n collectWindowErrors: true,\n debug: false\n};\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n// global reference to slice\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?';\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;\n\nfunction getLocationHref() {\n if (typeof document === 'undefined' || document.location == null) return '';\n return document.location.href;\n}\n\nfunction getLocationOrigin() {\n if (typeof document === 'undefined' || document.location == null) return '';\n\n // Oh dear IE10...\n if (!document.location.origin) {\n return (\n document.location.protocol +\n '//' +\n document.location.hostname +\n (document.location.port ? ':' + document.location.port : '')\n );\n }\n\n return document.location.origin;\n}\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n * TraceKit.report.subscribe(function(stackInfo) { ... })\n * TraceKit.report.unsubscribe(function(stackInfo) { ... })\n * TraceKit.report(exception)\n * try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n * - Firefox: full stack trace with line numbers, plus column number\n * on top frame; column number is not guaranteed\n * - Opera: full stack trace with line and column numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n * - IE: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n * - IE5.5+ (only 8.0 tested)\n * - Firefox 0.9+ (only 3.5+ tested)\n * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n * Exceptions Have Stacktrace to be enabled in opera:config)\n * - Safari 3+ (only 4+ tested)\n * - Chrome 1+ (only 5+ tested)\n * - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = (function reportModuleWrapper() {\n var handlers = [],\n lastArgs = null,\n lastException = null,\n lastExceptionStack = null;\n\n /**\n * Add a crash handler.\n * @param {Function} handler\n */\n function subscribe(handler) {\n installGlobalHandler();\n handlers.push(handler);\n }\n\n /**\n * Remove a crash handler.\n * @param {Function} handler\n */\n function unsubscribe(handler) {\n for (var i = handlers.length - 1; i >= 0; --i) {\n if (handlers[i] === handler) {\n handlers.splice(i, 1);\n }\n }\n }\n\n /**\n * Remove all crash handlers.\n */\n function unsubscribeAll() {\n uninstallGlobalHandler();\n handlers = [];\n }\n\n /**\n * Dispatch stack information to all handlers.\n * @param {Object.<string, *>} stack\n */\n function notifyHandlers(stack, isWindowError) {\n var exception = null;\n if (isWindowError && !TraceKit.collectWindowErrors) {\n return;\n }\n for (var i in handlers) {\n if (handlers.hasOwnProperty(i)) {\n try {\n handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n } catch (inner) {\n exception = inner;\n }\n }\n }\n\n if (exception) {\n throw exception;\n }\n }\n\n var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n /**\n * Ensures all global unhandled exceptions are recorded.\n * Supported by Gecko and IE.\n * @param {string} msg Error message.\n * @param {string} url URL of script that generated the exception.\n * @param {(number|string)} lineNo The line number at which the error\n * occurred.\n * @param {?(number|string)} colNo The column number at which the error\n * occurred.\n * @param {?Error} ex The actual Error object.\n */\n function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {\n var stack = null;\n // If 'ex' is ErrorEvent, get real Error from inside\n var exception = utils.isErrorEvent(ex) ? ex.error : ex;\n // If 'msg' is ErrorEvent, get real message from inside\n var message = utils.isErrorEvent(msg) ? msg.message : msg;\n\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n lastExceptionStack,\n url,\n lineNo,\n message\n );\n processLastException();\n } else if (exception && utils.isError(exception)) {\n // non-string `exception` arg; attempt to extract stack trace\n\n // New chrome and blink send along a real error object\n // Let's just report that like a normal error.\n // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n stack = TraceKit.computeStackTrace(exception);\n notifyHandlers(stack, true);\n } else {\n var location = {\n url: url,\n line: lineNo,\n column: colNo\n };\n\n var name = undefined;\n var groups;\n\n if ({}.toString.call(message) === '[object String]') {\n var groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n message = groups[2];\n }\n }\n\n location.func = UNKNOWN_FUNCTION;\n\n stack = {\n name: name,\n message: message,\n url: getLocationHref(),\n stack: [location]\n };\n notifyHandlers(stack, true);\n }\n\n if (_oldOnerrorHandler) {\n return _oldOnerrorHandler.apply(this, arguments);\n }\n\n return false;\n }\n\n function installGlobalHandler() {\n if (_onErrorHandlerInstalled) {\n return;\n }\n _oldOnerrorHandler = _window.onerror;\n _window.onerror = traceKitWindowOnError;\n _onErrorHandlerInstalled = true;\n }\n\n function uninstallGlobalHandler() {\n if (!_onErrorHandlerInstalled) {\n return;\n }\n _window.onerror = _oldOnerrorHandler;\n _onErrorHandlerInstalled = false;\n _oldOnerrorHandler = undefined;\n }\n\n function processLastException() {\n var _lastExceptionStack = lastExceptionStack,\n _lastArgs = lastArgs;\n lastArgs = null;\n lastExceptionStack = null;\n lastException = null;\n notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n }\n\n /**\n * Reports an unhandled Error to TraceKit.\n * @param {Error} ex\n * @param {?boolean} rethrow If false, do not re-throw the exception.\n * Only used for window.onerror to not cause an infinite loop of\n * rethrowing.\n */\n function report(ex, rethrow) {\n var args = _slice.call(arguments, 1);\n if (lastExceptionStack) {\n if (lastException === ex) {\n return; // already caught by an inner catch block, ignore\n } else {\n processLastException();\n }\n }\n\n var stack = TraceKit.computeStackTrace(ex);\n lastExceptionStack = stack;\n lastException = ex;\n lastArgs = args;\n\n // If the stack trace is incomplete, wait for 2 seconds for\n // slow slow IE to see if onerror occurs or not before reporting\n // this exception; otherwise, we will end up with an incomplete\n // stack trace\n setTimeout(function() {\n if (lastException === ex) {\n processLastException();\n }\n }, stack.incomplete ? 2000 : 0);\n\n if (rethrow !== false) {\n throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n }\n }\n\n report.subscribe = subscribe;\n report.unsubscribe = unsubscribe;\n report.uninstall = unsubscribeAll;\n return report;\n})();\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n * s.name - exception name\n * s.message - exception message\n * s.stack[i].url - JavaScript or HTML file URL\n * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)\n * s.stack[i].args - arguments passed to the function, if known\n * s.stack[i].line - line number, if known\n * s.stack[i].column - column number, if known\n *\n * Supports:\n * - Firefox: full stack trace with line numbers and unreliable column\n * number on top frame\n * - Opera 10: full stack trace with line and column numbers\n * - Opera 9-: full stack trace with line numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the topmost stacktrace element\n * only\n * - IE: no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n * * in Safari, some methods may be missing from the stack trace;\n * * in IE, the topmost function in the stack trace will always be the\n * caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n */\nTraceKit.computeStackTrace = (function computeStackTraceWrapper() {\n // Contents of Exception in various browsers.\n //\n // SAFARI:\n // ex.message = Can't find variable: qq\n // ex.line = 59\n // ex.sourceId = 580238192\n // ex.sourceURL = http://...\n // ex.expressionBeginOffset = 96\n // ex.expressionCaretOffset = 98\n // ex.expressionEndOffset = 98\n // ex.name = ReferenceError\n //\n // FIREFOX:\n // ex.message = qq is not defined\n // ex.fileName = http://...\n // ex.lineNumber = 59\n // ex.columnNumber = 69\n // ex.stack = ...stack trace... (see the example below)\n // ex.name = ReferenceError\n //\n // CHROME:\n // ex.message = qq is not defined\n // ex.name = ReferenceError\n // ex.type = not_defined\n // ex.arguments = ['aa']\n // ex.stack = ...stack trace...\n //\n // INTERNET EXPLORER:\n // ex.message = ...\n // ex.name = ReferenceError\n //\n // OPERA:\n // ex.message = ...message... (see the example below)\n // ex.name = ReferenceError\n // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)\n // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n /**\n * Computes stack trace information from the stack property.\n * Chrome and Gecko use this property.\n * @param {Error} ex\n * @return {?Object.<string, *>} Stack trace information.\n */\n function computeStackTraceFromStackProp(ex) {\n if (typeof ex.stack === 'undefined' || !ex.stack) return;\n\n var chrome = /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n var winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n // NOTE: blob urls are now supposed to always have an origin, therefore it's format\n // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\\/` as well\n var gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\\/.*?|\\[native code\\]|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\n // Used to additionally parse URL/line/column from eval frames\n var geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n var chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n var lines = ex.stack.split('\\n');\n var stack = [];\n var submatch;\n var parts;\n var element;\n var reference = /^(.*) is undefined$/.exec(ex.message);\n\n for (var i = 0, j = lines.length; i < j; ++i) {\n if ((parts = chrome.exec(lines[i]))) {\n var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1]; // url\n parts[3] = submatch[2]; // line\n parts[4] = submatch[3]; // column\n }\n element = {\n url: !isNative ? parts[2] : null,\n func: parts[1] || UNKNOWN_FUNCTION,\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = winjs.exec(lines[i]))) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = gecko.exec(lines[i]))) {\n var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n // throw out eval line/column and use top-most line number\n parts[3] = submatch[1];\n parts[4] = submatch[2];\n parts[5] = null; // no column when eval\n } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = ex.columnNumber + 1;\n }\n element = {\n url: parts[3],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n if (element.url && element.url.substr(0, 5) === 'blob:') {\n // Special case for handling JavaScript loaded into a blob.\n // We use a synchronous AJAX request here as a blob is already in\n // memory - it's not making a network request. This will generate a warning\n // in the browser console, but there has already been an error so that's not\n // that much of an issue.\n var xhr = new XMLHttpRequest();\n xhr.open('GET', element.url, false);\n xhr.send(null);\n\n // If we failed to download the source, skip this patch\n if (xhr.status === 200) {\n var source = xhr.responseText || '';\n\n // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.\n // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175\n source = source.slice(-300);\n\n // Now we dig out the source map URL\n var sourceMaps = source.match(/\\/\\/# sourceMappingURL=(.*)$/);\n\n // If we don't find a source map comment or we find more than one, continue on to the next element.\n if (sourceMaps) {\n var sourceMapAddress = sourceMaps[1];\n\n // Now we check to see if it's a relative URL.\n // If it is, convert it to an absolute one.\n if (sourceMapAddress.charAt(0) === '~') {\n sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);\n }\n\n // Now we strip the '.map' off of the end of the URL and update the\n // element so that Sentry can match the map to the blob.\n element.url = sourceMapAddress.slice(0, -4);\n }\n }\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n }\n\n /**\n * Adds information about the first frame to incomplete stack traces.\n * Safari and IE require this to get complete data on the first frame.\n * @param {Object.<string, *>} stackInfo Stack trace information from\n * one of the compute* methods.\n * @param {string} url The URL of the script that caused an error.\n * @param {(number|string)} lineNo The line number of the script that\n * caused an error.\n * @param {string=} message The error generated by the browser, which\n * hopefully contains the name of the object that caused the error.\n * @return {boolean} Whether or not the stack information was\n * augmented.\n */\n function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {\n var initial = {\n url: url,\n line: lineNo\n };\n\n if (initial.url && initial.line) {\n stackInfo.incomplete = false;\n\n if (!initial.func) {\n initial.func = UNKNOWN_FUNCTION;\n }\n\n if (stackInfo.stack.length > 0) {\n if (stackInfo.stack[0].url === initial.url) {\n if (stackInfo.stack[0].line === initial.line) {\n return false; // already in stack trace\n } else if (\n !stackInfo.stack[0].line &&\n stackInfo.stack[0].func === initial.func\n ) {\n stackInfo.stack[0].line = initial.line;\n return false;\n }\n }\n }\n\n stackInfo.stack.unshift(initial);\n stackInfo.partial = true;\n return true;\n } else {\n stackInfo.incomplete = true;\n }\n\n return false;\n }\n\n /**\n * Computes stack trace information by walking the arguments.caller\n * chain at the time the exception occurred. This will cause earlier\n * frames to be missed but is the only way to get any stack trace in\n * Safari and IE. The top frame is restored by\n * {@link augmentStackTraceWithInitialElement}.\n * @param {Error} ex\n * @return {?Object.<string, *>} Stack trace information.\n */\n function computeStackTraceByWalkingCallerChain(ex, depth) {\n var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,\n stack = [],\n funcs = {},\n recursion = false,\n parts,\n item,\n source;\n\n for (\n var curr = computeStackTraceByWalkingCallerChain.caller;\n curr && !recursion;\n curr = curr.caller\n ) {\n if (curr === computeStackTrace || curr === TraceKit.report) {\n // console.log('skipping internal function');\n continue;\n }\n\n item = {\n url: null,\n func: UNKNOWN_FUNCTION,\n line: null,\n column: null\n };\n\n if (curr.name) {\n item.func = curr.name;\n } else if ((parts = functionName.exec(curr.toString()))) {\n item.func = parts[1];\n }\n\n if (typeof item.func === 'undefined') {\n try {\n item.func = parts.input.substring(0, parts.input.indexOf('{'));\n } catch (e) {}\n }\n\n if (funcs['' + curr]) {\n recursion = true;\n } else {\n funcs['' + curr] = true;\n }\n\n stack.push(item);\n }\n\n if (depth) {\n // console.log('depth is ' + depth);\n // console.log('stack is ' + stack.length);\n stack.splice(0, depth);\n }\n\n var result = {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n augmentStackTraceWithInitialElement(\n result,\n ex.sourceURL || ex.fileName,\n ex.line || ex.lineNumber,\n ex.message || ex.description\n );\n return result;\n }\n\n /**\n * Computes a stack trace for an exception.\n * @param {Error} ex\n * @param {(string|number)=} depth\n */\n function computeStackTrace(ex, depth) {\n var stack = null;\n depth = depth == null ? 0 : +depth;\n\n try {\n stack = computeStackTraceFromStackProp(ex);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n\n try {\n stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref()\n };\n }\n\n computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n\n return computeStackTrace;\n})();\n\nmodule.exports = TraceKit;\n","/*\n * JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\n/*\n* Add integers, wrapping at 2^32. This uses 16-bit operations internally\n* to work around bugs in some JS interpreters.\n*/\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xffff);\n}\n\n/*\n* Bitwise rotate a 32-bit number to the left.\n*/\nfunction bitRotateLeft(num, cnt) {\n return (num << cnt) | (num >>> (32 - cnt));\n}\n\n/*\n* These functions implement the four basic operations the algorithm uses.\n*/\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn((b & c) | (~b & d), a, b, x, s, t);\n}\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\n/*\n* Calculate the MD5 of an array of little-endian words, and a bit length.\n*/\nfunction binlMD5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << (len % 32);\n x[(((len + 64) >>> 9) << 4) + 14] = len;\n\n var i;\n var olda;\n var oldb;\n var oldc;\n var oldd;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (i = 0; i < x.length; i += 16) {\n olda = a;\n oldb = b;\n oldc = c;\n oldd = d;\n\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n return [a, b, c, d];\n}\n\n/*\n* Convert an array of little-endian words to a string\n*/\nfunction binl2rstr(input) {\n var i;\n var output = '';\n var length32 = input.length * 32;\n for (i = 0; i < length32; i += 8) {\n output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);\n }\n return output;\n}\n\n/*\n* Convert a raw string to an array of little-endian words\n* Characters >255 have their high-byte silently ignored.\n*/\nfunction rstr2binl(input) {\n var i;\n var output = [];\n output[(input.length >> 2) - 1] = undefined;\n for (i = 0; i < output.length; i += 1) {\n output[i] = 0;\n }\n var length8 = input.length * 8;\n for (i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);\n }\n return output;\n}\n\n/*\n* Calculate the MD5 of a raw string\n*/\nfunction rstrMD5(s) {\n return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));\n}\n\n/*\n* Calculate the HMAC-MD5, of a key and some data (raw strings)\n*/\nfunction rstrHMACMD5(key, data) {\n var i;\n var bkey = rstr2binl(key);\n var ipad = [];\n var opad = [];\n var hash;\n ipad[15] = opad[15] = undefined;\n if (bkey.length > 16) {\n bkey = binlMD5(bkey, key.length * 8);\n }\n for (i = 0; i < 16; i += 1) {\n ipad[i] = bkey[i] ^ 0x36363636;\n opad[i] = bkey[i] ^ 0x5c5c5c5c;\n }\n hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);\n return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));\n}\n\n/*\n* Convert a raw string to a hex string\n*/\nfunction rstr2hex(input) {\n var hexTab = '0123456789abcdef';\n var output = '';\n var x;\n var i;\n for (i = 0; i < input.length; i += 1) {\n x = input.charCodeAt(i);\n output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);\n }\n return output;\n}\n\n/*\n* Encode a string as utf-8\n*/\nfunction str2rstrUTF8(input) {\n return unescape(encodeURIComponent(input));\n}\n\n/*\n* Take string arguments and return either raw or hex encoded strings\n*/\nfunction rawMD5(s) {\n return rstrMD5(str2rstrUTF8(s));\n}\nfunction hexMD5(s) {\n return rstr2hex(rawMD5(s));\n}\nfunction rawHMACMD5(k, d) {\n return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));\n}\nfunction hexHMACMD5(k, d) {\n return rstr2hex(rawHMACMD5(k, d));\n}\n\nfunction md5(string, key, raw) {\n if (!key) {\n if (!raw) {\n return hexMD5(string);\n }\n return rawMD5(string);\n }\n if (!raw) {\n return hexHMACMD5(key, string);\n }\n return rawHMACMD5(key, string);\n}\n\nmodule.exports = md5;\n","function RavenConfigError(message) {\n this.name = 'RavenConfigError';\n this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\n\nmodule.exports = RavenConfigError;\n","var utils = require('./utils');\n\nvar wrapMethod = function(console, level, callback) {\n var originalConsoleLevel = console[level];\n var originalConsole = console;\n\n if (!(level in console)) {\n return;\n }\n\n var sentryLevel = level === 'warn' ? 'warning' : level;\n\n console[level] = function() {\n var args = [].slice.call(arguments);\n\n var msg = utils.safeJoin(args, ' ');\n var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};\n\n if (level === 'assert') {\n if (args[0] === false) {\n // Default browsers message\n msg =\n 'Assertion failed: ' + (utils.safeJoin(args.slice(1), ' ') || 'console.assert');\n data.extra.arguments = args.slice(1);\n callback && callback(msg, data);\n }\n } else {\n callback && callback(msg, data);\n }\n\n // this fails for some browsers. :(\n if (originalConsoleLevel) {\n // IE9 doesn't allow calling apply on console functions directly\n // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193\n Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);\n }\n };\n};\n\nmodule.exports = {\n wrapMethod: wrapMethod\n};\n","/*global XDomainRequest:false */\n\nvar TraceKit = require('../vendor/TraceKit/tracekit');\nvar stringify = require('../vendor/json-stringify-safe/stringify');\nvar md5 = require('../vendor/md5/md5');\nvar RavenConfigError = require('./configError');\n\nvar utils = require('./utils');\nvar isErrorEvent = utils.isErrorEvent;\nvar isDOMError = utils.isDOMError;\nvar isDOMException = utils.isDOMException;\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isPlainObject = utils.isPlainObject;\nvar isUndefined = utils.isUndefined;\nvar isFunction = utils.isFunction;\nvar isString = utils.isString;\nvar isArray = utils.isArray;\nvar isEmptyObject = utils.isEmptyObject;\nvar each = utils.each;\nvar objectMerge = utils.objectMerge;\nvar truncate = utils.truncate;\nvar objectFrozen = utils.objectFrozen;\nvar hasKey = utils.hasKey;\nvar joinRegExp = utils.joinRegExp;\nvar urlencode = utils.urlencode;\nvar uuid4 = utils.uuid4;\nvar htmlTreeAsString = utils.htmlTreeAsString;\nvar isSameException = utils.isSameException;\nvar isSameStacktrace = utils.isSameStacktrace;\nvar parseUrl = utils.parseUrl;\nvar fill = utils.fill;\nvar supportsFetch = utils.supportsFetch;\nvar supportsReferrerPolicy = utils.supportsReferrerPolicy;\nvar serializeKeysForMessage = utils.serializeKeysForMessage;\nvar serializeException = utils.serializeException;\nvar sanitize = utils.sanitize;\n\nvar wrapConsoleMethod = require('./console').wrapMethod;\n\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\n\nfunction now() {\n return +new Date();\n}\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\n\nfunction keepOriginalCallback(original, callback) {\n return isFunction(callback)\n ? function(data) {\n return callback(data, original);\n }\n : callback;\n}\n\n// First, check for JSON support\n// If there is no JSON, we no-op the core features of Raven\n// since JSON is required to encode the payload\nfunction Raven() {\n this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);\n // Raven can run in contexts where there's no document (react-native)\n this._hasDocument = !isUndefined(_document);\n this._hasNavigator = !isUndefined(_navigator);\n this._lastCapturedException = null;\n this._lastData = null;\n this._lastEventId = null;\n this._globalServer = null;\n this._globalKey = null;\n this._globalProject = null;\n this._globalContext = {};\n this._globalOptions = {\n // SENTRY_RELEASE can be injected by https://github.com/getsentry/sentry-webpack-plugin\n release: _window.SENTRY_RELEASE && _window.SENTRY_RELEASE.id,\n logger: 'javascript',\n ignoreErrors: [],\n ignoreUrls: [],\n whitelistUrls: [],\n includePaths: [],\n headers: null,\n collectWindowErrors: true,\n captureUnhandledRejections: true,\n maxMessageLength: 0,\n // By default, truncates URL values to 250 chars\n maxUrlLength: 250,\n stackTraceLimit: 50,\n autoBreadcrumbs: true,\n instrument: true,\n sampleRate: 1,\n sanitizeKeys: []\n };\n this._fetchDefaults = {\n method: 'POST',\n keepalive: true,\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n // https://caniuse.com/#feat=referrer-policy\n // It doesn't. And it throw exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n referrerPolicy: supportsReferrerPolicy() ? 'origin' : ''\n };\n this._ignoreOnError = 0;\n this._isRavenInstalled = false;\n this._originalErrorStackTraceLimit = Error.stackTraceLimit;\n // capture references to window.console *and* all its methods first\n // before the console plugin has a chance to monkey patch\n this._originalConsole = _window.console || {};\n this._originalConsoleMethods = {};\n this._plugins = [];\n this._startTime = now();\n this._wrappedBuiltIns = [];\n this._breadcrumbs = [];\n this._lastCapturedEvent = null;\n this._keypressTimeout;\n this._location = _window.location;\n this._lastHref = this._location && this._location.href;\n this._resetBackoff();\n\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsole) {\n this._originalConsoleMethods[method] = this._originalConsole[method];\n }\n}\n\n/*\n * The core Raven singleton\n *\n * @this {Raven}\n */\n\nRaven.prototype = {\n // Hardcode version string so that raven source can be loaded directly via\n // webpack (using a build step causes webpack #1617). Grunt verifies that\n // this value matches package.json during build.\n // See: https://github.com/getsentry/raven-js/issues/465\n VERSION: '3.26.3',\n\n debug: false,\n\n TraceKit: TraceKit, // alias to TraceKit\n\n /*\n * Configure Raven with a DSN and extra options\n *\n * @param {string} dsn The public Sentry DSN\n * @param {object} options Set of global options [optional]\n * @return {Raven}\n */\n config: function(dsn, options) {\n var self = this;\n\n if (self._globalServer) {\n this._logDebug('error', 'Error: Raven has already been configured');\n return self;\n }\n if (!dsn) return self;\n\n var globalOptions = self._globalOptions;\n\n // merge in options\n if (options) {\n each(options, function(key, value) {\n // tags and extra are special and need to be put into context\n if (key === 'tags' || key === 'extra' || key === 'user') {\n self._globalContext[key] = value;\n } else {\n globalOptions[key] = value;\n }\n });\n }\n\n self.setDSN(dsn);\n\n // \"Script error.\" is hard coded into browsers for errors that it can't read.\n // this is the result of a script being pulled in from an external domain and CORS.\n globalOptions.ignoreErrors.push(/^Script error\\.?$/);\n globalOptions.ignoreErrors.push(/^Javascript error: Script error\\.? on line 0$/);\n\n // join regexp rules into one big rule\n globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);\n globalOptions.ignoreUrls = globalOptions.ignoreUrls.length\n ? joinRegExp(globalOptions.ignoreUrls)\n : false;\n globalOptions.whitelistUrls = globalOptions.whitelistUrls.length\n ? joinRegExp(globalOptions.whitelistUrls)\n : false;\n globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n globalOptions.maxBreadcrumbs = Math.max(\n 0,\n Math.min(globalOptions.maxBreadcrumbs || 100, 100)\n ); // default and hard limit is 100\n\n var autoBreadcrumbDefaults = {\n xhr: true,\n console: true,\n dom: true,\n location: true,\n sentry: true\n };\n\n var autoBreadcrumbs = globalOptions.autoBreadcrumbs;\n if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {\n autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);\n } else if (autoBreadcrumbs !== false) {\n autoBreadcrumbs = autoBreadcrumbDefaults;\n }\n globalOptions.autoBreadcrumbs = autoBreadcrumbs;\n\n var instrumentDefaults = {\n tryCatch: true\n };\n\n var instrument = globalOptions.instrument;\n if ({}.toString.call(instrument) === '[object Object]') {\n instrument = objectMerge(instrumentDefaults, instrument);\n } else if (instrument !== false) {\n instrument = instrumentDefaults;\n }\n globalOptions.instrument = instrument;\n\n TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n // return for chaining\n return self;\n },\n\n /*\n * Installs a global window.onerror error handler\n * to capture and report uncaught exceptions.\n * At this point, install() is required to be called due\n * to the way TraceKit is set up.\n *\n * @return {Raven}\n */\n install: function() {\n var self = this;\n if (self.isSetup() && !self._isRavenInstalled) {\n TraceKit.report.subscribe(function() {\n self._handleOnErrorStackInfo.apply(self, arguments);\n });\n\n if (self._globalOptions.captureUnhandledRejections) {\n self._attachPromiseRejectionHandler();\n }\n\n self._patchFunctionToString();\n\n if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n self._instrumentTryCatch();\n }\n\n if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n // Install all of the plugins\n self._drainPlugins();\n\n self._isRavenInstalled = true;\n }\n\n Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n return this;\n },\n\n /*\n * Set the DSN (can be called multiple time unlike config)\n *\n * @param {string} dsn The public Sentry DSN\n */\n setDSN: function(dsn) {\n var self = this,\n uri = self._parseDSN(dsn),\n lastSlash = uri.path.lastIndexOf('/'),\n path = uri.path.substr(1, lastSlash);\n\n self._dsn = dsn;\n self._globalKey = uri.user;\n self._globalSecret = uri.pass && uri.pass.substr(1);\n self._globalProject = uri.path.substr(lastSlash + 1);\n\n self._globalServer = self._getGlobalServer(uri);\n\n self._globalEndpoint =\n self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';\n\n // Reset backoff state since we may be pointing at a\n // new project/server\n this._resetBackoff();\n },\n\n /*\n * Wrap code within a context so Raven can capture errors\n * reliably across domains that is executed immediately.\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The callback to be immediately executed within the context\n * @param {array} args An array of arguments to be called with the callback [optional]\n */\n context: function(options, func, args) {\n if (isFunction(options)) {\n args = func || [];\n func = options;\n options = {};\n }\n\n return this.wrap(options, func).apply(this, args);\n },\n\n /*\n * Wrap code within a context and returns back a new function to be executed\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The function to be wrapped in a new context\n * @param {function} _before A function to call before the try/catch wrapper [optional, private]\n * @return {function} The newly wrapped functions with a context\n */\n wrap: function(options, func, _before) {\n var self = this;\n // 1 argument has been passed, and it's not a function\n // so just return it\n if (isUndefined(func) && !isFunction(options)) {\n return options;\n }\n\n // options is optional\n if (isFunction(options)) {\n func = options;\n options = undefined;\n }\n\n // At this point, we've passed along 2 arguments, and the second one\n // is not a function either, so we'll just return the second argument.\n if (!isFunction(func)) {\n return func;\n }\n\n // We don't wanna wrap it twice!\n try {\n if (func.__raven__) {\n return func;\n }\n\n // If this has already been wrapped in the past, return that\n if (func.__raven_wrapper__) {\n return func.__raven_wrapper__;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return func;\n }\n\n function wrapped() {\n var args = [],\n i = arguments.length,\n deep = !options || (options && options.deep !== false);\n\n if (_before && isFunction(_before)) {\n _before.apply(this, arguments);\n }\n\n // Recursively wrap all of a function's arguments that are\n // functions themselves.\n while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];\n\n try {\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means Raven caught an error invoking your application code. This is\n // expected behavior and NOT indicative of a bug with Raven.js.\n return func.apply(this, args);\n } catch (e) {\n self._ignoreNextOnError();\n self.captureException(e, options);\n throw e;\n }\n }\n\n // copy over properties of the old function\n for (var property in func) {\n if (hasKey(func, property)) {\n wrapped[property] = func[property];\n }\n }\n wrapped.prototype = func.prototype;\n\n func.__raven_wrapper__ = wrapped;\n // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n wrapped.__raven__ = true;\n wrapped.__orig__ = func;\n\n return wrapped;\n },\n\n /**\n * Uninstalls the global error handler.\n *\n * @return {Raven}\n */\n uninstall: function() {\n TraceKit.report.uninstall();\n\n this._detachPromiseRejectionHandler();\n this._unpatchFunctionToString();\n this._restoreBuiltIns();\n this._restoreConsole();\n\n Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n this._isRavenInstalled = false;\n\n return this;\n },\n\n /**\n * Callback used for `unhandledrejection` event\n *\n * @param {PromiseRejectionEvent} event An object containing\n * promise: the Promise that was rejected\n * reason: the value with which the Promise was rejected\n * @return void\n */\n _promiseRejectionHandler: function(event) {\n this._logDebug('debug', 'Raven caught unhandled promise rejection:', event);\n this.captureException(event.reason, {\n mechanism: {\n type: 'onunhandledrejection',\n handled: false\n }\n });\n },\n\n /**\n * Installs the global promise rejection handler.\n *\n * @return {raven}\n */\n _attachPromiseRejectionHandler: function() {\n this._promiseRejectionHandler = this._promiseRejectionHandler.bind(this);\n _window.addEventListener &&\n _window.addEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Uninstalls the global promise rejection handler.\n *\n * @return {raven}\n */\n _detachPromiseRejectionHandler: function() {\n _window.removeEventListener &&\n _window.removeEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Manually capture an exception and send it over to Sentry\n *\n * @param {error} ex An exception to be logged\n * @param {object} options A specific set of options for this error [optional]\n * @return {Raven}\n */\n captureException: function(ex, options) {\n options = objectMerge({trimHeadFrames: 0}, options ? options : {});\n\n if (isErrorEvent(ex) && ex.error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n ex = ex.error;\n } else if (isDOMError(ex) || isDOMException(ex)) {\n // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)\n // then we just extract the name and message, as they don't provide anything else\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n var name = ex.name || (isDOMError(ex) ? 'DOMError' : 'DOMException');\n var message = ex.message ? name + ': ' + ex.message : name;\n\n return this.captureMessage(\n message,\n objectMerge(options, {\n // neither DOMError or DOMException provide stack trace and we most likely wont get it this way as well\n // but it's barely any overhead so we may at least try\n stacktrace: true,\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n } else if (isError(ex)) {\n // we have a real Error object\n ex = ex;\n } else if (isPlainObject(ex)) {\n // If it is plain Object, serialize it manually and extract options\n // This will allow us to group events based on top-level keys\n // which is much better than creating new group when any key/value change\n options = this._getCaptureExceptionOptionsFromPlainObject(options, ex);\n ex = new Error(options.message);\n } else {\n // If none of previous checks were valid, then it means that\n // it's not a DOMError/DOMException\n // it's not a plain Object\n // it's not a valid ErrorEvent (one with an error property)\n // it's not an Error\n // So bail out and capture it as a simple message:\n return this.captureMessage(\n ex,\n objectMerge(options, {\n stacktrace: true, // if we fall back to captureMessage, default to attempting a new trace\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n }\n\n // Store the raw exception object for potential debugging and introspection\n this._lastCapturedException = ex;\n\n // TraceKit.report will re-raise any exception passed to it,\n // which means you have to wrap it in try/catch. Instead, we\n // can wrap it here and only re-raise if TraceKit.report\n // raises an exception different from the one we asked to\n // report on.\n try {\n var stack = TraceKit.computeStackTrace(ex);\n this._handleStackInfo(stack, options);\n } catch (ex1) {\n if (ex !== ex1) {\n throw ex1;\n }\n }\n\n return this;\n },\n\n _getCaptureExceptionOptionsFromPlainObject: function(currentOptions, ex) {\n var exKeys = Object.keys(ex).sort();\n var options = objectMerge(currentOptions, {\n message:\n 'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys),\n fingerprint: [md5(exKeys)],\n extra: currentOptions.extra || {}\n });\n options.extra.__serialized__ = serializeException(ex);\n\n return options;\n },\n\n /*\n * Manually send a message to Sentry\n *\n * @param {string} msg A plain message to be captured in Sentry\n * @param {object} options A specific set of options for this message [optional]\n * @return {Raven}\n */\n captureMessage: function(msg, options) {\n // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an\n // early call; we'll error on the side of logging anything called before configuration since it's\n // probably something you should see:\n if (\n !!this._globalOptions.ignoreErrors.test &&\n this._globalOptions.ignoreErrors.test(msg)\n ) {\n return;\n }\n\n options = options || {};\n msg = msg + ''; // Make sure it's actually a string\n\n var data = objectMerge(\n {\n message: msg\n },\n options\n );\n\n var ex;\n // Generate a \"synthetic\" stack trace from this point.\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative\n // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,\n // or if it catches a thrown object without a \"stack\" property.\n try {\n throw new Error(msg);\n } catch (ex1) {\n ex = ex1;\n }\n\n // null exception name so `Error` isn't prefixed to msg\n ex.name = null;\n var stack = TraceKit.computeStackTrace(ex);\n\n // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]\n var initialCall = isArray(stack.stack) && stack.stack[1];\n\n // if stack[1] is `Raven.captureException`, it means that someone passed a string to it and we redirected that call\n // to be handled by `captureMessage`, thus `initialCall` is the 3rd one, not 2nd\n // initialCall => captureException(string) => captureMessage(string)\n if (initialCall && initialCall.func === 'Raven.captureException') {\n initialCall = stack.stack[2];\n }\n\n var fileurl = (initialCall && initialCall.url) || '';\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n // Always attempt to get stacktrace if message is empty.\n // It's the only way to provide any helpful information to the user.\n if (this._globalOptions.stacktrace || options.stacktrace || data.message === '') {\n // fingerprint on msg, not stack trace (legacy behavior, could be revisited)\n data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;\n\n options = objectMerge(\n {\n trimHeadFrames: 0\n },\n options\n );\n // Since we know this is a synthetic trace, the top frame (this function call)\n // MUST be from Raven.js, so mark it for trimming\n // We add to the trim counter so that callers can choose to trim extra frames, such\n // as utility functions.\n options.trimHeadFrames += 1;\n\n var frames = this._prepareFrames(stack, options);\n data.stacktrace = {\n // Sentry expects frames oldest to newest\n frames: frames.reverse()\n };\n }\n\n // Make sure that fingerprint is always wrapped in an array\n if (data.fingerprint) {\n data.fingerprint = isArray(data.fingerprint)\n ? data.fingerprint\n : [data.fingerprint];\n }\n\n // Fire away!\n this._send(data);\n\n return this;\n },\n\n captureBreadcrumb: function(obj) {\n var crumb = objectMerge(\n {\n timestamp: now() / 1000\n },\n obj\n );\n\n if (isFunction(this._globalOptions.breadcrumbCallback)) {\n var result = this._globalOptions.breadcrumbCallback(crumb);\n\n if (isObject(result) && !isEmptyObject(result)) {\n crumb = result;\n } else if (result === false) {\n return this;\n }\n }\n\n this._breadcrumbs.push(crumb);\n if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {\n this._breadcrumbs.shift();\n }\n return this;\n },\n\n addPlugin: function(plugin /*arg1, arg2, ... argN*/) {\n var pluginArgs = [].slice.call(arguments, 1);\n\n this._plugins.push([plugin, pluginArgs]);\n if (this._isRavenInstalled) {\n this._drainPlugins();\n }\n\n return this;\n },\n\n /*\n * Set/clear a user to be sent along with the payload.\n *\n * @param {object} user An object representing user data [optional]\n * @return {Raven}\n */\n setUserContext: function(user) {\n // Intentionally do not merge here since that's an unexpected behavior.\n this._globalContext.user = user;\n\n return this;\n },\n\n /*\n * Merge extra attributes to be sent along with the payload.\n *\n * @param {object} extra An object representing extra data [optional]\n * @return {Raven}\n */\n setExtraContext: function(extra) {\n this._mergeContext('extra', extra);\n\n return this;\n },\n\n /*\n * Merge tags to be sent along with the payload.\n *\n * @param {object} tags An object representing tags [optional]\n * @return {Raven}\n */\n setTagsContext: function(tags) {\n this._mergeContext('tags', tags);\n\n return this;\n },\n\n /*\n * Clear all of the context.\n *\n * @return {Raven}\n */\n clearContext: function() {\n this._globalContext = {};\n\n return this;\n },\n\n /*\n * Get a copy of the current context. This cannot be mutated.\n *\n * @return {object} copy of context\n */\n getContext: function() {\n // lol javascript\n return JSON.parse(stringify(this._globalContext));\n },\n\n /*\n * Set environment of application\n *\n * @param {string} environment Typically something like 'production'.\n * @return {Raven}\n */\n setEnvironment: function(environment) {\n this._globalOptions.environment = environment;\n\n return this;\n },\n\n /*\n * Set release version of application\n *\n * @param {string} release Typically something like a git SHA to identify version\n * @return {Raven}\n */\n setRelease: function(release) {\n this._globalOptions.release = release;\n\n return this;\n },\n\n /*\n * Set the dataCallback option\n *\n * @param {function} callback The callback to run which allows the\n * data blob to be mutated before sending\n * @return {Raven}\n */\n setDataCallback: function(callback) {\n var original = this._globalOptions.dataCallback;\n this._globalOptions.dataCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the breadcrumbCallback option\n *\n * @param {function} callback The callback to run which allows filtering\n * or mutating breadcrumbs\n * @return {Raven}\n */\n setBreadcrumbCallback: function(callback) {\n var original = this._globalOptions.breadcrumbCallback;\n this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the shouldSendCallback option\n *\n * @param {function} callback The callback to run which allows\n * introspecting the blob before sending\n * @return {Raven}\n */\n setShouldSendCallback: function(callback) {\n var original = this._globalOptions.shouldSendCallback;\n this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /**\n * Override the default HTTP transport mechanism that transmits data\n * to the Sentry server.\n *\n * @param {function} transport Function invoked instead of the default\n * `makeRequest` handler.\n *\n * @return {Raven}\n */\n setTransport: function(transport) {\n this._globalOptions.transport = transport;\n\n return this;\n },\n\n /*\n * Get the latest raw exception that was captured by Raven.\n *\n * @return {error}\n */\n lastException: function() {\n return this._lastCapturedException;\n },\n\n /*\n * Get the last event id\n *\n * @return {string}\n */\n lastEventId: function() {\n return this._lastEventId;\n },\n\n /*\n * Determine if Raven is setup and ready to go.\n *\n * @return {boolean}\n */\n isSetup: function() {\n if (!this._hasJSON) return false; // needs JSON support\n if (!this._globalServer) {\n if (!this.ravenNotConfiguredError) {\n this.ravenNotConfiguredError = true;\n this._logDebug('error', 'Error: Raven has not been configured.');\n }\n return false;\n }\n return true;\n },\n\n afterLoad: function() {\n // TODO: remove window dependence?\n\n // Attempt to initialize Raven on load\n var RavenConfig = _window.RavenConfig;\n if (RavenConfig) {\n this.config(RavenConfig.dsn, RavenConfig.config).install();\n }\n },\n\n showReportDialog: function(options) {\n if (\n !_document // doesn't work without a document (React native)\n )\n return;\n\n options = options || {};\n\n var lastEventId = options.eventId || this.lastEventId();\n if (!lastEventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n var dsn = options.dsn || this._dsn;\n if (!dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var qs = '';\n qs += '?eventId=' + encode(lastEventId);\n qs += '&dsn=' + encode(dsn);\n\n var user = options.user || this._globalContext.user;\n if (user) {\n if (user.name) qs += '&name=' + encode(user.name);\n if (user.email) qs += '&email=' + encode(user.email);\n }\n\n var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/' + qs;\n (_document.head || _document.body).appendChild(script);\n },\n\n /**** Private functions ****/\n _ignoreNextOnError: function() {\n var self = this;\n this._ignoreOnError += 1;\n setTimeout(function() {\n // onerror should trigger before setTimeout\n self._ignoreOnError -= 1;\n });\n },\n\n _triggerEvent: function(eventType, options) {\n // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it\n var evt, key;\n\n if (!this._hasDocument) return;\n\n options = options || {};\n\n eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);\n\n if (_document.createEvent) {\n evt = _document.createEvent('HTMLEvents');\n evt.initEvent(eventType, true, true);\n } else {\n evt = _document.createEventObject();\n evt.eventType = eventType;\n }\n\n for (key in options)\n if (hasKey(options, key)) {\n evt[key] = options[key];\n }\n\n if (_document.createEvent) {\n // IE9 if standards\n _document.dispatchEvent(evt);\n } else {\n // IE8 regardless of Quirks or Standards\n // IE9 if quirks\n try {\n _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);\n } catch (e) {\n // Do nothing\n }\n }\n },\n\n /**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param evtName the event name (e.g. \"click\")\n * @returns {Function}\n * @private\n */\n _breadcrumbEventHandler: function(evtName) {\n var self = this;\n return function(evt) {\n // reset keypress timeout; e.g. triggering a 'click' after\n // a 'keypress' will reset the keypress debounce so that a new\n // set of keypresses can be recorded\n self._keypressTimeout = null;\n\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors). Ignore if we've\n // already captured the event.\n if (self._lastCapturedEvent === evt) return;\n\n self._lastCapturedEvent = evt;\n\n // try/catch both:\n // - accessing evt.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // can throw an exception in some circumstances.\n var target;\n try {\n target = htmlTreeAsString(evt.target);\n } catch (e) {\n target = '<unknown>';\n }\n\n self.captureBreadcrumb({\n category: 'ui.' + evtName, // e.g. ui.click, ui.input\n message: target\n });\n };\n },\n\n /**\n * Wraps addEventListener to capture keypress UI events\n * @returns {Function}\n * @private\n */\n _keypressEventHandler: function() {\n var self = this,\n debounceDuration = 1000; // milliseconds\n\n // TODO: if somehow user switches keypress target before\n // debounce timeout is triggered, we will only capture\n // a single breadcrumb from the FIRST target (acceptable?)\n return function(evt) {\n var target;\n try {\n target = evt.target;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n var tagName = target && target.tagName;\n\n // only consider keypress events on actual input elements\n // this will disregard keypresses targeting body (e.g. tabbing\n // through elements, hotkeys, etc)\n if (\n !tagName ||\n (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)\n )\n return;\n\n // record first keypress in a series, but ignore subsequent\n // keypresses until debounce clears\n var timeout = self._keypressTimeout;\n if (!timeout) {\n self._breadcrumbEventHandler('input')(evt);\n }\n clearTimeout(timeout);\n self._keypressTimeout = setTimeout(function() {\n self._keypressTimeout = null;\n }, debounceDuration);\n };\n },\n\n /**\n * Captures a breadcrumb of type \"navigation\", normalizing input URLs\n * @param to the originating URL\n * @param from the target URL\n * @private\n */\n _captureUrlChange: function(from, to) {\n var parsedLoc = parseUrl(this._location.href);\n var parsedTo = parseUrl(to);\n var parsedFrom = parseUrl(from);\n\n // because onpopstate only tells you the \"new\" (to) value of location.href, and\n // not the previous (from) value, we need to track the value of the current URL\n // state ourselves\n this._lastHref = to;\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)\n to = parsedTo.relative;\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)\n from = parsedFrom.relative;\n\n this.captureBreadcrumb({\n category: 'navigation',\n data: {\n to: to,\n from: from\n }\n });\n },\n\n _patchFunctionToString: function() {\n var self = this;\n self._originalFunctionToString = Function.prototype.toString;\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = function() {\n if (typeof this === 'function' && this.__raven__) {\n return self._originalFunctionToString.apply(this.__orig__, arguments);\n }\n return self._originalFunctionToString.apply(this, arguments);\n };\n },\n\n _unpatchFunctionToString: function() {\n if (this._originalFunctionToString) {\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = this._originalFunctionToString;\n }\n },\n\n /**\n * Wrap timer functions and event targets to catch errors and provide\n * better metadata.\n */\n _instrumentTryCatch: function() {\n var self = this;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapTimeFn(orig) {\n return function(fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n var originalCallback = args[0];\n if (isFunction(originalCallback)) {\n args[0] = self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {function: orig.name || '<anonymous>'}\n }\n },\n originalCallback\n );\n }\n\n // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it\n // also supports only two arguments and doesn't care what this is, so we\n // can just call the original function directly.\n if (orig.apply) {\n return orig.apply(this, args);\n } else {\n return orig(args[0], args[1]);\n }\n };\n }\n\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n function wrapEventTarget(global) {\n var proto = _window[global] && _window[global].prototype;\n if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n fill(\n proto,\n 'addEventListener',\n function(orig) {\n return function(evtName, fn, capture, secure) {\n // preserve arity\n try {\n if (fn && fn.handleEvent) {\n fn.handleEvent = self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n target: global,\n function: 'handleEvent',\n handler: (fn && fn.name) || '<anonymous>'\n }\n }\n },\n fn.handleEvent\n );\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`\n // so that we don't have more than one wrapper function\n var before, clickHandler, keypressHandler;\n\n if (\n autoBreadcrumbs &&\n autoBreadcrumbs.dom &&\n (global === 'EventTarget' || global === 'Node')\n ) {\n // NOTE: generating multiple handlers per addEventListener invocation, should\n // revisit and verify we can just use one (almost certainly)\n clickHandler = self._breadcrumbEventHandler('click');\n keypressHandler = self._keypressEventHandler();\n before = function(evt) {\n // need to intercept every DOM event in `before` argument, in case that\n // same wrapped method is re-used for different events (e.g. mousemove THEN click)\n // see #724\n if (!evt) return;\n\n var eventType;\n try {\n eventType = evt.type;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n if (eventType === 'click') return clickHandler(evt);\n else if (eventType === 'keypress') return keypressHandler(evt);\n };\n }\n return orig.call(\n this,\n evtName,\n self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n target: global,\n function: 'addEventListener',\n handler: (fn && fn.name) || '<anonymous>'\n }\n }\n },\n fn,\n before\n ),\n capture,\n secure\n );\n };\n },\n wrappedBuiltIns\n );\n fill(\n proto,\n 'removeEventListener',\n function(orig) {\n return function(evt, fn, capture, secure) {\n try {\n fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);\n } catch (e) {\n // ignore, accessing __raven_wrapper__ will throw in some Selenium environments\n }\n return orig.call(this, evt, fn, capture, secure);\n };\n },\n wrappedBuiltIns\n );\n }\n }\n\n fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n if (_window.requestAnimationFrame) {\n fill(\n _window,\n 'requestAnimationFrame',\n function(orig) {\n return function(cb) {\n return orig(\n self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n function: 'requestAnimationFrame',\n handler: (orig && orig.name) || '<anonymous>'\n }\n }\n },\n cb\n )\n );\n };\n },\n wrappedBuiltIns\n );\n }\n\n // event targets borrowed from bugsnag-js:\n // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666\n var eventTargets = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload'\n ];\n for (var i = 0; i < eventTargets.length; i++) {\n wrapEventTarget(eventTargets[i]);\n }\n },\n\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - XMLHttpRequests\n * - DOM interactions (click/typing)\n * - window.location changes\n * - console\n *\n * Can be disabled or individually configured via the `autoBreadcrumbs` config option\n */\n _instrumentBreadcrumbs: function() {\n var self = this;\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && isFunction(xhr[prop])) {\n fill(xhr, prop, function(orig) {\n return self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {function: prop, handler: (orig && orig.name) || '<anonymous>'}\n }\n },\n orig\n );\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;\n fill(\n xhrproto,\n 'open',\n function(origOpen) {\n return function(method, url) {\n // preserve arity\n\n // if Sentry key appears in URL, don't capture\n if (isString(url) && url.indexOf(self._globalKey) === -1) {\n this.__raven_xhr = {\n method: method,\n url: url,\n status_code: null\n };\n }\n\n return origOpen.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n\n fill(\n xhrproto,\n 'send',\n function(origSend) {\n return function() {\n // preserve arity\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__raven_xhr && xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhr.__raven_xhr.status_code = xhr.status;\n } catch (e) {\n /* do nothing */\n }\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'xhr',\n data: xhr.__raven_xhr\n });\n }\n }\n\n var props = ['onload', 'onerror', 'onprogress'];\n for (var j = 0; j < props.length; j++) {\n wrapProp(props[j], xhr);\n }\n\n if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n fill(\n xhr,\n 'onreadystatechange',\n function(orig) {\n return self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n function: 'onreadystatechange',\n handler: (orig && orig.name) || '<anonymous>'\n }\n }\n },\n orig,\n onreadystatechangeHandler\n );\n } /* intentionally don't track this instrumentation */\n );\n } else {\n // if onreadystatechange wasn't actually set by the page on this xhr, we\n // are free to set our own and capture the breadcrumb\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n\n return origSend.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n }\n\n if (autoBreadcrumbs.xhr && supportsFetch()) {\n fill(\n _window,\n 'fetch',\n function(origFetch) {\n return function() {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n\n var fetchInput = args[0];\n var method = 'GET';\n var url;\n\n if (typeof fetchInput === 'string') {\n url = fetchInput;\n } else if ('Request' in _window && fetchInput instanceof _window.Request) {\n url = fetchInput.url;\n if (fetchInput.method) {\n method = fetchInput.method;\n }\n } else {\n url = '' + fetchInput;\n }\n\n // if Sentry key appears in URL, don't capture, as it's our own request\n if (url.indexOf(self._globalKey) !== -1) {\n return origFetch.apply(this, args);\n }\n\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n\n var fetchData = {\n method: method,\n url: url,\n status_code: null\n };\n\n return origFetch\n .apply(this, args)\n .then(function(response) {\n fetchData.status_code = response.status;\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData\n });\n\n return response;\n })\n ['catch'](function(err) {\n // if there is an error performing the request\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData,\n level: 'error'\n });\n\n throw err;\n });\n };\n },\n wrappedBuiltIns\n );\n }\n\n // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n // to the document. Do this before we instrument addEventListener.\n if (autoBreadcrumbs.dom && this._hasDocument) {\n if (_document.addEventListener) {\n _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);\n _document.addEventListener('keypress', self._keypressEventHandler(), false);\n } else if (_document.attachEvent) {\n // IE8 Compatibility\n _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));\n _document.attachEvent('onkeypress', self._keypressEventHandler());\n }\n }\n\n // record navigation (URL) changes\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n var chrome = _window.chrome;\n var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n var hasPushAndReplaceState =\n !isChromePackagedApp &&\n _window.history &&\n _window.history.pushState &&\n _window.history.replaceState;\n if (autoBreadcrumbs.location && hasPushAndReplaceState) {\n // TODO: remove onpopstate handler on uninstall()\n var oldOnPopState = _window.onpopstate;\n _window.onpopstate = function() {\n var currentHref = self._location.href;\n self._captureUrlChange(self._lastHref, currentHref);\n\n if (oldOnPopState) {\n return oldOnPopState.apply(this, arguments);\n }\n };\n\n var historyReplacementFunction = function(origHistFunction) {\n // note history.pushState.length is 0; intentionally not declaring\n // params to preserve 0 arity\n return function(/* state, title, url */) {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n\n // url argument is optional\n if (url) {\n // coerce to string (this is what pushState does)\n self._captureUrlChange(self._lastHref, url + '');\n }\n\n return origHistFunction.apply(this, arguments);\n };\n };\n\n fill(_window.history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(_window.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n }\n\n if (autoBreadcrumbs.console && 'console' in _window && console.log) {\n // console\n var consoleMethodCallback = function(msg, data) {\n self.captureBreadcrumb({\n message: msg,\n level: data.level,\n category: 'console'\n });\n };\n\n each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {\n wrapConsoleMethod(console, level, consoleMethodCallback);\n });\n }\n },\n\n _restoreBuiltIns: function() {\n // restore any wrapped builtins\n var builtin;\n while (this._wrappedBuiltIns.length) {\n builtin = this._wrappedBuiltIns.shift();\n\n var obj = builtin[0],\n name = builtin[1],\n orig = builtin[2];\n\n obj[name] = orig;\n }\n },\n\n _restoreConsole: function() {\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsoleMethods) {\n this._originalConsole[method] = this._originalConsoleMethods[method];\n }\n },\n\n _drainPlugins: function() {\n var self = this;\n\n // FIX ME TODO\n each(this._plugins, function(_, plugin) {\n var installer = plugin[0];\n var args = plugin[1];\n installer.apply(self, [self].concat(args));\n });\n },\n\n _parseDSN: function(str) {\n var m = dsnPattern.exec(str),\n dsn = {},\n i = 7;\n\n try {\n while (i--) dsn[dsnKeys[i]] = m[i] || '';\n } catch (e) {\n throw new RavenConfigError('Invalid DSN: ' + str);\n }\n\n if (dsn.pass && !this._globalOptions.allowSecretKey) {\n throw new RavenConfigError(\n 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'\n );\n }\n\n return dsn;\n },\n\n _getGlobalServer: function(uri) {\n // assemble the endpoint from the uri pieces\n var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n\n if (uri.protocol) {\n globalServer = uri.protocol + ':' + globalServer;\n }\n return globalServer;\n },\n\n _handleOnErrorStackInfo: function(stackInfo, options) {\n options = options || {};\n options.mechanism = options.mechanism || {\n type: 'onerror',\n handled: false\n };\n\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo(stackInfo, options);\n }\n },\n\n _handleStackInfo: function(stackInfo, options) {\n var frames = this._prepareFrames(stackInfo, options);\n\n this._triggerEvent('handle', {\n stackInfo: stackInfo,\n options: options\n });\n\n this._processException(\n stackInfo.name,\n stackInfo.message,\n stackInfo.url,\n stackInfo.lineno,\n frames,\n options\n );\n },\n\n _prepareFrames: function(stackInfo, options) {\n var self = this;\n var frames = [];\n if (stackInfo.stack && stackInfo.stack.length) {\n each(stackInfo.stack, function(i, stack) {\n var frame = self._normalizeFrame(stack, stackInfo.url);\n if (frame) {\n frames.push(frame);\n }\n });\n\n // e.g. frames captured via captureMessage throw\n if (options && options.trimHeadFrames) {\n for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {\n frames[j].in_app = false;\n }\n }\n }\n frames = frames.slice(0, this._globalOptions.stackTraceLimit);\n return frames;\n },\n\n _normalizeFrame: function(frame, stackInfoUrl) {\n // normalize the frames data\n var normalized = {\n filename: frame.url,\n lineno: frame.line,\n colno: frame.column,\n function: frame.func || '?'\n };\n\n // Case when we don't have any information about the error\n // E.g. throwing a string or raw object, instead of an `Error` in Firefox\n // Generating synthetic error doesn't add any value here\n //\n // We should probably somehow let a user know that they should fix their code\n if (!frame.url) {\n normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler\n }\n\n normalized.in_app = !// determine if an exception came from outside of our app\n // first we check the global includePaths list.\n (\n (!!this._globalOptions.includePaths.test &&\n !this._globalOptions.includePaths.test(normalized.filename)) ||\n // Now we check for fun, if the function name is Raven or TraceKit\n /(Raven|TraceKit)\\./.test(normalized['function']) ||\n // finally, we do a last ditch effort and check for raven.min.js\n /raven\\.(min\\.)?js$/.test(normalized.filename)\n );\n\n return normalized;\n },\n\n _processException: function(type, message, fileurl, lineno, frames, options) {\n var prefixedMessage = (type ? type + ': ' : '') + (message || '');\n if (\n !!this._globalOptions.ignoreErrors.test &&\n (this._globalOptions.ignoreErrors.test(message) ||\n this._globalOptions.ignoreErrors.test(prefixedMessage))\n ) {\n return;\n }\n\n var stacktrace;\n\n if (frames && frames.length) {\n fileurl = frames[0].filename || fileurl;\n // Sentry expects frames oldest to newest\n // and JS sends them as newest to oldest\n frames.reverse();\n stacktrace = {frames: frames};\n } else if (fileurl) {\n stacktrace = {\n frames: [\n {\n filename: fileurl,\n lineno: lineno,\n in_app: true\n }\n ]\n };\n }\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n var data = objectMerge(\n {\n // sentry.interfaces.Exception\n exception: {\n values: [\n {\n type: type,\n value: message,\n stacktrace: stacktrace\n }\n ]\n },\n transaction: fileurl\n },\n options\n );\n\n var ex = data.exception.values[0];\n if (ex.type == null && ex.value === '') {\n ex.value = 'Unrecoverable error caught';\n }\n\n // Move mechanism from options to exception interface\n // We do this, as requiring user to pass `{exception:{mechanism:{ ... }}}` would be\n // too much\n if (!data.exception.mechanism && data.mechanism) {\n data.exception.mechanism = data.mechanism;\n delete data.mechanism;\n }\n\n data.exception.mechanism = objectMerge(\n {\n type: 'generic',\n handled: true\n },\n data.exception.mechanism || {}\n );\n\n // Fire away!\n this._send(data);\n },\n\n _trimPacket: function(data) {\n // For now, we only want to truncate the two different messages\n // but this could/should be expanded to just trim everything\n var max = this._globalOptions.maxMessageLength;\n if (data.message) {\n data.message = truncate(data.message, max);\n }\n if (data.exception) {\n var exception = data.exception.values[0];\n exception.value = truncate(exception.value, max);\n }\n\n var request = data.request;\n if (request) {\n if (request.url) {\n request.url = truncate(request.url, this._globalOptions.maxUrlLength);\n }\n if (request.Referer) {\n request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);\n }\n }\n\n if (data.breadcrumbs && data.breadcrumbs.values)\n this._trimBreadcrumbs(data.breadcrumbs);\n\n return data;\n },\n\n /**\n * Truncate breadcrumb values (right now just URLs)\n */\n _trimBreadcrumbs: function(breadcrumbs) {\n // known breadcrumb properties with urls\n // TODO: also consider arbitrary prop values that start with (https?)?://\n var urlProps = ['to', 'from', 'url'],\n urlProp,\n crumb,\n data;\n\n for (var i = 0; i < breadcrumbs.values.length; ++i) {\n crumb = breadcrumbs.values[i];\n if (\n !crumb.hasOwnProperty('data') ||\n !isObject(crumb.data) ||\n objectFrozen(crumb.data)\n )\n continue;\n\n data = objectMerge({}, crumb.data);\n for (var j = 0; j < urlProps.length; ++j) {\n urlProp = urlProps[j];\n if (data.hasOwnProperty(urlProp) && data[urlProp]) {\n data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);\n }\n }\n breadcrumbs.values[i].data = data;\n }\n },\n\n _getHttpData: function() {\n if (!this._hasNavigator && !this._hasDocument) return;\n var httpData = {};\n\n if (this._hasNavigator && _navigator.userAgent) {\n httpData.headers = {\n 'User-Agent': _navigator.userAgent\n };\n }\n\n // Check in `window` instead of `document`, as we may be in ServiceWorker environment\n if (_window.location && _window.location.href) {\n httpData.url = _window.location.href;\n }\n\n if (this._hasDocument && _document.referrer) {\n if (!httpData.headers) httpData.headers = {};\n httpData.headers.Referer = _document.referrer;\n }\n\n return httpData;\n },\n\n _resetBackoff: function() {\n this._backoffDuration = 0;\n this._backoffStart = null;\n },\n\n _shouldBackoff: function() {\n return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n },\n\n /**\n * Returns true if the in-process data payload matches the signature\n * of the previously-sent data\n *\n * NOTE: This has to be done at this level because TraceKit can generate\n * data from window.onerror WITHOUT an exception object (IE8, IE9,\n * other old browsers). This can take the form of an \"exception\"\n * data object with a single frame (derived from the onerror args).\n */\n _isRepeatData: function(current) {\n var last = this._lastData;\n\n if (\n !last ||\n current.message !== last.message || // defined for captureMessage\n current.transaction !== last.transaction // defined for captureException/onerror\n )\n return false;\n\n // Stacktrace interface (i.e. from captureMessage)\n if (current.stacktrace || last.stacktrace) {\n return isSameStacktrace(current.stacktrace, last.stacktrace);\n } else if (current.exception || last.exception) {\n // Exception interface (i.e. from captureException/onerror)\n return isSameException(current.exception, last.exception);\n }\n\n return true;\n },\n\n _setBackoffState: function(request) {\n // If we are already in a backoff state, don't change anything\n if (this._shouldBackoff()) {\n return;\n }\n\n var status = request.status;\n\n // 400 - project_id doesn't exist or some other fatal\n // 401 - invalid/revoked dsn\n // 429 - too many requests\n if (!(status === 400 || status === 401 || status === 429)) return;\n\n var retry;\n try {\n // If Retry-After is not in Access-Control-Expose-Headers, most\n // browsers will throw an exception trying to access it\n if (supportsFetch()) {\n retry = request.headers.get('Retry-After');\n } else {\n retry = request.getResponseHeader('Retry-After');\n }\n\n // Retry-After is returned in seconds\n retry = parseInt(retry, 10) * 1000;\n } catch (e) {\n /* eslint no-empty:0 */\n }\n\n this._backoffDuration = retry\n ? // If Sentry server returned a Retry-After value, use it\n retry\n : // Otherwise, double the last backoff duration (starts at 1 sec)\n this._backoffDuration * 2 || 1000;\n\n this._backoffStart = now();\n },\n\n _send: function(data) {\n var globalOptions = this._globalOptions;\n\n var baseData = {\n project: this._globalProject,\n logger: globalOptions.logger,\n platform: 'javascript'\n },\n httpData = this._getHttpData();\n\n if (httpData) {\n baseData.request = httpData;\n }\n\n // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload\n if (data.trimHeadFrames) delete data.trimHeadFrames;\n\n data = objectMerge(baseData, data);\n\n // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge\n data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);\n data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);\n\n // Send along our own collected metadata with extra\n data.extra['session:duration'] = now() - this._startTime;\n\n if (this._breadcrumbs && this._breadcrumbs.length > 0) {\n // intentionally make shallow copy so that additions\n // to breadcrumbs aren't accidentally sent in this request\n data.breadcrumbs = {\n values: [].slice.call(this._breadcrumbs, 0)\n };\n }\n\n if (this._globalContext.user) {\n // sentry.interfaces.User\n data.user = this._globalContext.user;\n }\n\n // Include the environment if it's defined in globalOptions\n if (globalOptions.environment) data.environment = globalOptions.environment;\n\n // Include the release if it's defined in globalOptions\n if (globalOptions.release) data.release = globalOptions.release;\n\n // Include server_name if it's defined in globalOptions\n if (globalOptions.serverName) data.server_name = globalOptions.serverName;\n\n data = this._sanitizeData(data);\n\n // Cleanup empty properties before sending them to the server\n Object.keys(data).forEach(function(key) {\n if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {\n delete data[key];\n }\n });\n\n if (isFunction(globalOptions.dataCallback)) {\n data = globalOptions.dataCallback(data) || data;\n }\n\n // Why??????????\n if (!data || isEmptyObject(data)) {\n return;\n }\n\n // Check if the request should be filtered or not\n if (\n isFunction(globalOptions.shouldSendCallback) &&\n !globalOptions.shouldSendCallback(data)\n ) {\n return;\n }\n\n // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),\n // so drop requests until \"cool-off\" period has elapsed.\n if (this._shouldBackoff()) {\n this._logDebug('warn', 'Raven dropped error due to backoff: ', data);\n return;\n }\n\n if (typeof globalOptions.sampleRate === 'number') {\n if (Math.random() < globalOptions.sampleRate) {\n this._sendProcessedPayload(data);\n }\n } else {\n this._sendProcessedPayload(data);\n }\n },\n\n _sanitizeData: function(data) {\n return sanitize(data, this._globalOptions.sanitizeKeys);\n },\n\n _getUuid: function() {\n return uuid4();\n },\n\n _sendProcessedPayload: function(data, callback) {\n var self = this;\n var globalOptions = this._globalOptions;\n\n if (!this.isSetup()) return;\n\n // Try and clean up the packet before sending by truncating long values\n data = this._trimPacket(data);\n\n // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,\n // but this would require copying an un-truncated copy of the data packet, which can be\n // arbitrarily deep (extra_data) -- could be worthwhile? will revisit\n if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {\n this._logDebug('warn', 'Raven dropped repeat event: ', data);\n return;\n }\n\n // Send along an event_id if not explicitly passed.\n // This event_id can be used to reference the error within Sentry itself.\n // Set lastEventId after we know the error should actually be sent\n this._lastEventId = data.event_id || (data.event_id = this._getUuid());\n\n // Store outbound payload after trim\n this._lastData = data;\n\n this._logDebug('debug', 'Raven about to send:', data);\n\n var auth = {\n sentry_version: '7',\n sentry_client: 'raven-js/' + this.VERSION,\n sentry_key: this._globalKey\n };\n\n if (this._globalSecret) {\n auth.sentry_secret = this._globalSecret;\n }\n\n var exception = data.exception && data.exception.values[0];\n\n // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy\n if (\n this._globalOptions.autoBreadcrumbs &&\n this._globalOptions.autoBreadcrumbs.sentry\n ) {\n this.captureBreadcrumb({\n category: 'sentry',\n message: exception\n ? (exception.type ? exception.type + ': ' : '') + exception.value\n : data.message,\n event_id: data.event_id,\n level: data.level || 'error' // presume error unless specified\n });\n }\n\n var url = this._globalEndpoint;\n (globalOptions.transport || this._makeRequest).call(this, {\n url: url,\n auth: auth,\n data: data,\n options: globalOptions,\n onSuccess: function success() {\n self._resetBackoff();\n\n self._triggerEvent('success', {\n data: data,\n src: url\n });\n callback && callback();\n },\n onError: function failure(error) {\n self._logDebug('error', 'Raven transport failed to send: ', error);\n\n if (error.request) {\n self._setBackoffState(error.request);\n }\n\n self._triggerEvent('failure', {\n data: data,\n src: url\n });\n error = error || new Error('Raven send failed (no additional details provided)');\n callback && callback(error);\n }\n });\n },\n\n _makeRequest: function(opts) {\n // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests\n var url = opts.url + '?' + urlencode(opts.auth);\n\n var evaluatedHeaders = null;\n var evaluatedFetchParameters = {};\n\n if (opts.options.headers) {\n evaluatedHeaders = this._evaluateHash(opts.options.headers);\n }\n\n if (opts.options.fetchParameters) {\n evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);\n }\n\n if (supportsFetch()) {\n evaluatedFetchParameters.body = stringify(opts.data);\n\n var defaultFetchOptions = objectMerge({}, this._fetchDefaults);\n var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);\n\n if (evaluatedHeaders) {\n fetchOptions.headers = evaluatedHeaders;\n }\n\n return _window\n .fetch(url, fetchOptions)\n .then(function(response) {\n if (response.ok) {\n opts.onSuccess && opts.onSuccess();\n } else {\n var error = new Error('Sentry error code: ' + response.status);\n // It's called request only to keep compatibility with XHR interface\n // and not add more redundant checks in setBackoffState method\n error.request = response;\n opts.onError && opts.onError(error);\n }\n })\n ['catch'](function() {\n opts.onError &&\n opts.onError(new Error('Sentry error code: network unavailable'));\n });\n }\n\n var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();\n if (!request) return;\n\n // if browser doesn't support CORS (e.g. IE7), we are out of luck\n var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';\n\n if (!hasCORS) return;\n\n if ('withCredentials' in request) {\n request.onreadystatechange = function() {\n if (request.readyState !== 4) {\n return;\n } else if (request.status === 200) {\n opts.onSuccess && opts.onSuccess();\n } else if (opts.onError) {\n var err = new Error('Sentry error code: ' + request.status);\n err.request = request;\n opts.onError(err);\n }\n };\n } else {\n request = new XDomainRequest();\n // xdomainrequest cannot go http -> https (or vice versa),\n // so always use protocol relative\n url = url.replace(/^https?:/, '');\n\n // onreadystatechange not supported by XDomainRequest\n if (opts.onSuccess) {\n request.onload = opts.onSuccess;\n }\n if (opts.onError) {\n request.onerror = function() {\n var err = new Error('Sentry error code: XDomainRequest');\n err.request = request;\n opts.onError(err);\n };\n }\n }\n\n request.open('POST', url);\n\n if (evaluatedHeaders) {\n each(evaluatedHeaders, function(key, value) {\n request.setRequestHeader(key, value);\n });\n }\n\n request.send(stringify(opts.data));\n },\n\n _evaluateHash: function(hash) {\n var evaluated = {};\n\n for (var key in hash) {\n if (hash.hasOwnProperty(key)) {\n var value = hash[key];\n evaluated[key] = typeof value === 'function' ? value() : value;\n }\n }\n\n return evaluated;\n },\n\n _logDebug: function(level) {\n // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change\n if (\n this._originalConsoleMethods[level] &&\n (this.debug || this._globalOptions.debug)\n ) {\n // In IE<10 console methods do not have their own 'apply' method\n Function.prototype.apply.call(\n this._originalConsoleMethods[level],\n this._originalConsole,\n [].slice.call(arguments, 1)\n );\n }\n },\n\n _mergeContext: function(key, context) {\n if (isUndefined(context)) {\n delete this._globalContext[key];\n } else {\n this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);\n }\n }\n};\n\n// Deprecations\nRaven.prototype.setUser = Raven.prototype.setUserContext;\nRaven.prototype.setReleaseContext = Raven.prototype.setRelease;\n\nmodule.exports = Raven;\n","/**\n * Enforces a single instance of the Raven client, and the\n * main entry point for Raven. If you are a consumer of the\n * Raven library, you SHOULD load this file (vs raven.js).\n **/\n\nvar RavenConstructor = require('./raven');\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\n\nvar Raven = new RavenConstructor();\n\n/*\n * Allow multiple versions of Raven to be installed.\n * Strip Raven from the global context and returns the instance.\n *\n * @return {Raven}\n */\nRaven.noConflict = function() {\n _window.Raven = _Raven;\n return Raven;\n};\n\nRaven.afterLoad();\n\nmodule.exports = Raven;\n\n/**\n * DISCLAIMER:\n *\n * Expose `Client` constructor for cases where user want to track multiple \"sub-applications\" in one larger app.\n * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.\n * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.\n *\n * It's called `Client' to be in-line with Raven Node implementation.\n *\n * HOWTO:\n *\n * import Raven from 'raven-js';\n *\n * const someAppReporter = new Raven.Client();\n * const someOtherAppReporter = new Raven.Client();\n *\n * someAppReporter.config('__DSN__', {\n * ...config goes here\n * });\n *\n * someOtherAppReporter.config('__OTHER_DSN__', {\n * ...config goes here\n * });\n *\n * someAppReporter.captureMessage(...);\n * someAppReporter.captureException(...);\n * someAppReporter.captureBreadcrumb(...);\n *\n * someOtherAppReporter.captureMessage(...);\n * someOtherAppReporter.captureException(...);\n * someOtherAppReporter.captureBreadcrumb(...);\n *\n * It should \"just work\".\n */\nmodule.exports.Client = RavenConstructor;\n","// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\nimport Raven from 'raven-js';\n\n(() => {\n const isLive = window.location.host === 'plyr.io';\n\n // Raven / Sentry\n // For demo site (https://plyr.io) only\n if (isLive) {\n Raven.config(\n 'https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555',\n ).install();\n }\n\n document.addEventListener('DOMContentLoaded', () => {\n Raven.context(() => {\n const selector = '#player';\n const container = document.getElementById('container');\n\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n if (container.contains(event.target)) {\n return;\n }\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n const focused = document.activeElement;\n\n if (!focused || container.contains(focused)) {\n return;\n }\n\n focused.classList.add(tabClassName);\n }, 10);\n });\n\n // Setup the player\n const player = new Plyr(selector, {\n debug: true,\n title: 'View From A Blue Moon',\n iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n clickToPlay: false,\n /* controls: [\n 'play-large',\n 'restart',\n 'rewind',\n 'play',\n 'fast-forward',\n 'progress',\n 'current-time',\n 'duration',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ], */\n /* i18n: {\n restart: '重新開始',\n rewind: '快退{seektime}秒',\n play: '播放',\n pause: '暫停',\n fastForward: '快進{seektime}秒',\n seek: '尋求',\n played: '發揮',\n buffered: '緩衝的',\n currentTime: '當前時間戳',\n duration: '長短',\n volume: '音量',\n mute: '靜音',\n unmute: '取消靜音',\n enableCaptions: '開啟字幕',\n disableCaptions: '關閉字幕',\n enterFullscreen: '進入全螢幕',\n exitFullscreen: '退出全螢幕',\n frameTitle: '球員為{title}',\n captions: '字幕',\n settings: '設定',\n speed: '速度',\n normal: '正常',\n quality: '質量',\n loop: '循環',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: '重啟',\n disabled: '殘',\n enabled: '啟用',\n advertisement: '廣告',\n }, */\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n enabled: true,\n publisherId: '918848828995742',\n },\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (\n !(type in types) ||\n (!init && type === currentType) ||\n (!currentType.length && type === types.video)\n ) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [\n {\n src:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-576p.mp4',\n type: 'video/mp4',\n size: 576,\n },\n {\n src:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-720p.mp4',\n type: 'video/mp4',\n size: 720,\n },\n {\n src:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1080p.mp4',\n type: 'video/mp4',\n size: 1080,\n },\n {\n src:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1440p.mp4',\n type: 'video/mp4',\n size: 1440,\n },\n ],\n poster:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title:\n 'Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;',\n sources: [\n {\n src:\n 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src:\n 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n sources: [\n {\n src:\n 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n },\n ],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [\n {\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n },\n ],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button =>\n toggleClass(button.parentElement, 'active', false),\n );\n\n // Set active on parent\n toggleClass(\n document.querySelector(`[data-source=\"${type}\"]`),\n 'active',\n true,\n );\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(\n cite => {\n cite.setAttribute('hidden', '');\n },\n );\n document\n .querySelector(`.plyr__cite--${type}`)\n .removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n });\n });\n\n // Google analytics\n // For demo site (https://plyr.io) only\n /* eslint-disable */\n if (isLive) {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(\n window,\n document,\n 'script',\n 'https://www.google-analytics.com/analytics.js',\n 'ga',\n );\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n }\n /* eslint-enable */\n})();\n"]} \ No newline at end of file
+{"version":3,"sources":["node_modules/raven-js/vendor/json-stringify-safe/stringify.js","node_modules/raven-js/src/utils.js","node_modules/raven-js/vendor/TraceKit/tracekit.js","node_modules/raven-js/vendor/md5/md5.js","node_modules/raven-js/src/configError.js","node_modules/raven-js/src/console.js","node_modules/raven-js/src/raven.js","node_modules/raven-js/src/singleton.js","demo/src/js/demo.js"],"names":["global","stringify","_window","isErrorEvent","isDOMError","isDOMException","isError","isObject","isPlainObject","isUndefined","isFunction","isString","isArray","isEmptyObject","each","objectMerge","truncate","objectFrozen","hasKey","joinRegExp","urlencode","uuid4","htmlTreeAsString","isSameException","isSameStacktrace","parseUrl","fill","supportsFetch","supportsReferrerPolicy","serializeKeysForMessage","serializeException","sanitize","require$$0","TraceKit","md5","RavenConfigError","Raven","RavenConstructor","isLive","window","location","host","config","install","document","addEventListener","context","selector","container","getElementById","shr","setup","count","classname","tabClassName","contains","event","target","classList","remove","keyCode","setTimeout","focused","activeElement","add","player","Plyr","debug","title","iconUrl","keyboard","tooltips","controls","seek","captions","active","keys","google","ads","publisherId","buttons","querySelectorAll","types","video","audio","youtube","vimeo","currentType","hash","replace","historySupport","history","pushState","toggleClass","element","className","state","newSource","type","init","length","source","sources","src","size","poster","tracks","kind","label","srclang","default","provider","Array","from","forEach","button","parentElement","querySelector","cite","setAttribute","removeAttribute","getAttribute","replaceState","i","s","o","g","r","a","m","GoogleAnalyticsObject","q","push","arguments","l","Date","createElement","getElementsByTagName","async","parentNode","insertBefore","ga"],"mappings":"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","file":"demo.js","sourcesContent":["/*\n json-stringify-safe\n Like JSON.stringify, but doesn't throw on circular references.\n\n Originally forked from https://github.com/isaacs/json-stringify-safe\n version 5.0.1 on 3/8/2017 and modified to handle Errors serialization\n and IE8 compatibility. Tests for this are in test/vendor.\n\n ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE\n*/\n\nexports = module.exports = stringify;\nexports.getSerialize = serializer;\n\nfunction indexOf(haystack, needle) {\n for (var i = 0; i < haystack.length; ++i) {\n if (haystack[i] === needle) return i;\n }\n return -1;\n}\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);\n}\n\n// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106\nfunction stringifyError(value) {\n var err = {\n // These properties are implemented as magical getters and don't show up in for in\n stack: value.stack,\n message: value.message,\n name: value.name\n };\n\n for (var i in value) {\n if (Object.prototype.hasOwnProperty.call(value, i)) {\n err[i] = value[i];\n }\n }\n\n return err;\n}\n\nfunction serializer(replacer, cycleReplacer) {\n var stack = [];\n var keys = [];\n\n if (cycleReplacer == null) {\n cycleReplacer = function(key, value) {\n if (stack[0] === value) {\n return '[Circular ~]';\n }\n return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';\n };\n }\n\n return function(key, value) {\n if (stack.length > 0) {\n var thisPos = indexOf(stack, this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n\n if (~indexOf(stack, value)) {\n value = cycleReplacer.call(this, key, value);\n }\n } else {\n stack.push(value);\n }\n\n return replacer == null\n ? value instanceof Error ? stringifyError(value) : value\n : replacer.call(this, key, value);\n };\n}\n","var stringify = require('../vendor/json-stringify-safe/stringify');\n\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : typeof self !== 'undefined'\n ? self\n : {};\n\nfunction isObject(what) {\n return typeof what === 'object' && what !== null;\n}\n\n// Yanked from https://git.io/vS8DV re-used under CC0\n// with some tiny modifications\nfunction isError(value) {\n switch (Object.prototype.toString.call(value)) {\n case '[object Error]':\n return true;\n case '[object Exception]':\n return true;\n case '[object DOMException]':\n return true;\n default:\n return value instanceof Error;\n }\n}\n\nfunction isErrorEvent(value) {\n return Object.prototype.toString.call(value) === '[object ErrorEvent]';\n}\n\nfunction isDOMError(value) {\n return Object.prototype.toString.call(value) === '[object DOMError]';\n}\n\nfunction isDOMException(value) {\n return Object.prototype.toString.call(value) === '[object DOMException]';\n}\n\nfunction isUndefined(what) {\n return what === void 0;\n}\n\nfunction isFunction(what) {\n return typeof what === 'function';\n}\n\nfunction isPlainObject(what) {\n return Object.prototype.toString.call(what) === '[object Object]';\n}\n\nfunction isString(what) {\n return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isArray(what) {\n return Object.prototype.toString.call(what) === '[object Array]';\n}\n\nfunction isEmptyObject(what) {\n if (!isPlainObject(what)) return false;\n\n for (var _ in what) {\n if (what.hasOwnProperty(_)) {\n return false;\n }\n }\n return true;\n}\n\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsDOMError() {\n try {\n new DOMError(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsDOMException() {\n try {\n new DOMException(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsFetch() {\n if (!('fetch' in _window)) return false;\n\n try {\n new Headers(); // eslint-disable-line no-new\n new Request(''); // eslint-disable-line no-new\n new Response(); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n// https://caniuse.com/#feat=referrer-policy\n// It doesn't. And it throw exception instead of ignoring this parameter...\n// REF: https://github.com/getsentry/raven-js/issues/1233\nfunction supportsReferrerPolicy() {\n if (!supportsFetch()) return false;\n\n try {\n // eslint-disable-next-line no-new\n new Request('pickleRick', {\n referrerPolicy: 'origin'\n });\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsPromiseRejectionEvent() {\n return typeof PromiseRejectionEvent === 'function';\n}\n\nfunction wrappedCallback(callback) {\n function dataCallback(data, original) {\n var normalizedData = callback(data) || data;\n if (original) {\n return original(normalizedData) || normalizedData;\n }\n return normalizedData;\n }\n\n return dataCallback;\n}\n\nfunction each(obj, callback) {\n var i, j;\n\n if (isUndefined(obj.length)) {\n for (i in obj) {\n if (hasKey(obj, i)) {\n callback.call(null, i, obj[i]);\n }\n }\n } else {\n j = obj.length;\n if (j) {\n for (i = 0; i < j; i++) {\n callback.call(null, i, obj[i]);\n }\n }\n }\n}\n\nfunction objectMerge(obj1, obj2) {\n if (!obj2) {\n return obj1;\n }\n each(obj2, function(key, value) {\n obj1[key] = value;\n });\n return obj1;\n}\n\n/**\n * This function is only used for react-native.\n * react-native freezes object that have already been sent over the\n * js bridge. We need this function in order to check if the object is frozen.\n * So it's ok that objectFrozen returns false if Object.isFrozen is not\n * supported because it's not relevant for other \"platforms\". See related issue:\n * https://github.com/getsentry/react-native-sentry/issues/57\n */\nfunction objectFrozen(obj) {\n if (!Object.isFrozen) {\n return false;\n }\n return Object.isFrozen(obj);\n}\n\nfunction truncate(str, max) {\n if (typeof max !== 'number') {\n throw new Error('2nd argument to `truncate` function should be a number');\n }\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : str.substr(0, max) + '\\u2026';\n}\n\n/**\n * hasKey, a better form of hasOwnProperty\n * Example: hasKey(MainHostObject, property) === true/false\n *\n * @param {Object} host object to check property\n * @param {string} key to check\n */\nfunction hasKey(object, key) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction joinRegExp(patterns) {\n // Combine an array of regular expressions and strings into one large regexp\n // Be mad.\n var sources = [],\n i = 0,\n len = patterns.length,\n pattern;\n\n for (; i < len; i++) {\n pattern = patterns[i];\n if (isString(pattern)) {\n // If it's a string, we need to escape it\n // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n sources.push(pattern.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1'));\n } else if (pattern && pattern.source) {\n // If it's a regexp already, we want to extract the source\n sources.push(pattern.source);\n }\n // Intentionally skip other cases\n }\n return new RegExp(sources.join('|'), 'i');\n}\n\nfunction urlencode(o) {\n var pairs = [];\n each(o, function(key, value) {\n pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n });\n return pairs.join('&');\n}\n\n// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n// intentionally using regex and not <a/> href parsing trick because React Native and other\n// environments where DOM might not be available\nfunction parseUrl(url) {\n if (typeof url !== 'string') return {};\n var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n var query = match[6] || '';\n var fragment = match[8] || '';\n return {\n protocol: match[2],\n host: match[4],\n path: match[5],\n relative: match[5] + query + fragment // everything minus origin\n };\n}\nfunction uuid4() {\n var crypto = _window.crypto || _window.msCrypto;\n\n if (!isUndefined(crypto) && crypto.getRandomValues) {\n // Use window.crypto API if available\n // eslint-disable-next-line no-undef\n var arr = new Uint16Array(8);\n crypto.getRandomValues(arr);\n\n // set 4 in byte 7\n arr[3] = (arr[3] & 0xfff) | 0x4000;\n // set 2 most significant bits of byte 9 to '10'\n arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n var pad = function(num) {\n var v = num.toString(16);\n while (v.length < 4) {\n v = '0' + v;\n }\n return v;\n };\n\n return (\n pad(arr[0]) +\n pad(arr[1]) +\n pad(arr[2]) +\n pad(arr[3]) +\n pad(arr[4]) +\n pad(arr[5]) +\n pad(arr[6]) +\n pad(arr[7])\n );\n } else {\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @param elem\n * @returns {string}\n */\nfunction htmlTreeAsString(elem) {\n /* eslint no-extra-parens:0*/\n var MAX_TRAVERSE_HEIGHT = 5,\n MAX_OUTPUT_LEN = 80,\n out = [],\n height = 0,\n len = 0,\n separator = ' > ',\n sepLength = separator.length,\n nextStr;\n\n while (elem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = htmlElementAsString(elem);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n if (\n nextStr === 'html' ||\n (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)\n ) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n elem = elem.parentNode;\n }\n\n return out.reverse().join(separator);\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @param HTMLElement\n * @returns {string}\n */\nfunction htmlElementAsString(elem) {\n var out = [],\n className,\n classes,\n key,\n attr,\n i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n if (elem.id) {\n out.push('#' + elem.id);\n }\n\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push('.' + classes[i]);\n }\n }\n var attrWhitelist = ['type', 'name', 'title', 'alt'];\n for (i = 0; i < attrWhitelist.length; i++) {\n key = attrWhitelist[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push('[' + key + '=\"' + attr + '\"]');\n }\n }\n return out.join('');\n}\n\n/**\n * Returns true if either a OR b is truthy, but not both\n */\nfunction isOnlyOneTruthy(a, b) {\n return !!(!!a ^ !!b);\n}\n\n/**\n * Returns true if both parameters are undefined\n */\nfunction isBothUndefined(a, b) {\n return isUndefined(a) && isUndefined(b);\n}\n\n/**\n * Returns true if the two input exception interfaces have the same content\n */\nfunction isSameException(ex1, ex2) {\n if (isOnlyOneTruthy(ex1, ex2)) return false;\n\n ex1 = ex1.values[0];\n ex2 = ex2.values[0];\n\n if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;\n\n // in case both stacktraces are undefined, we can't decide so default to false\n if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;\n\n return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);\n}\n\n/**\n * Returns true if the two input stack trace interfaces have the same content\n */\nfunction isSameStacktrace(stack1, stack2) {\n if (isOnlyOneTruthy(stack1, stack2)) return false;\n\n var frames1 = stack1.frames;\n var frames2 = stack2.frames;\n\n // Exit early if stacktrace is malformed\n if (frames1 === undefined || frames2 === undefined) return false;\n\n // Exit early if frame count differs\n if (frames1.length !== frames2.length) return false;\n\n // Iterate through every frame; bail out if anything differs\n var a, b;\n for (var i = 0; i < frames1.length; i++) {\n a = frames1[i];\n b = frames2[i];\n if (\n a.filename !== b.filename ||\n a.lineno !== b.lineno ||\n a.colno !== b.colno ||\n a['function'] !== b['function']\n )\n return false;\n }\n return true;\n}\n\n/**\n * Polyfill a method\n * @param obj object e.g. `document`\n * @param name method name present on object e.g. `addEventListener`\n * @param replacement replacement function\n * @param track {optional} record instrumentation to an array\n */\nfunction fill(obj, name, replacement, track) {\n if (obj == null) return;\n var orig = obj[name];\n obj[name] = replacement(orig);\n obj[name].__raven__ = true;\n obj[name].__orig__ = orig;\n if (track) {\n track.push([obj, name, orig]);\n }\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns {string}\n */\nfunction safeJoin(input, delimiter) {\n if (!isArray(input)) return '';\n\n var output = [];\n\n for (var i = 0; i < input.length; i++) {\n try {\n output.push(String(input[i]));\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n// Default Node.js REPL depth\nvar MAX_SERIALIZE_EXCEPTION_DEPTH = 3;\n// 50kB, as 100kB is max payload size, so half sounds reasonable\nvar MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;\nvar MAX_SERIALIZE_KEYS_LENGTH = 40;\n\nfunction utf8Length(value) {\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\n\nfunction serializeValue(value) {\n if (typeof value === 'string') {\n var maxLength = 40;\n return truncate(value, maxLength);\n } else if (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'undefined'\n ) {\n return value;\n }\n\n var type = Object.prototype.toString.call(value);\n\n // Node.js REPL notation\n if (type === '[object Object]') return '[Object]';\n if (type === '[object Array]') return '[Array]';\n if (type === '[object Function]')\n return value.name ? '[Function: ' + value.name + ']' : '[Function]';\n\n return value;\n}\n\nfunction serializeObject(value, depth) {\n if (depth === 0) return serializeValue(value);\n\n if (isPlainObject(value)) {\n return Object.keys(value).reduce(function(acc, key) {\n acc[key] = serializeObject(value[key], depth - 1);\n return acc;\n }, {});\n } else if (Array.isArray(value)) {\n return value.map(function(val) {\n return serializeObject(val, depth - 1);\n });\n }\n\n return serializeValue(value);\n}\n\nfunction serializeException(ex, depth, maxSize) {\n if (!isPlainObject(ex)) return ex;\n\n depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;\n maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;\n\n var serialized = serializeObject(ex, depth);\n\n if (jsonSize(stringify(serialized)) > maxSize) {\n return serializeException(ex, depth - 1);\n }\n\n return serialized;\n}\n\nfunction serializeKeysForMessage(keys, maxLength) {\n if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();\n if (!Array.isArray(keys)) return '';\n\n keys = keys.filter(function(key) {\n return typeof key === 'string';\n });\n if (keys.length === 0) return '[object has no keys]';\n\n maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;\n if (keys[0].length >= maxLength) return keys[0];\n\n for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {\n var serialized = keys.slice(0, usedKeys).join(', ');\n if (serialized.length > maxLength) continue;\n if (usedKeys === keys.length) return serialized;\n return serialized + '\\u2026';\n }\n\n return '';\n}\n\nfunction sanitize(input, sanitizeKeys) {\n if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))\n return input;\n\n var sanitizeRegExp = joinRegExp(sanitizeKeys);\n var sanitizeMask = '********';\n var safeInput;\n\n try {\n safeInput = JSON.parse(stringify(input));\n } catch (o_O) {\n return input;\n }\n\n function sanitizeWorker(workerInput) {\n if (isArray(workerInput)) {\n return workerInput.map(function(val) {\n return sanitizeWorker(val);\n });\n }\n\n if (isPlainObject(workerInput)) {\n return Object.keys(workerInput).reduce(function(acc, k) {\n if (sanitizeRegExp.test(k)) {\n acc[k] = sanitizeMask;\n } else {\n acc[k] = sanitizeWorker(workerInput[k]);\n }\n return acc;\n }, {});\n }\n\n return workerInput;\n }\n\n return sanitizeWorker(safeInput);\n}\n\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isDOMError: isDOMError,\n isDOMException: isDOMException,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isPlainObject: isPlainObject,\n isString: isString,\n isArray: isArray,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\n supportsDOMError: supportsDOMError,\n supportsDOMException: supportsDOMException,\n supportsFetch: supportsFetch,\n supportsReferrerPolicy: supportsReferrerPolicy,\n supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,\n wrappedCallback: wrappedCallback,\n each: each,\n objectMerge: objectMerge,\n truncate: truncate,\n objectFrozen: objectFrozen,\n hasKey: hasKey,\n joinRegExp: joinRegExp,\n urlencode: urlencode,\n uuid4: uuid4,\n htmlTreeAsString: htmlTreeAsString,\n htmlElementAsString: htmlElementAsString,\n isSameException: isSameException,\n isSameStacktrace: isSameStacktrace,\n parseUrl: parseUrl,\n fill: fill,\n safeJoin: safeJoin,\n serializeException: serializeException,\n serializeKeysForMessage: serializeKeysForMessage,\n sanitize: sanitize\n};\n","var utils = require('../../src/utils');\n\n/*\n TraceKit - Cross brower stack traces\n\n This was originally forked from github.com/occ/TraceKit, but has since been\n largely re-written and is now maintained as part of raven-js. Tests for\n this are in test/vendor.\n\n MIT license\n*/\n\nvar TraceKit = {\n collectWindowErrors: true,\n debug: false\n};\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n// global reference to slice\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?';\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;\n\nfunction getLocationHref() {\n if (typeof document === 'undefined' || document.location == null) return '';\n return document.location.href;\n}\n\nfunction getLocationOrigin() {\n if (typeof document === 'undefined' || document.location == null) return '';\n\n // Oh dear IE10...\n if (!document.location.origin) {\n return (\n document.location.protocol +\n '//' +\n document.location.hostname +\n (document.location.port ? ':' + document.location.port : '')\n );\n }\n\n return document.location.origin;\n}\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n * TraceKit.report.subscribe(function(stackInfo) { ... })\n * TraceKit.report.unsubscribe(function(stackInfo) { ... })\n * TraceKit.report(exception)\n * try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n * - Firefox: full stack trace with line numbers, plus column number\n * on top frame; column number is not guaranteed\n * - Opera: full stack trace with line and column numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n * - IE: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n * - IE5.5+ (only 8.0 tested)\n * - Firefox 0.9+ (only 3.5+ tested)\n * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n * Exceptions Have Stacktrace to be enabled in opera:config)\n * - Safari 3+ (only 4+ tested)\n * - Chrome 1+ (only 5+ tested)\n * - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = (function reportModuleWrapper() {\n var handlers = [],\n lastArgs = null,\n lastException = null,\n lastExceptionStack = null;\n\n /**\n * Add a crash handler.\n * @param {Function} handler\n */\n function subscribe(handler) {\n installGlobalHandler();\n handlers.push(handler);\n }\n\n /**\n * Remove a crash handler.\n * @param {Function} handler\n */\n function unsubscribe(handler) {\n for (var i = handlers.length - 1; i >= 0; --i) {\n if (handlers[i] === handler) {\n handlers.splice(i, 1);\n }\n }\n }\n\n /**\n * Remove all crash handlers.\n */\n function unsubscribeAll() {\n uninstallGlobalHandler();\n handlers = [];\n }\n\n /**\n * Dispatch stack information to all handlers.\n * @param {Object.<string, *>} stack\n */\n function notifyHandlers(stack, isWindowError) {\n var exception = null;\n if (isWindowError && !TraceKit.collectWindowErrors) {\n return;\n }\n for (var i in handlers) {\n if (handlers.hasOwnProperty(i)) {\n try {\n handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n } catch (inner) {\n exception = inner;\n }\n }\n }\n\n if (exception) {\n throw exception;\n }\n }\n\n var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n /**\n * Ensures all global unhandled exceptions are recorded.\n * Supported by Gecko and IE.\n * @param {string} msg Error message.\n * @param {string} url URL of script that generated the exception.\n * @param {(number|string)} lineNo The line number at which the error\n * occurred.\n * @param {?(number|string)} colNo The column number at which the error\n * occurred.\n * @param {?Error} ex The actual Error object.\n */\n function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {\n var stack = null;\n // If 'ex' is ErrorEvent, get real Error from inside\n var exception = utils.isErrorEvent(ex) ? ex.error : ex;\n // If 'msg' is ErrorEvent, get real message from inside\n var message = utils.isErrorEvent(msg) ? msg.message : msg;\n\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n lastExceptionStack,\n url,\n lineNo,\n message\n );\n processLastException();\n } else if (exception && utils.isError(exception)) {\n // non-string `exception` arg; attempt to extract stack trace\n\n // New chrome and blink send along a real error object\n // Let's just report that like a normal error.\n // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n stack = TraceKit.computeStackTrace(exception);\n notifyHandlers(stack, true);\n } else {\n var location = {\n url: url,\n line: lineNo,\n column: colNo\n };\n\n var name = undefined;\n var groups;\n\n if ({}.toString.call(message) === '[object String]') {\n var groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n message = groups[2];\n }\n }\n\n location.func = UNKNOWN_FUNCTION;\n\n stack = {\n name: name,\n message: message,\n url: getLocationHref(),\n stack: [location]\n };\n notifyHandlers(stack, true);\n }\n\n if (_oldOnerrorHandler) {\n return _oldOnerrorHandler.apply(this, arguments);\n }\n\n return false;\n }\n\n function installGlobalHandler() {\n if (_onErrorHandlerInstalled) {\n return;\n }\n _oldOnerrorHandler = _window.onerror;\n _window.onerror = traceKitWindowOnError;\n _onErrorHandlerInstalled = true;\n }\n\n function uninstallGlobalHandler() {\n if (!_onErrorHandlerInstalled) {\n return;\n }\n _window.onerror = _oldOnerrorHandler;\n _onErrorHandlerInstalled = false;\n _oldOnerrorHandler = undefined;\n }\n\n function processLastException() {\n var _lastExceptionStack = lastExceptionStack,\n _lastArgs = lastArgs;\n lastArgs = null;\n lastExceptionStack = null;\n lastException = null;\n notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n }\n\n /**\n * Reports an unhandled Error to TraceKit.\n * @param {Error} ex\n * @param {?boolean} rethrow If false, do not re-throw the exception.\n * Only used for window.onerror to not cause an infinite loop of\n * rethrowing.\n */\n function report(ex, rethrow) {\n var args = _slice.call(arguments, 1);\n if (lastExceptionStack) {\n if (lastException === ex) {\n return; // already caught by an inner catch block, ignore\n } else {\n processLastException();\n }\n }\n\n var stack = TraceKit.computeStackTrace(ex);\n lastExceptionStack = stack;\n lastException = ex;\n lastArgs = args;\n\n // If the stack trace is incomplete, wait for 2 seconds for\n // slow slow IE to see if onerror occurs or not before reporting\n // this exception; otherwise, we will end up with an incomplete\n // stack trace\n setTimeout(function() {\n if (lastException === ex) {\n processLastException();\n }\n }, stack.incomplete ? 2000 : 0);\n\n if (rethrow !== false) {\n throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n }\n }\n\n report.subscribe = subscribe;\n report.unsubscribe = unsubscribe;\n report.uninstall = unsubscribeAll;\n return report;\n})();\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n * s.name - exception name\n * s.message - exception message\n * s.stack[i].url - JavaScript or HTML file URL\n * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)\n * s.stack[i].args - arguments passed to the function, if known\n * s.stack[i].line - line number, if known\n * s.stack[i].column - column number, if known\n *\n * Supports:\n * - Firefox: full stack trace with line numbers and unreliable column\n * number on top frame\n * - Opera 10: full stack trace with line and column numbers\n * - Opera 9-: full stack trace with line numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the topmost stacktrace element\n * only\n * - IE: no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n * * in Safari, some methods may be missing from the stack trace;\n * * in IE, the topmost function in the stack trace will always be the\n * caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n */\nTraceKit.computeStackTrace = (function computeStackTraceWrapper() {\n // Contents of Exception in various browsers.\n //\n // SAFARI:\n // ex.message = Can't find variable: qq\n // ex.line = 59\n // ex.sourceId = 580238192\n // ex.sourceURL = http://...\n // ex.expressionBeginOffset = 96\n // ex.expressionCaretOffset = 98\n // ex.expressionEndOffset = 98\n // ex.name = ReferenceError\n //\n // FIREFOX:\n // ex.message = qq is not defined\n // ex.fileName = http://...\n // ex.lineNumber = 59\n // ex.columnNumber = 69\n // ex.stack = ...stack trace... (see the example below)\n // ex.name = ReferenceError\n //\n // CHROME:\n // ex.message = qq is not defined\n // ex.name = ReferenceError\n // ex.type = not_defined\n // ex.arguments = ['aa']\n // ex.stack = ...stack trace...\n //\n // INTERNET EXPLORER:\n // ex.message = ...\n // ex.name = ReferenceError\n //\n // OPERA:\n // ex.message = ...message... (see the example below)\n // ex.name = ReferenceError\n // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)\n // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n /**\n * Computes stack trace information from the stack property.\n * Chrome and Gecko use this property.\n * @param {Error} ex\n * @return {?Object.<string, *>} Stack trace information.\n */\n function computeStackTraceFromStackProp(ex) {\n if (typeof ex.stack === 'undefined' || !ex.stack) return;\n\n var chrome = /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n var winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n // NOTE: blob urls are now supposed to always have an origin, therefore it's format\n // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\\/` as well\n var gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\\/.*?|\\[native code\\]|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\n // Used to additionally parse URL/line/column from eval frames\n var geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n var chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n var lines = ex.stack.split('\\n');\n var stack = [];\n var submatch;\n var parts;\n var element;\n var reference = /^(.*) is undefined$/.exec(ex.message);\n\n for (var i = 0, j = lines.length; i < j; ++i) {\n if ((parts = chrome.exec(lines[i]))) {\n var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1]; // url\n parts[3] = submatch[2]; // line\n parts[4] = submatch[3]; // column\n }\n element = {\n url: !isNative ? parts[2] : null,\n func: parts[1] || UNKNOWN_FUNCTION,\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = winjs.exec(lines[i]))) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = gecko.exec(lines[i]))) {\n var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n // throw out eval line/column and use top-most line number\n parts[3] = submatch[1];\n parts[4] = submatch[2];\n parts[5] = null; // no column when eval\n } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = ex.columnNumber + 1;\n }\n element = {\n url: parts[3],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n if (element.url && element.url.substr(0, 5) === 'blob:') {\n // Special case for handling JavaScript loaded into a blob.\n // We use a synchronous AJAX request here as a blob is already in\n // memory - it's not making a network request. This will generate a warning\n // in the browser console, but there has already been an error so that's not\n // that much of an issue.\n var xhr = new XMLHttpRequest();\n xhr.open('GET', element.url, false);\n xhr.send(null);\n\n // If we failed to download the source, skip this patch\n if (xhr.status === 200) {\n var source = xhr.responseText || '';\n\n // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.\n // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175\n source = source.slice(-300);\n\n // Now we dig out the source map URL\n var sourceMaps = source.match(/\\/\\/# sourceMappingURL=(.*)$/);\n\n // If we don't find a source map comment or we find more than one, continue on to the next element.\n if (sourceMaps) {\n var sourceMapAddress = sourceMaps[1];\n\n // Now we check to see if it's a relative URL.\n // If it is, convert it to an absolute one.\n if (sourceMapAddress.charAt(0) === '~') {\n sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);\n }\n\n // Now we strip the '.map' off of the end of the URL and update the\n // element so that Sentry can match the map to the blob.\n element.url = sourceMapAddress.slice(0, -4);\n }\n }\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n }\n\n /**\n * Adds information about the first frame to incomplete stack traces.\n * Safari and IE require this to get complete data on the first frame.\n * @param {Object.<string, *>} stackInfo Stack trace information from\n * one of the compute* methods.\n * @param {string} url The URL of the script that caused an error.\n * @param {(number|string)} lineNo The line number of the script that\n * caused an error.\n * @param {string=} message The error generated by the browser, which\n * hopefully contains the name of the object that caused the error.\n * @return {boolean} Whether or not the stack information was\n * augmented.\n */\n function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {\n var initial = {\n url: url,\n line: lineNo\n };\n\n if (initial.url && initial.line) {\n stackInfo.incomplete = false;\n\n if (!initial.func) {\n initial.func = UNKNOWN_FUNCTION;\n }\n\n if (stackInfo.stack.length > 0) {\n if (stackInfo.stack[0].url === initial.url) {\n if (stackInfo.stack[0].line === initial.line) {\n return false; // already in stack trace\n } else if (\n !stackInfo.stack[0].line &&\n stackInfo.stack[0].func === initial.func\n ) {\n stackInfo.stack[0].line = initial.line;\n return false;\n }\n }\n }\n\n stackInfo.stack.unshift(initial);\n stackInfo.partial = true;\n return true;\n } else {\n stackInfo.incomplete = true;\n }\n\n return false;\n }\n\n /**\n * Computes stack trace information by walking the arguments.caller\n * chain at the time the exception occurred. This will cause earlier\n * frames to be missed but is the only way to get any stack trace in\n * Safari and IE. The top frame is restored by\n * {@link augmentStackTraceWithInitialElement}.\n * @param {Error} ex\n * @return {?Object.<string, *>} Stack trace information.\n */\n function computeStackTraceByWalkingCallerChain(ex, depth) {\n var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,\n stack = [],\n funcs = {},\n recursion = false,\n parts,\n item,\n source;\n\n for (\n var curr = computeStackTraceByWalkingCallerChain.caller;\n curr && !recursion;\n curr = curr.caller\n ) {\n if (curr === computeStackTrace || curr === TraceKit.report) {\n // console.log('skipping internal function');\n continue;\n }\n\n item = {\n url: null,\n func: UNKNOWN_FUNCTION,\n line: null,\n column: null\n };\n\n if (curr.name) {\n item.func = curr.name;\n } else if ((parts = functionName.exec(curr.toString()))) {\n item.func = parts[1];\n }\n\n if (typeof item.func === 'undefined') {\n try {\n item.func = parts.input.substring(0, parts.input.indexOf('{'));\n } catch (e) {}\n }\n\n if (funcs['' + curr]) {\n recursion = true;\n } else {\n funcs['' + curr] = true;\n }\n\n stack.push(item);\n }\n\n if (depth) {\n // console.log('depth is ' + depth);\n // console.log('stack is ' + stack.length);\n stack.splice(0, depth);\n }\n\n var result = {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n augmentStackTraceWithInitialElement(\n result,\n ex.sourceURL || ex.fileName,\n ex.line || ex.lineNumber,\n ex.message || ex.description\n );\n return result;\n }\n\n /**\n * Computes a stack trace for an exception.\n * @param {Error} ex\n * @param {(string|number)=} depth\n */\n function computeStackTrace(ex, depth) {\n var stack = null;\n depth = depth == null ? 0 : +depth;\n\n try {\n stack = computeStackTraceFromStackProp(ex);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n\n try {\n stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref()\n };\n }\n\n computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n\n return computeStackTrace;\n})();\n\nmodule.exports = TraceKit;\n","/*\n * JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\n/*\n* Add integers, wrapping at 2^32. This uses 16-bit operations internally\n* to work around bugs in some JS interpreters.\n*/\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xffff);\n}\n\n/*\n* Bitwise rotate a 32-bit number to the left.\n*/\nfunction bitRotateLeft(num, cnt) {\n return (num << cnt) | (num >>> (32 - cnt));\n}\n\n/*\n* These functions implement the four basic operations the algorithm uses.\n*/\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn((b & c) | (~b & d), a, b, x, s, t);\n}\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\n/*\n* Calculate the MD5 of an array of little-endian words, and a bit length.\n*/\nfunction binlMD5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << (len % 32);\n x[(((len + 64) >>> 9) << 4) + 14] = len;\n\n var i;\n var olda;\n var oldb;\n var oldc;\n var oldd;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (i = 0; i < x.length; i += 16) {\n olda = a;\n oldb = b;\n oldc = c;\n oldd = d;\n\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n return [a, b, c, d];\n}\n\n/*\n* Convert an array of little-endian words to a string\n*/\nfunction binl2rstr(input) {\n var i;\n var output = '';\n var length32 = input.length * 32;\n for (i = 0; i < length32; i += 8) {\n output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);\n }\n return output;\n}\n\n/*\n* Convert a raw string to an array of little-endian words\n* Characters >255 have their high-byte silently ignored.\n*/\nfunction rstr2binl(input) {\n var i;\n var output = [];\n output[(input.length >> 2) - 1] = undefined;\n for (i = 0; i < output.length; i += 1) {\n output[i] = 0;\n }\n var length8 = input.length * 8;\n for (i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);\n }\n return output;\n}\n\n/*\n* Calculate the MD5 of a raw string\n*/\nfunction rstrMD5(s) {\n return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));\n}\n\n/*\n* Calculate the HMAC-MD5, of a key and some data (raw strings)\n*/\nfunction rstrHMACMD5(key, data) {\n var i;\n var bkey = rstr2binl(key);\n var ipad = [];\n var opad = [];\n var hash;\n ipad[15] = opad[15] = undefined;\n if (bkey.length > 16) {\n bkey = binlMD5(bkey, key.length * 8);\n }\n for (i = 0; i < 16; i += 1) {\n ipad[i] = bkey[i] ^ 0x36363636;\n opad[i] = bkey[i] ^ 0x5c5c5c5c;\n }\n hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);\n return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));\n}\n\n/*\n* Convert a raw string to a hex string\n*/\nfunction rstr2hex(input) {\n var hexTab = '0123456789abcdef';\n var output = '';\n var x;\n var i;\n for (i = 0; i < input.length; i += 1) {\n x = input.charCodeAt(i);\n output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);\n }\n return output;\n}\n\n/*\n* Encode a string as utf-8\n*/\nfunction str2rstrUTF8(input) {\n return unescape(encodeURIComponent(input));\n}\n\n/*\n* Take string arguments and return either raw or hex encoded strings\n*/\nfunction rawMD5(s) {\n return rstrMD5(str2rstrUTF8(s));\n}\nfunction hexMD5(s) {\n return rstr2hex(rawMD5(s));\n}\nfunction rawHMACMD5(k, d) {\n return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));\n}\nfunction hexHMACMD5(k, d) {\n return rstr2hex(rawHMACMD5(k, d));\n}\n\nfunction md5(string, key, raw) {\n if (!key) {\n if (!raw) {\n return hexMD5(string);\n }\n return rawMD5(string);\n }\n if (!raw) {\n return hexHMACMD5(key, string);\n }\n return rawHMACMD5(key, string);\n}\n\nmodule.exports = md5;\n","function RavenConfigError(message) {\n this.name = 'RavenConfigError';\n this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\n\nmodule.exports = RavenConfigError;\n","var utils = require('./utils');\n\nvar wrapMethod = function(console, level, callback) {\n var originalConsoleLevel = console[level];\n var originalConsole = console;\n\n if (!(level in console)) {\n return;\n }\n\n var sentryLevel = level === 'warn' ? 'warning' : level;\n\n console[level] = function() {\n var args = [].slice.call(arguments);\n\n var msg = utils.safeJoin(args, ' ');\n var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};\n\n if (level === 'assert') {\n if (args[0] === false) {\n // Default browsers message\n msg =\n 'Assertion failed: ' + (utils.safeJoin(args.slice(1), ' ') || 'console.assert');\n data.extra.arguments = args.slice(1);\n callback && callback(msg, data);\n }\n } else {\n callback && callback(msg, data);\n }\n\n // this fails for some browsers. :(\n if (originalConsoleLevel) {\n // IE9 doesn't allow calling apply on console functions directly\n // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193\n Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);\n }\n };\n};\n\nmodule.exports = {\n wrapMethod: wrapMethod\n};\n","/*global XDomainRequest:false */\n\nvar TraceKit = require('../vendor/TraceKit/tracekit');\nvar stringify = require('../vendor/json-stringify-safe/stringify');\nvar md5 = require('../vendor/md5/md5');\nvar RavenConfigError = require('./configError');\n\nvar utils = require('./utils');\nvar isErrorEvent = utils.isErrorEvent;\nvar isDOMError = utils.isDOMError;\nvar isDOMException = utils.isDOMException;\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isPlainObject = utils.isPlainObject;\nvar isUndefined = utils.isUndefined;\nvar isFunction = utils.isFunction;\nvar isString = utils.isString;\nvar isArray = utils.isArray;\nvar isEmptyObject = utils.isEmptyObject;\nvar each = utils.each;\nvar objectMerge = utils.objectMerge;\nvar truncate = utils.truncate;\nvar objectFrozen = utils.objectFrozen;\nvar hasKey = utils.hasKey;\nvar joinRegExp = utils.joinRegExp;\nvar urlencode = utils.urlencode;\nvar uuid4 = utils.uuid4;\nvar htmlTreeAsString = utils.htmlTreeAsString;\nvar isSameException = utils.isSameException;\nvar isSameStacktrace = utils.isSameStacktrace;\nvar parseUrl = utils.parseUrl;\nvar fill = utils.fill;\nvar supportsFetch = utils.supportsFetch;\nvar supportsReferrerPolicy = utils.supportsReferrerPolicy;\nvar serializeKeysForMessage = utils.serializeKeysForMessage;\nvar serializeException = utils.serializeException;\nvar sanitize = utils.sanitize;\n\nvar wrapConsoleMethod = require('./console').wrapMethod;\n\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\n\nfunction now() {\n return +new Date();\n}\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\n\nfunction keepOriginalCallback(original, callback) {\n return isFunction(callback)\n ? function(data) {\n return callback(data, original);\n }\n : callback;\n}\n\n// First, check for JSON support\n// If there is no JSON, we no-op the core features of Raven\n// since JSON is required to encode the payload\nfunction Raven() {\n this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);\n // Raven can run in contexts where there's no document (react-native)\n this._hasDocument = !isUndefined(_document);\n this._hasNavigator = !isUndefined(_navigator);\n this._lastCapturedException = null;\n this._lastData = null;\n this._lastEventId = null;\n this._globalServer = null;\n this._globalKey = null;\n this._globalProject = null;\n this._globalContext = {};\n this._globalOptions = {\n // SENTRY_RELEASE can be injected by https://github.com/getsentry/sentry-webpack-plugin\n release: _window.SENTRY_RELEASE && _window.SENTRY_RELEASE.id,\n logger: 'javascript',\n ignoreErrors: [],\n ignoreUrls: [],\n whitelistUrls: [],\n includePaths: [],\n headers: null,\n collectWindowErrors: true,\n captureUnhandledRejections: true,\n maxMessageLength: 0,\n // By default, truncates URL values to 250 chars\n maxUrlLength: 250,\n stackTraceLimit: 50,\n autoBreadcrumbs: true,\n instrument: true,\n sampleRate: 1,\n sanitizeKeys: []\n };\n this._fetchDefaults = {\n method: 'POST',\n keepalive: true,\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n // https://caniuse.com/#feat=referrer-policy\n // It doesn't. And it throw exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n referrerPolicy: supportsReferrerPolicy() ? 'origin' : ''\n };\n this._ignoreOnError = 0;\n this._isRavenInstalled = false;\n this._originalErrorStackTraceLimit = Error.stackTraceLimit;\n // capture references to window.console *and* all its methods first\n // before the console plugin has a chance to monkey patch\n this._originalConsole = _window.console || {};\n this._originalConsoleMethods = {};\n this._plugins = [];\n this._startTime = now();\n this._wrappedBuiltIns = [];\n this._breadcrumbs = [];\n this._lastCapturedEvent = null;\n this._keypressTimeout;\n this._location = _window.location;\n this._lastHref = this._location && this._location.href;\n this._resetBackoff();\n\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsole) {\n this._originalConsoleMethods[method] = this._originalConsole[method];\n }\n}\n\n/*\n * The core Raven singleton\n *\n * @this {Raven}\n */\n\nRaven.prototype = {\n // Hardcode version string so that raven source can be loaded directly via\n // webpack (using a build step causes webpack #1617). Grunt verifies that\n // this value matches package.json during build.\n // See: https://github.com/getsentry/raven-js/issues/465\n VERSION: '3.26.3',\n\n debug: false,\n\n TraceKit: TraceKit, // alias to TraceKit\n\n /*\n * Configure Raven with a DSN and extra options\n *\n * @param {string} dsn The public Sentry DSN\n * @param {object} options Set of global options [optional]\n * @return {Raven}\n */\n config: function(dsn, options) {\n var self = this;\n\n if (self._globalServer) {\n this._logDebug('error', 'Error: Raven has already been configured');\n return self;\n }\n if (!dsn) return self;\n\n var globalOptions = self._globalOptions;\n\n // merge in options\n if (options) {\n each(options, function(key, value) {\n // tags and extra are special and need to be put into context\n if (key === 'tags' || key === 'extra' || key === 'user') {\n self._globalContext[key] = value;\n } else {\n globalOptions[key] = value;\n }\n });\n }\n\n self.setDSN(dsn);\n\n // \"Script error.\" is hard coded into browsers for errors that it can't read.\n // this is the result of a script being pulled in from an external domain and CORS.\n globalOptions.ignoreErrors.push(/^Script error\\.?$/);\n globalOptions.ignoreErrors.push(/^Javascript error: Script error\\.? on line 0$/);\n\n // join regexp rules into one big rule\n globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);\n globalOptions.ignoreUrls = globalOptions.ignoreUrls.length\n ? joinRegExp(globalOptions.ignoreUrls)\n : false;\n globalOptions.whitelistUrls = globalOptions.whitelistUrls.length\n ? joinRegExp(globalOptions.whitelistUrls)\n : false;\n globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n globalOptions.maxBreadcrumbs = Math.max(\n 0,\n Math.min(globalOptions.maxBreadcrumbs || 100, 100)\n ); // default and hard limit is 100\n\n var autoBreadcrumbDefaults = {\n xhr: true,\n console: true,\n dom: true,\n location: true,\n sentry: true\n };\n\n var autoBreadcrumbs = globalOptions.autoBreadcrumbs;\n if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {\n autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);\n } else if (autoBreadcrumbs !== false) {\n autoBreadcrumbs = autoBreadcrumbDefaults;\n }\n globalOptions.autoBreadcrumbs = autoBreadcrumbs;\n\n var instrumentDefaults = {\n tryCatch: true\n };\n\n var instrument = globalOptions.instrument;\n if ({}.toString.call(instrument) === '[object Object]') {\n instrument = objectMerge(instrumentDefaults, instrument);\n } else if (instrument !== false) {\n instrument = instrumentDefaults;\n }\n globalOptions.instrument = instrument;\n\n TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n // return for chaining\n return self;\n },\n\n /*\n * Installs a global window.onerror error handler\n * to capture and report uncaught exceptions.\n * At this point, install() is required to be called due\n * to the way TraceKit is set up.\n *\n * @return {Raven}\n */\n install: function() {\n var self = this;\n if (self.isSetup() && !self._isRavenInstalled) {\n TraceKit.report.subscribe(function() {\n self._handleOnErrorStackInfo.apply(self, arguments);\n });\n\n if (self._globalOptions.captureUnhandledRejections) {\n self._attachPromiseRejectionHandler();\n }\n\n self._patchFunctionToString();\n\n if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n self._instrumentTryCatch();\n }\n\n if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n // Install all of the plugins\n self._drainPlugins();\n\n self._isRavenInstalled = true;\n }\n\n Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n return this;\n },\n\n /*\n * Set the DSN (can be called multiple time unlike config)\n *\n * @param {string} dsn The public Sentry DSN\n */\n setDSN: function(dsn) {\n var self = this,\n uri = self._parseDSN(dsn),\n lastSlash = uri.path.lastIndexOf('/'),\n path = uri.path.substr(1, lastSlash);\n\n self._dsn = dsn;\n self._globalKey = uri.user;\n self._globalSecret = uri.pass && uri.pass.substr(1);\n self._globalProject = uri.path.substr(lastSlash + 1);\n\n self._globalServer = self._getGlobalServer(uri);\n\n self._globalEndpoint =\n self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';\n\n // Reset backoff state since we may be pointing at a\n // new project/server\n this._resetBackoff();\n },\n\n /*\n * Wrap code within a context so Raven can capture errors\n * reliably across domains that is executed immediately.\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The callback to be immediately executed within the context\n * @param {array} args An array of arguments to be called with the callback [optional]\n */\n context: function(options, func, args) {\n if (isFunction(options)) {\n args = func || [];\n func = options;\n options = {};\n }\n\n return this.wrap(options, func).apply(this, args);\n },\n\n /*\n * Wrap code within a context and returns back a new function to be executed\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The function to be wrapped in a new context\n * @param {function} _before A function to call before the try/catch wrapper [optional, private]\n * @return {function} The newly wrapped functions with a context\n */\n wrap: function(options, func, _before) {\n var self = this;\n // 1 argument has been passed, and it's not a function\n // so just return it\n if (isUndefined(func) && !isFunction(options)) {\n return options;\n }\n\n // options is optional\n if (isFunction(options)) {\n func = options;\n options = undefined;\n }\n\n // At this point, we've passed along 2 arguments, and the second one\n // is not a function either, so we'll just return the second argument.\n if (!isFunction(func)) {\n return func;\n }\n\n // We don't wanna wrap it twice!\n try {\n if (func.__raven__) {\n return func;\n }\n\n // If this has already been wrapped in the past, return that\n if (func.__raven_wrapper__) {\n return func.__raven_wrapper__;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return func;\n }\n\n function wrapped() {\n var args = [],\n i = arguments.length,\n deep = !options || (options && options.deep !== false);\n\n if (_before && isFunction(_before)) {\n _before.apply(this, arguments);\n }\n\n // Recursively wrap all of a function's arguments that are\n // functions themselves.\n while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];\n\n try {\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means Raven caught an error invoking your application code. This is\n // expected behavior and NOT indicative of a bug with Raven.js.\n return func.apply(this, args);\n } catch (e) {\n self._ignoreNextOnError();\n self.captureException(e, options);\n throw e;\n }\n }\n\n // copy over properties of the old function\n for (var property in func) {\n if (hasKey(func, property)) {\n wrapped[property] = func[property];\n }\n }\n wrapped.prototype = func.prototype;\n\n func.__raven_wrapper__ = wrapped;\n // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n wrapped.__raven__ = true;\n wrapped.__orig__ = func;\n\n return wrapped;\n },\n\n /**\n * Uninstalls the global error handler.\n *\n * @return {Raven}\n */\n uninstall: function() {\n TraceKit.report.uninstall();\n\n this._detachPromiseRejectionHandler();\n this._unpatchFunctionToString();\n this._restoreBuiltIns();\n this._restoreConsole();\n\n Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n this._isRavenInstalled = false;\n\n return this;\n },\n\n /**\n * Callback used for `unhandledrejection` event\n *\n * @param {PromiseRejectionEvent} event An object containing\n * promise: the Promise that was rejected\n * reason: the value with which the Promise was rejected\n * @return void\n */\n _promiseRejectionHandler: function(event) {\n this._logDebug('debug', 'Raven caught unhandled promise rejection:', event);\n this.captureException(event.reason, {\n mechanism: {\n type: 'onunhandledrejection',\n handled: false\n }\n });\n },\n\n /**\n * Installs the global promise rejection handler.\n *\n * @return {raven}\n */\n _attachPromiseRejectionHandler: function() {\n this._promiseRejectionHandler = this._promiseRejectionHandler.bind(this);\n _window.addEventListener &&\n _window.addEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Uninstalls the global promise rejection handler.\n *\n * @return {raven}\n */\n _detachPromiseRejectionHandler: function() {\n _window.removeEventListener &&\n _window.removeEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Manually capture an exception and send it over to Sentry\n *\n * @param {error} ex An exception to be logged\n * @param {object} options A specific set of options for this error [optional]\n * @return {Raven}\n */\n captureException: function(ex, options) {\n options = objectMerge({trimHeadFrames: 0}, options ? options : {});\n\n if (isErrorEvent(ex) && ex.error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n ex = ex.error;\n } else if (isDOMError(ex) || isDOMException(ex)) {\n // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)\n // then we just extract the name and message, as they don't provide anything else\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n var name = ex.name || (isDOMError(ex) ? 'DOMError' : 'DOMException');\n var message = ex.message ? name + ': ' + ex.message : name;\n\n return this.captureMessage(\n message,\n objectMerge(options, {\n // neither DOMError or DOMException provide stack trace and we most likely wont get it this way as well\n // but it's barely any overhead so we may at least try\n stacktrace: true,\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n } else if (isError(ex)) {\n // we have a real Error object\n ex = ex;\n } else if (isPlainObject(ex)) {\n // If it is plain Object, serialize it manually and extract options\n // This will allow us to group events based on top-level keys\n // which is much better than creating new group when any key/value change\n options = this._getCaptureExceptionOptionsFromPlainObject(options, ex);\n ex = new Error(options.message);\n } else {\n // If none of previous checks were valid, then it means that\n // it's not a DOMError/DOMException\n // it's not a plain Object\n // it's not a valid ErrorEvent (one with an error property)\n // it's not an Error\n // So bail out and capture it as a simple message:\n return this.captureMessage(\n ex,\n objectMerge(options, {\n stacktrace: true, // if we fall back to captureMessage, default to attempting a new trace\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n }\n\n // Store the raw exception object for potential debugging and introspection\n this._lastCapturedException = ex;\n\n // TraceKit.report will re-raise any exception passed to it,\n // which means you have to wrap it in try/catch. Instead, we\n // can wrap it here and only re-raise if TraceKit.report\n // raises an exception different from the one we asked to\n // report on.\n try {\n var stack = TraceKit.computeStackTrace(ex);\n this._handleStackInfo(stack, options);\n } catch (ex1) {\n if (ex !== ex1) {\n throw ex1;\n }\n }\n\n return this;\n },\n\n _getCaptureExceptionOptionsFromPlainObject: function(currentOptions, ex) {\n var exKeys = Object.keys(ex).sort();\n var options = objectMerge(currentOptions, {\n message:\n 'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys),\n fingerprint: [md5(exKeys)],\n extra: currentOptions.extra || {}\n });\n options.extra.__serialized__ = serializeException(ex);\n\n return options;\n },\n\n /*\n * Manually send a message to Sentry\n *\n * @param {string} msg A plain message to be captured in Sentry\n * @param {object} options A specific set of options for this message [optional]\n * @return {Raven}\n */\n captureMessage: function(msg, options) {\n // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an\n // early call; we'll error on the side of logging anything called before configuration since it's\n // probably something you should see:\n if (\n !!this._globalOptions.ignoreErrors.test &&\n this._globalOptions.ignoreErrors.test(msg)\n ) {\n return;\n }\n\n options = options || {};\n msg = msg + ''; // Make sure it's actually a string\n\n var data = objectMerge(\n {\n message: msg\n },\n options\n );\n\n var ex;\n // Generate a \"synthetic\" stack trace from this point.\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative\n // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,\n // or if it catches a thrown object without a \"stack\" property.\n try {\n throw new Error(msg);\n } catch (ex1) {\n ex = ex1;\n }\n\n // null exception name so `Error` isn't prefixed to msg\n ex.name = null;\n var stack = TraceKit.computeStackTrace(ex);\n\n // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]\n var initialCall = isArray(stack.stack) && stack.stack[1];\n\n // if stack[1] is `Raven.captureException`, it means that someone passed a string to it and we redirected that call\n // to be handled by `captureMessage`, thus `initialCall` is the 3rd one, not 2nd\n // initialCall => captureException(string) => captureMessage(string)\n if (initialCall && initialCall.func === 'Raven.captureException') {\n initialCall = stack.stack[2];\n }\n\n var fileurl = (initialCall && initialCall.url) || '';\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n // Always attempt to get stacktrace if message is empty.\n // It's the only way to provide any helpful information to the user.\n if (this._globalOptions.stacktrace || options.stacktrace || data.message === '') {\n // fingerprint on msg, not stack trace (legacy behavior, could be revisited)\n data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;\n\n options = objectMerge(\n {\n trimHeadFrames: 0\n },\n options\n );\n // Since we know this is a synthetic trace, the top frame (this function call)\n // MUST be from Raven.js, so mark it for trimming\n // We add to the trim counter so that callers can choose to trim extra frames, such\n // as utility functions.\n options.trimHeadFrames += 1;\n\n var frames = this._prepareFrames(stack, options);\n data.stacktrace = {\n // Sentry expects frames oldest to newest\n frames: frames.reverse()\n };\n }\n\n // Make sure that fingerprint is always wrapped in an array\n if (data.fingerprint) {\n data.fingerprint = isArray(data.fingerprint)\n ? data.fingerprint\n : [data.fingerprint];\n }\n\n // Fire away!\n this._send(data);\n\n return this;\n },\n\n captureBreadcrumb: function(obj) {\n var crumb = objectMerge(\n {\n timestamp: now() / 1000\n },\n obj\n );\n\n if (isFunction(this._globalOptions.breadcrumbCallback)) {\n var result = this._globalOptions.breadcrumbCallback(crumb);\n\n if (isObject(result) && !isEmptyObject(result)) {\n crumb = result;\n } else if (result === false) {\n return this;\n }\n }\n\n this._breadcrumbs.push(crumb);\n if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {\n this._breadcrumbs.shift();\n }\n return this;\n },\n\n addPlugin: function(plugin /*arg1, arg2, ... argN*/) {\n var pluginArgs = [].slice.call(arguments, 1);\n\n this._plugins.push([plugin, pluginArgs]);\n if (this._isRavenInstalled) {\n this._drainPlugins();\n }\n\n return this;\n },\n\n /*\n * Set/clear a user to be sent along with the payload.\n *\n * @param {object} user An object representing user data [optional]\n * @return {Raven}\n */\n setUserContext: function(user) {\n // Intentionally do not merge here since that's an unexpected behavior.\n this._globalContext.user = user;\n\n return this;\n },\n\n /*\n * Merge extra attributes to be sent along with the payload.\n *\n * @param {object} extra An object representing extra data [optional]\n * @return {Raven}\n */\n setExtraContext: function(extra) {\n this._mergeContext('extra', extra);\n\n return this;\n },\n\n /*\n * Merge tags to be sent along with the payload.\n *\n * @param {object} tags An object representing tags [optional]\n * @return {Raven}\n */\n setTagsContext: function(tags) {\n this._mergeContext('tags', tags);\n\n return this;\n },\n\n /*\n * Clear all of the context.\n *\n * @return {Raven}\n */\n clearContext: function() {\n this._globalContext = {};\n\n return this;\n },\n\n /*\n * Get a copy of the current context. This cannot be mutated.\n *\n * @return {object} copy of context\n */\n getContext: function() {\n // lol javascript\n return JSON.parse(stringify(this._globalContext));\n },\n\n /*\n * Set environment of application\n *\n * @param {string} environment Typically something like 'production'.\n * @return {Raven}\n */\n setEnvironment: function(environment) {\n this._globalOptions.environment = environment;\n\n return this;\n },\n\n /*\n * Set release version of application\n *\n * @param {string} release Typically something like a git SHA to identify version\n * @return {Raven}\n */\n setRelease: function(release) {\n this._globalOptions.release = release;\n\n return this;\n },\n\n /*\n * Set the dataCallback option\n *\n * @param {function} callback The callback to run which allows the\n * data blob to be mutated before sending\n * @return {Raven}\n */\n setDataCallback: function(callback) {\n var original = this._globalOptions.dataCallback;\n this._globalOptions.dataCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the breadcrumbCallback option\n *\n * @param {function} callback The callback to run which allows filtering\n * or mutating breadcrumbs\n * @return {Raven}\n */\n setBreadcrumbCallback: function(callback) {\n var original = this._globalOptions.breadcrumbCallback;\n this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the shouldSendCallback option\n *\n * @param {function} callback The callback to run which allows\n * introspecting the blob before sending\n * @return {Raven}\n */\n setShouldSendCallback: function(callback) {\n var original = this._globalOptions.shouldSendCallback;\n this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /**\n * Override the default HTTP transport mechanism that transmits data\n * to the Sentry server.\n *\n * @param {function} transport Function invoked instead of the default\n * `makeRequest` handler.\n *\n * @return {Raven}\n */\n setTransport: function(transport) {\n this._globalOptions.transport = transport;\n\n return this;\n },\n\n /*\n * Get the latest raw exception that was captured by Raven.\n *\n * @return {error}\n */\n lastException: function() {\n return this._lastCapturedException;\n },\n\n /*\n * Get the last event id\n *\n * @return {string}\n */\n lastEventId: function() {\n return this._lastEventId;\n },\n\n /*\n * Determine if Raven is setup and ready to go.\n *\n * @return {boolean}\n */\n isSetup: function() {\n if (!this._hasJSON) return false; // needs JSON support\n if (!this._globalServer) {\n if (!this.ravenNotConfiguredError) {\n this.ravenNotConfiguredError = true;\n this._logDebug('error', 'Error: Raven has not been configured.');\n }\n return false;\n }\n return true;\n },\n\n afterLoad: function() {\n // TODO: remove window dependence?\n\n // Attempt to initialize Raven on load\n var RavenConfig = _window.RavenConfig;\n if (RavenConfig) {\n this.config(RavenConfig.dsn, RavenConfig.config).install();\n }\n },\n\n showReportDialog: function(options) {\n if (\n !_document // doesn't work without a document (React native)\n )\n return;\n\n options = options || {};\n\n var lastEventId = options.eventId || this.lastEventId();\n if (!lastEventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n var dsn = options.dsn || this._dsn;\n if (!dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var qs = '';\n qs += '?eventId=' + encode(lastEventId);\n qs += '&dsn=' + encode(dsn);\n\n var user = options.user || this._globalContext.user;\n if (user) {\n if (user.name) qs += '&name=' + encode(user.name);\n if (user.email) qs += '&email=' + encode(user.email);\n }\n\n var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/' + qs;\n (_document.head || _document.body).appendChild(script);\n },\n\n /**** Private functions ****/\n _ignoreNextOnError: function() {\n var self = this;\n this._ignoreOnError += 1;\n setTimeout(function() {\n // onerror should trigger before setTimeout\n self._ignoreOnError -= 1;\n });\n },\n\n _triggerEvent: function(eventType, options) {\n // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it\n var evt, key;\n\n if (!this._hasDocument) return;\n\n options = options || {};\n\n eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);\n\n if (_document.createEvent) {\n evt = _document.createEvent('HTMLEvents');\n evt.initEvent(eventType, true, true);\n } else {\n evt = _document.createEventObject();\n evt.eventType = eventType;\n }\n\n for (key in options)\n if (hasKey(options, key)) {\n evt[key] = options[key];\n }\n\n if (_document.createEvent) {\n // IE9 if standards\n _document.dispatchEvent(evt);\n } else {\n // IE8 regardless of Quirks or Standards\n // IE9 if quirks\n try {\n _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);\n } catch (e) {\n // Do nothing\n }\n }\n },\n\n /**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param evtName the event name (e.g. \"click\")\n * @returns {Function}\n * @private\n */\n _breadcrumbEventHandler: function(evtName) {\n var self = this;\n return function(evt) {\n // reset keypress timeout; e.g. triggering a 'click' after\n // a 'keypress' will reset the keypress debounce so that a new\n // set of keypresses can be recorded\n self._keypressTimeout = null;\n\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors). Ignore if we've\n // already captured the event.\n if (self._lastCapturedEvent === evt) return;\n\n self._lastCapturedEvent = evt;\n\n // try/catch both:\n // - accessing evt.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // can throw an exception in some circumstances.\n var target;\n try {\n target = htmlTreeAsString(evt.target);\n } catch (e) {\n target = '<unknown>';\n }\n\n self.captureBreadcrumb({\n category: 'ui.' + evtName, // e.g. ui.click, ui.input\n message: target\n });\n };\n },\n\n /**\n * Wraps addEventListener to capture keypress UI events\n * @returns {Function}\n * @private\n */\n _keypressEventHandler: function() {\n var self = this,\n debounceDuration = 1000; // milliseconds\n\n // TODO: if somehow user switches keypress target before\n // debounce timeout is triggered, we will only capture\n // a single breadcrumb from the FIRST target (acceptable?)\n return function(evt) {\n var target;\n try {\n target = evt.target;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n var tagName = target && target.tagName;\n\n // only consider keypress events on actual input elements\n // this will disregard keypresses targeting body (e.g. tabbing\n // through elements, hotkeys, etc)\n if (\n !tagName ||\n (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)\n )\n return;\n\n // record first keypress in a series, but ignore subsequent\n // keypresses until debounce clears\n var timeout = self._keypressTimeout;\n if (!timeout) {\n self._breadcrumbEventHandler('input')(evt);\n }\n clearTimeout(timeout);\n self._keypressTimeout = setTimeout(function() {\n self._keypressTimeout = null;\n }, debounceDuration);\n };\n },\n\n /**\n * Captures a breadcrumb of type \"navigation\", normalizing input URLs\n * @param to the originating URL\n * @param from the target URL\n * @private\n */\n _captureUrlChange: function(from, to) {\n var parsedLoc = parseUrl(this._location.href);\n var parsedTo = parseUrl(to);\n var parsedFrom = parseUrl(from);\n\n // because onpopstate only tells you the \"new\" (to) value of location.href, and\n // not the previous (from) value, we need to track the value of the current URL\n // state ourselves\n this._lastHref = to;\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)\n to = parsedTo.relative;\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)\n from = parsedFrom.relative;\n\n this.captureBreadcrumb({\n category: 'navigation',\n data: {\n to: to,\n from: from\n }\n });\n },\n\n _patchFunctionToString: function() {\n var self = this;\n self._originalFunctionToString = Function.prototype.toString;\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = function() {\n if (typeof this === 'function' && this.__raven__) {\n return self._originalFunctionToString.apply(this.__orig__, arguments);\n }\n return self._originalFunctionToString.apply(this, arguments);\n };\n },\n\n _unpatchFunctionToString: function() {\n if (this._originalFunctionToString) {\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = this._originalFunctionToString;\n }\n },\n\n /**\n * Wrap timer functions and event targets to catch errors and provide\n * better metadata.\n */\n _instrumentTryCatch: function() {\n var self = this;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapTimeFn(orig) {\n return function(fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n var originalCallback = args[0];\n if (isFunction(originalCallback)) {\n args[0] = self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {function: orig.name || '<anonymous>'}\n }\n },\n originalCallback\n );\n }\n\n // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it\n // also supports only two arguments and doesn't care what this is, so we\n // can just call the original function directly.\n if (orig.apply) {\n return orig.apply(this, args);\n } else {\n return orig(args[0], args[1]);\n }\n };\n }\n\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n function wrapEventTarget(global) {\n var proto = _window[global] && _window[global].prototype;\n if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n fill(\n proto,\n 'addEventListener',\n function(orig) {\n return function(evtName, fn, capture, secure) {\n // preserve arity\n try {\n if (fn && fn.handleEvent) {\n fn.handleEvent = self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n target: global,\n function: 'handleEvent',\n handler: (fn && fn.name) || '<anonymous>'\n }\n }\n },\n fn.handleEvent\n );\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`\n // so that we don't have more than one wrapper function\n var before, clickHandler, keypressHandler;\n\n if (\n autoBreadcrumbs &&\n autoBreadcrumbs.dom &&\n (global === 'EventTarget' || global === 'Node')\n ) {\n // NOTE: generating multiple handlers per addEventListener invocation, should\n // revisit and verify we can just use one (almost certainly)\n clickHandler = self._breadcrumbEventHandler('click');\n keypressHandler = self._keypressEventHandler();\n before = function(evt) {\n // need to intercept every DOM event in `before` argument, in case that\n // same wrapped method is re-used for different events (e.g. mousemove THEN click)\n // see #724\n if (!evt) return;\n\n var eventType;\n try {\n eventType = evt.type;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n if (eventType === 'click') return clickHandler(evt);\n else if (eventType === 'keypress') return keypressHandler(evt);\n };\n }\n return orig.call(\n this,\n evtName,\n self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n target: global,\n function: 'addEventListener',\n handler: (fn && fn.name) || '<anonymous>'\n }\n }\n },\n fn,\n before\n ),\n capture,\n secure\n );\n };\n },\n wrappedBuiltIns\n );\n fill(\n proto,\n 'removeEventListener',\n function(orig) {\n return function(evt, fn, capture, secure) {\n try {\n fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);\n } catch (e) {\n // ignore, accessing __raven_wrapper__ will throw in some Selenium environments\n }\n return orig.call(this, evt, fn, capture, secure);\n };\n },\n wrappedBuiltIns\n );\n }\n }\n\n fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n if (_window.requestAnimationFrame) {\n fill(\n _window,\n 'requestAnimationFrame',\n function(orig) {\n return function(cb) {\n return orig(\n self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n function: 'requestAnimationFrame',\n handler: (orig && orig.name) || '<anonymous>'\n }\n }\n },\n cb\n )\n );\n };\n },\n wrappedBuiltIns\n );\n }\n\n // event targets borrowed from bugsnag-js:\n // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666\n var eventTargets = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload'\n ];\n for (var i = 0; i < eventTargets.length; i++) {\n wrapEventTarget(eventTargets[i]);\n }\n },\n\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - XMLHttpRequests\n * - DOM interactions (click/typing)\n * - window.location changes\n * - console\n *\n * Can be disabled or individually configured via the `autoBreadcrumbs` config option\n */\n _instrumentBreadcrumbs: function() {\n var self = this;\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && isFunction(xhr[prop])) {\n fill(xhr, prop, function(orig) {\n return self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {function: prop, handler: (orig && orig.name) || '<anonymous>'}\n }\n },\n orig\n );\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;\n fill(\n xhrproto,\n 'open',\n function(origOpen) {\n return function(method, url) {\n // preserve arity\n\n // if Sentry key appears in URL, don't capture\n if (isString(url) && url.indexOf(self._globalKey) === -1) {\n this.__raven_xhr = {\n method: method,\n url: url,\n status_code: null\n };\n }\n\n return origOpen.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n\n fill(\n xhrproto,\n 'send',\n function(origSend) {\n return function() {\n // preserve arity\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__raven_xhr && xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhr.__raven_xhr.status_code = xhr.status;\n } catch (e) {\n /* do nothing */\n }\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'xhr',\n data: xhr.__raven_xhr\n });\n }\n }\n\n var props = ['onload', 'onerror', 'onprogress'];\n for (var j = 0; j < props.length; j++) {\n wrapProp(props[j], xhr);\n }\n\n if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n fill(\n xhr,\n 'onreadystatechange',\n function(orig) {\n return self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n function: 'onreadystatechange',\n handler: (orig && orig.name) || '<anonymous>'\n }\n }\n },\n orig,\n onreadystatechangeHandler\n );\n } /* intentionally don't track this instrumentation */\n );\n } else {\n // if onreadystatechange wasn't actually set by the page on this xhr, we\n // are free to set our own and capture the breadcrumb\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n\n return origSend.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n }\n\n if (autoBreadcrumbs.xhr && supportsFetch()) {\n fill(\n _window,\n 'fetch',\n function(origFetch) {\n return function() {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n\n var fetchInput = args[0];\n var method = 'GET';\n var url;\n\n if (typeof fetchInput === 'string') {\n url = fetchInput;\n } else if ('Request' in _window && fetchInput instanceof _window.Request) {\n url = fetchInput.url;\n if (fetchInput.method) {\n method = fetchInput.method;\n }\n } else {\n url = '' + fetchInput;\n }\n\n // if Sentry key appears in URL, don't capture, as it's our own request\n if (url.indexOf(self._globalKey) !== -1) {\n return origFetch.apply(this, args);\n }\n\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n\n var fetchData = {\n method: method,\n url: url,\n status_code: null\n };\n\n return origFetch\n .apply(this, args)\n .then(function(response) {\n fetchData.status_code = response.status;\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData\n });\n\n return response;\n })\n ['catch'](function(err) {\n // if there is an error performing the request\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData,\n level: 'error'\n });\n\n throw err;\n });\n };\n },\n wrappedBuiltIns\n );\n }\n\n // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n // to the document. Do this before we instrument addEventListener.\n if (autoBreadcrumbs.dom && this._hasDocument) {\n if (_document.addEventListener) {\n _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);\n _document.addEventListener('keypress', self._keypressEventHandler(), false);\n } else if (_document.attachEvent) {\n // IE8 Compatibility\n _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));\n _document.attachEvent('onkeypress', self._keypressEventHandler());\n }\n }\n\n // record navigation (URL) changes\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n var chrome = _window.chrome;\n var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n var hasPushAndReplaceState =\n !isChromePackagedApp &&\n _window.history &&\n _window.history.pushState &&\n _window.history.replaceState;\n if (autoBreadcrumbs.location && hasPushAndReplaceState) {\n // TODO: remove onpopstate handler on uninstall()\n var oldOnPopState = _window.onpopstate;\n _window.onpopstate = function() {\n var currentHref = self._location.href;\n self._captureUrlChange(self._lastHref, currentHref);\n\n if (oldOnPopState) {\n return oldOnPopState.apply(this, arguments);\n }\n };\n\n var historyReplacementFunction = function(origHistFunction) {\n // note history.pushState.length is 0; intentionally not declaring\n // params to preserve 0 arity\n return function(/* state, title, url */) {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n\n // url argument is optional\n if (url) {\n // coerce to string (this is what pushState does)\n self._captureUrlChange(self._lastHref, url + '');\n }\n\n return origHistFunction.apply(this, arguments);\n };\n };\n\n fill(_window.history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(_window.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n }\n\n if (autoBreadcrumbs.console && 'console' in _window && console.log) {\n // console\n var consoleMethodCallback = function(msg, data) {\n self.captureBreadcrumb({\n message: msg,\n level: data.level,\n category: 'console'\n });\n };\n\n each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {\n wrapConsoleMethod(console, level, consoleMethodCallback);\n });\n }\n },\n\n _restoreBuiltIns: function() {\n // restore any wrapped builtins\n var builtin;\n while (this._wrappedBuiltIns.length) {\n builtin = this._wrappedBuiltIns.shift();\n\n var obj = builtin[0],\n name = builtin[1],\n orig = builtin[2];\n\n obj[name] = orig;\n }\n },\n\n _restoreConsole: function() {\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsoleMethods) {\n this._originalConsole[method] = this._originalConsoleMethods[method];\n }\n },\n\n _drainPlugins: function() {\n var self = this;\n\n // FIX ME TODO\n each(this._plugins, function(_, plugin) {\n var installer = plugin[0];\n var args = plugin[1];\n installer.apply(self, [self].concat(args));\n });\n },\n\n _parseDSN: function(str) {\n var m = dsnPattern.exec(str),\n dsn = {},\n i = 7;\n\n try {\n while (i--) dsn[dsnKeys[i]] = m[i] || '';\n } catch (e) {\n throw new RavenConfigError('Invalid DSN: ' + str);\n }\n\n if (dsn.pass && !this._globalOptions.allowSecretKey) {\n throw new RavenConfigError(\n 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'\n );\n }\n\n return dsn;\n },\n\n _getGlobalServer: function(uri) {\n // assemble the endpoint from the uri pieces\n var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n\n if (uri.protocol) {\n globalServer = uri.protocol + ':' + globalServer;\n }\n return globalServer;\n },\n\n _handleOnErrorStackInfo: function(stackInfo, options) {\n options = options || {};\n options.mechanism = options.mechanism || {\n type: 'onerror',\n handled: false\n };\n\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo(stackInfo, options);\n }\n },\n\n _handleStackInfo: function(stackInfo, options) {\n var frames = this._prepareFrames(stackInfo, options);\n\n this._triggerEvent('handle', {\n stackInfo: stackInfo,\n options: options\n });\n\n this._processException(\n stackInfo.name,\n stackInfo.message,\n stackInfo.url,\n stackInfo.lineno,\n frames,\n options\n );\n },\n\n _prepareFrames: function(stackInfo, options) {\n var self = this;\n var frames = [];\n if (stackInfo.stack && stackInfo.stack.length) {\n each(stackInfo.stack, function(i, stack) {\n var frame = self._normalizeFrame(stack, stackInfo.url);\n if (frame) {\n frames.push(frame);\n }\n });\n\n // e.g. frames captured via captureMessage throw\n if (options && options.trimHeadFrames) {\n for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {\n frames[j].in_app = false;\n }\n }\n }\n frames = frames.slice(0, this._globalOptions.stackTraceLimit);\n return frames;\n },\n\n _normalizeFrame: function(frame, stackInfoUrl) {\n // normalize the frames data\n var normalized = {\n filename: frame.url,\n lineno: frame.line,\n colno: frame.column,\n function: frame.func || '?'\n };\n\n // Case when we don't have any information about the error\n // E.g. throwing a string or raw object, instead of an `Error` in Firefox\n // Generating synthetic error doesn't add any value here\n //\n // We should probably somehow let a user know that they should fix their code\n if (!frame.url) {\n normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler\n }\n\n normalized.in_app = !// determine if an exception came from outside of our app\n // first we check the global includePaths list.\n (\n (!!this._globalOptions.includePaths.test &&\n !this._globalOptions.includePaths.test(normalized.filename)) ||\n // Now we check for fun, if the function name is Raven or TraceKit\n /(Raven|TraceKit)\\./.test(normalized['function']) ||\n // finally, we do a last ditch effort and check for raven.min.js\n /raven\\.(min\\.)?js$/.test(normalized.filename)\n );\n\n return normalized;\n },\n\n _processException: function(type, message, fileurl, lineno, frames, options) {\n var prefixedMessage = (type ? type + ': ' : '') + (message || '');\n if (\n !!this._globalOptions.ignoreErrors.test &&\n (this._globalOptions.ignoreErrors.test(message) ||\n this._globalOptions.ignoreErrors.test(prefixedMessage))\n ) {\n return;\n }\n\n var stacktrace;\n\n if (frames && frames.length) {\n fileurl = frames[0].filename || fileurl;\n // Sentry expects frames oldest to newest\n // and JS sends them as newest to oldest\n frames.reverse();\n stacktrace = {frames: frames};\n } else if (fileurl) {\n stacktrace = {\n frames: [\n {\n filename: fileurl,\n lineno: lineno,\n in_app: true\n }\n ]\n };\n }\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n var data = objectMerge(\n {\n // sentry.interfaces.Exception\n exception: {\n values: [\n {\n type: type,\n value: message,\n stacktrace: stacktrace\n }\n ]\n },\n transaction: fileurl\n },\n options\n );\n\n var ex = data.exception.values[0];\n if (ex.type == null && ex.value === '') {\n ex.value = 'Unrecoverable error caught';\n }\n\n // Move mechanism from options to exception interface\n // We do this, as requiring user to pass `{exception:{mechanism:{ ... }}}` would be\n // too much\n if (!data.exception.mechanism && data.mechanism) {\n data.exception.mechanism = data.mechanism;\n delete data.mechanism;\n }\n\n data.exception.mechanism = objectMerge(\n {\n type: 'generic',\n handled: true\n },\n data.exception.mechanism || {}\n );\n\n // Fire away!\n this._send(data);\n },\n\n _trimPacket: function(data) {\n // For now, we only want to truncate the two different messages\n // but this could/should be expanded to just trim everything\n var max = this._globalOptions.maxMessageLength;\n if (data.message) {\n data.message = truncate(data.message, max);\n }\n if (data.exception) {\n var exception = data.exception.values[0];\n exception.value = truncate(exception.value, max);\n }\n\n var request = data.request;\n if (request) {\n if (request.url) {\n request.url = truncate(request.url, this._globalOptions.maxUrlLength);\n }\n if (request.Referer) {\n request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);\n }\n }\n\n if (data.breadcrumbs && data.breadcrumbs.values)\n this._trimBreadcrumbs(data.breadcrumbs);\n\n return data;\n },\n\n /**\n * Truncate breadcrumb values (right now just URLs)\n */\n _trimBreadcrumbs: function(breadcrumbs) {\n // known breadcrumb properties with urls\n // TODO: also consider arbitrary prop values that start with (https?)?://\n var urlProps = ['to', 'from', 'url'],\n urlProp,\n crumb,\n data;\n\n for (var i = 0; i < breadcrumbs.values.length; ++i) {\n crumb = breadcrumbs.values[i];\n if (\n !crumb.hasOwnProperty('data') ||\n !isObject(crumb.data) ||\n objectFrozen(crumb.data)\n )\n continue;\n\n data = objectMerge({}, crumb.data);\n for (var j = 0; j < urlProps.length; ++j) {\n urlProp = urlProps[j];\n if (data.hasOwnProperty(urlProp) && data[urlProp]) {\n data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);\n }\n }\n breadcrumbs.values[i].data = data;\n }\n },\n\n _getHttpData: function() {\n if (!this._hasNavigator && !this._hasDocument) return;\n var httpData = {};\n\n if (this._hasNavigator && _navigator.userAgent) {\n httpData.headers = {\n 'User-Agent': _navigator.userAgent\n };\n }\n\n // Check in `window` instead of `document`, as we may be in ServiceWorker environment\n if (_window.location && _window.location.href) {\n httpData.url = _window.location.href;\n }\n\n if (this._hasDocument && _document.referrer) {\n if (!httpData.headers) httpData.headers = {};\n httpData.headers.Referer = _document.referrer;\n }\n\n return httpData;\n },\n\n _resetBackoff: function() {\n this._backoffDuration = 0;\n this._backoffStart = null;\n },\n\n _shouldBackoff: function() {\n return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n },\n\n /**\n * Returns true if the in-process data payload matches the signature\n * of the previously-sent data\n *\n * NOTE: This has to be done at this level because TraceKit can generate\n * data from window.onerror WITHOUT an exception object (IE8, IE9,\n * other old browsers). This can take the form of an \"exception\"\n * data object with a single frame (derived from the onerror args).\n */\n _isRepeatData: function(current) {\n var last = this._lastData;\n\n if (\n !last ||\n current.message !== last.message || // defined for captureMessage\n current.transaction !== last.transaction // defined for captureException/onerror\n )\n return false;\n\n // Stacktrace interface (i.e. from captureMessage)\n if (current.stacktrace || last.stacktrace) {\n return isSameStacktrace(current.stacktrace, last.stacktrace);\n } else if (current.exception || last.exception) {\n // Exception interface (i.e. from captureException/onerror)\n return isSameException(current.exception, last.exception);\n }\n\n return true;\n },\n\n _setBackoffState: function(request) {\n // If we are already in a backoff state, don't change anything\n if (this._shouldBackoff()) {\n return;\n }\n\n var status = request.status;\n\n // 400 - project_id doesn't exist or some other fatal\n // 401 - invalid/revoked dsn\n // 429 - too many requests\n if (!(status === 400 || status === 401 || status === 429)) return;\n\n var retry;\n try {\n // If Retry-After is not in Access-Control-Expose-Headers, most\n // browsers will throw an exception trying to access it\n if (supportsFetch()) {\n retry = request.headers.get('Retry-After');\n } else {\n retry = request.getResponseHeader('Retry-After');\n }\n\n // Retry-After is returned in seconds\n retry = parseInt(retry, 10) * 1000;\n } catch (e) {\n /* eslint no-empty:0 */\n }\n\n this._backoffDuration = retry\n ? // If Sentry server returned a Retry-After value, use it\n retry\n : // Otherwise, double the last backoff duration (starts at 1 sec)\n this._backoffDuration * 2 || 1000;\n\n this._backoffStart = now();\n },\n\n _send: function(data) {\n var globalOptions = this._globalOptions;\n\n var baseData = {\n project: this._globalProject,\n logger: globalOptions.logger,\n platform: 'javascript'\n },\n httpData = this._getHttpData();\n\n if (httpData) {\n baseData.request = httpData;\n }\n\n // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload\n if (data.trimHeadFrames) delete data.trimHeadFrames;\n\n data = objectMerge(baseData, data);\n\n // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge\n data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);\n data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);\n\n // Send along our own collected metadata with extra\n data.extra['session:duration'] = now() - this._startTime;\n\n if (this._breadcrumbs && this._breadcrumbs.length > 0) {\n // intentionally make shallow copy so that additions\n // to breadcrumbs aren't accidentally sent in this request\n data.breadcrumbs = {\n values: [].slice.call(this._breadcrumbs, 0)\n };\n }\n\n if (this._globalContext.user) {\n // sentry.interfaces.User\n data.user = this._globalContext.user;\n }\n\n // Include the environment if it's defined in globalOptions\n if (globalOptions.environment) data.environment = globalOptions.environment;\n\n // Include the release if it's defined in globalOptions\n if (globalOptions.release) data.release = globalOptions.release;\n\n // Include server_name if it's defined in globalOptions\n if (globalOptions.serverName) data.server_name = globalOptions.serverName;\n\n data = this._sanitizeData(data);\n\n // Cleanup empty properties before sending them to the server\n Object.keys(data).forEach(function(key) {\n if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {\n delete data[key];\n }\n });\n\n if (isFunction(globalOptions.dataCallback)) {\n data = globalOptions.dataCallback(data) || data;\n }\n\n // Why??????????\n if (!data || isEmptyObject(data)) {\n return;\n }\n\n // Check if the request should be filtered or not\n if (\n isFunction(globalOptions.shouldSendCallback) &&\n !globalOptions.shouldSendCallback(data)\n ) {\n return;\n }\n\n // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),\n // so drop requests until \"cool-off\" period has elapsed.\n if (this._shouldBackoff()) {\n this._logDebug('warn', 'Raven dropped error due to backoff: ', data);\n return;\n }\n\n if (typeof globalOptions.sampleRate === 'number') {\n if (Math.random() < globalOptions.sampleRate) {\n this._sendProcessedPayload(data);\n }\n } else {\n this._sendProcessedPayload(data);\n }\n },\n\n _sanitizeData: function(data) {\n return sanitize(data, this._globalOptions.sanitizeKeys);\n },\n\n _getUuid: function() {\n return uuid4();\n },\n\n _sendProcessedPayload: function(data, callback) {\n var self = this;\n var globalOptions = this._globalOptions;\n\n if (!this.isSetup()) return;\n\n // Try and clean up the packet before sending by truncating long values\n data = this._trimPacket(data);\n\n // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,\n // but this would require copying an un-truncated copy of the data packet, which can be\n // arbitrarily deep (extra_data) -- could be worthwhile? will revisit\n if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {\n this._logDebug('warn', 'Raven dropped repeat event: ', data);\n return;\n }\n\n // Send along an event_id if not explicitly passed.\n // This event_id can be used to reference the error within Sentry itself.\n // Set lastEventId after we know the error should actually be sent\n this._lastEventId = data.event_id || (data.event_id = this._getUuid());\n\n // Store outbound payload after trim\n this._lastData = data;\n\n this._logDebug('debug', 'Raven about to send:', data);\n\n var auth = {\n sentry_version: '7',\n sentry_client: 'raven-js/' + this.VERSION,\n sentry_key: this._globalKey\n };\n\n if (this._globalSecret) {\n auth.sentry_secret = this._globalSecret;\n }\n\n var exception = data.exception && data.exception.values[0];\n\n // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy\n if (\n this._globalOptions.autoBreadcrumbs &&\n this._globalOptions.autoBreadcrumbs.sentry\n ) {\n this.captureBreadcrumb({\n category: 'sentry',\n message: exception\n ? (exception.type ? exception.type + ': ' : '') + exception.value\n : data.message,\n event_id: data.event_id,\n level: data.level || 'error' // presume error unless specified\n });\n }\n\n var url = this._globalEndpoint;\n (globalOptions.transport || this._makeRequest).call(this, {\n url: url,\n auth: auth,\n data: data,\n options: globalOptions,\n onSuccess: function success() {\n self._resetBackoff();\n\n self._triggerEvent('success', {\n data: data,\n src: url\n });\n callback && callback();\n },\n onError: function failure(error) {\n self._logDebug('error', 'Raven transport failed to send: ', error);\n\n if (error.request) {\n self._setBackoffState(error.request);\n }\n\n self._triggerEvent('failure', {\n data: data,\n src: url\n });\n error = error || new Error('Raven send failed (no additional details provided)');\n callback && callback(error);\n }\n });\n },\n\n _makeRequest: function(opts) {\n // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests\n var url = opts.url + '?' + urlencode(opts.auth);\n\n var evaluatedHeaders = null;\n var evaluatedFetchParameters = {};\n\n if (opts.options.headers) {\n evaluatedHeaders = this._evaluateHash(opts.options.headers);\n }\n\n if (opts.options.fetchParameters) {\n evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);\n }\n\n if (supportsFetch()) {\n evaluatedFetchParameters.body = stringify(opts.data);\n\n var defaultFetchOptions = objectMerge({}, this._fetchDefaults);\n var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);\n\n if (evaluatedHeaders) {\n fetchOptions.headers = evaluatedHeaders;\n }\n\n return _window\n .fetch(url, fetchOptions)\n .then(function(response) {\n if (response.ok) {\n opts.onSuccess && opts.onSuccess();\n } else {\n var error = new Error('Sentry error code: ' + response.status);\n // It's called request only to keep compatibility with XHR interface\n // and not add more redundant checks in setBackoffState method\n error.request = response;\n opts.onError && opts.onError(error);\n }\n })\n ['catch'](function() {\n opts.onError &&\n opts.onError(new Error('Sentry error code: network unavailable'));\n });\n }\n\n var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();\n if (!request) return;\n\n // if browser doesn't support CORS (e.g. IE7), we are out of luck\n var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';\n\n if (!hasCORS) return;\n\n if ('withCredentials' in request) {\n request.onreadystatechange = function() {\n if (request.readyState !== 4) {\n return;\n } else if (request.status === 200) {\n opts.onSuccess && opts.onSuccess();\n } else if (opts.onError) {\n var err = new Error('Sentry error code: ' + request.status);\n err.request = request;\n opts.onError(err);\n }\n };\n } else {\n request = new XDomainRequest();\n // xdomainrequest cannot go http -> https (or vice versa),\n // so always use protocol relative\n url = url.replace(/^https?:/, '');\n\n // onreadystatechange not supported by XDomainRequest\n if (opts.onSuccess) {\n request.onload = opts.onSuccess;\n }\n if (opts.onError) {\n request.onerror = function() {\n var err = new Error('Sentry error code: XDomainRequest');\n err.request = request;\n opts.onError(err);\n };\n }\n }\n\n request.open('POST', url);\n\n if (evaluatedHeaders) {\n each(evaluatedHeaders, function(key, value) {\n request.setRequestHeader(key, value);\n });\n }\n\n request.send(stringify(opts.data));\n },\n\n _evaluateHash: function(hash) {\n var evaluated = {};\n\n for (var key in hash) {\n if (hash.hasOwnProperty(key)) {\n var value = hash[key];\n evaluated[key] = typeof value === 'function' ? value() : value;\n }\n }\n\n return evaluated;\n },\n\n _logDebug: function(level) {\n // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change\n if (\n this._originalConsoleMethods[level] &&\n (this.debug || this._globalOptions.debug)\n ) {\n // In IE<10 console methods do not have their own 'apply' method\n Function.prototype.apply.call(\n this._originalConsoleMethods[level],\n this._originalConsole,\n [].slice.call(arguments, 1)\n );\n }\n },\n\n _mergeContext: function(key, context) {\n if (isUndefined(context)) {\n delete this._globalContext[key];\n } else {\n this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);\n }\n }\n};\n\n// Deprecations\nRaven.prototype.setUser = Raven.prototype.setUserContext;\nRaven.prototype.setReleaseContext = Raven.prototype.setRelease;\n\nmodule.exports = Raven;\n","/**\n * Enforces a single instance of the Raven client, and the\n * main entry point for Raven. If you are a consumer of the\n * Raven library, you SHOULD load this file (vs raven.js).\n **/\n\nvar RavenConstructor = require('./raven');\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\n\nvar Raven = new RavenConstructor();\n\n/*\n * Allow multiple versions of Raven to be installed.\n * Strip Raven from the global context and returns the instance.\n *\n * @return {Raven}\n */\nRaven.noConflict = function() {\n _window.Raven = _Raven;\n return Raven;\n};\n\nRaven.afterLoad();\n\nmodule.exports = Raven;\n\n/**\n * DISCLAIMER:\n *\n * Expose `Client` constructor for cases where user want to track multiple \"sub-applications\" in one larger app.\n * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.\n * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.\n *\n * It's called `Client' to be in-line with Raven Node implementation.\n *\n * HOWTO:\n *\n * import Raven from 'raven-js';\n *\n * const someAppReporter = new Raven.Client();\n * const someOtherAppReporter = new Raven.Client();\n *\n * someAppReporter.config('__DSN__', {\n * ...config goes here\n * });\n *\n * someOtherAppReporter.config('__OTHER_DSN__', {\n * ...config goes here\n * });\n *\n * someAppReporter.captureMessage(...);\n * someAppReporter.captureException(...);\n * someAppReporter.captureBreadcrumb(...);\n *\n * someOtherAppReporter.captureMessage(...);\n * someOtherAppReporter.captureException(...);\n * someOtherAppReporter.captureBreadcrumb(...);\n *\n * It should \"just work\".\n */\nmodule.exports.Client = RavenConstructor;\n","// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\nimport Raven from 'raven-js';\n\n(() => {\n const isLive = window.location.host === 'plyr.io';\n\n // Raven / Sentry\n // For demo site (https://plyr.io) only\n if (isLive) {\n Raven.config(\n 'https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555',\n ).install();\n }\n\n document.addEventListener('DOMContentLoaded', () => {\n Raven.context(() => {\n const selector = '#player';\n const container = document.getElementById('container');\n\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n if (container.contains(event.target)) {\n return;\n }\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n const focused = document.activeElement;\n\n if (!focused || container.contains(focused)) {\n return;\n }\n\n focused.classList.add(tabClassName);\n }, 10);\n });\n\n // Setup the player\n const player = new Plyr(selector, {\n debug: true,\n title: 'View From A Blue Moon',\n iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: false,\n seek: false,\n },\n // clickToPlay: false,\n /* controls: [\n 'play-large',\n 'restart',\n 'rewind',\n 'play',\n 'fast-forward',\n 'progress',\n 'current-time',\n 'duration',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ], */\n /* i18n: {\n restart: '重新開始',\n rewind: '快退{seektime}秒',\n play: '播放',\n pause: '暫停',\n fastForward: '快進{seektime}秒',\n seek: '尋求',\n played: '發揮',\n buffered: '緩衝的',\n currentTime: '當前時間戳',\n duration: '長短',\n volume: '音量',\n mute: '靜音',\n unmute: '取消靜音',\n enableCaptions: '開啟字幕',\n disableCaptions: '關閉字幕',\n enterFullscreen: '進入全螢幕',\n exitFullscreen: '退出全螢幕',\n frameTitle: '球員為{title}',\n captions: '字幕',\n settings: '設定',\n speed: '速度',\n normal: '正常',\n quality: '質量',\n loop: '循環',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: '重啟',\n disabled: '殘',\n enabled: '啟用',\n advertisement: '廣告',\n }, */\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n // enabled: true,\n publisherId: '918848828995742',\n },\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (\n !(type in types) ||\n (!init && type === currentType) ||\n (!currentType.length && type === types.video)\n ) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [\n {\n src:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-576p.mp4',\n type: 'video/mp4',\n size: 576,\n },\n {\n src:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-720p.mp4',\n type: 'video/mp4',\n size: 720,\n },\n {\n src:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1080p.mp4',\n type: 'video/mp4',\n size: 1080,\n },\n {\n src:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1440p.mp4',\n type: 'video/mp4',\n size: 1440,\n },\n ],\n poster:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title:\n 'Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;',\n sources: [\n {\n src:\n 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src:\n 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n sources: [\n {\n src:\n 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n },\n ],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [\n {\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n },\n ],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button =>\n toggleClass(button.parentElement, 'active', false),\n );\n\n // Set active on parent\n toggleClass(\n document.querySelector(`[data-source=\"${type}\"]`),\n 'active',\n true,\n );\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(\n cite => {\n cite.setAttribute('hidden', '');\n },\n );\n document\n .querySelector(`.plyr__cite--${type}`)\n .removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n });\n });\n\n // Google analytics\n // For demo site (https://plyr.io) only\n /* eslint-disable */\n if (isLive) {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(\n window,\n document,\n 'script',\n 'https://www.google-analytics.com/analytics.js',\n 'ga',\n );\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n }\n /* eslint-enable */\n})();\n"]} \ No newline at end of file
diff --git a/demo/dist/demo.min.js b/demo/dist/demo.min.js
index 1d3122ee..fbdef057 100644
--- a/demo/dist/demo.min.js
+++ b/demo/dist/demo.min.js
@@ -1,2 +1,2 @@
-"object"==typeof navigator&&function(){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};var t,r=(function(e,t){function r(e,t){for(var r=0;r<e.length;++r)if(e[r]===t)return r;return-1}function n(e,t){var n=[],o=[];return null==t&&(t=function(e,t){return n[0]===t?"[Circular ~]":"[Circular ~."+o.slice(0,r(n,t)).join(".")+"]"}),function(i,a){if(n.length>0){var s=r(n,this);~s?n.splice(s+1):n.push(this),~s?o.splice(s,1/0,i):o.push(i),~r(n,a)&&(a=t.call(this,i,a))}else n.push(a);return null==e?a instanceof Error?function(e){var t={stack:e.stack,message:e.message,name:e.name};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t}(a):a:e.call(this,i,a)}}(e.exports=function(e,t,r,o){return JSON.stringify(e,n(t,o),r)}).getSerialize=n}(t={exports:{}},t.exports),t.exports),n=(r.getSerialize,"undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{});function o(e){return void 0===e}function i(e){return"[object Object]"===Object.prototype.toString.call(e)}function a(e){return"[object String]"===Object.prototype.toString.call(e)}function s(e){return"[object Array]"===Object.prototype.toString.call(e)}function c(){if(!("fetch"in n))return!1;try{return new Headers,new Request(""),new Response,!0}catch(e){return!1}}function l(e,t){var r,n;if(o(e.length))for(r in e)h(e,r)&&t.call(null,r,e[r]);else if(n=e.length)for(r=0;r<n;r++)t.call(null,r,e[r])}function u(e,t){if("number"!=typeof t)throw new Error("2nd argument to `truncate` function should be a number");return"string"!=typeof e||0===t?e:e.length<=t?e:e.substr(0,t)+"…"}function h(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function p(e){for(var t,r=[],n=0,o=e.length;n<o;n++)a(t=e[n])?r.push(t.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1")):t&&t.source&&r.push(t.source);return new RegExp(r.join("|"),"i")}function f(e){var t,r,n,o,i,s=[];if(!e||!e.tagName)return"";if(s.push(e.tagName.toLowerCase()),e.id&&s.push("#"+e.id),(t=e.className)&&a(t))for(r=t.split(/\s+/),i=0;i<r.length;i++)s.push("."+r[i]);var c=["type","name","title","alt"];for(i=0;i<c.length;i++)n=c[i],(o=e.getAttribute(n))&&s.push("["+n+'="'+o+'"]');return s.join("")}function d(e,t){return!!(!!e^!!t)}function g(e,t){if(d(e,t))return!1;var r,n,o=e.frames,i=t.frames;if(void 0===o||void 0===i)return!1;if(o.length!==i.length)return!1;for(var a=0;a<o.length;a++)if(r=o[a],n=i[a],r.filename!==n.filename||r.lineno!==n.lineno||r.colno!==n.colno||r.function!==n.function)return!1;return!0}var m=3,_=51200,v=40;function b(e){return function(e){return~-encodeURI(e).split(/%..|./).length}(JSON.stringify(e))}function y(e){if("string"==typeof e){return u(e,40)}if("number"==typeof e||"boolean"==typeof e||void 0===e)return e;var t=Object.prototype.toString.call(e);return"[object Object]"===t?"[Object]":"[object Array]"===t?"[Array]":"[object Function]"===t?e.name?"[Function: "+e.name+"]":"[Function]":e}var E={isObject:function(e){return"object"==typeof e&&null!==e},isError:function(e){switch(Object.prototype.toString.call(e)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return e instanceof Error}},isErrorEvent:function(e){return"[object ErrorEvent]"===Object.prototype.toString.call(e)},isDOMError:function(e){return"[object DOMError]"===Object.prototype.toString.call(e)},isDOMException:function(e){return"[object DOMException]"===Object.prototype.toString.call(e)},isUndefined:o,isFunction:function(e){return"function"==typeof e},isPlainObject:i,isString:a,isArray:s,isEmptyObject:function(e){if(!i(e))return!1;for(var t in e)if(e.hasOwnProperty(t))return!1;return!0},supportsErrorEvent:function(){try{return new ErrorEvent(""),!0}catch(e){return!1}},supportsDOMError:function(){try{return new DOMError(""),!0}catch(e){return!1}},supportsDOMException:function(){try{return new DOMException(""),!0}catch(e){return!1}},supportsFetch:c,supportsReferrerPolicy:function(){if(!c())return!1;try{return new Request("pickleRick",{referrerPolicy:"origin"}),!0}catch(e){return!1}},supportsPromiseRejectionEvent:function(){return"function"==typeof PromiseRejectionEvent},wrappedCallback:function(e){return function(t,r){var n=e(t)||t;return r&&r(n)||n}},each:l,objectMerge:function(e,t){return t?(l(t,function(t,r){e[t]=r}),e):e},truncate:u,objectFrozen:function(e){return!!Object.isFrozen&&Object.isFrozen(e)},hasKey:h,joinRegExp:p,urlencode:function(e){var t=[];return l(e,function(e,r){t.push(encodeURIComponent(e)+"="+encodeURIComponent(r))}),t.join("&")},uuid4:function(){var e=n.crypto||n.msCrypto;if(!o(e)&&e.getRandomValues){var t=new Uint16Array(8);e.getRandomValues(t),t[3]=4095&t[3]|16384,t[4]=16383&t[4]|32768;var r=function(e){for(var t=e.toString(16);t.length<4;)t="0"+t;return t};return r(t[0])+r(t[1])+r(t[2])+r(t[3])+r(t[4])+r(t[5])+r(t[6])+r(t[7])}return"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})},htmlTreeAsString:function(e){for(var t,r=[],n=0,o=0,i=" > ".length;e&&n++<5&&!("html"===(t=f(e))||n>1&&o+r.length*i+t.length>=80);)r.push(t),o+=t.length,e=e.parentNode;return r.reverse().join(" > ")},htmlElementAsString:f,isSameException:function(e,t){return!d(e,t)&&(e=e.values[0],t=t.values[0],e.type===t.type&&e.value===t.value&&(r=e.stacktrace,n=t.stacktrace,(!o(r)||!o(n))&&g(e.stacktrace,t.stacktrace)));var r,n},isSameStacktrace:g,parseUrl:function(e){if("string"!=typeof e)return{};var t=e.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/),r=t[6]||"",n=t[8]||"";return{protocol:t[2],host:t[4],path:t[5],relative:t[5]+r+n}},fill:function(e,t,r,n){if(null!=e){var o=e[t];e[t]=r(o),e[t].__raven__=!0,e[t].__orig__=o,n&&n.push([e,t,o])}},safeJoin:function(e,t){if(!s(e))return"";for(var r=[],n=0;n<e.length;n++)try{r.push(String(e[n]))}catch(e){r.push("[value cannot be serialized]")}return r.join(t)},serializeException:function e(t,n,o){if(!i(t))return t;o="number"!=typeof(n="number"!=typeof n?m:n)?_:o;var a=function e(t,r){return 0===r?y(t):i(t)?Object.keys(t).reduce(function(n,o){return n[o]=e(t[o],r-1),n},{}):Array.isArray(t)?t.map(function(t){return e(t,r-1)}):y(t)}(t,n);return b(r(a))>o?e(t,n-1):a},serializeKeysForMessage:function(e,t){if("number"==typeof e||"string"==typeof e)return e.toString();if(!Array.isArray(e))return"";if(0===(e=e.filter(function(e){return"string"==typeof e})).length)return"[object has no keys]";if(t="number"!=typeof t?v:t,e[0].length>=t)return e[0];for(var r=e.length;r>0;r--){var n=e.slice(0,r).join(", ");if(!(n.length>t))return r===e.length?n:n+"…"}return""},sanitize:function(e,t){if(!s(t)||s(t)&&0===t.length)return e;var n,o=p(t),a="********";try{n=JSON.parse(r(e))}catch(t){return e}return function e(t){return s(t)?t.map(function(t){return e(t)}):i(t)?Object.keys(t).reduce(function(r,n){return o.test(n)?r[n]=a:r[n]=e(t[n]),r},{}):t}(n)}},w={collectWindowErrors:!0,debug:!1},x="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},k=[].slice,S="?",O=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;function C(){return"undefined"==typeof document||null==document.location?"":document.location.href}w.report=function(){var e,t,r=[],n=null,o=null,i=null;function a(e,t){var n=null;if(!t||w.collectWindowErrors){for(var o in r)if(r.hasOwnProperty(o))try{r[o].apply(null,[e].concat(k.call(arguments,2)))}catch(e){n=e}if(n)throw n}}function s(t,r,n,o,s){var l=E.isErrorEvent(s)?s.error:s,u=E.isErrorEvent(t)?t.message:t;if(i)w.computeStackTrace.augmentStackTraceWithInitialElement(i,r,n,u),c();else if(l&&E.isError(l))a(w.computeStackTrace(l),!0);else{var h,p={url:r,line:n,column:o},f=void 0;if("[object String]"==={}.toString.call(u))(h=u.match(O))&&(f=h[1],u=h[2]);p.func=S,a({name:f,message:u,url:C(),stack:[p]},!0)}return!!e&&e.apply(this,arguments)}function c(){var e=i,t=n;n=null,i=null,o=null,a.apply(null,[e,!1].concat(t))}function l(e,t){var r=k.call(arguments,1);if(i){if(o===e)return;c()}var a=w.computeStackTrace(e);if(i=a,o=e,n=r,setTimeout(function(){o===e&&c()},a.incomplete?2e3:0),!1!==t)throw e}return l.subscribe=function(n){t||(e=x.onerror,x.onerror=s,t=!0),r.push(n)},l.unsubscribe=function(e){for(var t=r.length-1;t>=0;--t)r[t]===e&&r.splice(t,1)},l.uninstall=function(){t&&(x.onerror=e,t=!1,e=void 0),r=[]},l}(),w.computeStackTrace=function(){function e(e){if(void 0!==e.stack&&e.stack){for(var t,r,n,o=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,i=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,a=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,s=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,c=/\((\S*)(?::(\d+))(?::(\d+))\)/,l=e.stack.split("\n"),u=[],h=(/^(.*) is undefined$/.exec(e.message),0),p=l.length;h<p;++h){if(r=o.exec(l[h])){var f=r[2]&&0===r[2].indexOf("native");r[2]&&0===r[2].indexOf("eval")&&(t=c.exec(r[2]))&&(r[2]=t[1],r[3]=t[2],r[4]=t[3]),n={url:f?null:r[2],func:r[1]||S,args:f?[r[2]]:[],line:r[3]?+r[3]:null,column:r[4]?+r[4]:null}}else if(r=i.exec(l[h]))n={url:r[2],func:r[1]||S,args:[],line:+r[3],column:r[4]?+r[4]:null};else{if(!(r=a.exec(l[h])))continue;r[3]&&r[3].indexOf(" > eval")>-1&&(t=s.exec(r[3]))?(r[3]=t[1],r[4]=t[2],r[5]=null):0!==h||r[5]||void 0===e.columnNumber||(u[0].column=e.columnNumber+1),n={url:r[3],func:r[1]||S,args:r[2]?r[2].split(","):[],line:r[4]?+r[4]:null,column:r[5]?+r[5]:null}}if(!n.func&&n.line&&(n.func=S),n.url&&"blob:"===n.url.substr(0,5)){var d=new XMLHttpRequest;if(d.open("GET",n.url,!1),d.send(null),200===d.status){var g=d.responseText||"",m=(g=g.slice(-300)).match(/\/\/# sourceMappingURL=(.*)$/);if(m){var _=m[1];"~"===_.charAt(0)&&(_=("undefined"==typeof document||null==document.location?"":document.location.origin?document.location.origin:document.location.protocol+"//"+document.location.hostname+(document.location.port?":"+document.location.port:""))+_.slice(1)),n.url=_.slice(0,-4)}}}u.push(n)}return u.length?{name:e.name,message:e.message,url:C(),stack:u}:null}}function t(e,t,r,n){var o={url:t,line:r};if(o.url&&o.line){if(e.incomplete=!1,o.func||(o.func=S),e.stack.length>0&&e.stack[0].url===o.url){if(e.stack[0].line===o.line)return!1;if(!e.stack[0].line&&e.stack[0].func===o.func)return e.stack[0].line=o.line,!1}return e.stack.unshift(o),e.partial=!0,!0}return e.incomplete=!0,!1}function r(e,o){for(var i,a,s=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,c=[],l={},u=!1,h=r.caller;h&&!u;h=h.caller)if(h!==n&&h!==w.report){if(a={url:null,func:S,line:null,column:null},h.name?a.func=h.name:(i=s.exec(h.toString()))&&(a.func=i[1]),void 0===a.func)try{a.func=i.input.substring(0,i.input.indexOf("{"))}catch(e){}l[""+h]?u=!0:l[""+h]=!0,c.push(a)}o&&c.splice(0,o);var p={name:e.name,message:e.message,url:C(),stack:c};return t(p,e.sourceURL||e.fileName,e.line||e.lineNumber,e.message||e.description),p}function n(t,n){var o=null;n=null==n?0:+n;try{if(o=e(t))return o}catch(e){if(w.debug)throw e}try{if(o=r(t,n+1))return o}catch(e){if(w.debug)throw e}return{name:t.name,message:t.message,url:C()}}return n.augmentStackTraceWithInitialElement=t,n.computeStackTraceFromStackProp=e,n}();var R=w;function j(e,t){var r=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(r>>16)<<16|65535&r}function T(e,t,r,n,o,i){return j((a=j(j(t,e),j(n,i)))<<(s=o)|a>>>32-s,r);var a,s}function F(e,t,r,n,o,i,a){return T(t&r|~t&n,e,t,o,i,a)}function D(e,t,r,n,o,i,a){return T(t&n|r&~n,e,t,o,i,a)}function A(e,t,r,n,o,i,a){return T(t^r^n,e,t,o,i,a)}function B(e,t,r,n,o,i,a){return T(r^(t|~n),e,t,o,i,a)}function M(e,t){var r,n,o,i,a;e[t>>5]|=128<<t%32,e[14+(t+64>>>9<<4)]=t;var s=1732584193,c=-271733879,l=-1732584194,u=271733878;for(r=0;r<e.length;r+=16)n=s,o=c,i=l,a=u,s=F(s,c,l,u,e[r],7,-680876936),u=F(u,s,c,l,e[r+1],12,-389564586),l=F(l,u,s,c,e[r+2],17,606105819),c=F(c,l,u,s,e[r+3],22,-1044525330),s=F(s,c,l,u,e[r+4],7,-176418897),u=F(u,s,c,l,e[r+5],12,1200080426),l=F(l,u,s,c,e[r+6],17,-1473231341),c=F(c,l,u,s,e[r+7],22,-45705983),s=F(s,c,l,u,e[r+8],7,1770035416),u=F(u,s,c,l,e[r+9],12,-1958414417),l=F(l,u,s,c,e[r+10],17,-42063),c=F(c,l,u,s,e[r+11],22,-1990404162),s=F(s,c,l,u,e[r+12],7,1804603682),u=F(u,s,c,l,e[r+13],12,-40341101),l=F(l,u,s,c,e[r+14],17,-1502002290),s=D(s,c=F(c,l,u,s,e[r+15],22,1236535329),l,u,e[r+1],5,-165796510),u=D(u,s,c,l,e[r+6],9,-1069501632),l=D(l,u,s,c,e[r+11],14,643717713),c=D(c,l,u,s,e[r],20,-373897302),s=D(s,c,l,u,e[r+5],5,-701558691),u=D(u,s,c,l,e[r+10],9,38016083),l=D(l,u,s,c,e[r+15],14,-660478335),c=D(c,l,u,s,e[r+4],20,-405537848),s=D(s,c,l,u,e[r+9],5,568446438),u=D(u,s,c,l,e[r+14],9,-1019803690),l=D(l,u,s,c,e[r+3],14,-187363961),c=D(c,l,u,s,e[r+8],20,1163531501),s=D(s,c,l,u,e[r+13],5,-1444681467),u=D(u,s,c,l,e[r+2],9,-51403784),l=D(l,u,s,c,e[r+7],14,1735328473),s=A(s,c=D(c,l,u,s,e[r+12],20,-1926607734),l,u,e[r+5],4,-378558),u=A(u,s,c,l,e[r+8],11,-2022574463),l=A(l,u,s,c,e[r+11],16,1839030562),c=A(c,l,u,s,e[r+14],23,-35309556),s=A(s,c,l,u,e[r+1],4,-1530992060),u=A(u,s,c,l,e[r+4],11,1272893353),l=A(l,u,s,c,e[r+7],16,-155497632),c=A(c,l,u,s,e[r+10],23,-1094730640),s=A(s,c,l,u,e[r+13],4,681279174),u=A(u,s,c,l,e[r],11,-358537222),l=A(l,u,s,c,e[r+3],16,-722521979),c=A(c,l,u,s,e[r+6],23,76029189),s=A(s,c,l,u,e[r+9],4,-640364487),u=A(u,s,c,l,e[r+12],11,-421815835),l=A(l,u,s,c,e[r+15],16,530742520),s=B(s,c=A(c,l,u,s,e[r+2],23,-995338651),l,u,e[r],6,-198630844),u=B(u,s,c,l,e[r+7],10,1126891415),l=B(l,u,s,c,e[r+14],15,-1416354905),c=B(c,l,u,s,e[r+5],21,-57434055),s=B(s,c,l,u,e[r+12],6,1700485571),u=B(u,s,c,l,e[r+3],10,-1894986606),l=B(l,u,s,c,e[r+10],15,-1051523),c=B(c,l,u,s,e[r+1],21,-2054922799),s=B(s,c,l,u,e[r+8],6,1873313359),u=B(u,s,c,l,e[r+15],10,-30611744),l=B(l,u,s,c,e[r+6],15,-1560198380),c=B(c,l,u,s,e[r+13],21,1309151649),s=B(s,c,l,u,e[r+4],6,-145523070),u=B(u,s,c,l,e[r+11],10,-1120210379),l=B(l,u,s,c,e[r+2],15,718787259),c=B(c,l,u,s,e[r+9],21,-343485551),s=j(s,n),c=j(c,o),l=j(l,i),u=j(u,a);return[s,c,l,u]}function H(e){var t,r="",n=32*e.length;for(t=0;t<n;t+=8)r+=String.fromCharCode(e[t>>5]>>>t%32&255);return r}function L(e){var t,r=[];for(r[(e.length>>2)-1]=void 0,t=0;t<r.length;t+=1)r[t]=0;var n=8*e.length;for(t=0;t<n;t+=8)r[t>>5]|=(255&e.charCodeAt(t/8))<<t%32;return r}function P(e){var t,r,n="";for(r=0;r<e.length;r+=1)t=e.charCodeAt(r),n+="0123456789abcdef".charAt(t>>>4&15)+"0123456789abcdef".charAt(15&t);return n}function I(e){return unescape(encodeURIComponent(e))}function U(e){return function(e){return H(M(L(e),8*e.length))}(I(e))}function N(e,t){return function(e,t){var r,n,o=L(e),i=[],a=[];for(i[15]=a[15]=void 0,o.length>16&&(o=M(o,8*e.length)),r=0;r<16;r+=1)i[r]=909522486^o[r],a[r]=1549556828^o[r];return n=M(i.concat(L(t)),512+8*t.length),H(M(a.concat(n),640))}(I(e),I(t))}var q=function(e,t,r){return t?r?N(t,e):P(N(t,e)):r?U(e):P(U(e))};function z(e){this.name="RavenConfigError",this.message=e}z.prototype=new Error,z.prototype.constructor=z;var K=z,W=function(e,t,r){var n=e[t],o=e;if(t in e){var i="warn"===t?"warning":t;e[t]=function(){var e=[].slice.call(arguments),a=E.safeJoin(e," "),s={level:i,logger:"console",extra:{arguments:e}};"assert"===t?!1===e[0]&&(a="Assertion failed: "+(E.safeJoin(e.slice(1)," ")||"console.assert"),s.extra.arguments=e.slice(1),r&&r(a,s)):r&&r(a,s),n&&Function.prototype.apply.call(n,o,e)}}},V=E.isErrorEvent,$=E.isDOMError,X=E.isDOMException,J=E.isError,G=E.isObject,Y=E.isPlainObject,Z=E.isUndefined,Q=E.isFunction,ee=E.isString,te=E.isArray,re=E.isEmptyObject,ne=E.each,oe=E.objectMerge,ie=E.truncate,ae=E.objectFrozen,se=E.hasKey,ce=E.joinRegExp,le=E.urlencode,ue=E.uuid4,he=E.htmlTreeAsString,pe=E.isSameException,fe=E.isSameStacktrace,de=E.parseUrl,ge=E.fill,me=E.supportsFetch,_e=E.supportsReferrerPolicy,ve=E.serializeKeysForMessage,be=E.serializeException,ye=E.sanitize,Ee=W,we="source protocol user pass host port path".split(" "),xe=/^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/;function ke(){return+new Date}var Se="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},Oe=Se.document,Ce=Se.navigator;function Re(e,t){return Q(t)?function(r){return t(r,e)}:t}function je(){for(var e in this._hasJSON=!("object"!=typeof JSON||!JSON.stringify),this._hasDocument=!Z(Oe),this._hasNavigator=!Z(Ce),this._lastCapturedException=null,this._lastData=null,this._lastEventId=null,this._globalServer=null,this._globalKey=null,this._globalProject=null,this._globalContext={},this._globalOptions={release:Se.SENTRY_RELEASE&&Se.SENTRY_RELEASE.id,logger:"javascript",ignoreErrors:[],ignoreUrls:[],whitelistUrls:[],includePaths:[],headers:null,collectWindowErrors:!0,captureUnhandledRejections:!0,maxMessageLength:0,maxUrlLength:250,stackTraceLimit:50,autoBreadcrumbs:!0,instrument:!0,sampleRate:1,sanitizeKeys:[]},this._fetchDefaults={method:"POST",keepalive:!0,referrerPolicy:_e()?"origin":""},this._ignoreOnError=0,this._isRavenInstalled=!1,this._originalErrorStackTraceLimit=Error.stackTraceLimit,this._originalConsole=Se.console||{},this._originalConsoleMethods={},this._plugins=[],this._startTime=ke(),this._wrappedBuiltIns=[],this._breadcrumbs=[],this._lastCapturedEvent=null,this._keypressTimeout,this._location=Se.location,this._lastHref=this._location&&this._location.href,this._resetBackoff(),this._originalConsole)this._originalConsoleMethods[e]=this._originalConsole[e]}je.prototype={VERSION:"3.26.3",debug:!1,TraceKit:R,config:function(e,t){var r=this;if(r._globalServer)return this._logDebug("error","Error: Raven has already been configured"),r;if(!e)return r;var n=r._globalOptions;t&&ne(t,function(e,t){"tags"===e||"extra"===e||"user"===e?r._globalContext[e]=t:n[e]=t}),r.setDSN(e),n.ignoreErrors.push(/^Script error\.?$/),n.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/),n.ignoreErrors=ce(n.ignoreErrors),n.ignoreUrls=!!n.ignoreUrls.length&&ce(n.ignoreUrls),n.whitelistUrls=!!n.whitelistUrls.length&&ce(n.whitelistUrls),n.includePaths=ce(n.includePaths),n.maxBreadcrumbs=Math.max(0,Math.min(n.maxBreadcrumbs||100,100));var o={xhr:!0,console:!0,dom:!0,location:!0,sentry:!0},i=n.autoBreadcrumbs;"[object Object]"==={}.toString.call(i)?i=oe(o,i):!1!==i&&(i=o),n.autoBreadcrumbs=i;var a={tryCatch:!0},s=n.instrument;return"[object Object]"==={}.toString.call(s)?s=oe(a,s):!1!==s&&(s=a),n.instrument=s,R.collectWindowErrors=!!n.collectWindowErrors,r},install:function(){var e=this;return e.isSetup()&&!e._isRavenInstalled&&(R.report.subscribe(function(){e._handleOnErrorStackInfo.apply(e,arguments)}),e._globalOptions.captureUnhandledRejections&&e._attachPromiseRejectionHandler(),e._patchFunctionToString(),e._globalOptions.instrument&&e._globalOptions.instrument.tryCatch&&e._instrumentTryCatch(),e._globalOptions.autoBreadcrumbs&&e._instrumentBreadcrumbs(),e._drainPlugins(),e._isRavenInstalled=!0),Error.stackTraceLimit=e._globalOptions.stackTraceLimit,this},setDSN:function(e){var t=this._parseDSN(e),r=t.path.lastIndexOf("/"),n=t.path.substr(1,r);this._dsn=e,this._globalKey=t.user,this._globalSecret=t.pass&&t.pass.substr(1),this._globalProject=t.path.substr(r+1),this._globalServer=this._getGlobalServer(t),this._globalEndpoint=this._globalServer+"/"+n+"api/"+this._globalProject+"/store/",this._resetBackoff()},context:function(e,t,r){return Q(e)&&(r=t||[],t=e,e={}),this.wrap(e,t).apply(this,r)},wrap:function(e,t,r){var n=this;if(Z(t)&&!Q(e))return e;if(Q(e)&&(t=e,e=void 0),!Q(t))return t;try{if(t.__raven__)return t;if(t.__raven_wrapper__)return t.__raven_wrapper__}catch(e){return t}function o(){var o=[],i=arguments.length,a=!e||e&&!1!==e.deep;for(r&&Q(r)&&r.apply(this,arguments);i--;)o[i]=a?n.wrap(e,arguments[i]):arguments[i];try{return t.apply(this,o)}catch(t){throw n._ignoreNextOnError(),n.captureException(t,e),t}}for(var i in t)se(t,i)&&(o[i]=t[i]);return o.prototype=t.prototype,t.__raven_wrapper__=o,o.__raven__=!0,o.__orig__=t,o},uninstall:function(){return R.report.uninstall(),this._detachPromiseRejectionHandler(),this._unpatchFunctionToString(),this._restoreBuiltIns(),this._restoreConsole(),Error.stackTraceLimit=this._originalErrorStackTraceLimit,this._isRavenInstalled=!1,this},_promiseRejectionHandler:function(e){this._logDebug("debug","Raven caught unhandled promise rejection:",e),this.captureException(e.reason,{mechanism:{type:"onunhandledrejection",handled:!1}})},_attachPromiseRejectionHandler:function(){return this._promiseRejectionHandler=this._promiseRejectionHandler.bind(this),Se.addEventListener&&Se.addEventListener("unhandledrejection",this._promiseRejectionHandler),this},_detachPromiseRejectionHandler:function(){return Se.removeEventListener&&Se.removeEventListener("unhandledrejection",this._promiseRejectionHandler),this},captureException:function(e,t){if(t=oe({trimHeadFrames:0},t||{}),V(e)&&e.error)e=e.error;else{if($(e)||X(e)){var r=e.name||($(e)?"DOMError":"DOMException"),n=e.message?r+": "+e.message:r;return this.captureMessage(n,oe(t,{stacktrace:!0,trimHeadFrames:t.trimHeadFrames+1}))}if(J(e))e=e;else{if(!Y(e))return this.captureMessage(e,oe(t,{stacktrace:!0,trimHeadFrames:t.trimHeadFrames+1}));t=this._getCaptureExceptionOptionsFromPlainObject(t,e),e=new Error(t.message)}}this._lastCapturedException=e;try{var o=R.computeStackTrace(e);this._handleStackInfo(o,t)}catch(t){if(e!==t)throw t}return this},_getCaptureExceptionOptionsFromPlainObject:function(e,t){var r=Object.keys(t).sort(),n=oe(e,{message:"Non-Error exception captured with keys: "+ve(r),fingerprint:[q(r)],extra:e.extra||{}});return n.extra.__serialized__=be(t),n},captureMessage:function(e,t){if(!this._globalOptions.ignoreErrors.test||!this._globalOptions.ignoreErrors.test(e)){var r,n=oe({message:e+=""},t=t||{});try{throw new Error(e)}catch(e){r=e}r.name=null;var o=R.computeStackTrace(r),i=te(o.stack)&&o.stack[1];i&&"Raven.captureException"===i.func&&(i=o.stack[2]);var a=i&&i.url||"";if((!this._globalOptions.ignoreUrls.test||!this._globalOptions.ignoreUrls.test(a))&&(!this._globalOptions.whitelistUrls.test||this._globalOptions.whitelistUrls.test(a))){if(this._globalOptions.stacktrace||t.stacktrace||""===n.message){n.fingerprint=null==n.fingerprint?e:n.fingerprint,(t=oe({trimHeadFrames:0},t)).trimHeadFrames+=1;var s=this._prepareFrames(o,t);n.stacktrace={frames:s.reverse()}}return n.fingerprint&&(n.fingerprint=te(n.fingerprint)?n.fingerprint:[n.fingerprint]),this._send(n),this}}},captureBreadcrumb:function(e){var t=oe({timestamp:ke()/1e3},e);if(Q(this._globalOptions.breadcrumbCallback)){var r=this._globalOptions.breadcrumbCallback(t);if(G(r)&&!re(r))t=r;else if(!1===r)return this}return this._breadcrumbs.push(t),this._breadcrumbs.length>this._globalOptions.maxBreadcrumbs&&this._breadcrumbs.shift(),this},addPlugin:function(e){var t=[].slice.call(arguments,1);return this._plugins.push([e,t]),this._isRavenInstalled&&this._drainPlugins(),this},setUserContext:function(e){return this._globalContext.user=e,this},setExtraContext:function(e){return this._mergeContext("extra",e),this},setTagsContext:function(e){return this._mergeContext("tags",e),this},clearContext:function(){return this._globalContext={},this},getContext:function(){return JSON.parse(r(this._globalContext))},setEnvironment:function(e){return this._globalOptions.environment=e,this},setRelease:function(e){return this._globalOptions.release=e,this},setDataCallback:function(e){var t=this._globalOptions.dataCallback;return this._globalOptions.dataCallback=Re(t,e),this},setBreadcrumbCallback:function(e){var t=this._globalOptions.breadcrumbCallback;return this._globalOptions.breadcrumbCallback=Re(t,e),this},setShouldSendCallback:function(e){var t=this._globalOptions.shouldSendCallback;return this._globalOptions.shouldSendCallback=Re(t,e),this},setTransport:function(e){return this._globalOptions.transport=e,this},lastException:function(){return this._lastCapturedException},lastEventId:function(){return this._lastEventId},isSetup:function(){return!!this._hasJSON&&(!!this._globalServer||(this.ravenNotConfiguredError||(this.ravenNotConfiguredError=!0,this._logDebug("error","Error: Raven has not been configured.")),!1))},afterLoad:function(){var e=Se.RavenConfig;e&&this.config(e.dsn,e.config).install()},showReportDialog:function(e){if(Oe){var t=(e=e||{}).eventId||this.lastEventId();if(!t)throw new K("Missing eventId");var r=e.dsn||this._dsn;if(!r)throw new K("Missing DSN");var n=encodeURIComponent,o="";o+="?eventId="+n(t),o+="&dsn="+n(r);var i=e.user||this._globalContext.user;i&&(i.name&&(o+="&name="+n(i.name)),i.email&&(o+="&email="+n(i.email)));var a=this._getGlobalServer(this._parseDSN(r)),s=Oe.createElement("script");s.async=!0,s.src=a+"/api/embed/error-page/"+o,(Oe.head||Oe.body).appendChild(s)}},_ignoreNextOnError:function(){var e=this;this._ignoreOnError+=1,setTimeout(function(){e._ignoreOnError-=1})},_triggerEvent:function(e,t){var r,n;if(this._hasDocument){for(n in t=t||{},e="raven"+e.substr(0,1).toUpperCase()+e.substr(1),Oe.createEvent?(r=Oe.createEvent("HTMLEvents")).initEvent(e,!0,!0):(r=Oe.createEventObject()).eventType=e,t)se(t,n)&&(r[n]=t[n]);if(Oe.createEvent)Oe.dispatchEvent(r);else try{Oe.fireEvent("on"+r.eventType.toLowerCase(),r)}catch(e){}}},_breadcrumbEventHandler:function(e){var t=this;return function(r){if(t._keypressTimeout=null,t._lastCapturedEvent!==r){var n;t._lastCapturedEvent=r;try{n=he(r.target)}catch(e){n="<unknown>"}t.captureBreadcrumb({category:"ui."+e,message:n})}}},_keypressEventHandler:function(){var e=this;return function(t){var r;try{r=t.target}catch(e){return}var n=r&&r.tagName;if(n&&("INPUT"===n||"TEXTAREA"===n||r.isContentEditable)){var o=e._keypressTimeout;o||e._breadcrumbEventHandler("input")(t),clearTimeout(o),e._keypressTimeout=setTimeout(function(){e._keypressTimeout=null},1e3)}}},_captureUrlChange:function(e,t){var r=de(this._location.href),n=de(t),o=de(e);this._lastHref=t,r.protocol===n.protocol&&r.host===n.host&&(t=n.relative),r.protocol===o.protocol&&r.host===o.host&&(e=o.relative),this.captureBreadcrumb({category:"navigation",data:{to:t,from:e}})},_patchFunctionToString:function(){var e=this;e._originalFunctionToString=Function.prototype.toString,Function.prototype.toString=function(){return"function"==typeof this&&this.__raven__?e._originalFunctionToString.apply(this.__orig__,arguments):e._originalFunctionToString.apply(this,arguments)}},_unpatchFunctionToString:function(){this._originalFunctionToString&&(Function.prototype.toString=this._originalFunctionToString)},_instrumentTryCatch:function(){var e=this,t=e._wrappedBuiltIns;function r(t){return function(r,n){for(var o=new Array(arguments.length),i=0;i<o.length;++i)o[i]=arguments[i];var a=o[0];return Q(a)&&(o[0]=e.wrap({mechanism:{type:"instrument",data:{function:t.name||"<anonymous>"}}},a)),t.apply?t.apply(this,o):t(o[0],o[1])}}var n=this._globalOptions.autoBreadcrumbs;function o(r){var o=Se[r]&&Se[r].prototype;o&&o.hasOwnProperty&&o.hasOwnProperty("addEventListener")&&(ge(o,"addEventListener",function(t){return function(o,i,a,s){try{i&&i.handleEvent&&(i.handleEvent=e.wrap({mechanism:{type:"instrument",data:{target:r,function:"handleEvent",handler:i&&i.name||"<anonymous>"}}},i.handleEvent))}catch(e){}var c,l,u;return n&&n.dom&&("EventTarget"===r||"Node"===r)&&(l=e._breadcrumbEventHandler("click"),u=e._keypressEventHandler(),c=function(e){if(e){var t;try{t=e.type}catch(e){return}return"click"===t?l(e):"keypress"===t?u(e):void 0}}),t.call(this,o,e.wrap({mechanism:{type:"instrument",data:{target:r,function:"addEventListener",handler:i&&i.name||"<anonymous>"}}},i,c),a,s)}},t),ge(o,"removeEventListener",function(e){return function(t,r,n,o){try{r=r&&(r.__raven_wrapper__?r.__raven_wrapper__:r)}catch(e){}return e.call(this,t,r,n,o)}},t))}ge(Se,"setTimeout",r,t),ge(Se,"setInterval",r,t),Se.requestAnimationFrame&&ge(Se,"requestAnimationFrame",function(t){return function(r){return t(e.wrap({mechanism:{type:"instrument",data:{function:"requestAnimationFrame",handler:t&&t.name||"<anonymous>"}}},r))}},t);for(var i=["EventTarget","Window","Node","ApplicationCache","AudioTrackList","ChannelMergerNode","CryptoOperation","EventSource","FileReader","HTMLUnknownElement","IDBDatabase","IDBRequest","IDBTransaction","KeyOperation","MediaController","MessagePort","ModalWindow","Notification","SVGElementInstance","Screen","TextTrack","TextTrackCue","TextTrackList","WebSocket","WebSocketWorker","Worker","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload"],a=0;a<i.length;a++)o(i[a])},_instrumentBreadcrumbs:function(){var e=this,t=this._globalOptions.autoBreadcrumbs,r=e._wrappedBuiltIns;function n(t,r){t in r&&Q(r[t])&&ge(r,t,function(r){return e.wrap({mechanism:{type:"instrument",data:{function:t,handler:r&&r.name||"<anonymous>"}}},r)})}if(t.xhr&&"XMLHttpRequest"in Se){var o=Se.XMLHttpRequest&&Se.XMLHttpRequest.prototype;ge(o,"open",function(t){return function(r,n){return ee(n)&&-1===n.indexOf(e._globalKey)&&(this.__raven_xhr={method:r,url:n,status_code:null}),t.apply(this,arguments)}},r),ge(o,"send",function(t){return function(){var r=this;function o(){if(r.__raven_xhr&&4===r.readyState){try{r.__raven_xhr.status_code=r.status}catch(e){}e.captureBreadcrumb({type:"http",category:"xhr",data:r.__raven_xhr})}}for(var i=["onload","onerror","onprogress"],a=0;a<i.length;a++)n(i[a],r);return"onreadystatechange"in r&&Q(r.onreadystatechange)?ge(r,"onreadystatechange",function(t){return e.wrap({mechanism:{type:"instrument",data:{function:"onreadystatechange",handler:t&&t.name||"<anonymous>"}}},t,o)}):r.onreadystatechange=o,t.apply(this,arguments)}},r)}t.xhr&&me()&&ge(Se,"fetch",function(t){return function(){for(var r=new Array(arguments.length),n=0;n<r.length;++n)r[n]=arguments[n];var o,i=r[0],a="GET";if("string"==typeof i?o=i:"Request"in Se&&i instanceof Se.Request?(o=i.url,i.method&&(a=i.method)):o=""+i,-1!==o.indexOf(e._globalKey))return t.apply(this,r);r[1]&&r[1].method&&(a=r[1].method);var s={method:a,url:o,status_code:null};return t.apply(this,r).then(function(t){return s.status_code=t.status,e.captureBreadcrumb({type:"http",category:"fetch",data:s}),t}).catch(function(t){throw e.captureBreadcrumb({type:"http",category:"fetch",data:s,level:"error"}),t})}},r),t.dom&&this._hasDocument&&(Oe.addEventListener?(Oe.addEventListener("click",e._breadcrumbEventHandler("click"),!1),Oe.addEventListener("keypress",e._keypressEventHandler(),!1)):Oe.attachEvent&&(Oe.attachEvent("onclick",e._breadcrumbEventHandler("click")),Oe.attachEvent("onkeypress",e._keypressEventHandler())));var i=Se.chrome,a=!(i&&i.app&&i.app.runtime)&&Se.history&&Se.history.pushState&&Se.history.replaceState;if(t.location&&a){var s=Se.onpopstate;Se.onpopstate=function(){var t=e._location.href;if(e._captureUrlChange(e._lastHref,t),s)return s.apply(this,arguments)};var c=function(t){return function(){var r=arguments.length>2?arguments[2]:void 0;return r&&e._captureUrlChange(e._lastHref,r+""),t.apply(this,arguments)}};ge(Se.history,"pushState",c,r),ge(Se.history,"replaceState",c,r)}if(t.console&&"console"in Se&&console.log){var l=function(t,r){e.captureBreadcrumb({message:t,level:r.level,category:"console"})};ne(["debug","info","warn","error","log"],function(e,t){Ee(console,t,l)})}},_restoreBuiltIns:function(){for(var e;this._wrappedBuiltIns.length;){var t=(e=this._wrappedBuiltIns.shift())[0],r=e[1],n=e[2];t[r]=n}},_restoreConsole:function(){for(var e in this._originalConsoleMethods)this._originalConsole[e]=this._originalConsoleMethods[e]},_drainPlugins:function(){var e=this;ne(this._plugins,function(t,r){var n=r[0],o=r[1];n.apply(e,[e].concat(o))})},_parseDSN:function(e){var t=xe.exec(e),r={},n=7;try{for(;n--;)r[we[n]]=t[n]||""}catch(t){throw new K("Invalid DSN: "+e)}if(r.pass&&!this._globalOptions.allowSecretKey)throw new K("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return r},_getGlobalServer:function(e){var t="//"+e.host+(e.port?":"+e.port:"");return e.protocol&&(t=e.protocol+":"+t),t},_handleOnErrorStackInfo:function(e,t){(t=t||{}).mechanism=t.mechanism||{type:"onerror",handled:!1},this._ignoreOnError||this._handleStackInfo(e,t)},_handleStackInfo:function(e,t){var r=this._prepareFrames(e,t);this._triggerEvent("handle",{stackInfo:e,options:t}),this._processException(e.name,e.message,e.url,e.lineno,r,t)},_prepareFrames:function(e,t){var r=this,n=[];if(e.stack&&e.stack.length&&(ne(e.stack,function(t,o){var i=r._normalizeFrame(o,e.url);i&&n.push(i)}),t&&t.trimHeadFrames))for(var o=0;o<t.trimHeadFrames&&o<n.length;o++)n[o].in_app=!1;return n=n.slice(0,this._globalOptions.stackTraceLimit)},_normalizeFrame:function(e,t){var r={filename:e.url,lineno:e.line,colno:e.column,function:e.func||"?"};return e.url||(r.filename=t),r.in_app=!(this._globalOptions.includePaths.test&&!this._globalOptions.includePaths.test(r.filename)||/(Raven|TraceKit)\./.test(r.function)||/raven\.(min\.)?js$/.test(r.filename)),r},_processException:function(e,t,r,n,o,i){var a,s=(e?e+": ":"")+(t||"");if((!this._globalOptions.ignoreErrors.test||!this._globalOptions.ignoreErrors.test(t)&&!this._globalOptions.ignoreErrors.test(s))&&(o&&o.length?(r=o[0].filename||r,o.reverse(),a={frames:o}):r&&(a={frames:[{filename:r,lineno:n,in_app:!0}]}),(!this._globalOptions.ignoreUrls.test||!this._globalOptions.ignoreUrls.test(r))&&(!this._globalOptions.whitelistUrls.test||this._globalOptions.whitelistUrls.test(r)))){var c=oe({exception:{values:[{type:e,value:t,stacktrace:a}]},transaction:r},i),l=c.exception.values[0];null==l.type&&""===l.value&&(l.value="Unrecoverable error caught"),!c.exception.mechanism&&c.mechanism&&(c.exception.mechanism=c.mechanism,delete c.mechanism),c.exception.mechanism=oe({type:"generic",handled:!0},c.exception.mechanism||{}),this._send(c)}},_trimPacket:function(e){var t=this._globalOptions.maxMessageLength;if(e.message&&(e.message=ie(e.message,t)),e.exception){var r=e.exception.values[0];r.value=ie(r.value,t)}var n=e.request;return n&&(n.url&&(n.url=ie(n.url,this._globalOptions.maxUrlLength)),n.Referer&&(n.Referer=ie(n.Referer,this._globalOptions.maxUrlLength))),e.breadcrumbs&&e.breadcrumbs.values&&this._trimBreadcrumbs(e.breadcrumbs),e},_trimBreadcrumbs:function(e){for(var t,r,n,o=["to","from","url"],i=0;i<e.values.length;++i)if((r=e.values[i]).hasOwnProperty("data")&&G(r.data)&&!ae(r.data)){n=oe({},r.data);for(var a=0;a<o.length;++a)t=o[a],n.hasOwnProperty(t)&&n[t]&&(n[t]=ie(n[t],this._globalOptions.maxUrlLength));e.values[i].data=n}},_getHttpData:function(){if(this._hasNavigator||this._hasDocument){var e={};return this._hasNavigator&&Ce.userAgent&&(e.headers={"User-Agent":Ce.userAgent}),Se.location&&Se.location.href&&(e.url=Se.location.href),this._hasDocument&&Oe.referrer&&(e.headers||(e.headers={}),e.headers.Referer=Oe.referrer),e}},_resetBackoff:function(){this._backoffDuration=0,this._backoffStart=null},_shouldBackoff:function(){return this._backoffDuration&&ke()-this._backoffStart<this._backoffDuration},_isRepeatData:function(e){var t=this._lastData;return!(!t||e.message!==t.message||e.transaction!==t.transaction)&&(e.stacktrace||t.stacktrace?fe(e.stacktrace,t.stacktrace):!e.exception&&!t.exception||pe(e.exception,t.exception))},_setBackoffState:function(e){if(!this._shouldBackoff()){var t=e.status;if(400===t||401===t||429===t){var r;try{r=me()?e.headers.get("Retry-After"):e.getResponseHeader("Retry-After"),r=1e3*parseInt(r,10)}catch(e){}this._backoffDuration=r||(2*this._backoffDuration||1e3),this._backoffStart=ke()}}},_send:function(e){var t=this._globalOptions,r={project:this._globalProject,logger:t.logger,platform:"javascript"},n=this._getHttpData();n&&(r.request=n),e.trimHeadFrames&&delete e.trimHeadFrames,(e=oe(r,e)).tags=oe(oe({},this._globalContext.tags),e.tags),e.extra=oe(oe({},this._globalContext.extra),e.extra),e.extra["session:duration"]=ke()-this._startTime,this._breadcrumbs&&this._breadcrumbs.length>0&&(e.breadcrumbs={values:[].slice.call(this._breadcrumbs,0)}),this._globalContext.user&&(e.user=this._globalContext.user),t.environment&&(e.environment=t.environment),t.release&&(e.release=t.release),t.serverName&&(e.server_name=t.serverName),e=this._sanitizeData(e),Object.keys(e).forEach(function(t){(null==e[t]||""===e[t]||re(e[t]))&&delete e[t]}),Q(t.dataCallback)&&(e=t.dataCallback(e)||e),e&&!re(e)&&(Q(t.shouldSendCallback)&&!t.shouldSendCallback(e)||(this._shouldBackoff()?this._logDebug("warn","Raven dropped error due to backoff: ",e):"number"==typeof t.sampleRate?Math.random()<t.sampleRate&&this._sendProcessedPayload(e):this._sendProcessedPayload(e)))},_sanitizeData:function(e){return ye(e,this._globalOptions.sanitizeKeys)},_getUuid:function(){return ue()},_sendProcessedPayload:function(e,t){var r=this,n=this._globalOptions;if(this.isSetup())if(e=this._trimPacket(e),this._globalOptions.allowDuplicates||!this._isRepeatData(e)){this._lastEventId=e.event_id||(e.event_id=this._getUuid()),this._lastData=e,this._logDebug("debug","Raven about to send:",e);var o={sentry_version:"7",sentry_client:"raven-js/"+this.VERSION,sentry_key:this._globalKey};this._globalSecret&&(o.sentry_secret=this._globalSecret);var i=e.exception&&e.exception.values[0];this._globalOptions.autoBreadcrumbs&&this._globalOptions.autoBreadcrumbs.sentry&&this.captureBreadcrumb({category:"sentry",message:i?(i.type?i.type+": ":"")+i.value:e.message,event_id:e.event_id,level:e.level||"error"});var a=this._globalEndpoint;(n.transport||this._makeRequest).call(this,{url:a,auth:o,data:e,options:n,onSuccess:function(){r._resetBackoff(),r._triggerEvent("success",{data:e,src:a}),t&&t()},onError:function(n){r._logDebug("error","Raven transport failed to send: ",n),n.request&&r._setBackoffState(n.request),r._triggerEvent("failure",{data:e,src:a}),n=n||new Error("Raven send failed (no additional details provided)"),t&&t(n)}})}else this._logDebug("warn","Raven dropped repeat event: ",e)},_makeRequest:function(e){var t=e.url+"?"+le(e.auth),n=null,o={};if(e.options.headers&&(n=this._evaluateHash(e.options.headers)),e.options.fetchParameters&&(o=this._evaluateHash(e.options.fetchParameters)),me()){o.body=r(e.data);var i=oe({},this._fetchDefaults),a=oe(i,o);return n&&(a.headers=n),Se.fetch(t,a).then(function(t){if(t.ok)e.onSuccess&&e.onSuccess();else{var r=new Error("Sentry error code: "+t.status);r.request=t,e.onError&&e.onError(r)}}).catch(function(){e.onError&&e.onError(new Error("Sentry error code: network unavailable"))})}var s=Se.XMLHttpRequest&&new Se.XMLHttpRequest;s&&(("withCredentials"in s||"undefined"!=typeof XDomainRequest)&&("withCredentials"in s?s.onreadystatechange=function(){if(4===s.readyState)if(200===s.status)e.onSuccess&&e.onSuccess();else if(e.onError){var t=new Error("Sentry error code: "+s.status);t.request=s,e.onError(t)}}:(s=new XDomainRequest,t=t.replace(/^https?:/,""),e.onSuccess&&(s.onload=e.onSuccess),e.onError&&(s.onerror=function(){var t=new Error("Sentry error code: XDomainRequest");t.request=s,e.onError(t)})),s.open("POST",t),n&&ne(n,function(e,t){s.setRequestHeader(e,t)}),s.send(r(e.data))))},_evaluateHash:function(e){var t={};for(var r in e)if(e.hasOwnProperty(r)){var n=e[r];t[r]="function"==typeof n?n():n}return t},_logDebug:function(e){this._originalConsoleMethods[e]&&(this.debug||this._globalOptions.debug)&&Function.prototype.apply.call(this._originalConsoleMethods[e],this._originalConsole,[].slice.call(arguments,1))},_mergeContext:function(e,t){Z(t)?delete this._globalContext[e]:this._globalContext[e]=oe(this._globalContext[e]||{},t)}},je.prototype.setUser=je.prototype.setUserContext,je.prototype.setReleaseContext=je.prototype.setRelease;var Te=je,Fe="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},De=Fe.Raven,Ae=new Te;Ae.noConflict=function(){return Fe.Raven=De,Ae},Ae.afterLoad();var Be,Me,He,Le,Pe,Ie,Ue,Ne=Ae,qe=Te;Ne.Client=qe,(Ue="plyr.io"===window.location.host)&&Ne.config("https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555").install(),document.addEventListener("DOMContentLoaded",function(){Ne.context(function(){var e=document.getElementById("container");window.shr&&window.shr.setup({count:{classname:"button__count"}}),document.addEventListener("focusout",function(t){e.contains(t.target)||t.target.classList.remove("tab-focus")}),document.addEventListener("keydown",function(t){9===t.keyCode&&setTimeout(function(){var t=document.activeElement;t&&!e.contains(t)&&t.classList.add("tab-focus")},10)});var t=new Plyr("#player",{debug:!0,title:"View From A Blue Moon",iconUrl:"../dist/plyr.svg",keyboard:{global:!0},tooltips:{controls:!0},clickToPlay:!1,captions:{active:!0},keys:{google:"AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c"},ads:{enabled:!0,publisherId:"918848828995742"}});window.player=t;var r=document.querySelectorAll("[data-source]"),n={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},o=window.location.hash.replace("#",""),i=window.history&&window.history.pushState;function a(e,t,r){e&&e.classList[r?"add":"remove"](t)}function s(e,i){if(e in n&&(i||e!==o)&&(o.length||e!==n.video)){switch(e){case n.video:t.source={type:"video",title:"View From A Blue Moon",sources:[{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-576p.mp4",type:"video/mp4",size:576},{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-720p.mp4",type:"video/mp4",size:720},{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1080p.mp4",type:"video/mp4",size:1080},{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1440p.mp4",type:"video/mp4",size:1440}],poster:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg",tracks:[{kind:"captions",label:"English",srclang:"en",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt",default:!0},{kind:"captions",label:"French",srclang:"fr",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt"}]};break;case n.audio:t.source={type:"audio",title:"Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;",sources:[{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3",type:"audio/mp3"},{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg",type:"audio/ogg"}]};break;case n.youtube:t.source={type:"video",sources:[{src:"https://youtube.com/watch?v=bTqVqk7FSmY",provider:"youtube"}]};break;case n.vimeo:t.source={type:"video",sources:[{src:"https://vimeo.com/76979871",provider:"vimeo"}]}}o=e,Array.from(r).forEach(function(e){return a(e.parentElement,"active",!1)}),a(document.querySelector('[data-source="'+e+'"]'),"active",!0),Array.from(document.querySelectorAll(".plyr__cite")).forEach(function(e){e.setAttribute("hidden","")}),document.querySelector(".plyr__cite--"+e).removeAttribute("hidden")}}if(Array.from(r).forEach(function(e){e.addEventListener("click",function(){var t=e.getAttribute("data-source");s(t),i&&window.history.pushState({type:t},"","#"+t)})}),window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&s(e.state.type)}),i){var c=!o.length;c&&(o=n.video),o in n&&window.history.replaceState({type:o},"",c?"":"#"+o),o!==n.video&&s(o,!0)}})}),Ue&&(Be=window,Me=document,He="script",Le="ga",Be.GoogleAnalyticsObject=Le,Be.ga=Be.ga||function(){(Be.ga.q=Be.ga.q||[]).push(arguments)},Be.ga.l=1*new Date,Pe=Me.createElement(He),Ie=Me.getElementsByTagName(He)[0],Pe.async=1,Pe.src="https://www.google-analytics.com/analytics.js",Ie.parentNode.insertBefore(Pe,Ie),window.ga("create","UA-40881672-11","auto"),window.ga("send","pageview"))}();
+"object"==typeof navigator&&function(){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};var t,r=(function(e,t){function r(e,t){for(var r=0;r<e.length;++r)if(e[r]===t)return r;return-1}function n(e,t){var n=[],o=[];return null==t&&(t=function(e,t){return n[0]===t?"[Circular ~]":"[Circular ~."+o.slice(0,r(n,t)).join(".")+"]"}),function(i,a){if(n.length>0){var s=r(n,this);~s?n.splice(s+1):n.push(this),~s?o.splice(s,1/0,i):o.push(i),~r(n,a)&&(a=t.call(this,i,a))}else n.push(a);return null==e?a instanceof Error?function(e){var t={stack:e.stack,message:e.message,name:e.name};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t}(a):a:e.call(this,i,a)}}(e.exports=function(e,t,r,o){return JSON.stringify(e,n(t,o),r)}).getSerialize=n}(t={exports:{}},t.exports),t.exports),n=(r.getSerialize,"undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{});function o(e){return void 0===e}function i(e){return"[object Object]"===Object.prototype.toString.call(e)}function a(e){return"[object String]"===Object.prototype.toString.call(e)}function s(e){return"[object Array]"===Object.prototype.toString.call(e)}function c(){if(!("fetch"in n))return!1;try{return new Headers,new Request(""),new Response,!0}catch(e){return!1}}function l(e,t){var r,n;if(o(e.length))for(r in e)h(e,r)&&t.call(null,r,e[r]);else if(n=e.length)for(r=0;r<n;r++)t.call(null,r,e[r])}function u(e,t){if("number"!=typeof t)throw new Error("2nd argument to `truncate` function should be a number");return"string"!=typeof e||0===t?e:e.length<=t?e:e.substr(0,t)+"…"}function h(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function p(e){for(var t,r=[],n=0,o=e.length;n<o;n++)a(t=e[n])?r.push(t.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1")):t&&t.source&&r.push(t.source);return new RegExp(r.join("|"),"i")}function f(e){var t,r,n,o,i,s=[];if(!e||!e.tagName)return"";if(s.push(e.tagName.toLowerCase()),e.id&&s.push("#"+e.id),(t=e.className)&&a(t))for(r=t.split(/\s+/),i=0;i<r.length;i++)s.push("."+r[i]);var c=["type","name","title","alt"];for(i=0;i<c.length;i++)n=c[i],(o=e.getAttribute(n))&&s.push("["+n+'="'+o+'"]');return s.join("")}function d(e,t){return!!(!!e^!!t)}function g(e,t){if(d(e,t))return!1;var r,n,o=e.frames,i=t.frames;if(void 0===o||void 0===i)return!1;if(o.length!==i.length)return!1;for(var a=0;a<o.length;a++)if(r=o[a],n=i[a],r.filename!==n.filename||r.lineno!==n.lineno||r.colno!==n.colno||r.function!==n.function)return!1;return!0}var m=3,_=51200,v=40;function b(e){return function(e){return~-encodeURI(e).split(/%..|./).length}(JSON.stringify(e))}function y(e){if("string"==typeof e){return u(e,40)}if("number"==typeof e||"boolean"==typeof e||void 0===e)return e;var t=Object.prototype.toString.call(e);return"[object Object]"===t?"[Object]":"[object Array]"===t?"[Array]":"[object Function]"===t?e.name?"[Function: "+e.name+"]":"[Function]":e}var E={isObject:function(e){return"object"==typeof e&&null!==e},isError:function(e){switch(Object.prototype.toString.call(e)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return e instanceof Error}},isErrorEvent:function(e){return"[object ErrorEvent]"===Object.prototype.toString.call(e)},isDOMError:function(e){return"[object DOMError]"===Object.prototype.toString.call(e)},isDOMException:function(e){return"[object DOMException]"===Object.prototype.toString.call(e)},isUndefined:o,isFunction:function(e){return"function"==typeof e},isPlainObject:i,isString:a,isArray:s,isEmptyObject:function(e){if(!i(e))return!1;for(var t in e)if(e.hasOwnProperty(t))return!1;return!0},supportsErrorEvent:function(){try{return new ErrorEvent(""),!0}catch(e){return!1}},supportsDOMError:function(){try{return new DOMError(""),!0}catch(e){return!1}},supportsDOMException:function(){try{return new DOMException(""),!0}catch(e){return!1}},supportsFetch:c,supportsReferrerPolicy:function(){if(!c())return!1;try{return new Request("pickleRick",{referrerPolicy:"origin"}),!0}catch(e){return!1}},supportsPromiseRejectionEvent:function(){return"function"==typeof PromiseRejectionEvent},wrappedCallback:function(e){return function(t,r){var n=e(t)||t;return r&&r(n)||n}},each:l,objectMerge:function(e,t){return t?(l(t,function(t,r){e[t]=r}),e):e},truncate:u,objectFrozen:function(e){return!!Object.isFrozen&&Object.isFrozen(e)},hasKey:h,joinRegExp:p,urlencode:function(e){var t=[];return l(e,function(e,r){t.push(encodeURIComponent(e)+"="+encodeURIComponent(r))}),t.join("&")},uuid4:function(){var e=n.crypto||n.msCrypto;if(!o(e)&&e.getRandomValues){var t=new Uint16Array(8);e.getRandomValues(t),t[3]=4095&t[3]|16384,t[4]=16383&t[4]|32768;var r=function(e){for(var t=e.toString(16);t.length<4;)t="0"+t;return t};return r(t[0])+r(t[1])+r(t[2])+r(t[3])+r(t[4])+r(t[5])+r(t[6])+r(t[7])}return"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})},htmlTreeAsString:function(e){for(var t,r=[],n=0,o=0,i=" > ".length;e&&n++<5&&!("html"===(t=f(e))||n>1&&o+r.length*i+t.length>=80);)r.push(t),o+=t.length,e=e.parentNode;return r.reverse().join(" > ")},htmlElementAsString:f,isSameException:function(e,t){return!d(e,t)&&(e=e.values[0],t=t.values[0],e.type===t.type&&e.value===t.value&&(r=e.stacktrace,n=t.stacktrace,(!o(r)||!o(n))&&g(e.stacktrace,t.stacktrace)));var r,n},isSameStacktrace:g,parseUrl:function(e){if("string"!=typeof e)return{};var t=e.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/),r=t[6]||"",n=t[8]||"";return{protocol:t[2],host:t[4],path:t[5],relative:t[5]+r+n}},fill:function(e,t,r,n){if(null!=e){var o=e[t];e[t]=r(o),e[t].__raven__=!0,e[t].__orig__=o,n&&n.push([e,t,o])}},safeJoin:function(e,t){if(!s(e))return"";for(var r=[],n=0;n<e.length;n++)try{r.push(String(e[n]))}catch(e){r.push("[value cannot be serialized]")}return r.join(t)},serializeException:function e(t,n,o){if(!i(t))return t;o="number"!=typeof(n="number"!=typeof n?m:n)?_:o;var a=function e(t,r){return 0===r?y(t):i(t)?Object.keys(t).reduce(function(n,o){return n[o]=e(t[o],r-1),n},{}):Array.isArray(t)?t.map(function(t){return e(t,r-1)}):y(t)}(t,n);return b(r(a))>o?e(t,n-1):a},serializeKeysForMessage:function(e,t){if("number"==typeof e||"string"==typeof e)return e.toString();if(!Array.isArray(e))return"";if(0===(e=e.filter(function(e){return"string"==typeof e})).length)return"[object has no keys]";if(t="number"!=typeof t?v:t,e[0].length>=t)return e[0];for(var r=e.length;r>0;r--){var n=e.slice(0,r).join(", ");if(!(n.length>t))return r===e.length?n:n+"…"}return""},sanitize:function(e,t){if(!s(t)||s(t)&&0===t.length)return e;var n,o=p(t),a="********";try{n=JSON.parse(r(e))}catch(t){return e}return function e(t){return s(t)?t.map(function(t){return e(t)}):i(t)?Object.keys(t).reduce(function(r,n){return o.test(n)?r[n]=a:r[n]=e(t[n]),r},{}):t}(n)}},w={collectWindowErrors:!0,debug:!1},x="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},k=[].slice,S="?",O=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;function C(){return"undefined"==typeof document||null==document.location?"":document.location.href}w.report=function(){var e,t,r=[],n=null,o=null,i=null;function a(e,t){var n=null;if(!t||w.collectWindowErrors){for(var o in r)if(r.hasOwnProperty(o))try{r[o].apply(null,[e].concat(k.call(arguments,2)))}catch(e){n=e}if(n)throw n}}function s(t,r,n,o,s){var l=E.isErrorEvent(s)?s.error:s,u=E.isErrorEvent(t)?t.message:t;if(i)w.computeStackTrace.augmentStackTraceWithInitialElement(i,r,n,u),c();else if(l&&E.isError(l))a(w.computeStackTrace(l),!0);else{var h,p={url:r,line:n,column:o},f=void 0;if("[object String]"==={}.toString.call(u))(h=u.match(O))&&(f=h[1],u=h[2]);p.func=S,a({name:f,message:u,url:C(),stack:[p]},!0)}return!!e&&e.apply(this,arguments)}function c(){var e=i,t=n;n=null,i=null,o=null,a.apply(null,[e,!1].concat(t))}function l(e,t){var r=k.call(arguments,1);if(i){if(o===e)return;c()}var a=w.computeStackTrace(e);if(i=a,o=e,n=r,setTimeout(function(){o===e&&c()},a.incomplete?2e3:0),!1!==t)throw e}return l.subscribe=function(n){t||(e=x.onerror,x.onerror=s,t=!0),r.push(n)},l.unsubscribe=function(e){for(var t=r.length-1;t>=0;--t)r[t]===e&&r.splice(t,1)},l.uninstall=function(){t&&(x.onerror=e,t=!1,e=void 0),r=[]},l}(),w.computeStackTrace=function(){function e(e){if(void 0!==e.stack&&e.stack){for(var t,r,n,o=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,i=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,a=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,s=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,c=/\((\S*)(?::(\d+))(?::(\d+))\)/,l=e.stack.split("\n"),u=[],h=(/^(.*) is undefined$/.exec(e.message),0),p=l.length;h<p;++h){if(r=o.exec(l[h])){var f=r[2]&&0===r[2].indexOf("native");r[2]&&0===r[2].indexOf("eval")&&(t=c.exec(r[2]))&&(r[2]=t[1],r[3]=t[2],r[4]=t[3]),n={url:f?null:r[2],func:r[1]||S,args:f?[r[2]]:[],line:r[3]?+r[3]:null,column:r[4]?+r[4]:null}}else if(r=i.exec(l[h]))n={url:r[2],func:r[1]||S,args:[],line:+r[3],column:r[4]?+r[4]:null};else{if(!(r=a.exec(l[h])))continue;r[3]&&r[3].indexOf(" > eval")>-1&&(t=s.exec(r[3]))?(r[3]=t[1],r[4]=t[2],r[5]=null):0!==h||r[5]||void 0===e.columnNumber||(u[0].column=e.columnNumber+1),n={url:r[3],func:r[1]||S,args:r[2]?r[2].split(","):[],line:r[4]?+r[4]:null,column:r[5]?+r[5]:null}}if(!n.func&&n.line&&(n.func=S),n.url&&"blob:"===n.url.substr(0,5)){var d=new XMLHttpRequest;if(d.open("GET",n.url,!1),d.send(null),200===d.status){var g=d.responseText||"",m=(g=g.slice(-300)).match(/\/\/# sourceMappingURL=(.*)$/);if(m){var _=m[1];"~"===_.charAt(0)&&(_=("undefined"==typeof document||null==document.location?"":document.location.origin?document.location.origin:document.location.protocol+"//"+document.location.hostname+(document.location.port?":"+document.location.port:""))+_.slice(1)),n.url=_.slice(0,-4)}}}u.push(n)}return u.length?{name:e.name,message:e.message,url:C(),stack:u}:null}}function t(e,t,r,n){var o={url:t,line:r};if(o.url&&o.line){if(e.incomplete=!1,o.func||(o.func=S),e.stack.length>0&&e.stack[0].url===o.url){if(e.stack[0].line===o.line)return!1;if(!e.stack[0].line&&e.stack[0].func===o.func)return e.stack[0].line=o.line,!1}return e.stack.unshift(o),e.partial=!0,!0}return e.incomplete=!0,!1}function r(e,o){for(var i,a,s=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,c=[],l={},u=!1,h=r.caller;h&&!u;h=h.caller)if(h!==n&&h!==w.report){if(a={url:null,func:S,line:null,column:null},h.name?a.func=h.name:(i=s.exec(h.toString()))&&(a.func=i[1]),void 0===a.func)try{a.func=i.input.substring(0,i.input.indexOf("{"))}catch(e){}l[""+h]?u=!0:l[""+h]=!0,c.push(a)}o&&c.splice(0,o);var p={name:e.name,message:e.message,url:C(),stack:c};return t(p,e.sourceURL||e.fileName,e.line||e.lineNumber,e.message||e.description),p}function n(t,n){var o=null;n=null==n?0:+n;try{if(o=e(t))return o}catch(e){if(w.debug)throw e}try{if(o=r(t,n+1))return o}catch(e){if(w.debug)throw e}return{name:t.name,message:t.message,url:C()}}return n.augmentStackTraceWithInitialElement=t,n.computeStackTraceFromStackProp=e,n}();var R=w;function j(e,t){var r=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(r>>16)<<16|65535&r}function T(e,t,r,n,o,i){return j((a=j(j(t,e),j(n,i)))<<(s=o)|a>>>32-s,r);var a,s}function F(e,t,r,n,o,i,a){return T(t&r|~t&n,e,t,o,i,a)}function D(e,t,r,n,o,i,a){return T(t&n|r&~n,e,t,o,i,a)}function A(e,t,r,n,o,i,a){return T(t^r^n,e,t,o,i,a)}function B(e,t,r,n,o,i,a){return T(r^(t|~n),e,t,o,i,a)}function M(e,t){var r,n,o,i,a;e[t>>5]|=128<<t%32,e[14+(t+64>>>9<<4)]=t;var s=1732584193,c=-271733879,l=-1732584194,u=271733878;for(r=0;r<e.length;r+=16)n=s,o=c,i=l,a=u,s=F(s,c,l,u,e[r],7,-680876936),u=F(u,s,c,l,e[r+1],12,-389564586),l=F(l,u,s,c,e[r+2],17,606105819),c=F(c,l,u,s,e[r+3],22,-1044525330),s=F(s,c,l,u,e[r+4],7,-176418897),u=F(u,s,c,l,e[r+5],12,1200080426),l=F(l,u,s,c,e[r+6],17,-1473231341),c=F(c,l,u,s,e[r+7],22,-45705983),s=F(s,c,l,u,e[r+8],7,1770035416),u=F(u,s,c,l,e[r+9],12,-1958414417),l=F(l,u,s,c,e[r+10],17,-42063),c=F(c,l,u,s,e[r+11],22,-1990404162),s=F(s,c,l,u,e[r+12],7,1804603682),u=F(u,s,c,l,e[r+13],12,-40341101),l=F(l,u,s,c,e[r+14],17,-1502002290),s=D(s,c=F(c,l,u,s,e[r+15],22,1236535329),l,u,e[r+1],5,-165796510),u=D(u,s,c,l,e[r+6],9,-1069501632),l=D(l,u,s,c,e[r+11],14,643717713),c=D(c,l,u,s,e[r],20,-373897302),s=D(s,c,l,u,e[r+5],5,-701558691),u=D(u,s,c,l,e[r+10],9,38016083),l=D(l,u,s,c,e[r+15],14,-660478335),c=D(c,l,u,s,e[r+4],20,-405537848),s=D(s,c,l,u,e[r+9],5,568446438),u=D(u,s,c,l,e[r+14],9,-1019803690),l=D(l,u,s,c,e[r+3],14,-187363961),c=D(c,l,u,s,e[r+8],20,1163531501),s=D(s,c,l,u,e[r+13],5,-1444681467),u=D(u,s,c,l,e[r+2],9,-51403784),l=D(l,u,s,c,e[r+7],14,1735328473),s=A(s,c=D(c,l,u,s,e[r+12],20,-1926607734),l,u,e[r+5],4,-378558),u=A(u,s,c,l,e[r+8],11,-2022574463),l=A(l,u,s,c,e[r+11],16,1839030562),c=A(c,l,u,s,e[r+14],23,-35309556),s=A(s,c,l,u,e[r+1],4,-1530992060),u=A(u,s,c,l,e[r+4],11,1272893353),l=A(l,u,s,c,e[r+7],16,-155497632),c=A(c,l,u,s,e[r+10],23,-1094730640),s=A(s,c,l,u,e[r+13],4,681279174),u=A(u,s,c,l,e[r],11,-358537222),l=A(l,u,s,c,e[r+3],16,-722521979),c=A(c,l,u,s,e[r+6],23,76029189),s=A(s,c,l,u,e[r+9],4,-640364487),u=A(u,s,c,l,e[r+12],11,-421815835),l=A(l,u,s,c,e[r+15],16,530742520),s=B(s,c=A(c,l,u,s,e[r+2],23,-995338651),l,u,e[r],6,-198630844),u=B(u,s,c,l,e[r+7],10,1126891415),l=B(l,u,s,c,e[r+14],15,-1416354905),c=B(c,l,u,s,e[r+5],21,-57434055),s=B(s,c,l,u,e[r+12],6,1700485571),u=B(u,s,c,l,e[r+3],10,-1894986606),l=B(l,u,s,c,e[r+10],15,-1051523),c=B(c,l,u,s,e[r+1],21,-2054922799),s=B(s,c,l,u,e[r+8],6,1873313359),u=B(u,s,c,l,e[r+15],10,-30611744),l=B(l,u,s,c,e[r+6],15,-1560198380),c=B(c,l,u,s,e[r+13],21,1309151649),s=B(s,c,l,u,e[r+4],6,-145523070),u=B(u,s,c,l,e[r+11],10,-1120210379),l=B(l,u,s,c,e[r+2],15,718787259),c=B(c,l,u,s,e[r+9],21,-343485551),s=j(s,n),c=j(c,o),l=j(l,i),u=j(u,a);return[s,c,l,u]}function H(e){var t,r="",n=32*e.length;for(t=0;t<n;t+=8)r+=String.fromCharCode(e[t>>5]>>>t%32&255);return r}function L(e){var t,r=[];for(r[(e.length>>2)-1]=void 0,t=0;t<r.length;t+=1)r[t]=0;var n=8*e.length;for(t=0;t<n;t+=8)r[t>>5]|=(255&e.charCodeAt(t/8))<<t%32;return r}function I(e){var t,r,n="";for(r=0;r<e.length;r+=1)t=e.charCodeAt(r),n+="0123456789abcdef".charAt(t>>>4&15)+"0123456789abcdef".charAt(15&t);return n}function P(e){return unescape(encodeURIComponent(e))}function U(e){return function(e){return H(M(L(e),8*e.length))}(P(e))}function N(e,t){return function(e,t){var r,n,o=L(e),i=[],a=[];for(i[15]=a[15]=void 0,o.length>16&&(o=M(o,8*e.length)),r=0;r<16;r+=1)i[r]=909522486^o[r],a[r]=1549556828^o[r];return n=M(i.concat(L(t)),512+8*t.length),H(M(a.concat(n),640))}(P(e),P(t))}var q=function(e,t,r){return t?r?N(t,e):I(N(t,e)):r?U(e):I(U(e))};function z(e){this.name="RavenConfigError",this.message=e}z.prototype=new Error,z.prototype.constructor=z;var K=z,W=function(e,t,r){var n=e[t],o=e;if(t in e){var i="warn"===t?"warning":t;e[t]=function(){var e=[].slice.call(arguments),a=E.safeJoin(e," "),s={level:i,logger:"console",extra:{arguments:e}};"assert"===t?!1===e[0]&&(a="Assertion failed: "+(E.safeJoin(e.slice(1)," ")||"console.assert"),s.extra.arguments=e.slice(1),r&&r(a,s)):r&&r(a,s),n&&Function.prototype.apply.call(n,o,e)}}},V=E.isErrorEvent,$=E.isDOMError,X=E.isDOMException,J=E.isError,G=E.isObject,Y=E.isPlainObject,Z=E.isUndefined,Q=E.isFunction,ee=E.isString,te=E.isArray,re=E.isEmptyObject,ne=E.each,oe=E.objectMerge,ie=E.truncate,ae=E.objectFrozen,se=E.hasKey,ce=E.joinRegExp,le=E.urlencode,ue=E.uuid4,he=E.htmlTreeAsString,pe=E.isSameException,fe=E.isSameStacktrace,de=E.parseUrl,ge=E.fill,me=E.supportsFetch,_e=E.supportsReferrerPolicy,ve=E.serializeKeysForMessage,be=E.serializeException,ye=E.sanitize,Ee=W,we="source protocol user pass host port path".split(" "),xe=/^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/;function ke(){return+new Date}var Se="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},Oe=Se.document,Ce=Se.navigator;function Re(e,t){return Q(t)?function(r){return t(r,e)}:t}function je(){for(var e in this._hasJSON=!("object"!=typeof JSON||!JSON.stringify),this._hasDocument=!Z(Oe),this._hasNavigator=!Z(Ce),this._lastCapturedException=null,this._lastData=null,this._lastEventId=null,this._globalServer=null,this._globalKey=null,this._globalProject=null,this._globalContext={},this._globalOptions={release:Se.SENTRY_RELEASE&&Se.SENTRY_RELEASE.id,logger:"javascript",ignoreErrors:[],ignoreUrls:[],whitelistUrls:[],includePaths:[],headers:null,collectWindowErrors:!0,captureUnhandledRejections:!0,maxMessageLength:0,maxUrlLength:250,stackTraceLimit:50,autoBreadcrumbs:!0,instrument:!0,sampleRate:1,sanitizeKeys:[]},this._fetchDefaults={method:"POST",keepalive:!0,referrerPolicy:_e()?"origin":""},this._ignoreOnError=0,this._isRavenInstalled=!1,this._originalErrorStackTraceLimit=Error.stackTraceLimit,this._originalConsole=Se.console||{},this._originalConsoleMethods={},this._plugins=[],this._startTime=ke(),this._wrappedBuiltIns=[],this._breadcrumbs=[],this._lastCapturedEvent=null,this._keypressTimeout,this._location=Se.location,this._lastHref=this._location&&this._location.href,this._resetBackoff(),this._originalConsole)this._originalConsoleMethods[e]=this._originalConsole[e]}je.prototype={VERSION:"3.26.3",debug:!1,TraceKit:R,config:function(e,t){var r=this;if(r._globalServer)return this._logDebug("error","Error: Raven has already been configured"),r;if(!e)return r;var n=r._globalOptions;t&&ne(t,function(e,t){"tags"===e||"extra"===e||"user"===e?r._globalContext[e]=t:n[e]=t}),r.setDSN(e),n.ignoreErrors.push(/^Script error\.?$/),n.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/),n.ignoreErrors=ce(n.ignoreErrors),n.ignoreUrls=!!n.ignoreUrls.length&&ce(n.ignoreUrls),n.whitelistUrls=!!n.whitelistUrls.length&&ce(n.whitelistUrls),n.includePaths=ce(n.includePaths),n.maxBreadcrumbs=Math.max(0,Math.min(n.maxBreadcrumbs||100,100));var o={xhr:!0,console:!0,dom:!0,location:!0,sentry:!0},i=n.autoBreadcrumbs;"[object Object]"==={}.toString.call(i)?i=oe(o,i):!1!==i&&(i=o),n.autoBreadcrumbs=i;var a={tryCatch:!0},s=n.instrument;return"[object Object]"==={}.toString.call(s)?s=oe(a,s):!1!==s&&(s=a),n.instrument=s,R.collectWindowErrors=!!n.collectWindowErrors,r},install:function(){var e=this;return e.isSetup()&&!e._isRavenInstalled&&(R.report.subscribe(function(){e._handleOnErrorStackInfo.apply(e,arguments)}),e._globalOptions.captureUnhandledRejections&&e._attachPromiseRejectionHandler(),e._patchFunctionToString(),e._globalOptions.instrument&&e._globalOptions.instrument.tryCatch&&e._instrumentTryCatch(),e._globalOptions.autoBreadcrumbs&&e._instrumentBreadcrumbs(),e._drainPlugins(),e._isRavenInstalled=!0),Error.stackTraceLimit=e._globalOptions.stackTraceLimit,this},setDSN:function(e){var t=this._parseDSN(e),r=t.path.lastIndexOf("/"),n=t.path.substr(1,r);this._dsn=e,this._globalKey=t.user,this._globalSecret=t.pass&&t.pass.substr(1),this._globalProject=t.path.substr(r+1),this._globalServer=this._getGlobalServer(t),this._globalEndpoint=this._globalServer+"/"+n+"api/"+this._globalProject+"/store/",this._resetBackoff()},context:function(e,t,r){return Q(e)&&(r=t||[],t=e,e={}),this.wrap(e,t).apply(this,r)},wrap:function(e,t,r){var n=this;if(Z(t)&&!Q(e))return e;if(Q(e)&&(t=e,e=void 0),!Q(t))return t;try{if(t.__raven__)return t;if(t.__raven_wrapper__)return t.__raven_wrapper__}catch(e){return t}function o(){var o=[],i=arguments.length,a=!e||e&&!1!==e.deep;for(r&&Q(r)&&r.apply(this,arguments);i--;)o[i]=a?n.wrap(e,arguments[i]):arguments[i];try{return t.apply(this,o)}catch(t){throw n._ignoreNextOnError(),n.captureException(t,e),t}}for(var i in t)se(t,i)&&(o[i]=t[i]);return o.prototype=t.prototype,t.__raven_wrapper__=o,o.__raven__=!0,o.__orig__=t,o},uninstall:function(){return R.report.uninstall(),this._detachPromiseRejectionHandler(),this._unpatchFunctionToString(),this._restoreBuiltIns(),this._restoreConsole(),Error.stackTraceLimit=this._originalErrorStackTraceLimit,this._isRavenInstalled=!1,this},_promiseRejectionHandler:function(e){this._logDebug("debug","Raven caught unhandled promise rejection:",e),this.captureException(e.reason,{mechanism:{type:"onunhandledrejection",handled:!1}})},_attachPromiseRejectionHandler:function(){return this._promiseRejectionHandler=this._promiseRejectionHandler.bind(this),Se.addEventListener&&Se.addEventListener("unhandledrejection",this._promiseRejectionHandler),this},_detachPromiseRejectionHandler:function(){return Se.removeEventListener&&Se.removeEventListener("unhandledrejection",this._promiseRejectionHandler),this},captureException:function(e,t){if(t=oe({trimHeadFrames:0},t||{}),V(e)&&e.error)e=e.error;else{if($(e)||X(e)){var r=e.name||($(e)?"DOMError":"DOMException"),n=e.message?r+": "+e.message:r;return this.captureMessage(n,oe(t,{stacktrace:!0,trimHeadFrames:t.trimHeadFrames+1}))}if(J(e))e=e;else{if(!Y(e))return this.captureMessage(e,oe(t,{stacktrace:!0,trimHeadFrames:t.trimHeadFrames+1}));t=this._getCaptureExceptionOptionsFromPlainObject(t,e),e=new Error(t.message)}}this._lastCapturedException=e;try{var o=R.computeStackTrace(e);this._handleStackInfo(o,t)}catch(t){if(e!==t)throw t}return this},_getCaptureExceptionOptionsFromPlainObject:function(e,t){var r=Object.keys(t).sort(),n=oe(e,{message:"Non-Error exception captured with keys: "+ve(r),fingerprint:[q(r)],extra:e.extra||{}});return n.extra.__serialized__=be(t),n},captureMessage:function(e,t){if(!this._globalOptions.ignoreErrors.test||!this._globalOptions.ignoreErrors.test(e)){var r,n=oe({message:e+=""},t=t||{});try{throw new Error(e)}catch(e){r=e}r.name=null;var o=R.computeStackTrace(r),i=te(o.stack)&&o.stack[1];i&&"Raven.captureException"===i.func&&(i=o.stack[2]);var a=i&&i.url||"";if((!this._globalOptions.ignoreUrls.test||!this._globalOptions.ignoreUrls.test(a))&&(!this._globalOptions.whitelistUrls.test||this._globalOptions.whitelistUrls.test(a))){if(this._globalOptions.stacktrace||t.stacktrace||""===n.message){n.fingerprint=null==n.fingerprint?e:n.fingerprint,(t=oe({trimHeadFrames:0},t)).trimHeadFrames+=1;var s=this._prepareFrames(o,t);n.stacktrace={frames:s.reverse()}}return n.fingerprint&&(n.fingerprint=te(n.fingerprint)?n.fingerprint:[n.fingerprint]),this._send(n),this}}},captureBreadcrumb:function(e){var t=oe({timestamp:ke()/1e3},e);if(Q(this._globalOptions.breadcrumbCallback)){var r=this._globalOptions.breadcrumbCallback(t);if(G(r)&&!re(r))t=r;else if(!1===r)return this}return this._breadcrumbs.push(t),this._breadcrumbs.length>this._globalOptions.maxBreadcrumbs&&this._breadcrumbs.shift(),this},addPlugin:function(e){var t=[].slice.call(arguments,1);return this._plugins.push([e,t]),this._isRavenInstalled&&this._drainPlugins(),this},setUserContext:function(e){return this._globalContext.user=e,this},setExtraContext:function(e){return this._mergeContext("extra",e),this},setTagsContext:function(e){return this._mergeContext("tags",e),this},clearContext:function(){return this._globalContext={},this},getContext:function(){return JSON.parse(r(this._globalContext))},setEnvironment:function(e){return this._globalOptions.environment=e,this},setRelease:function(e){return this._globalOptions.release=e,this},setDataCallback:function(e){var t=this._globalOptions.dataCallback;return this._globalOptions.dataCallback=Re(t,e),this},setBreadcrumbCallback:function(e){var t=this._globalOptions.breadcrumbCallback;return this._globalOptions.breadcrumbCallback=Re(t,e),this},setShouldSendCallback:function(e){var t=this._globalOptions.shouldSendCallback;return this._globalOptions.shouldSendCallback=Re(t,e),this},setTransport:function(e){return this._globalOptions.transport=e,this},lastException:function(){return this._lastCapturedException},lastEventId:function(){return this._lastEventId},isSetup:function(){return!!this._hasJSON&&(!!this._globalServer||(this.ravenNotConfiguredError||(this.ravenNotConfiguredError=!0,this._logDebug("error","Error: Raven has not been configured.")),!1))},afterLoad:function(){var e=Se.RavenConfig;e&&this.config(e.dsn,e.config).install()},showReportDialog:function(e){if(Oe){var t=(e=e||{}).eventId||this.lastEventId();if(!t)throw new K("Missing eventId");var r=e.dsn||this._dsn;if(!r)throw new K("Missing DSN");var n=encodeURIComponent,o="";o+="?eventId="+n(t),o+="&dsn="+n(r);var i=e.user||this._globalContext.user;i&&(i.name&&(o+="&name="+n(i.name)),i.email&&(o+="&email="+n(i.email)));var a=this._getGlobalServer(this._parseDSN(r)),s=Oe.createElement("script");s.async=!0,s.src=a+"/api/embed/error-page/"+o,(Oe.head||Oe.body).appendChild(s)}},_ignoreNextOnError:function(){var e=this;this._ignoreOnError+=1,setTimeout(function(){e._ignoreOnError-=1})},_triggerEvent:function(e,t){var r,n;if(this._hasDocument){for(n in t=t||{},e="raven"+e.substr(0,1).toUpperCase()+e.substr(1),Oe.createEvent?(r=Oe.createEvent("HTMLEvents")).initEvent(e,!0,!0):(r=Oe.createEventObject()).eventType=e,t)se(t,n)&&(r[n]=t[n]);if(Oe.createEvent)Oe.dispatchEvent(r);else try{Oe.fireEvent("on"+r.eventType.toLowerCase(),r)}catch(e){}}},_breadcrumbEventHandler:function(e){var t=this;return function(r){if(t._keypressTimeout=null,t._lastCapturedEvent!==r){var n;t._lastCapturedEvent=r;try{n=he(r.target)}catch(e){n="<unknown>"}t.captureBreadcrumb({category:"ui."+e,message:n})}}},_keypressEventHandler:function(){var e=this;return function(t){var r;try{r=t.target}catch(e){return}var n=r&&r.tagName;if(n&&("INPUT"===n||"TEXTAREA"===n||r.isContentEditable)){var o=e._keypressTimeout;o||e._breadcrumbEventHandler("input")(t),clearTimeout(o),e._keypressTimeout=setTimeout(function(){e._keypressTimeout=null},1e3)}}},_captureUrlChange:function(e,t){var r=de(this._location.href),n=de(t),o=de(e);this._lastHref=t,r.protocol===n.protocol&&r.host===n.host&&(t=n.relative),r.protocol===o.protocol&&r.host===o.host&&(e=o.relative),this.captureBreadcrumb({category:"navigation",data:{to:t,from:e}})},_patchFunctionToString:function(){var e=this;e._originalFunctionToString=Function.prototype.toString,Function.prototype.toString=function(){return"function"==typeof this&&this.__raven__?e._originalFunctionToString.apply(this.__orig__,arguments):e._originalFunctionToString.apply(this,arguments)}},_unpatchFunctionToString:function(){this._originalFunctionToString&&(Function.prototype.toString=this._originalFunctionToString)},_instrumentTryCatch:function(){var e=this,t=e._wrappedBuiltIns;function r(t){return function(r,n){for(var o=new Array(arguments.length),i=0;i<o.length;++i)o[i]=arguments[i];var a=o[0];return Q(a)&&(o[0]=e.wrap({mechanism:{type:"instrument",data:{function:t.name||"<anonymous>"}}},a)),t.apply?t.apply(this,o):t(o[0],o[1])}}var n=this._globalOptions.autoBreadcrumbs;function o(r){var o=Se[r]&&Se[r].prototype;o&&o.hasOwnProperty&&o.hasOwnProperty("addEventListener")&&(ge(o,"addEventListener",function(t){return function(o,i,a,s){try{i&&i.handleEvent&&(i.handleEvent=e.wrap({mechanism:{type:"instrument",data:{target:r,function:"handleEvent",handler:i&&i.name||"<anonymous>"}}},i.handleEvent))}catch(e){}var c,l,u;return n&&n.dom&&("EventTarget"===r||"Node"===r)&&(l=e._breadcrumbEventHandler("click"),u=e._keypressEventHandler(),c=function(e){if(e){var t;try{t=e.type}catch(e){return}return"click"===t?l(e):"keypress"===t?u(e):void 0}}),t.call(this,o,e.wrap({mechanism:{type:"instrument",data:{target:r,function:"addEventListener",handler:i&&i.name||"<anonymous>"}}},i,c),a,s)}},t),ge(o,"removeEventListener",function(e){return function(t,r,n,o){try{r=r&&(r.__raven_wrapper__?r.__raven_wrapper__:r)}catch(e){}return e.call(this,t,r,n,o)}},t))}ge(Se,"setTimeout",r,t),ge(Se,"setInterval",r,t),Se.requestAnimationFrame&&ge(Se,"requestAnimationFrame",function(t){return function(r){return t(e.wrap({mechanism:{type:"instrument",data:{function:"requestAnimationFrame",handler:t&&t.name||"<anonymous>"}}},r))}},t);for(var i=["EventTarget","Window","Node","ApplicationCache","AudioTrackList","ChannelMergerNode","CryptoOperation","EventSource","FileReader","HTMLUnknownElement","IDBDatabase","IDBRequest","IDBTransaction","KeyOperation","MediaController","MessagePort","ModalWindow","Notification","SVGElementInstance","Screen","TextTrack","TextTrackCue","TextTrackList","WebSocket","WebSocketWorker","Worker","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload"],a=0;a<i.length;a++)o(i[a])},_instrumentBreadcrumbs:function(){var e=this,t=this._globalOptions.autoBreadcrumbs,r=e._wrappedBuiltIns;function n(t,r){t in r&&Q(r[t])&&ge(r,t,function(r){return e.wrap({mechanism:{type:"instrument",data:{function:t,handler:r&&r.name||"<anonymous>"}}},r)})}if(t.xhr&&"XMLHttpRequest"in Se){var o=Se.XMLHttpRequest&&Se.XMLHttpRequest.prototype;ge(o,"open",function(t){return function(r,n){return ee(n)&&-1===n.indexOf(e._globalKey)&&(this.__raven_xhr={method:r,url:n,status_code:null}),t.apply(this,arguments)}},r),ge(o,"send",function(t){return function(){var r=this;function o(){if(r.__raven_xhr&&4===r.readyState){try{r.__raven_xhr.status_code=r.status}catch(e){}e.captureBreadcrumb({type:"http",category:"xhr",data:r.__raven_xhr})}}for(var i=["onload","onerror","onprogress"],a=0;a<i.length;a++)n(i[a],r);return"onreadystatechange"in r&&Q(r.onreadystatechange)?ge(r,"onreadystatechange",function(t){return e.wrap({mechanism:{type:"instrument",data:{function:"onreadystatechange",handler:t&&t.name||"<anonymous>"}}},t,o)}):r.onreadystatechange=o,t.apply(this,arguments)}},r)}t.xhr&&me()&&ge(Se,"fetch",function(t){return function(){for(var r=new Array(arguments.length),n=0;n<r.length;++n)r[n]=arguments[n];var o,i=r[0],a="GET";if("string"==typeof i?o=i:"Request"in Se&&i instanceof Se.Request?(o=i.url,i.method&&(a=i.method)):o=""+i,-1!==o.indexOf(e._globalKey))return t.apply(this,r);r[1]&&r[1].method&&(a=r[1].method);var s={method:a,url:o,status_code:null};return t.apply(this,r).then(function(t){return s.status_code=t.status,e.captureBreadcrumb({type:"http",category:"fetch",data:s}),t}).catch(function(t){throw e.captureBreadcrumb({type:"http",category:"fetch",data:s,level:"error"}),t})}},r),t.dom&&this._hasDocument&&(Oe.addEventListener?(Oe.addEventListener("click",e._breadcrumbEventHandler("click"),!1),Oe.addEventListener("keypress",e._keypressEventHandler(),!1)):Oe.attachEvent&&(Oe.attachEvent("onclick",e._breadcrumbEventHandler("click")),Oe.attachEvent("onkeypress",e._keypressEventHandler())));var i=Se.chrome,a=!(i&&i.app&&i.app.runtime)&&Se.history&&Se.history.pushState&&Se.history.replaceState;if(t.location&&a){var s=Se.onpopstate;Se.onpopstate=function(){var t=e._location.href;if(e._captureUrlChange(e._lastHref,t),s)return s.apply(this,arguments)};var c=function(t){return function(){var r=arguments.length>2?arguments[2]:void 0;return r&&e._captureUrlChange(e._lastHref,r+""),t.apply(this,arguments)}};ge(Se.history,"pushState",c,r),ge(Se.history,"replaceState",c,r)}if(t.console&&"console"in Se&&console.log){var l=function(t,r){e.captureBreadcrumb({message:t,level:r.level,category:"console"})};ne(["debug","info","warn","error","log"],function(e,t){Ee(console,t,l)})}},_restoreBuiltIns:function(){for(var e;this._wrappedBuiltIns.length;){var t=(e=this._wrappedBuiltIns.shift())[0],r=e[1],n=e[2];t[r]=n}},_restoreConsole:function(){for(var e in this._originalConsoleMethods)this._originalConsole[e]=this._originalConsoleMethods[e]},_drainPlugins:function(){var e=this;ne(this._plugins,function(t,r){var n=r[0],o=r[1];n.apply(e,[e].concat(o))})},_parseDSN:function(e){var t=xe.exec(e),r={},n=7;try{for(;n--;)r[we[n]]=t[n]||""}catch(t){throw new K("Invalid DSN: "+e)}if(r.pass&&!this._globalOptions.allowSecretKey)throw new K("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return r},_getGlobalServer:function(e){var t="//"+e.host+(e.port?":"+e.port:"");return e.protocol&&(t=e.protocol+":"+t),t},_handleOnErrorStackInfo:function(e,t){(t=t||{}).mechanism=t.mechanism||{type:"onerror",handled:!1},this._ignoreOnError||this._handleStackInfo(e,t)},_handleStackInfo:function(e,t){var r=this._prepareFrames(e,t);this._triggerEvent("handle",{stackInfo:e,options:t}),this._processException(e.name,e.message,e.url,e.lineno,r,t)},_prepareFrames:function(e,t){var r=this,n=[];if(e.stack&&e.stack.length&&(ne(e.stack,function(t,o){var i=r._normalizeFrame(o,e.url);i&&n.push(i)}),t&&t.trimHeadFrames))for(var o=0;o<t.trimHeadFrames&&o<n.length;o++)n[o].in_app=!1;return n=n.slice(0,this._globalOptions.stackTraceLimit)},_normalizeFrame:function(e,t){var r={filename:e.url,lineno:e.line,colno:e.column,function:e.func||"?"};return e.url||(r.filename=t),r.in_app=!(this._globalOptions.includePaths.test&&!this._globalOptions.includePaths.test(r.filename)||/(Raven|TraceKit)\./.test(r.function)||/raven\.(min\.)?js$/.test(r.filename)),r},_processException:function(e,t,r,n,o,i){var a,s=(e?e+": ":"")+(t||"");if((!this._globalOptions.ignoreErrors.test||!this._globalOptions.ignoreErrors.test(t)&&!this._globalOptions.ignoreErrors.test(s))&&(o&&o.length?(r=o[0].filename||r,o.reverse(),a={frames:o}):r&&(a={frames:[{filename:r,lineno:n,in_app:!0}]}),(!this._globalOptions.ignoreUrls.test||!this._globalOptions.ignoreUrls.test(r))&&(!this._globalOptions.whitelistUrls.test||this._globalOptions.whitelistUrls.test(r)))){var c=oe({exception:{values:[{type:e,value:t,stacktrace:a}]},transaction:r},i),l=c.exception.values[0];null==l.type&&""===l.value&&(l.value="Unrecoverable error caught"),!c.exception.mechanism&&c.mechanism&&(c.exception.mechanism=c.mechanism,delete c.mechanism),c.exception.mechanism=oe({type:"generic",handled:!0},c.exception.mechanism||{}),this._send(c)}},_trimPacket:function(e){var t=this._globalOptions.maxMessageLength;if(e.message&&(e.message=ie(e.message,t)),e.exception){var r=e.exception.values[0];r.value=ie(r.value,t)}var n=e.request;return n&&(n.url&&(n.url=ie(n.url,this._globalOptions.maxUrlLength)),n.Referer&&(n.Referer=ie(n.Referer,this._globalOptions.maxUrlLength))),e.breadcrumbs&&e.breadcrumbs.values&&this._trimBreadcrumbs(e.breadcrumbs),e},_trimBreadcrumbs:function(e){for(var t,r,n,o=["to","from","url"],i=0;i<e.values.length;++i)if((r=e.values[i]).hasOwnProperty("data")&&G(r.data)&&!ae(r.data)){n=oe({},r.data);for(var a=0;a<o.length;++a)t=o[a],n.hasOwnProperty(t)&&n[t]&&(n[t]=ie(n[t],this._globalOptions.maxUrlLength));e.values[i].data=n}},_getHttpData:function(){if(this._hasNavigator||this._hasDocument){var e={};return this._hasNavigator&&Ce.userAgent&&(e.headers={"User-Agent":Ce.userAgent}),Se.location&&Se.location.href&&(e.url=Se.location.href),this._hasDocument&&Oe.referrer&&(e.headers||(e.headers={}),e.headers.Referer=Oe.referrer),e}},_resetBackoff:function(){this._backoffDuration=0,this._backoffStart=null},_shouldBackoff:function(){return this._backoffDuration&&ke()-this._backoffStart<this._backoffDuration},_isRepeatData:function(e){var t=this._lastData;return!(!t||e.message!==t.message||e.transaction!==t.transaction)&&(e.stacktrace||t.stacktrace?fe(e.stacktrace,t.stacktrace):!e.exception&&!t.exception||pe(e.exception,t.exception))},_setBackoffState:function(e){if(!this._shouldBackoff()){var t=e.status;if(400===t||401===t||429===t){var r;try{r=me()?e.headers.get("Retry-After"):e.getResponseHeader("Retry-After"),r=1e3*parseInt(r,10)}catch(e){}this._backoffDuration=r||(2*this._backoffDuration||1e3),this._backoffStart=ke()}}},_send:function(e){var t=this._globalOptions,r={project:this._globalProject,logger:t.logger,platform:"javascript"},n=this._getHttpData();n&&(r.request=n),e.trimHeadFrames&&delete e.trimHeadFrames,(e=oe(r,e)).tags=oe(oe({},this._globalContext.tags),e.tags),e.extra=oe(oe({},this._globalContext.extra),e.extra),e.extra["session:duration"]=ke()-this._startTime,this._breadcrumbs&&this._breadcrumbs.length>0&&(e.breadcrumbs={values:[].slice.call(this._breadcrumbs,0)}),this._globalContext.user&&(e.user=this._globalContext.user),t.environment&&(e.environment=t.environment),t.release&&(e.release=t.release),t.serverName&&(e.server_name=t.serverName),e=this._sanitizeData(e),Object.keys(e).forEach(function(t){(null==e[t]||""===e[t]||re(e[t]))&&delete e[t]}),Q(t.dataCallback)&&(e=t.dataCallback(e)||e),e&&!re(e)&&(Q(t.shouldSendCallback)&&!t.shouldSendCallback(e)||(this._shouldBackoff()?this._logDebug("warn","Raven dropped error due to backoff: ",e):"number"==typeof t.sampleRate?Math.random()<t.sampleRate&&this._sendProcessedPayload(e):this._sendProcessedPayload(e)))},_sanitizeData:function(e){return ye(e,this._globalOptions.sanitizeKeys)},_getUuid:function(){return ue()},_sendProcessedPayload:function(e,t){var r=this,n=this._globalOptions;if(this.isSetup())if(e=this._trimPacket(e),this._globalOptions.allowDuplicates||!this._isRepeatData(e)){this._lastEventId=e.event_id||(e.event_id=this._getUuid()),this._lastData=e,this._logDebug("debug","Raven about to send:",e);var o={sentry_version:"7",sentry_client:"raven-js/"+this.VERSION,sentry_key:this._globalKey};this._globalSecret&&(o.sentry_secret=this._globalSecret);var i=e.exception&&e.exception.values[0];this._globalOptions.autoBreadcrumbs&&this._globalOptions.autoBreadcrumbs.sentry&&this.captureBreadcrumb({category:"sentry",message:i?(i.type?i.type+": ":"")+i.value:e.message,event_id:e.event_id,level:e.level||"error"});var a=this._globalEndpoint;(n.transport||this._makeRequest).call(this,{url:a,auth:o,data:e,options:n,onSuccess:function(){r._resetBackoff(),r._triggerEvent("success",{data:e,src:a}),t&&t()},onError:function(n){r._logDebug("error","Raven transport failed to send: ",n),n.request&&r._setBackoffState(n.request),r._triggerEvent("failure",{data:e,src:a}),n=n||new Error("Raven send failed (no additional details provided)"),t&&t(n)}})}else this._logDebug("warn","Raven dropped repeat event: ",e)},_makeRequest:function(e){var t=e.url+"?"+le(e.auth),n=null,o={};if(e.options.headers&&(n=this._evaluateHash(e.options.headers)),e.options.fetchParameters&&(o=this._evaluateHash(e.options.fetchParameters)),me()){o.body=r(e.data);var i=oe({},this._fetchDefaults),a=oe(i,o);return n&&(a.headers=n),Se.fetch(t,a).then(function(t){if(t.ok)e.onSuccess&&e.onSuccess();else{var r=new Error("Sentry error code: "+t.status);r.request=t,e.onError&&e.onError(r)}}).catch(function(){e.onError&&e.onError(new Error("Sentry error code: network unavailable"))})}var s=Se.XMLHttpRequest&&new Se.XMLHttpRequest;s&&(("withCredentials"in s||"undefined"!=typeof XDomainRequest)&&("withCredentials"in s?s.onreadystatechange=function(){if(4===s.readyState)if(200===s.status)e.onSuccess&&e.onSuccess();else if(e.onError){var t=new Error("Sentry error code: "+s.status);t.request=s,e.onError(t)}}:(s=new XDomainRequest,t=t.replace(/^https?:/,""),e.onSuccess&&(s.onload=e.onSuccess),e.onError&&(s.onerror=function(){var t=new Error("Sentry error code: XDomainRequest");t.request=s,e.onError(t)})),s.open("POST",t),n&&ne(n,function(e,t){s.setRequestHeader(e,t)}),s.send(r(e.data))))},_evaluateHash:function(e){var t={};for(var r in e)if(e.hasOwnProperty(r)){var n=e[r];t[r]="function"==typeof n?n():n}return t},_logDebug:function(e){this._originalConsoleMethods[e]&&(this.debug||this._globalOptions.debug)&&Function.prototype.apply.call(this._originalConsoleMethods[e],this._originalConsole,[].slice.call(arguments,1))},_mergeContext:function(e,t){Z(t)?delete this._globalContext[e]:this._globalContext[e]=oe(this._globalContext[e]||{},t)}},je.prototype.setUser=je.prototype.setUserContext,je.prototype.setReleaseContext=je.prototype.setRelease;var Te=je,Fe="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},De=Fe.Raven,Ae=new Te;Ae.noConflict=function(){return Fe.Raven=De,Ae},Ae.afterLoad();var Be,Me,He,Le,Ie,Pe,Ue,Ne=Ae,qe=Te;Ne.Client=qe,(Ue="plyr.io"===window.location.host)&&Ne.config("https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555").install(),document.addEventListener("DOMContentLoaded",function(){Ne.context(function(){var e=document.getElementById("container");window.shr&&window.shr.setup({count:{classname:"button__count"}}),document.addEventListener("focusout",function(t){e.contains(t.target)||t.target.classList.remove("tab-focus")}),document.addEventListener("keydown",function(t){9===t.keyCode&&setTimeout(function(){var t=document.activeElement;t&&!e.contains(t)&&t.classList.add("tab-focus")},10)});var t=new Plyr("#player",{debug:!0,title:"View From A Blue Moon",iconUrl:"../dist/plyr.svg",keyboard:{global:!0},tooltips:{controls:!1,seek:!1},captions:{active:!0},keys:{google:"AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c"},ads:{publisherId:"918848828995742"}});window.player=t;var r=document.querySelectorAll("[data-source]"),n={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},o=window.location.hash.replace("#",""),i=window.history&&window.history.pushState;function a(e,t,r){e&&e.classList[r?"add":"remove"](t)}function s(e,i){if(e in n&&(i||e!==o)&&(o.length||e!==n.video)){switch(e){case n.video:t.source={type:"video",title:"View From A Blue Moon",sources:[{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-576p.mp4",type:"video/mp4",size:576},{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-720p.mp4",type:"video/mp4",size:720},{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1080p.mp4",type:"video/mp4",size:1080},{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1440p.mp4",type:"video/mp4",size:1440}],poster:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg",tracks:[{kind:"captions",label:"English",srclang:"en",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt",default:!0},{kind:"captions",label:"French",srclang:"fr",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt"}]};break;case n.audio:t.source={type:"audio",title:"Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;",sources:[{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3",type:"audio/mp3"},{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg",type:"audio/ogg"}]};break;case n.youtube:t.source={type:"video",sources:[{src:"https://youtube.com/watch?v=bTqVqk7FSmY",provider:"youtube"}]};break;case n.vimeo:t.source={type:"video",sources:[{src:"https://vimeo.com/76979871",provider:"vimeo"}]}}o=e,Array.from(r).forEach(function(e){return a(e.parentElement,"active",!1)}),a(document.querySelector('[data-source="'+e+'"]'),"active",!0),Array.from(document.querySelectorAll(".plyr__cite")).forEach(function(e){e.setAttribute("hidden","")}),document.querySelector(".plyr__cite--"+e).removeAttribute("hidden")}}if(Array.from(r).forEach(function(e){e.addEventListener("click",function(){var t=e.getAttribute("data-source");s(t),i&&window.history.pushState({type:t},"","#"+t)})}),window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&s(e.state.type)}),i){var c=!o.length;c&&(o=n.video),o in n&&window.history.replaceState({type:o},"",c?"":"#"+o),o!==n.video&&s(o,!0)}})}),Ue&&(Be=window,Me=document,He="script",Le="ga",Be.GoogleAnalyticsObject=Le,Be.ga=Be.ga||function(){(Be.ga.q=Be.ga.q||[]).push(arguments)},Be.ga.l=1*new Date,Ie=Me.createElement(He),Pe=Me.getElementsByTagName(He)[0],Ie.async=1,Ie.src="https://www.google-analytics.com/analytics.js",Pe.parentNode.insertBefore(Ie,Pe),window.ga("create","UA-40881672-11","auto"),window.ga("send","pageview"))}();
//# sourceMappingURL=demo.min.js.map
diff --git a/demo/dist/demo.min.js.map b/demo/dist/demo.min.js.map
index a2321133..42f432f4 100644
--- a/demo/dist/demo.min.js.map
+++ b/demo/dist/demo.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["node_modules/raven-js/vendor/json-stringify-safe/stringify.js","node_modules/raven-js/src/utils.js","node_modules/raven-js/vendor/TraceKit/tracekit.js","node_modules/raven-js/vendor/md5/md5.js","node_modules/raven-js/src/configError.js","node_modules/raven-js/src/console.js","node_modules/raven-js/src/raven.js","node_modules/raven-js/src/singleton.js","demo/src/js/demo.js"],"names":["indexOf","haystack","needle","i","length","serializer","replacer","cycleReplacer","stack","keys","key","value","slice","join","thisPos","this","splice","push","Infinity","call","Error","err","message","name","Object","prototype","hasOwnProperty","stringifyError","module","exports","obj","spaces","JSON","stringify","getSerialize","_window","window","global","self","isUndefined","what","isPlainObject","toString","isString","isArray","supportsFetch","Headers","Request","Response","e","each","callback","j","hasKey","truncate","str","max","substr","object","joinRegExp","patterns","pattern","sources","len","replace","source","RegExp","htmlElementAsString","elem","className","classes","attr","out","tagName","toLowerCase","id","split","attrWhitelist","getAttribute","isOnlyOneTruthy","a","b","isSameStacktrace","stack1","stack2","frames1","frames","frames2","undefined","filename","lineno","colno","MAX_SERIALIZE_EXCEPTION_DEPTH","MAX_SERIALIZE_EXCEPTION_SIZE","MAX_SERIALIZE_KEYS_LENGTH","jsonSize","encodeURI","utf8Length","serializeValue","type","utils","isObject","isError","isErrorEvent","isDOMError","isDOMException","isFunction","isEmptyObject","_","supportsErrorEvent","ErrorEvent","supportsDOMError","DOMError","supportsDOMException","DOMException","supportsReferrerPolicy","referrerPolicy","supportsPromiseRejectionEvent","PromiseRejectionEvent","wrappedCallback","data","original","normalizedData","objectMerge","obj1","obj2","objectFrozen","isFrozen","urlencode","o","pairs","encodeURIComponent","uuid4","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","c","r","Math","random","htmlTreeAsString","nextStr","height","sepLength","parentNode","reverse","isSameException","ex1","ex2","values","stacktrace","parseUrl","url","match","query","fragment","protocol","host","path","relative","fill","replacement","track","orig","__raven__","__orig__","safeJoin","input","delimiter","output","String","serializeException","ex","depth","maxSize","serialized","serializeObject","reduce","acc","Array","map","val","serializeKeysForMessage","maxLength","filter","usedKeys","sanitize","sanitizeKeys","safeInput","sanitizeRegExp","sanitizeMask","parse","o_O","sanitizeWorker","workerInput","k","test","TraceKit","collectWindowErrors","debug","_slice","UNKNOWN_FUNCTION","ERROR_TYPES_RE","getLocationHref","document","location","href","report","_oldOnerrorHandler","_onErrorHandlerInstalled","handlers","lastArgs","lastException","lastExceptionStack","notifyHandlers","isWindowError","exception","apply","concat","arguments","inner","traceKitWindowOnError","msg","lineNo","colNo","error","computeStackTrace","augmentStackTraceWithInitialElement","processLastException","groups","line","column","func","_lastExceptionStack","_lastArgs","rethrow","args","setTimeout","incomplete","subscribe","handler","onerror","unsubscribe","uninstall","computeStackTraceFromStackProp","submatch","parts","element","chrome","winjs","gecko","geckoEval","chromeEval","lines","exec","isNative","columnNumber","xhr","XMLHttpRequest","open","send","status","responseText","sourceMaps","sourceMapAddress","charAt","origin","hostname","port","stackInfo","initial","unshift","partial","computeStackTraceByWalkingCallerChain","item","functionName","funcs","recursion","curr","caller","substring","result","sourceURL","fileName","lineNumber","description","tracekit","safeAdd","x","y","lsw","md5cmn","q","s","t","cnt","md5ff","d","md5gg","md5hh","md5ii","binlMD5","olda","oldb","oldc","oldd","binl2rstr","length32","fromCharCode","rstr2binl","length8","charCodeAt","rstr2hex","str2rstrUTF8","unescape","rawMD5","rstrMD5","rawHMACMD5","hash","bkey","ipad","opad","rstrHMACMD5","md5_1","string","raw","RavenConfigError","constructor","configError","console$1","console","level","originalConsoleLevel","originalConsole","sentryLevel","logger","extra","Function","wrapConsoleMethod","require$$0","dsnKeys","dsnPattern","now","Date","_document","_navigator","navigator","keepOriginalCallback","Raven","method","_hasJSON","_hasDocument","_hasNavigator","_lastCapturedException","_lastData","_lastEventId","_globalServer","_globalKey","_globalProject","_globalContext","_globalOptions","release","SENTRY_RELEASE","ignoreErrors","ignoreUrls","whitelistUrls","includePaths","headers","captureUnhandledRejections","maxMessageLength","maxUrlLength","stackTraceLimit","autoBreadcrumbs","instrument","sampleRate","_fetchDefaults","keepalive","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_keypressTimeout","_location","_lastHref","_resetBackoff","VERSION","config","dsn","options","_logDebug","globalOptions","setDSN","maxBreadcrumbs","min","autoBreadcrumbDefaults","dom","sentry","instrumentDefaults","tryCatch","install","isSetup","_handleOnErrorStackInfo","_attachPromiseRejectionHandler","_patchFunctionToString","_instrumentTryCatch","_instrumentBreadcrumbs","_drainPlugins","uri","_parseDSN","lastSlash","lastIndexOf","_dsn","user","_globalSecret","pass","_getGlobalServer","_globalEndpoint","context","wrap","_before","__raven_wrapper__","wrapped","deep","_ignoreNextOnError","captureException","property","_detachPromiseRejectionHandler","_unpatchFunctionToString","_restoreBuiltIns","_restoreConsole","_promiseRejectionHandler","event","reason","mechanism","handled","bind","addEventListener","removeEventListener","trimHeadFrames","captureMessage","_getCaptureExceptionOptionsFromPlainObject","_handleStackInfo","currentOptions","exKeys","sort","fingerprint","md5","__serialized__","initialCall","fileurl","_prepareFrames","_send","captureBreadcrumb","crumb","timestamp","breadcrumbCallback","shift","addPlugin","plugin","pluginArgs","setUserContext","setExtraContext","_mergeContext","setTagsContext","tags","clearContext","getContext","setEnvironment","environment","setRelease","setDataCallback","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastEventId","ravenNotConfiguredError","afterLoad","RavenConfig","showReportDialog","eventId","encode","qs","email","globalServer","script","createElement","async","src","head","body","appendChild","_triggerEvent","eventType","evt","toUpperCase","createEvent","initEvent","createEventObject","dispatchEvent","fireEvent","_breadcrumbEventHandler","evtName","target","category","_keypressEventHandler","isContentEditable","timeout","clearTimeout","_captureUrlChange","from","to","parsedLoc","parsedTo","parsedFrom","_originalFunctionToString","wrappedBuiltIns","wrapTimeFn","fn","originalCallback","function","wrapEventTarget","proto","capture","secure","handleEvent","before","clickHandler","keypressHandler","requestAnimationFrame","cb","eventTargets","wrapProp","prop","xhrproto","origOpen","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","props","onreadystatechange","origFetch","fetchInput","fetchData","then","response","attachEvent","hasPushAndReplaceState","app","runtime","history","pushState","replaceState","oldOnPopState","onpopstate","currentHref","historyReplacementFunction","origHistFunction","log","consoleMethodCallback","builtin","installer","m","allowSecretKey","_processException","frame","_normalizeFrame","in_app","stackInfoUrl","normalized","prefixedMessage","transaction","_trimPacket","request","Referer","breadcrumbs","_trimBreadcrumbs","urlProp","urlProps","_getHttpData","httpData","userAgent","User-Agent","referrer","_backoffDuration","_backoffStart","_shouldBackoff","_isRepeatData","current","last","_setBackoffState","retry","get","getResponseHeader","parseInt","baseData","project","platform","serverName","server_name","_sanitizeData","forEach","_sendProcessedPayload","_getUuid","allowDuplicates","event_id","auth","sentry_version","sentry_client","sentry_key","sentry_secret","_makeRequest","onSuccess","onError","opts","evaluatedHeaders","evaluatedFetchParameters","_evaluateHash","fetchParameters","defaultFetchOptions","fetchOptions","fetch","ok","XDomainRequest","onload","setRequestHeader","evaluated","setUser","setReleaseContext","raven","_Raven","RavenConstructor","noConflict","isLive","singleton","Client","container","getElementById","shr","setup","count","classname","contains","classList","remove","keyCode","focused","activeElement","add","player","Plyr","title","iconUrl","keyboard","tooltips","controls","clickToPlay","captions","active","google","ads","enabled","publisherId","buttons","querySelectorAll","types","video","audio","youtube","vimeo","currentType","historySupport","toggleClass","state","newSource","init","size","poster","tracks","kind","label","srclang","default","provider","button","parentElement","querySelector","cite","setAttribute","removeAttribute","GoogleAnalyticsObject","l","getElementsByTagName","insertBefore","ga"],"mappings":"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","file":"demo.min.js","sourcesContent":["/*\n json-stringify-safe\n Like JSON.stringify, but doesn't throw on circular references.\n\n Originally forked from https://github.com/isaacs/json-stringify-safe\n version 5.0.1 on 3/8/2017 and modified to handle Errors serialization\n and IE8 compatibility. Tests for this are in test/vendor.\n\n ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE\n*/\n\nexports = module.exports = stringify;\nexports.getSerialize = serializer;\n\nfunction indexOf(haystack, needle) {\n for (var i = 0; i < haystack.length; ++i) {\n if (haystack[i] === needle) return i;\n }\n return -1;\n}\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);\n}\n\n// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106\nfunction stringifyError(value) {\n var err = {\n // These properties are implemented as magical getters and don't show up in for in\n stack: value.stack,\n message: value.message,\n name: value.name\n };\n\n for (var i in value) {\n if (Object.prototype.hasOwnProperty.call(value, i)) {\n err[i] = value[i];\n }\n }\n\n return err;\n}\n\nfunction serializer(replacer, cycleReplacer) {\n var stack = [];\n var keys = [];\n\n if (cycleReplacer == null) {\n cycleReplacer = function(key, value) {\n if (stack[0] === value) {\n return '[Circular ~]';\n }\n return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';\n };\n }\n\n return function(key, value) {\n if (stack.length > 0) {\n var thisPos = indexOf(stack, this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n\n if (~indexOf(stack, value)) {\n value = cycleReplacer.call(this, key, value);\n }\n } else {\n stack.push(value);\n }\n\n return replacer == null\n ? value instanceof Error ? stringifyError(value) : value\n : replacer.call(this, key, value);\n };\n}\n","var stringify = require('../vendor/json-stringify-safe/stringify');\n\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : typeof self !== 'undefined'\n ? self\n : {};\n\nfunction isObject(what) {\n return typeof what === 'object' && what !== null;\n}\n\n// Yanked from https://git.io/vS8DV re-used under CC0\n// with some tiny modifications\nfunction isError(value) {\n switch (Object.prototype.toString.call(value)) {\n case '[object Error]':\n return true;\n case '[object Exception]':\n return true;\n case '[object DOMException]':\n return true;\n default:\n return value instanceof Error;\n }\n}\n\nfunction isErrorEvent(value) {\n return Object.prototype.toString.call(value) === '[object ErrorEvent]';\n}\n\nfunction isDOMError(value) {\n return Object.prototype.toString.call(value) === '[object DOMError]';\n}\n\nfunction isDOMException(value) {\n return Object.prototype.toString.call(value) === '[object DOMException]';\n}\n\nfunction isUndefined(what) {\n return what === void 0;\n}\n\nfunction isFunction(what) {\n return typeof what === 'function';\n}\n\nfunction isPlainObject(what) {\n return Object.prototype.toString.call(what) === '[object Object]';\n}\n\nfunction isString(what) {\n return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isArray(what) {\n return Object.prototype.toString.call(what) === '[object Array]';\n}\n\nfunction isEmptyObject(what) {\n if (!isPlainObject(what)) return false;\n\n for (var _ in what) {\n if (what.hasOwnProperty(_)) {\n return false;\n }\n }\n return true;\n}\n\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsDOMError() {\n try {\n new DOMError(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsDOMException() {\n try {\n new DOMException(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsFetch() {\n if (!('fetch' in _window)) return false;\n\n try {\n new Headers(); // eslint-disable-line no-new\n new Request(''); // eslint-disable-line no-new\n new Response(); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n// https://caniuse.com/#feat=referrer-policy\n// It doesn't. And it throw exception instead of ignoring this parameter...\n// REF: https://github.com/getsentry/raven-js/issues/1233\nfunction supportsReferrerPolicy() {\n if (!supportsFetch()) return false;\n\n try {\n // eslint-disable-next-line no-new\n new Request('pickleRick', {\n referrerPolicy: 'origin'\n });\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsPromiseRejectionEvent() {\n return typeof PromiseRejectionEvent === 'function';\n}\n\nfunction wrappedCallback(callback) {\n function dataCallback(data, original) {\n var normalizedData = callback(data) || data;\n if (original) {\n return original(normalizedData) || normalizedData;\n }\n return normalizedData;\n }\n\n return dataCallback;\n}\n\nfunction each(obj, callback) {\n var i, j;\n\n if (isUndefined(obj.length)) {\n for (i in obj) {\n if (hasKey(obj, i)) {\n callback.call(null, i, obj[i]);\n }\n }\n } else {\n j = obj.length;\n if (j) {\n for (i = 0; i < j; i++) {\n callback.call(null, i, obj[i]);\n }\n }\n }\n}\n\nfunction objectMerge(obj1, obj2) {\n if (!obj2) {\n return obj1;\n }\n each(obj2, function(key, value) {\n obj1[key] = value;\n });\n return obj1;\n}\n\n/**\n * This function is only used for react-native.\n * react-native freezes object that have already been sent over the\n * js bridge. We need this function in order to check if the object is frozen.\n * So it's ok that objectFrozen returns false if Object.isFrozen is not\n * supported because it's not relevant for other \"platforms\". See related issue:\n * https://github.com/getsentry/react-native-sentry/issues/57\n */\nfunction objectFrozen(obj) {\n if (!Object.isFrozen) {\n return false;\n }\n return Object.isFrozen(obj);\n}\n\nfunction truncate(str, max) {\n if (typeof max !== 'number') {\n throw new Error('2nd argument to `truncate` function should be a number');\n }\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : str.substr(0, max) + '\\u2026';\n}\n\n/**\n * hasKey, a better form of hasOwnProperty\n * Example: hasKey(MainHostObject, property) === true/false\n *\n * @param {Object} host object to check property\n * @param {string} key to check\n */\nfunction hasKey(object, key) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction joinRegExp(patterns) {\n // Combine an array of regular expressions and strings into one large regexp\n // Be mad.\n var sources = [],\n i = 0,\n len = patterns.length,\n pattern;\n\n for (; i < len; i++) {\n pattern = patterns[i];\n if (isString(pattern)) {\n // If it's a string, we need to escape it\n // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n sources.push(pattern.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1'));\n } else if (pattern && pattern.source) {\n // If it's a regexp already, we want to extract the source\n sources.push(pattern.source);\n }\n // Intentionally skip other cases\n }\n return new RegExp(sources.join('|'), 'i');\n}\n\nfunction urlencode(o) {\n var pairs = [];\n each(o, function(key, value) {\n pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n });\n return pairs.join('&');\n}\n\n// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n// intentionally using regex and not <a/> href parsing trick because React Native and other\n// environments where DOM might not be available\nfunction parseUrl(url) {\n if (typeof url !== 'string') return {};\n var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n var query = match[6] || '';\n var fragment = match[8] || '';\n return {\n protocol: match[2],\n host: match[4],\n path: match[5],\n relative: match[5] + query + fragment // everything minus origin\n };\n}\nfunction uuid4() {\n var crypto = _window.crypto || _window.msCrypto;\n\n if (!isUndefined(crypto) && crypto.getRandomValues) {\n // Use window.crypto API if available\n // eslint-disable-next-line no-undef\n var arr = new Uint16Array(8);\n crypto.getRandomValues(arr);\n\n // set 4 in byte 7\n arr[3] = (arr[3] & 0xfff) | 0x4000;\n // set 2 most significant bits of byte 9 to '10'\n arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n var pad = function(num) {\n var v = num.toString(16);\n while (v.length < 4) {\n v = '0' + v;\n }\n return v;\n };\n\n return (\n pad(arr[0]) +\n pad(arr[1]) +\n pad(arr[2]) +\n pad(arr[3]) +\n pad(arr[4]) +\n pad(arr[5]) +\n pad(arr[6]) +\n pad(arr[7])\n );\n } else {\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @param elem\n * @returns {string}\n */\nfunction htmlTreeAsString(elem) {\n /* eslint no-extra-parens:0*/\n var MAX_TRAVERSE_HEIGHT = 5,\n MAX_OUTPUT_LEN = 80,\n out = [],\n height = 0,\n len = 0,\n separator = ' > ',\n sepLength = separator.length,\n nextStr;\n\n while (elem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = htmlElementAsString(elem);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n if (\n nextStr === 'html' ||\n (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)\n ) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n elem = elem.parentNode;\n }\n\n return out.reverse().join(separator);\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @param HTMLElement\n * @returns {string}\n */\nfunction htmlElementAsString(elem) {\n var out = [],\n className,\n classes,\n key,\n attr,\n i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n if (elem.id) {\n out.push('#' + elem.id);\n }\n\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push('.' + classes[i]);\n }\n }\n var attrWhitelist = ['type', 'name', 'title', 'alt'];\n for (i = 0; i < attrWhitelist.length; i++) {\n key = attrWhitelist[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push('[' + key + '=\"' + attr + '\"]');\n }\n }\n return out.join('');\n}\n\n/**\n * Returns true if either a OR b is truthy, but not both\n */\nfunction isOnlyOneTruthy(a, b) {\n return !!(!!a ^ !!b);\n}\n\n/**\n * Returns true if both parameters are undefined\n */\nfunction isBothUndefined(a, b) {\n return isUndefined(a) && isUndefined(b);\n}\n\n/**\n * Returns true if the two input exception interfaces have the same content\n */\nfunction isSameException(ex1, ex2) {\n if (isOnlyOneTruthy(ex1, ex2)) return false;\n\n ex1 = ex1.values[0];\n ex2 = ex2.values[0];\n\n if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;\n\n // in case both stacktraces are undefined, we can't decide so default to false\n if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;\n\n return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);\n}\n\n/**\n * Returns true if the two input stack trace interfaces have the same content\n */\nfunction isSameStacktrace(stack1, stack2) {\n if (isOnlyOneTruthy(stack1, stack2)) return false;\n\n var frames1 = stack1.frames;\n var frames2 = stack2.frames;\n\n // Exit early if stacktrace is malformed\n if (frames1 === undefined || frames2 === undefined) return false;\n\n // Exit early if frame count differs\n if (frames1.length !== frames2.length) return false;\n\n // Iterate through every frame; bail out if anything differs\n var a, b;\n for (var i = 0; i < frames1.length; i++) {\n a = frames1[i];\n b = frames2[i];\n if (\n a.filename !== b.filename ||\n a.lineno !== b.lineno ||\n a.colno !== b.colno ||\n a['function'] !== b['function']\n )\n return false;\n }\n return true;\n}\n\n/**\n * Polyfill a method\n * @param obj object e.g. `document`\n * @param name method name present on object e.g. `addEventListener`\n * @param replacement replacement function\n * @param track {optional} record instrumentation to an array\n */\nfunction fill(obj, name, replacement, track) {\n if (obj == null) return;\n var orig = obj[name];\n obj[name] = replacement(orig);\n obj[name].__raven__ = true;\n obj[name].__orig__ = orig;\n if (track) {\n track.push([obj, name, orig]);\n }\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns {string}\n */\nfunction safeJoin(input, delimiter) {\n if (!isArray(input)) return '';\n\n var output = [];\n\n for (var i = 0; i < input.length; i++) {\n try {\n output.push(String(input[i]));\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n// Default Node.js REPL depth\nvar MAX_SERIALIZE_EXCEPTION_DEPTH = 3;\n// 50kB, as 100kB is max payload size, so half sounds reasonable\nvar MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;\nvar MAX_SERIALIZE_KEYS_LENGTH = 40;\n\nfunction utf8Length(value) {\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\n\nfunction serializeValue(value) {\n if (typeof value === 'string') {\n var maxLength = 40;\n return truncate(value, maxLength);\n } else if (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'undefined'\n ) {\n return value;\n }\n\n var type = Object.prototype.toString.call(value);\n\n // Node.js REPL notation\n if (type === '[object Object]') return '[Object]';\n if (type === '[object Array]') return '[Array]';\n if (type === '[object Function]')\n return value.name ? '[Function: ' + value.name + ']' : '[Function]';\n\n return value;\n}\n\nfunction serializeObject(value, depth) {\n if (depth === 0) return serializeValue(value);\n\n if (isPlainObject(value)) {\n return Object.keys(value).reduce(function(acc, key) {\n acc[key] = serializeObject(value[key], depth - 1);\n return acc;\n }, {});\n } else if (Array.isArray(value)) {\n return value.map(function(val) {\n return serializeObject(val, depth - 1);\n });\n }\n\n return serializeValue(value);\n}\n\nfunction serializeException(ex, depth, maxSize) {\n if (!isPlainObject(ex)) return ex;\n\n depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;\n maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;\n\n var serialized = serializeObject(ex, depth);\n\n if (jsonSize(stringify(serialized)) > maxSize) {\n return serializeException(ex, depth - 1);\n }\n\n return serialized;\n}\n\nfunction serializeKeysForMessage(keys, maxLength) {\n if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();\n if (!Array.isArray(keys)) return '';\n\n keys = keys.filter(function(key) {\n return typeof key === 'string';\n });\n if (keys.length === 0) return '[object has no keys]';\n\n maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;\n if (keys[0].length >= maxLength) return keys[0];\n\n for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {\n var serialized = keys.slice(0, usedKeys).join(', ');\n if (serialized.length > maxLength) continue;\n if (usedKeys === keys.length) return serialized;\n return serialized + '\\u2026';\n }\n\n return '';\n}\n\nfunction sanitize(input, sanitizeKeys) {\n if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))\n return input;\n\n var sanitizeRegExp = joinRegExp(sanitizeKeys);\n var sanitizeMask = '********';\n var safeInput;\n\n try {\n safeInput = JSON.parse(stringify(input));\n } catch (o_O) {\n return input;\n }\n\n function sanitizeWorker(workerInput) {\n if (isArray(workerInput)) {\n return workerInput.map(function(val) {\n return sanitizeWorker(val);\n });\n }\n\n if (isPlainObject(workerInput)) {\n return Object.keys(workerInput).reduce(function(acc, k) {\n if (sanitizeRegExp.test(k)) {\n acc[k] = sanitizeMask;\n } else {\n acc[k] = sanitizeWorker(workerInput[k]);\n }\n return acc;\n }, {});\n }\n\n return workerInput;\n }\n\n return sanitizeWorker(safeInput);\n}\n\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isDOMError: isDOMError,\n isDOMException: isDOMException,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isPlainObject: isPlainObject,\n isString: isString,\n isArray: isArray,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\n supportsDOMError: supportsDOMError,\n supportsDOMException: supportsDOMException,\n supportsFetch: supportsFetch,\n supportsReferrerPolicy: supportsReferrerPolicy,\n supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,\n wrappedCallback: wrappedCallback,\n each: each,\n objectMerge: objectMerge,\n truncate: truncate,\n objectFrozen: objectFrozen,\n hasKey: hasKey,\n joinRegExp: joinRegExp,\n urlencode: urlencode,\n uuid4: uuid4,\n htmlTreeAsString: htmlTreeAsString,\n htmlElementAsString: htmlElementAsString,\n isSameException: isSameException,\n isSameStacktrace: isSameStacktrace,\n parseUrl: parseUrl,\n fill: fill,\n safeJoin: safeJoin,\n serializeException: serializeException,\n serializeKeysForMessage: serializeKeysForMessage,\n sanitize: sanitize\n};\n","var utils = require('../../src/utils');\n\n/*\n TraceKit - Cross brower stack traces\n\n This was originally forked from github.com/occ/TraceKit, but has since been\n largely re-written and is now maintained as part of raven-js. Tests for\n this are in test/vendor.\n\n MIT license\n*/\n\nvar TraceKit = {\n collectWindowErrors: true,\n debug: false\n};\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n// global reference to slice\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?';\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;\n\nfunction getLocationHref() {\n if (typeof document === 'undefined' || document.location == null) return '';\n return document.location.href;\n}\n\nfunction getLocationOrigin() {\n if (typeof document === 'undefined' || document.location == null) return '';\n\n // Oh dear IE10...\n if (!document.location.origin) {\n return (\n document.location.protocol +\n '//' +\n document.location.hostname +\n (document.location.port ? ':' + document.location.port : '')\n );\n }\n\n return document.location.origin;\n}\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n * TraceKit.report.subscribe(function(stackInfo) { ... })\n * TraceKit.report.unsubscribe(function(stackInfo) { ... })\n * TraceKit.report(exception)\n * try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n * - Firefox: full stack trace with line numbers, plus column number\n * on top frame; column number is not guaranteed\n * - Opera: full stack trace with line and column numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n * - IE: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n * - IE5.5+ (only 8.0 tested)\n * - Firefox 0.9+ (only 3.5+ tested)\n * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n * Exceptions Have Stacktrace to be enabled in opera:config)\n * - Safari 3+ (only 4+ tested)\n * - Chrome 1+ (only 5+ tested)\n * - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = (function reportModuleWrapper() {\n var handlers = [],\n lastArgs = null,\n lastException = null,\n lastExceptionStack = null;\n\n /**\n * Add a crash handler.\n * @param {Function} handler\n */\n function subscribe(handler) {\n installGlobalHandler();\n handlers.push(handler);\n }\n\n /**\n * Remove a crash handler.\n * @param {Function} handler\n */\n function unsubscribe(handler) {\n for (var i = handlers.length - 1; i >= 0; --i) {\n if (handlers[i] === handler) {\n handlers.splice(i, 1);\n }\n }\n }\n\n /**\n * Remove all crash handlers.\n */\n function unsubscribeAll() {\n uninstallGlobalHandler();\n handlers = [];\n }\n\n /**\n * Dispatch stack information to all handlers.\n * @param {Object.<string, *>} stack\n */\n function notifyHandlers(stack, isWindowError) {\n var exception = null;\n if (isWindowError && !TraceKit.collectWindowErrors) {\n return;\n }\n for (var i in handlers) {\n if (handlers.hasOwnProperty(i)) {\n try {\n handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n } catch (inner) {\n exception = inner;\n }\n }\n }\n\n if (exception) {\n throw exception;\n }\n }\n\n var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n /**\n * Ensures all global unhandled exceptions are recorded.\n * Supported by Gecko and IE.\n * @param {string} msg Error message.\n * @param {string} url URL of script that generated the exception.\n * @param {(number|string)} lineNo The line number at which the error\n * occurred.\n * @param {?(number|string)} colNo The column number at which the error\n * occurred.\n * @param {?Error} ex The actual Error object.\n */\n function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {\n var stack = null;\n // If 'ex' is ErrorEvent, get real Error from inside\n var exception = utils.isErrorEvent(ex) ? ex.error : ex;\n // If 'msg' is ErrorEvent, get real message from inside\n var message = utils.isErrorEvent(msg) ? msg.message : msg;\n\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n lastExceptionStack,\n url,\n lineNo,\n message\n );\n processLastException();\n } else if (exception && utils.isError(exception)) {\n // non-string `exception` arg; attempt to extract stack trace\n\n // New chrome and blink send along a real error object\n // Let's just report that like a normal error.\n // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n stack = TraceKit.computeStackTrace(exception);\n notifyHandlers(stack, true);\n } else {\n var location = {\n url: url,\n line: lineNo,\n column: colNo\n };\n\n var name = undefined;\n var groups;\n\n if ({}.toString.call(message) === '[object String]') {\n var groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n message = groups[2];\n }\n }\n\n location.func = UNKNOWN_FUNCTION;\n\n stack = {\n name: name,\n message: message,\n url: getLocationHref(),\n stack: [location]\n };\n notifyHandlers(stack, true);\n }\n\n if (_oldOnerrorHandler) {\n return _oldOnerrorHandler.apply(this, arguments);\n }\n\n return false;\n }\n\n function installGlobalHandler() {\n if (_onErrorHandlerInstalled) {\n return;\n }\n _oldOnerrorHandler = _window.onerror;\n _window.onerror = traceKitWindowOnError;\n _onErrorHandlerInstalled = true;\n }\n\n function uninstallGlobalHandler() {\n if (!_onErrorHandlerInstalled) {\n return;\n }\n _window.onerror = _oldOnerrorHandler;\n _onErrorHandlerInstalled = false;\n _oldOnerrorHandler = undefined;\n }\n\n function processLastException() {\n var _lastExceptionStack = lastExceptionStack,\n _lastArgs = lastArgs;\n lastArgs = null;\n lastExceptionStack = null;\n lastException = null;\n notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n }\n\n /**\n * Reports an unhandled Error to TraceKit.\n * @param {Error} ex\n * @param {?boolean} rethrow If false, do not re-throw the exception.\n * Only used for window.onerror to not cause an infinite loop of\n * rethrowing.\n */\n function report(ex, rethrow) {\n var args = _slice.call(arguments, 1);\n if (lastExceptionStack) {\n if (lastException === ex) {\n return; // already caught by an inner catch block, ignore\n } else {\n processLastException();\n }\n }\n\n var stack = TraceKit.computeStackTrace(ex);\n lastExceptionStack = stack;\n lastException = ex;\n lastArgs = args;\n\n // If the stack trace is incomplete, wait for 2 seconds for\n // slow slow IE to see if onerror occurs or not before reporting\n // this exception; otherwise, we will end up with an incomplete\n // stack trace\n setTimeout(function() {\n if (lastException === ex) {\n processLastException();\n }\n }, stack.incomplete ? 2000 : 0);\n\n if (rethrow !== false) {\n throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n }\n }\n\n report.subscribe = subscribe;\n report.unsubscribe = unsubscribe;\n report.uninstall = unsubscribeAll;\n return report;\n})();\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n * s.name - exception name\n * s.message - exception message\n * s.stack[i].url - JavaScript or HTML file URL\n * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)\n * s.stack[i].args - arguments passed to the function, if known\n * s.stack[i].line - line number, if known\n * s.stack[i].column - column number, if known\n *\n * Supports:\n * - Firefox: full stack trace with line numbers and unreliable column\n * number on top frame\n * - Opera 10: full stack trace with line and column numbers\n * - Opera 9-: full stack trace with line numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the topmost stacktrace element\n * only\n * - IE: no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n * * in Safari, some methods may be missing from the stack trace;\n * * in IE, the topmost function in the stack trace will always be the\n * caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n */\nTraceKit.computeStackTrace = (function computeStackTraceWrapper() {\n // Contents of Exception in various browsers.\n //\n // SAFARI:\n // ex.message = Can't find variable: qq\n // ex.line = 59\n // ex.sourceId = 580238192\n // ex.sourceURL = http://...\n // ex.expressionBeginOffset = 96\n // ex.expressionCaretOffset = 98\n // ex.expressionEndOffset = 98\n // ex.name = ReferenceError\n //\n // FIREFOX:\n // ex.message = qq is not defined\n // ex.fileName = http://...\n // ex.lineNumber = 59\n // ex.columnNumber = 69\n // ex.stack = ...stack trace... (see the example below)\n // ex.name = ReferenceError\n //\n // CHROME:\n // ex.message = qq is not defined\n // ex.name = ReferenceError\n // ex.type = not_defined\n // ex.arguments = ['aa']\n // ex.stack = ...stack trace...\n //\n // INTERNET EXPLORER:\n // ex.message = ...\n // ex.name = ReferenceError\n //\n // OPERA:\n // ex.message = ...message... (see the example below)\n // ex.name = ReferenceError\n // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)\n // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n /**\n * Computes stack trace information from the stack property.\n * Chrome and Gecko use this property.\n * @param {Error} ex\n * @return {?Object.<string, *>} Stack trace information.\n */\n function computeStackTraceFromStackProp(ex) {\n if (typeof ex.stack === 'undefined' || !ex.stack) return;\n\n var chrome = /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n var winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n // NOTE: blob urls are now supposed to always have an origin, therefore it's format\n // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\\/` as well\n var gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\\/.*?|\\[native code\\]|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\n // Used to additionally parse URL/line/column from eval frames\n var geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n var chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n var lines = ex.stack.split('\\n');\n var stack = [];\n var submatch;\n var parts;\n var element;\n var reference = /^(.*) is undefined$/.exec(ex.message);\n\n for (var i = 0, j = lines.length; i < j; ++i) {\n if ((parts = chrome.exec(lines[i]))) {\n var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1]; // url\n parts[3] = submatch[2]; // line\n parts[4] = submatch[3]; // column\n }\n element = {\n url: !isNative ? parts[2] : null,\n func: parts[1] || UNKNOWN_FUNCTION,\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = winjs.exec(lines[i]))) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = gecko.exec(lines[i]))) {\n var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n // throw out eval line/column and use top-most line number\n parts[3] = submatch[1];\n parts[4] = submatch[2];\n parts[5] = null; // no column when eval\n } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = ex.columnNumber + 1;\n }\n element = {\n url: parts[3],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n if (element.url && element.url.substr(0, 5) === 'blob:') {\n // Special case for handling JavaScript loaded into a blob.\n // We use a synchronous AJAX request here as a blob is already in\n // memory - it's not making a network request. This will generate a warning\n // in the browser console, but there has already been an error so that's not\n // that much of an issue.\n var xhr = new XMLHttpRequest();\n xhr.open('GET', element.url, false);\n xhr.send(null);\n\n // If we failed to download the source, skip this patch\n if (xhr.status === 200) {\n var source = xhr.responseText || '';\n\n // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.\n // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175\n source = source.slice(-300);\n\n // Now we dig out the source map URL\n var sourceMaps = source.match(/\\/\\/# sourceMappingURL=(.*)$/);\n\n // If we don't find a source map comment or we find more than one, continue on to the next element.\n if (sourceMaps) {\n var sourceMapAddress = sourceMaps[1];\n\n // Now we check to see if it's a relative URL.\n // If it is, convert it to an absolute one.\n if (sourceMapAddress.charAt(0) === '~') {\n sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);\n }\n\n // Now we strip the '.map' off of the end of the URL and update the\n // element so that Sentry can match the map to the blob.\n element.url = sourceMapAddress.slice(0, -4);\n }\n }\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n }\n\n /**\n * Adds information about the first frame to incomplete stack traces.\n * Safari and IE require this to get complete data on the first frame.\n * @param {Object.<string, *>} stackInfo Stack trace information from\n * one of the compute* methods.\n * @param {string} url The URL of the script that caused an error.\n * @param {(number|string)} lineNo The line number of the script that\n * caused an error.\n * @param {string=} message The error generated by the browser, which\n * hopefully contains the name of the object that caused the error.\n * @return {boolean} Whether or not the stack information was\n * augmented.\n */\n function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {\n var initial = {\n url: url,\n line: lineNo\n };\n\n if (initial.url && initial.line) {\n stackInfo.incomplete = false;\n\n if (!initial.func) {\n initial.func = UNKNOWN_FUNCTION;\n }\n\n if (stackInfo.stack.length > 0) {\n if (stackInfo.stack[0].url === initial.url) {\n if (stackInfo.stack[0].line === initial.line) {\n return false; // already in stack trace\n } else if (\n !stackInfo.stack[0].line &&\n stackInfo.stack[0].func === initial.func\n ) {\n stackInfo.stack[0].line = initial.line;\n return false;\n }\n }\n }\n\n stackInfo.stack.unshift(initial);\n stackInfo.partial = true;\n return true;\n } else {\n stackInfo.incomplete = true;\n }\n\n return false;\n }\n\n /**\n * Computes stack trace information by walking the arguments.caller\n * chain at the time the exception occurred. This will cause earlier\n * frames to be missed but is the only way to get any stack trace in\n * Safari and IE. The top frame is restored by\n * {@link augmentStackTraceWithInitialElement}.\n * @param {Error} ex\n * @return {?Object.<string, *>} Stack trace information.\n */\n function computeStackTraceByWalkingCallerChain(ex, depth) {\n var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,\n stack = [],\n funcs = {},\n recursion = false,\n parts,\n item,\n source;\n\n for (\n var curr = computeStackTraceByWalkingCallerChain.caller;\n curr && !recursion;\n curr = curr.caller\n ) {\n if (curr === computeStackTrace || curr === TraceKit.report) {\n // console.log('skipping internal function');\n continue;\n }\n\n item = {\n url: null,\n func: UNKNOWN_FUNCTION,\n line: null,\n column: null\n };\n\n if (curr.name) {\n item.func = curr.name;\n } else if ((parts = functionName.exec(curr.toString()))) {\n item.func = parts[1];\n }\n\n if (typeof item.func === 'undefined') {\n try {\n item.func = parts.input.substring(0, parts.input.indexOf('{'));\n } catch (e) {}\n }\n\n if (funcs['' + curr]) {\n recursion = true;\n } else {\n funcs['' + curr] = true;\n }\n\n stack.push(item);\n }\n\n if (depth) {\n // console.log('depth is ' + depth);\n // console.log('stack is ' + stack.length);\n stack.splice(0, depth);\n }\n\n var result = {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n augmentStackTraceWithInitialElement(\n result,\n ex.sourceURL || ex.fileName,\n ex.line || ex.lineNumber,\n ex.message || ex.description\n );\n return result;\n }\n\n /**\n * Computes a stack trace for an exception.\n * @param {Error} ex\n * @param {(string|number)=} depth\n */\n function computeStackTrace(ex, depth) {\n var stack = null;\n depth = depth == null ? 0 : +depth;\n\n try {\n stack = computeStackTraceFromStackProp(ex);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n\n try {\n stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref()\n };\n }\n\n computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n\n return computeStackTrace;\n})();\n\nmodule.exports = TraceKit;\n","/*\n * JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\n/*\n* Add integers, wrapping at 2^32. This uses 16-bit operations internally\n* to work around bugs in some JS interpreters.\n*/\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xffff);\n}\n\n/*\n* Bitwise rotate a 32-bit number to the left.\n*/\nfunction bitRotateLeft(num, cnt) {\n return (num << cnt) | (num >>> (32 - cnt));\n}\n\n/*\n* These functions implement the four basic operations the algorithm uses.\n*/\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn((b & c) | (~b & d), a, b, x, s, t);\n}\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\n/*\n* Calculate the MD5 of an array of little-endian words, and a bit length.\n*/\nfunction binlMD5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << (len % 32);\n x[(((len + 64) >>> 9) << 4) + 14] = len;\n\n var i;\n var olda;\n var oldb;\n var oldc;\n var oldd;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (i = 0; i < x.length; i += 16) {\n olda = a;\n oldb = b;\n oldc = c;\n oldd = d;\n\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n return [a, b, c, d];\n}\n\n/*\n* Convert an array of little-endian words to a string\n*/\nfunction binl2rstr(input) {\n var i;\n var output = '';\n var length32 = input.length * 32;\n for (i = 0; i < length32; i += 8) {\n output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);\n }\n return output;\n}\n\n/*\n* Convert a raw string to an array of little-endian words\n* Characters >255 have their high-byte silently ignored.\n*/\nfunction rstr2binl(input) {\n var i;\n var output = [];\n output[(input.length >> 2) - 1] = undefined;\n for (i = 0; i < output.length; i += 1) {\n output[i] = 0;\n }\n var length8 = input.length * 8;\n for (i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);\n }\n return output;\n}\n\n/*\n* Calculate the MD5 of a raw string\n*/\nfunction rstrMD5(s) {\n return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));\n}\n\n/*\n* Calculate the HMAC-MD5, of a key and some data (raw strings)\n*/\nfunction rstrHMACMD5(key, data) {\n var i;\n var bkey = rstr2binl(key);\n var ipad = [];\n var opad = [];\n var hash;\n ipad[15] = opad[15] = undefined;\n if (bkey.length > 16) {\n bkey = binlMD5(bkey, key.length * 8);\n }\n for (i = 0; i < 16; i += 1) {\n ipad[i] = bkey[i] ^ 0x36363636;\n opad[i] = bkey[i] ^ 0x5c5c5c5c;\n }\n hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);\n return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));\n}\n\n/*\n* Convert a raw string to a hex string\n*/\nfunction rstr2hex(input) {\n var hexTab = '0123456789abcdef';\n var output = '';\n var x;\n var i;\n for (i = 0; i < input.length; i += 1) {\n x = input.charCodeAt(i);\n output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);\n }\n return output;\n}\n\n/*\n* Encode a string as utf-8\n*/\nfunction str2rstrUTF8(input) {\n return unescape(encodeURIComponent(input));\n}\n\n/*\n* Take string arguments and return either raw or hex encoded strings\n*/\nfunction rawMD5(s) {\n return rstrMD5(str2rstrUTF8(s));\n}\nfunction hexMD5(s) {\n return rstr2hex(rawMD5(s));\n}\nfunction rawHMACMD5(k, d) {\n return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));\n}\nfunction hexHMACMD5(k, d) {\n return rstr2hex(rawHMACMD5(k, d));\n}\n\nfunction md5(string, key, raw) {\n if (!key) {\n if (!raw) {\n return hexMD5(string);\n }\n return rawMD5(string);\n }\n if (!raw) {\n return hexHMACMD5(key, string);\n }\n return rawHMACMD5(key, string);\n}\n\nmodule.exports = md5;\n","function RavenConfigError(message) {\n this.name = 'RavenConfigError';\n this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\n\nmodule.exports = RavenConfigError;\n","var utils = require('./utils');\n\nvar wrapMethod = function(console, level, callback) {\n var originalConsoleLevel = console[level];\n var originalConsole = console;\n\n if (!(level in console)) {\n return;\n }\n\n var sentryLevel = level === 'warn' ? 'warning' : level;\n\n console[level] = function() {\n var args = [].slice.call(arguments);\n\n var msg = utils.safeJoin(args, ' ');\n var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};\n\n if (level === 'assert') {\n if (args[0] === false) {\n // Default browsers message\n msg =\n 'Assertion failed: ' + (utils.safeJoin(args.slice(1), ' ') || 'console.assert');\n data.extra.arguments = args.slice(1);\n callback && callback(msg, data);\n }\n } else {\n callback && callback(msg, data);\n }\n\n // this fails for some browsers. :(\n if (originalConsoleLevel) {\n // IE9 doesn't allow calling apply on console functions directly\n // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193\n Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);\n }\n };\n};\n\nmodule.exports = {\n wrapMethod: wrapMethod\n};\n","/*global XDomainRequest:false */\n\nvar TraceKit = require('../vendor/TraceKit/tracekit');\nvar stringify = require('../vendor/json-stringify-safe/stringify');\nvar md5 = require('../vendor/md5/md5');\nvar RavenConfigError = require('./configError');\n\nvar utils = require('./utils');\nvar isErrorEvent = utils.isErrorEvent;\nvar isDOMError = utils.isDOMError;\nvar isDOMException = utils.isDOMException;\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isPlainObject = utils.isPlainObject;\nvar isUndefined = utils.isUndefined;\nvar isFunction = utils.isFunction;\nvar isString = utils.isString;\nvar isArray = utils.isArray;\nvar isEmptyObject = utils.isEmptyObject;\nvar each = utils.each;\nvar objectMerge = utils.objectMerge;\nvar truncate = utils.truncate;\nvar objectFrozen = utils.objectFrozen;\nvar hasKey = utils.hasKey;\nvar joinRegExp = utils.joinRegExp;\nvar urlencode = utils.urlencode;\nvar uuid4 = utils.uuid4;\nvar htmlTreeAsString = utils.htmlTreeAsString;\nvar isSameException = utils.isSameException;\nvar isSameStacktrace = utils.isSameStacktrace;\nvar parseUrl = utils.parseUrl;\nvar fill = utils.fill;\nvar supportsFetch = utils.supportsFetch;\nvar supportsReferrerPolicy = utils.supportsReferrerPolicy;\nvar serializeKeysForMessage = utils.serializeKeysForMessage;\nvar serializeException = utils.serializeException;\nvar sanitize = utils.sanitize;\n\nvar wrapConsoleMethod = require('./console').wrapMethod;\n\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\n\nfunction now() {\n return +new Date();\n}\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\n\nfunction keepOriginalCallback(original, callback) {\n return isFunction(callback)\n ? function(data) {\n return callback(data, original);\n }\n : callback;\n}\n\n// First, check for JSON support\n// If there is no JSON, we no-op the core features of Raven\n// since JSON is required to encode the payload\nfunction Raven() {\n this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);\n // Raven can run in contexts where there's no document (react-native)\n this._hasDocument = !isUndefined(_document);\n this._hasNavigator = !isUndefined(_navigator);\n this._lastCapturedException = null;\n this._lastData = null;\n this._lastEventId = null;\n this._globalServer = null;\n this._globalKey = null;\n this._globalProject = null;\n this._globalContext = {};\n this._globalOptions = {\n // SENTRY_RELEASE can be injected by https://github.com/getsentry/sentry-webpack-plugin\n release: _window.SENTRY_RELEASE && _window.SENTRY_RELEASE.id,\n logger: 'javascript',\n ignoreErrors: [],\n ignoreUrls: [],\n whitelistUrls: [],\n includePaths: [],\n headers: null,\n collectWindowErrors: true,\n captureUnhandledRejections: true,\n maxMessageLength: 0,\n // By default, truncates URL values to 250 chars\n maxUrlLength: 250,\n stackTraceLimit: 50,\n autoBreadcrumbs: true,\n instrument: true,\n sampleRate: 1,\n sanitizeKeys: []\n };\n this._fetchDefaults = {\n method: 'POST',\n keepalive: true,\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n // https://caniuse.com/#feat=referrer-policy\n // It doesn't. And it throw exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n referrerPolicy: supportsReferrerPolicy() ? 'origin' : ''\n };\n this._ignoreOnError = 0;\n this._isRavenInstalled = false;\n this._originalErrorStackTraceLimit = Error.stackTraceLimit;\n // capture references to window.console *and* all its methods first\n // before the console plugin has a chance to monkey patch\n this._originalConsole = _window.console || {};\n this._originalConsoleMethods = {};\n this._plugins = [];\n this._startTime = now();\n this._wrappedBuiltIns = [];\n this._breadcrumbs = [];\n this._lastCapturedEvent = null;\n this._keypressTimeout;\n this._location = _window.location;\n this._lastHref = this._location && this._location.href;\n this._resetBackoff();\n\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsole) {\n this._originalConsoleMethods[method] = this._originalConsole[method];\n }\n}\n\n/*\n * The core Raven singleton\n *\n * @this {Raven}\n */\n\nRaven.prototype = {\n // Hardcode version string so that raven source can be loaded directly via\n // webpack (using a build step causes webpack #1617). Grunt verifies that\n // this value matches package.json during build.\n // See: https://github.com/getsentry/raven-js/issues/465\n VERSION: '3.26.3',\n\n debug: false,\n\n TraceKit: TraceKit, // alias to TraceKit\n\n /*\n * Configure Raven with a DSN and extra options\n *\n * @param {string} dsn The public Sentry DSN\n * @param {object} options Set of global options [optional]\n * @return {Raven}\n */\n config: function(dsn, options) {\n var self = this;\n\n if (self._globalServer) {\n this._logDebug('error', 'Error: Raven has already been configured');\n return self;\n }\n if (!dsn) return self;\n\n var globalOptions = self._globalOptions;\n\n // merge in options\n if (options) {\n each(options, function(key, value) {\n // tags and extra are special and need to be put into context\n if (key === 'tags' || key === 'extra' || key === 'user') {\n self._globalContext[key] = value;\n } else {\n globalOptions[key] = value;\n }\n });\n }\n\n self.setDSN(dsn);\n\n // \"Script error.\" is hard coded into browsers for errors that it can't read.\n // this is the result of a script being pulled in from an external domain and CORS.\n globalOptions.ignoreErrors.push(/^Script error\\.?$/);\n globalOptions.ignoreErrors.push(/^Javascript error: Script error\\.? on line 0$/);\n\n // join regexp rules into one big rule\n globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);\n globalOptions.ignoreUrls = globalOptions.ignoreUrls.length\n ? joinRegExp(globalOptions.ignoreUrls)\n : false;\n globalOptions.whitelistUrls = globalOptions.whitelistUrls.length\n ? joinRegExp(globalOptions.whitelistUrls)\n : false;\n globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n globalOptions.maxBreadcrumbs = Math.max(\n 0,\n Math.min(globalOptions.maxBreadcrumbs || 100, 100)\n ); // default and hard limit is 100\n\n var autoBreadcrumbDefaults = {\n xhr: true,\n console: true,\n dom: true,\n location: true,\n sentry: true\n };\n\n var autoBreadcrumbs = globalOptions.autoBreadcrumbs;\n if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {\n autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);\n } else if (autoBreadcrumbs !== false) {\n autoBreadcrumbs = autoBreadcrumbDefaults;\n }\n globalOptions.autoBreadcrumbs = autoBreadcrumbs;\n\n var instrumentDefaults = {\n tryCatch: true\n };\n\n var instrument = globalOptions.instrument;\n if ({}.toString.call(instrument) === '[object Object]') {\n instrument = objectMerge(instrumentDefaults, instrument);\n } else if (instrument !== false) {\n instrument = instrumentDefaults;\n }\n globalOptions.instrument = instrument;\n\n TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n // return for chaining\n return self;\n },\n\n /*\n * Installs a global window.onerror error handler\n * to capture and report uncaught exceptions.\n * At this point, install() is required to be called due\n * to the way TraceKit is set up.\n *\n * @return {Raven}\n */\n install: function() {\n var self = this;\n if (self.isSetup() && !self._isRavenInstalled) {\n TraceKit.report.subscribe(function() {\n self._handleOnErrorStackInfo.apply(self, arguments);\n });\n\n if (self._globalOptions.captureUnhandledRejections) {\n self._attachPromiseRejectionHandler();\n }\n\n self._patchFunctionToString();\n\n if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n self._instrumentTryCatch();\n }\n\n if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n // Install all of the plugins\n self._drainPlugins();\n\n self._isRavenInstalled = true;\n }\n\n Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n return this;\n },\n\n /*\n * Set the DSN (can be called multiple time unlike config)\n *\n * @param {string} dsn The public Sentry DSN\n */\n setDSN: function(dsn) {\n var self = this,\n uri = self._parseDSN(dsn),\n lastSlash = uri.path.lastIndexOf('/'),\n path = uri.path.substr(1, lastSlash);\n\n self._dsn = dsn;\n self._globalKey = uri.user;\n self._globalSecret = uri.pass && uri.pass.substr(1);\n self._globalProject = uri.path.substr(lastSlash + 1);\n\n self._globalServer = self._getGlobalServer(uri);\n\n self._globalEndpoint =\n self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';\n\n // Reset backoff state since we may be pointing at a\n // new project/server\n this._resetBackoff();\n },\n\n /*\n * Wrap code within a context so Raven can capture errors\n * reliably across domains that is executed immediately.\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The callback to be immediately executed within the context\n * @param {array} args An array of arguments to be called with the callback [optional]\n */\n context: function(options, func, args) {\n if (isFunction(options)) {\n args = func || [];\n func = options;\n options = {};\n }\n\n return this.wrap(options, func).apply(this, args);\n },\n\n /*\n * Wrap code within a context and returns back a new function to be executed\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The function to be wrapped in a new context\n * @param {function} _before A function to call before the try/catch wrapper [optional, private]\n * @return {function} The newly wrapped functions with a context\n */\n wrap: function(options, func, _before) {\n var self = this;\n // 1 argument has been passed, and it's not a function\n // so just return it\n if (isUndefined(func) && !isFunction(options)) {\n return options;\n }\n\n // options is optional\n if (isFunction(options)) {\n func = options;\n options = undefined;\n }\n\n // At this point, we've passed along 2 arguments, and the second one\n // is not a function either, so we'll just return the second argument.\n if (!isFunction(func)) {\n return func;\n }\n\n // We don't wanna wrap it twice!\n try {\n if (func.__raven__) {\n return func;\n }\n\n // If this has already been wrapped in the past, return that\n if (func.__raven_wrapper__) {\n return func.__raven_wrapper__;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return func;\n }\n\n function wrapped() {\n var args = [],\n i = arguments.length,\n deep = !options || (options && options.deep !== false);\n\n if (_before && isFunction(_before)) {\n _before.apply(this, arguments);\n }\n\n // Recursively wrap all of a function's arguments that are\n // functions themselves.\n while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];\n\n try {\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means Raven caught an error invoking your application code. This is\n // expected behavior and NOT indicative of a bug with Raven.js.\n return func.apply(this, args);\n } catch (e) {\n self._ignoreNextOnError();\n self.captureException(e, options);\n throw e;\n }\n }\n\n // copy over properties of the old function\n for (var property in func) {\n if (hasKey(func, property)) {\n wrapped[property] = func[property];\n }\n }\n wrapped.prototype = func.prototype;\n\n func.__raven_wrapper__ = wrapped;\n // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n wrapped.__raven__ = true;\n wrapped.__orig__ = func;\n\n return wrapped;\n },\n\n /**\n * Uninstalls the global error handler.\n *\n * @return {Raven}\n */\n uninstall: function() {\n TraceKit.report.uninstall();\n\n this._detachPromiseRejectionHandler();\n this._unpatchFunctionToString();\n this._restoreBuiltIns();\n this._restoreConsole();\n\n Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n this._isRavenInstalled = false;\n\n return this;\n },\n\n /**\n * Callback used for `unhandledrejection` event\n *\n * @param {PromiseRejectionEvent} event An object containing\n * promise: the Promise that was rejected\n * reason: the value with which the Promise was rejected\n * @return void\n */\n _promiseRejectionHandler: function(event) {\n this._logDebug('debug', 'Raven caught unhandled promise rejection:', event);\n this.captureException(event.reason, {\n mechanism: {\n type: 'onunhandledrejection',\n handled: false\n }\n });\n },\n\n /**\n * Installs the global promise rejection handler.\n *\n * @return {raven}\n */\n _attachPromiseRejectionHandler: function() {\n this._promiseRejectionHandler = this._promiseRejectionHandler.bind(this);\n _window.addEventListener &&\n _window.addEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Uninstalls the global promise rejection handler.\n *\n * @return {raven}\n */\n _detachPromiseRejectionHandler: function() {\n _window.removeEventListener &&\n _window.removeEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Manually capture an exception and send it over to Sentry\n *\n * @param {error} ex An exception to be logged\n * @param {object} options A specific set of options for this error [optional]\n * @return {Raven}\n */\n captureException: function(ex, options) {\n options = objectMerge({trimHeadFrames: 0}, options ? options : {});\n\n if (isErrorEvent(ex) && ex.error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n ex = ex.error;\n } else if (isDOMError(ex) || isDOMException(ex)) {\n // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)\n // then we just extract the name and message, as they don't provide anything else\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n var name = ex.name || (isDOMError(ex) ? 'DOMError' : 'DOMException');\n var message = ex.message ? name + ': ' + ex.message : name;\n\n return this.captureMessage(\n message,\n objectMerge(options, {\n // neither DOMError or DOMException provide stack trace and we most likely wont get it this way as well\n // but it's barely any overhead so we may at least try\n stacktrace: true,\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n } else if (isError(ex)) {\n // we have a real Error object\n ex = ex;\n } else if (isPlainObject(ex)) {\n // If it is plain Object, serialize it manually and extract options\n // This will allow us to group events based on top-level keys\n // which is much better than creating new group when any key/value change\n options = this._getCaptureExceptionOptionsFromPlainObject(options, ex);\n ex = new Error(options.message);\n } else {\n // If none of previous checks were valid, then it means that\n // it's not a DOMError/DOMException\n // it's not a plain Object\n // it's not a valid ErrorEvent (one with an error property)\n // it's not an Error\n // So bail out and capture it as a simple message:\n return this.captureMessage(\n ex,\n objectMerge(options, {\n stacktrace: true, // if we fall back to captureMessage, default to attempting a new trace\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n }\n\n // Store the raw exception object for potential debugging and introspection\n this._lastCapturedException = ex;\n\n // TraceKit.report will re-raise any exception passed to it,\n // which means you have to wrap it in try/catch. Instead, we\n // can wrap it here and only re-raise if TraceKit.report\n // raises an exception different from the one we asked to\n // report on.\n try {\n var stack = TraceKit.computeStackTrace(ex);\n this._handleStackInfo(stack, options);\n } catch (ex1) {\n if (ex !== ex1) {\n throw ex1;\n }\n }\n\n return this;\n },\n\n _getCaptureExceptionOptionsFromPlainObject: function(currentOptions, ex) {\n var exKeys = Object.keys(ex).sort();\n var options = objectMerge(currentOptions, {\n message:\n 'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys),\n fingerprint: [md5(exKeys)],\n extra: currentOptions.extra || {}\n });\n options.extra.__serialized__ = serializeException(ex);\n\n return options;\n },\n\n /*\n * Manually send a message to Sentry\n *\n * @param {string} msg A plain message to be captured in Sentry\n * @param {object} options A specific set of options for this message [optional]\n * @return {Raven}\n */\n captureMessage: function(msg, options) {\n // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an\n // early call; we'll error on the side of logging anything called before configuration since it's\n // probably something you should see:\n if (\n !!this._globalOptions.ignoreErrors.test &&\n this._globalOptions.ignoreErrors.test(msg)\n ) {\n return;\n }\n\n options = options || {};\n msg = msg + ''; // Make sure it's actually a string\n\n var data = objectMerge(\n {\n message: msg\n },\n options\n );\n\n var ex;\n // Generate a \"synthetic\" stack trace from this point.\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative\n // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,\n // or if it catches a thrown object without a \"stack\" property.\n try {\n throw new Error(msg);\n } catch (ex1) {\n ex = ex1;\n }\n\n // null exception name so `Error` isn't prefixed to msg\n ex.name = null;\n var stack = TraceKit.computeStackTrace(ex);\n\n // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]\n var initialCall = isArray(stack.stack) && stack.stack[1];\n\n // if stack[1] is `Raven.captureException`, it means that someone passed a string to it and we redirected that call\n // to be handled by `captureMessage`, thus `initialCall` is the 3rd one, not 2nd\n // initialCall => captureException(string) => captureMessage(string)\n if (initialCall && initialCall.func === 'Raven.captureException') {\n initialCall = stack.stack[2];\n }\n\n var fileurl = (initialCall && initialCall.url) || '';\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n // Always attempt to get stacktrace if message is empty.\n // It's the only way to provide any helpful information to the user.\n if (this._globalOptions.stacktrace || options.stacktrace || data.message === '') {\n // fingerprint on msg, not stack trace (legacy behavior, could be revisited)\n data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;\n\n options = objectMerge(\n {\n trimHeadFrames: 0\n },\n options\n );\n // Since we know this is a synthetic trace, the top frame (this function call)\n // MUST be from Raven.js, so mark it for trimming\n // We add to the trim counter so that callers can choose to trim extra frames, such\n // as utility functions.\n options.trimHeadFrames += 1;\n\n var frames = this._prepareFrames(stack, options);\n data.stacktrace = {\n // Sentry expects frames oldest to newest\n frames: frames.reverse()\n };\n }\n\n // Make sure that fingerprint is always wrapped in an array\n if (data.fingerprint) {\n data.fingerprint = isArray(data.fingerprint)\n ? data.fingerprint\n : [data.fingerprint];\n }\n\n // Fire away!\n this._send(data);\n\n return this;\n },\n\n captureBreadcrumb: function(obj) {\n var crumb = objectMerge(\n {\n timestamp: now() / 1000\n },\n obj\n );\n\n if (isFunction(this._globalOptions.breadcrumbCallback)) {\n var result = this._globalOptions.breadcrumbCallback(crumb);\n\n if (isObject(result) && !isEmptyObject(result)) {\n crumb = result;\n } else if (result === false) {\n return this;\n }\n }\n\n this._breadcrumbs.push(crumb);\n if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {\n this._breadcrumbs.shift();\n }\n return this;\n },\n\n addPlugin: function(plugin /*arg1, arg2, ... argN*/) {\n var pluginArgs = [].slice.call(arguments, 1);\n\n this._plugins.push([plugin, pluginArgs]);\n if (this._isRavenInstalled) {\n this._drainPlugins();\n }\n\n return this;\n },\n\n /*\n * Set/clear a user to be sent along with the payload.\n *\n * @param {object} user An object representing user data [optional]\n * @return {Raven}\n */\n setUserContext: function(user) {\n // Intentionally do not merge here since that's an unexpected behavior.\n this._globalContext.user = user;\n\n return this;\n },\n\n /*\n * Merge extra attributes to be sent along with the payload.\n *\n * @param {object} extra An object representing extra data [optional]\n * @return {Raven}\n */\n setExtraContext: function(extra) {\n this._mergeContext('extra', extra);\n\n return this;\n },\n\n /*\n * Merge tags to be sent along with the payload.\n *\n * @param {object} tags An object representing tags [optional]\n * @return {Raven}\n */\n setTagsContext: function(tags) {\n this._mergeContext('tags', tags);\n\n return this;\n },\n\n /*\n * Clear all of the context.\n *\n * @return {Raven}\n */\n clearContext: function() {\n this._globalContext = {};\n\n return this;\n },\n\n /*\n * Get a copy of the current context. This cannot be mutated.\n *\n * @return {object} copy of context\n */\n getContext: function() {\n // lol javascript\n return JSON.parse(stringify(this._globalContext));\n },\n\n /*\n * Set environment of application\n *\n * @param {string} environment Typically something like 'production'.\n * @return {Raven}\n */\n setEnvironment: function(environment) {\n this._globalOptions.environment = environment;\n\n return this;\n },\n\n /*\n * Set release version of application\n *\n * @param {string} release Typically something like a git SHA to identify version\n * @return {Raven}\n */\n setRelease: function(release) {\n this._globalOptions.release = release;\n\n return this;\n },\n\n /*\n * Set the dataCallback option\n *\n * @param {function} callback The callback to run which allows the\n * data blob to be mutated before sending\n * @return {Raven}\n */\n setDataCallback: function(callback) {\n var original = this._globalOptions.dataCallback;\n this._globalOptions.dataCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the breadcrumbCallback option\n *\n * @param {function} callback The callback to run which allows filtering\n * or mutating breadcrumbs\n * @return {Raven}\n */\n setBreadcrumbCallback: function(callback) {\n var original = this._globalOptions.breadcrumbCallback;\n this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the shouldSendCallback option\n *\n * @param {function} callback The callback to run which allows\n * introspecting the blob before sending\n * @return {Raven}\n */\n setShouldSendCallback: function(callback) {\n var original = this._globalOptions.shouldSendCallback;\n this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /**\n * Override the default HTTP transport mechanism that transmits data\n * to the Sentry server.\n *\n * @param {function} transport Function invoked instead of the default\n * `makeRequest` handler.\n *\n * @return {Raven}\n */\n setTransport: function(transport) {\n this._globalOptions.transport = transport;\n\n return this;\n },\n\n /*\n * Get the latest raw exception that was captured by Raven.\n *\n * @return {error}\n */\n lastException: function() {\n return this._lastCapturedException;\n },\n\n /*\n * Get the last event id\n *\n * @return {string}\n */\n lastEventId: function() {\n return this._lastEventId;\n },\n\n /*\n * Determine if Raven is setup and ready to go.\n *\n * @return {boolean}\n */\n isSetup: function() {\n if (!this._hasJSON) return false; // needs JSON support\n if (!this._globalServer) {\n if (!this.ravenNotConfiguredError) {\n this.ravenNotConfiguredError = true;\n this._logDebug('error', 'Error: Raven has not been configured.');\n }\n return false;\n }\n return true;\n },\n\n afterLoad: function() {\n // TODO: remove window dependence?\n\n // Attempt to initialize Raven on load\n var RavenConfig = _window.RavenConfig;\n if (RavenConfig) {\n this.config(RavenConfig.dsn, RavenConfig.config).install();\n }\n },\n\n showReportDialog: function(options) {\n if (\n !_document // doesn't work without a document (React native)\n )\n return;\n\n options = options || {};\n\n var lastEventId = options.eventId || this.lastEventId();\n if (!lastEventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n var dsn = options.dsn || this._dsn;\n if (!dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var qs = '';\n qs += '?eventId=' + encode(lastEventId);\n qs += '&dsn=' + encode(dsn);\n\n var user = options.user || this._globalContext.user;\n if (user) {\n if (user.name) qs += '&name=' + encode(user.name);\n if (user.email) qs += '&email=' + encode(user.email);\n }\n\n var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/' + qs;\n (_document.head || _document.body).appendChild(script);\n },\n\n /**** Private functions ****/\n _ignoreNextOnError: function() {\n var self = this;\n this._ignoreOnError += 1;\n setTimeout(function() {\n // onerror should trigger before setTimeout\n self._ignoreOnError -= 1;\n });\n },\n\n _triggerEvent: function(eventType, options) {\n // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it\n var evt, key;\n\n if (!this._hasDocument) return;\n\n options = options || {};\n\n eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);\n\n if (_document.createEvent) {\n evt = _document.createEvent('HTMLEvents');\n evt.initEvent(eventType, true, true);\n } else {\n evt = _document.createEventObject();\n evt.eventType = eventType;\n }\n\n for (key in options)\n if (hasKey(options, key)) {\n evt[key] = options[key];\n }\n\n if (_document.createEvent) {\n // IE9 if standards\n _document.dispatchEvent(evt);\n } else {\n // IE8 regardless of Quirks or Standards\n // IE9 if quirks\n try {\n _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);\n } catch (e) {\n // Do nothing\n }\n }\n },\n\n /**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param evtName the event name (e.g. \"click\")\n * @returns {Function}\n * @private\n */\n _breadcrumbEventHandler: function(evtName) {\n var self = this;\n return function(evt) {\n // reset keypress timeout; e.g. triggering a 'click' after\n // a 'keypress' will reset the keypress debounce so that a new\n // set of keypresses can be recorded\n self._keypressTimeout = null;\n\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors). Ignore if we've\n // already captured the event.\n if (self._lastCapturedEvent === evt) return;\n\n self._lastCapturedEvent = evt;\n\n // try/catch both:\n // - accessing evt.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // can throw an exception in some circumstances.\n var target;\n try {\n target = htmlTreeAsString(evt.target);\n } catch (e) {\n target = '<unknown>';\n }\n\n self.captureBreadcrumb({\n category: 'ui.' + evtName, // e.g. ui.click, ui.input\n message: target\n });\n };\n },\n\n /**\n * Wraps addEventListener to capture keypress UI events\n * @returns {Function}\n * @private\n */\n _keypressEventHandler: function() {\n var self = this,\n debounceDuration = 1000; // milliseconds\n\n // TODO: if somehow user switches keypress target before\n // debounce timeout is triggered, we will only capture\n // a single breadcrumb from the FIRST target (acceptable?)\n return function(evt) {\n var target;\n try {\n target = evt.target;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n var tagName = target && target.tagName;\n\n // only consider keypress events on actual input elements\n // this will disregard keypresses targeting body (e.g. tabbing\n // through elements, hotkeys, etc)\n if (\n !tagName ||\n (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)\n )\n return;\n\n // record first keypress in a series, but ignore subsequent\n // keypresses until debounce clears\n var timeout = self._keypressTimeout;\n if (!timeout) {\n self._breadcrumbEventHandler('input')(evt);\n }\n clearTimeout(timeout);\n self._keypressTimeout = setTimeout(function() {\n self._keypressTimeout = null;\n }, debounceDuration);\n };\n },\n\n /**\n * Captures a breadcrumb of type \"navigation\", normalizing input URLs\n * @param to the originating URL\n * @param from the target URL\n * @private\n */\n _captureUrlChange: function(from, to) {\n var parsedLoc = parseUrl(this._location.href);\n var parsedTo = parseUrl(to);\n var parsedFrom = parseUrl(from);\n\n // because onpopstate only tells you the \"new\" (to) value of location.href, and\n // not the previous (from) value, we need to track the value of the current URL\n // state ourselves\n this._lastHref = to;\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)\n to = parsedTo.relative;\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)\n from = parsedFrom.relative;\n\n this.captureBreadcrumb({\n category: 'navigation',\n data: {\n to: to,\n from: from\n }\n });\n },\n\n _patchFunctionToString: function() {\n var self = this;\n self._originalFunctionToString = Function.prototype.toString;\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = function() {\n if (typeof this === 'function' && this.__raven__) {\n return self._originalFunctionToString.apply(this.__orig__, arguments);\n }\n return self._originalFunctionToString.apply(this, arguments);\n };\n },\n\n _unpatchFunctionToString: function() {\n if (this._originalFunctionToString) {\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = this._originalFunctionToString;\n }\n },\n\n /**\n * Wrap timer functions and event targets to catch errors and provide\n * better metadata.\n */\n _instrumentTryCatch: function() {\n var self = this;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapTimeFn(orig) {\n return function(fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n var originalCallback = args[0];\n if (isFunction(originalCallback)) {\n args[0] = self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {function: orig.name || '<anonymous>'}\n }\n },\n originalCallback\n );\n }\n\n // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it\n // also supports only two arguments and doesn't care what this is, so we\n // can just call the original function directly.\n if (orig.apply) {\n return orig.apply(this, args);\n } else {\n return orig(args[0], args[1]);\n }\n };\n }\n\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n function wrapEventTarget(global) {\n var proto = _window[global] && _window[global].prototype;\n if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n fill(\n proto,\n 'addEventListener',\n function(orig) {\n return function(evtName, fn, capture, secure) {\n // preserve arity\n try {\n if (fn && fn.handleEvent) {\n fn.handleEvent = self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n target: global,\n function: 'handleEvent',\n handler: (fn && fn.name) || '<anonymous>'\n }\n }\n },\n fn.handleEvent\n );\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`\n // so that we don't have more than one wrapper function\n var before, clickHandler, keypressHandler;\n\n if (\n autoBreadcrumbs &&\n autoBreadcrumbs.dom &&\n (global === 'EventTarget' || global === 'Node')\n ) {\n // NOTE: generating multiple handlers per addEventListener invocation, should\n // revisit and verify we can just use one (almost certainly)\n clickHandler = self._breadcrumbEventHandler('click');\n keypressHandler = self._keypressEventHandler();\n before = function(evt) {\n // need to intercept every DOM event in `before` argument, in case that\n // same wrapped method is re-used for different events (e.g. mousemove THEN click)\n // see #724\n if (!evt) return;\n\n var eventType;\n try {\n eventType = evt.type;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n if (eventType === 'click') return clickHandler(evt);\n else if (eventType === 'keypress') return keypressHandler(evt);\n };\n }\n return orig.call(\n this,\n evtName,\n self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n target: global,\n function: 'addEventListener',\n handler: (fn && fn.name) || '<anonymous>'\n }\n }\n },\n fn,\n before\n ),\n capture,\n secure\n );\n };\n },\n wrappedBuiltIns\n );\n fill(\n proto,\n 'removeEventListener',\n function(orig) {\n return function(evt, fn, capture, secure) {\n try {\n fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);\n } catch (e) {\n // ignore, accessing __raven_wrapper__ will throw in some Selenium environments\n }\n return orig.call(this, evt, fn, capture, secure);\n };\n },\n wrappedBuiltIns\n );\n }\n }\n\n fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n if (_window.requestAnimationFrame) {\n fill(\n _window,\n 'requestAnimationFrame',\n function(orig) {\n return function(cb) {\n return orig(\n self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n function: 'requestAnimationFrame',\n handler: (orig && orig.name) || '<anonymous>'\n }\n }\n },\n cb\n )\n );\n };\n },\n wrappedBuiltIns\n );\n }\n\n // event targets borrowed from bugsnag-js:\n // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666\n var eventTargets = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload'\n ];\n for (var i = 0; i < eventTargets.length; i++) {\n wrapEventTarget(eventTargets[i]);\n }\n },\n\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - XMLHttpRequests\n * - DOM interactions (click/typing)\n * - window.location changes\n * - console\n *\n * Can be disabled or individually configured via the `autoBreadcrumbs` config option\n */\n _instrumentBreadcrumbs: function() {\n var self = this;\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && isFunction(xhr[prop])) {\n fill(xhr, prop, function(orig) {\n return self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {function: prop, handler: (orig && orig.name) || '<anonymous>'}\n }\n },\n orig\n );\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;\n fill(\n xhrproto,\n 'open',\n function(origOpen) {\n return function(method, url) {\n // preserve arity\n\n // if Sentry key appears in URL, don't capture\n if (isString(url) && url.indexOf(self._globalKey) === -1) {\n this.__raven_xhr = {\n method: method,\n url: url,\n status_code: null\n };\n }\n\n return origOpen.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n\n fill(\n xhrproto,\n 'send',\n function(origSend) {\n return function() {\n // preserve arity\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__raven_xhr && xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhr.__raven_xhr.status_code = xhr.status;\n } catch (e) {\n /* do nothing */\n }\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'xhr',\n data: xhr.__raven_xhr\n });\n }\n }\n\n var props = ['onload', 'onerror', 'onprogress'];\n for (var j = 0; j < props.length; j++) {\n wrapProp(props[j], xhr);\n }\n\n if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n fill(\n xhr,\n 'onreadystatechange',\n function(orig) {\n return self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n function: 'onreadystatechange',\n handler: (orig && orig.name) || '<anonymous>'\n }\n }\n },\n orig,\n onreadystatechangeHandler\n );\n } /* intentionally don't track this instrumentation */\n );\n } else {\n // if onreadystatechange wasn't actually set by the page on this xhr, we\n // are free to set our own and capture the breadcrumb\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n\n return origSend.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n }\n\n if (autoBreadcrumbs.xhr && supportsFetch()) {\n fill(\n _window,\n 'fetch',\n function(origFetch) {\n return function() {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n\n var fetchInput = args[0];\n var method = 'GET';\n var url;\n\n if (typeof fetchInput === 'string') {\n url = fetchInput;\n } else if ('Request' in _window && fetchInput instanceof _window.Request) {\n url = fetchInput.url;\n if (fetchInput.method) {\n method = fetchInput.method;\n }\n } else {\n url = '' + fetchInput;\n }\n\n // if Sentry key appears in URL, don't capture, as it's our own request\n if (url.indexOf(self._globalKey) !== -1) {\n return origFetch.apply(this, args);\n }\n\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n\n var fetchData = {\n method: method,\n url: url,\n status_code: null\n };\n\n return origFetch\n .apply(this, args)\n .then(function(response) {\n fetchData.status_code = response.status;\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData\n });\n\n return response;\n })\n ['catch'](function(err) {\n // if there is an error performing the request\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData,\n level: 'error'\n });\n\n throw err;\n });\n };\n },\n wrappedBuiltIns\n );\n }\n\n // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n // to the document. Do this before we instrument addEventListener.\n if (autoBreadcrumbs.dom && this._hasDocument) {\n if (_document.addEventListener) {\n _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);\n _document.addEventListener('keypress', self._keypressEventHandler(), false);\n } else if (_document.attachEvent) {\n // IE8 Compatibility\n _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));\n _document.attachEvent('onkeypress', self._keypressEventHandler());\n }\n }\n\n // record navigation (URL) changes\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n var chrome = _window.chrome;\n var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n var hasPushAndReplaceState =\n !isChromePackagedApp &&\n _window.history &&\n _window.history.pushState &&\n _window.history.replaceState;\n if (autoBreadcrumbs.location && hasPushAndReplaceState) {\n // TODO: remove onpopstate handler on uninstall()\n var oldOnPopState = _window.onpopstate;\n _window.onpopstate = function() {\n var currentHref = self._location.href;\n self._captureUrlChange(self._lastHref, currentHref);\n\n if (oldOnPopState) {\n return oldOnPopState.apply(this, arguments);\n }\n };\n\n var historyReplacementFunction = function(origHistFunction) {\n // note history.pushState.length is 0; intentionally not declaring\n // params to preserve 0 arity\n return function(/* state, title, url */) {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n\n // url argument is optional\n if (url) {\n // coerce to string (this is what pushState does)\n self._captureUrlChange(self._lastHref, url + '');\n }\n\n return origHistFunction.apply(this, arguments);\n };\n };\n\n fill(_window.history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(_window.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n }\n\n if (autoBreadcrumbs.console && 'console' in _window && console.log) {\n // console\n var consoleMethodCallback = function(msg, data) {\n self.captureBreadcrumb({\n message: msg,\n level: data.level,\n category: 'console'\n });\n };\n\n each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {\n wrapConsoleMethod(console, level, consoleMethodCallback);\n });\n }\n },\n\n _restoreBuiltIns: function() {\n // restore any wrapped builtins\n var builtin;\n while (this._wrappedBuiltIns.length) {\n builtin = this._wrappedBuiltIns.shift();\n\n var obj = builtin[0],\n name = builtin[1],\n orig = builtin[2];\n\n obj[name] = orig;\n }\n },\n\n _restoreConsole: function() {\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsoleMethods) {\n this._originalConsole[method] = this._originalConsoleMethods[method];\n }\n },\n\n _drainPlugins: function() {\n var self = this;\n\n // FIX ME TODO\n each(this._plugins, function(_, plugin) {\n var installer = plugin[0];\n var args = plugin[1];\n installer.apply(self, [self].concat(args));\n });\n },\n\n _parseDSN: function(str) {\n var m = dsnPattern.exec(str),\n dsn = {},\n i = 7;\n\n try {\n while (i--) dsn[dsnKeys[i]] = m[i] || '';\n } catch (e) {\n throw new RavenConfigError('Invalid DSN: ' + str);\n }\n\n if (dsn.pass && !this._globalOptions.allowSecretKey) {\n throw new RavenConfigError(\n 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'\n );\n }\n\n return dsn;\n },\n\n _getGlobalServer: function(uri) {\n // assemble the endpoint from the uri pieces\n var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n\n if (uri.protocol) {\n globalServer = uri.protocol + ':' + globalServer;\n }\n return globalServer;\n },\n\n _handleOnErrorStackInfo: function(stackInfo, options) {\n options = options || {};\n options.mechanism = options.mechanism || {\n type: 'onerror',\n handled: false\n };\n\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo(stackInfo, options);\n }\n },\n\n _handleStackInfo: function(stackInfo, options) {\n var frames = this._prepareFrames(stackInfo, options);\n\n this._triggerEvent('handle', {\n stackInfo: stackInfo,\n options: options\n });\n\n this._processException(\n stackInfo.name,\n stackInfo.message,\n stackInfo.url,\n stackInfo.lineno,\n frames,\n options\n );\n },\n\n _prepareFrames: function(stackInfo, options) {\n var self = this;\n var frames = [];\n if (stackInfo.stack && stackInfo.stack.length) {\n each(stackInfo.stack, function(i, stack) {\n var frame = self._normalizeFrame(stack, stackInfo.url);\n if (frame) {\n frames.push(frame);\n }\n });\n\n // e.g. frames captured via captureMessage throw\n if (options && options.trimHeadFrames) {\n for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {\n frames[j].in_app = false;\n }\n }\n }\n frames = frames.slice(0, this._globalOptions.stackTraceLimit);\n return frames;\n },\n\n _normalizeFrame: function(frame, stackInfoUrl) {\n // normalize the frames data\n var normalized = {\n filename: frame.url,\n lineno: frame.line,\n colno: frame.column,\n function: frame.func || '?'\n };\n\n // Case when we don't have any information about the error\n // E.g. throwing a string or raw object, instead of an `Error` in Firefox\n // Generating synthetic error doesn't add any value here\n //\n // We should probably somehow let a user know that they should fix their code\n if (!frame.url) {\n normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler\n }\n\n normalized.in_app = !// determine if an exception came from outside of our app\n // first we check the global includePaths list.\n (\n (!!this._globalOptions.includePaths.test &&\n !this._globalOptions.includePaths.test(normalized.filename)) ||\n // Now we check for fun, if the function name is Raven or TraceKit\n /(Raven|TraceKit)\\./.test(normalized['function']) ||\n // finally, we do a last ditch effort and check for raven.min.js\n /raven\\.(min\\.)?js$/.test(normalized.filename)\n );\n\n return normalized;\n },\n\n _processException: function(type, message, fileurl, lineno, frames, options) {\n var prefixedMessage = (type ? type + ': ' : '') + (message || '');\n if (\n !!this._globalOptions.ignoreErrors.test &&\n (this._globalOptions.ignoreErrors.test(message) ||\n this._globalOptions.ignoreErrors.test(prefixedMessage))\n ) {\n return;\n }\n\n var stacktrace;\n\n if (frames && frames.length) {\n fileurl = frames[0].filename || fileurl;\n // Sentry expects frames oldest to newest\n // and JS sends them as newest to oldest\n frames.reverse();\n stacktrace = {frames: frames};\n } else if (fileurl) {\n stacktrace = {\n frames: [\n {\n filename: fileurl,\n lineno: lineno,\n in_app: true\n }\n ]\n };\n }\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n var data = objectMerge(\n {\n // sentry.interfaces.Exception\n exception: {\n values: [\n {\n type: type,\n value: message,\n stacktrace: stacktrace\n }\n ]\n },\n transaction: fileurl\n },\n options\n );\n\n var ex = data.exception.values[0];\n if (ex.type == null && ex.value === '') {\n ex.value = 'Unrecoverable error caught';\n }\n\n // Move mechanism from options to exception interface\n // We do this, as requiring user to pass `{exception:{mechanism:{ ... }}}` would be\n // too much\n if (!data.exception.mechanism && data.mechanism) {\n data.exception.mechanism = data.mechanism;\n delete data.mechanism;\n }\n\n data.exception.mechanism = objectMerge(\n {\n type: 'generic',\n handled: true\n },\n data.exception.mechanism || {}\n );\n\n // Fire away!\n this._send(data);\n },\n\n _trimPacket: function(data) {\n // For now, we only want to truncate the two different messages\n // but this could/should be expanded to just trim everything\n var max = this._globalOptions.maxMessageLength;\n if (data.message) {\n data.message = truncate(data.message, max);\n }\n if (data.exception) {\n var exception = data.exception.values[0];\n exception.value = truncate(exception.value, max);\n }\n\n var request = data.request;\n if (request) {\n if (request.url) {\n request.url = truncate(request.url, this._globalOptions.maxUrlLength);\n }\n if (request.Referer) {\n request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);\n }\n }\n\n if (data.breadcrumbs && data.breadcrumbs.values)\n this._trimBreadcrumbs(data.breadcrumbs);\n\n return data;\n },\n\n /**\n * Truncate breadcrumb values (right now just URLs)\n */\n _trimBreadcrumbs: function(breadcrumbs) {\n // known breadcrumb properties with urls\n // TODO: also consider arbitrary prop values that start with (https?)?://\n var urlProps = ['to', 'from', 'url'],\n urlProp,\n crumb,\n data;\n\n for (var i = 0; i < breadcrumbs.values.length; ++i) {\n crumb = breadcrumbs.values[i];\n if (\n !crumb.hasOwnProperty('data') ||\n !isObject(crumb.data) ||\n objectFrozen(crumb.data)\n )\n continue;\n\n data = objectMerge({}, crumb.data);\n for (var j = 0; j < urlProps.length; ++j) {\n urlProp = urlProps[j];\n if (data.hasOwnProperty(urlProp) && data[urlProp]) {\n data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);\n }\n }\n breadcrumbs.values[i].data = data;\n }\n },\n\n _getHttpData: function() {\n if (!this._hasNavigator && !this._hasDocument) return;\n var httpData = {};\n\n if (this._hasNavigator && _navigator.userAgent) {\n httpData.headers = {\n 'User-Agent': _navigator.userAgent\n };\n }\n\n // Check in `window` instead of `document`, as we may be in ServiceWorker environment\n if (_window.location && _window.location.href) {\n httpData.url = _window.location.href;\n }\n\n if (this._hasDocument && _document.referrer) {\n if (!httpData.headers) httpData.headers = {};\n httpData.headers.Referer = _document.referrer;\n }\n\n return httpData;\n },\n\n _resetBackoff: function() {\n this._backoffDuration = 0;\n this._backoffStart = null;\n },\n\n _shouldBackoff: function() {\n return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n },\n\n /**\n * Returns true if the in-process data payload matches the signature\n * of the previously-sent data\n *\n * NOTE: This has to be done at this level because TraceKit can generate\n * data from window.onerror WITHOUT an exception object (IE8, IE9,\n * other old browsers). This can take the form of an \"exception\"\n * data object with a single frame (derived from the onerror args).\n */\n _isRepeatData: function(current) {\n var last = this._lastData;\n\n if (\n !last ||\n current.message !== last.message || // defined for captureMessage\n current.transaction !== last.transaction // defined for captureException/onerror\n )\n return false;\n\n // Stacktrace interface (i.e. from captureMessage)\n if (current.stacktrace || last.stacktrace) {\n return isSameStacktrace(current.stacktrace, last.stacktrace);\n } else if (current.exception || last.exception) {\n // Exception interface (i.e. from captureException/onerror)\n return isSameException(current.exception, last.exception);\n }\n\n return true;\n },\n\n _setBackoffState: function(request) {\n // If we are already in a backoff state, don't change anything\n if (this._shouldBackoff()) {\n return;\n }\n\n var status = request.status;\n\n // 400 - project_id doesn't exist or some other fatal\n // 401 - invalid/revoked dsn\n // 429 - too many requests\n if (!(status === 400 || status === 401 || status === 429)) return;\n\n var retry;\n try {\n // If Retry-After is not in Access-Control-Expose-Headers, most\n // browsers will throw an exception trying to access it\n if (supportsFetch()) {\n retry = request.headers.get('Retry-After');\n } else {\n retry = request.getResponseHeader('Retry-After');\n }\n\n // Retry-After is returned in seconds\n retry = parseInt(retry, 10) * 1000;\n } catch (e) {\n /* eslint no-empty:0 */\n }\n\n this._backoffDuration = retry\n ? // If Sentry server returned a Retry-After value, use it\n retry\n : // Otherwise, double the last backoff duration (starts at 1 sec)\n this._backoffDuration * 2 || 1000;\n\n this._backoffStart = now();\n },\n\n _send: function(data) {\n var globalOptions = this._globalOptions;\n\n var baseData = {\n project: this._globalProject,\n logger: globalOptions.logger,\n platform: 'javascript'\n },\n httpData = this._getHttpData();\n\n if (httpData) {\n baseData.request = httpData;\n }\n\n // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload\n if (data.trimHeadFrames) delete data.trimHeadFrames;\n\n data = objectMerge(baseData, data);\n\n // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge\n data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);\n data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);\n\n // Send along our own collected metadata with extra\n data.extra['session:duration'] = now() - this._startTime;\n\n if (this._breadcrumbs && this._breadcrumbs.length > 0) {\n // intentionally make shallow copy so that additions\n // to breadcrumbs aren't accidentally sent in this request\n data.breadcrumbs = {\n values: [].slice.call(this._breadcrumbs, 0)\n };\n }\n\n if (this._globalContext.user) {\n // sentry.interfaces.User\n data.user = this._globalContext.user;\n }\n\n // Include the environment if it's defined in globalOptions\n if (globalOptions.environment) data.environment = globalOptions.environment;\n\n // Include the release if it's defined in globalOptions\n if (globalOptions.release) data.release = globalOptions.release;\n\n // Include server_name if it's defined in globalOptions\n if (globalOptions.serverName) data.server_name = globalOptions.serverName;\n\n data = this._sanitizeData(data);\n\n // Cleanup empty properties before sending them to the server\n Object.keys(data).forEach(function(key) {\n if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {\n delete data[key];\n }\n });\n\n if (isFunction(globalOptions.dataCallback)) {\n data = globalOptions.dataCallback(data) || data;\n }\n\n // Why??????????\n if (!data || isEmptyObject(data)) {\n return;\n }\n\n // Check if the request should be filtered or not\n if (\n isFunction(globalOptions.shouldSendCallback) &&\n !globalOptions.shouldSendCallback(data)\n ) {\n return;\n }\n\n // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),\n // so drop requests until \"cool-off\" period has elapsed.\n if (this._shouldBackoff()) {\n this._logDebug('warn', 'Raven dropped error due to backoff: ', data);\n return;\n }\n\n if (typeof globalOptions.sampleRate === 'number') {\n if (Math.random() < globalOptions.sampleRate) {\n this._sendProcessedPayload(data);\n }\n } else {\n this._sendProcessedPayload(data);\n }\n },\n\n _sanitizeData: function(data) {\n return sanitize(data, this._globalOptions.sanitizeKeys);\n },\n\n _getUuid: function() {\n return uuid4();\n },\n\n _sendProcessedPayload: function(data, callback) {\n var self = this;\n var globalOptions = this._globalOptions;\n\n if (!this.isSetup()) return;\n\n // Try and clean up the packet before sending by truncating long values\n data = this._trimPacket(data);\n\n // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,\n // but this would require copying an un-truncated copy of the data packet, which can be\n // arbitrarily deep (extra_data) -- could be worthwhile? will revisit\n if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {\n this._logDebug('warn', 'Raven dropped repeat event: ', data);\n return;\n }\n\n // Send along an event_id if not explicitly passed.\n // This event_id can be used to reference the error within Sentry itself.\n // Set lastEventId after we know the error should actually be sent\n this._lastEventId = data.event_id || (data.event_id = this._getUuid());\n\n // Store outbound payload after trim\n this._lastData = data;\n\n this._logDebug('debug', 'Raven about to send:', data);\n\n var auth = {\n sentry_version: '7',\n sentry_client: 'raven-js/' + this.VERSION,\n sentry_key: this._globalKey\n };\n\n if (this._globalSecret) {\n auth.sentry_secret = this._globalSecret;\n }\n\n var exception = data.exception && data.exception.values[0];\n\n // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy\n if (\n this._globalOptions.autoBreadcrumbs &&\n this._globalOptions.autoBreadcrumbs.sentry\n ) {\n this.captureBreadcrumb({\n category: 'sentry',\n message: exception\n ? (exception.type ? exception.type + ': ' : '') + exception.value\n : data.message,\n event_id: data.event_id,\n level: data.level || 'error' // presume error unless specified\n });\n }\n\n var url = this._globalEndpoint;\n (globalOptions.transport || this._makeRequest).call(this, {\n url: url,\n auth: auth,\n data: data,\n options: globalOptions,\n onSuccess: function success() {\n self._resetBackoff();\n\n self._triggerEvent('success', {\n data: data,\n src: url\n });\n callback && callback();\n },\n onError: function failure(error) {\n self._logDebug('error', 'Raven transport failed to send: ', error);\n\n if (error.request) {\n self._setBackoffState(error.request);\n }\n\n self._triggerEvent('failure', {\n data: data,\n src: url\n });\n error = error || new Error('Raven send failed (no additional details provided)');\n callback && callback(error);\n }\n });\n },\n\n _makeRequest: function(opts) {\n // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests\n var url = opts.url + '?' + urlencode(opts.auth);\n\n var evaluatedHeaders = null;\n var evaluatedFetchParameters = {};\n\n if (opts.options.headers) {\n evaluatedHeaders = this._evaluateHash(opts.options.headers);\n }\n\n if (opts.options.fetchParameters) {\n evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);\n }\n\n if (supportsFetch()) {\n evaluatedFetchParameters.body = stringify(opts.data);\n\n var defaultFetchOptions = objectMerge({}, this._fetchDefaults);\n var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);\n\n if (evaluatedHeaders) {\n fetchOptions.headers = evaluatedHeaders;\n }\n\n return _window\n .fetch(url, fetchOptions)\n .then(function(response) {\n if (response.ok) {\n opts.onSuccess && opts.onSuccess();\n } else {\n var error = new Error('Sentry error code: ' + response.status);\n // It's called request only to keep compatibility with XHR interface\n // and not add more redundant checks in setBackoffState method\n error.request = response;\n opts.onError && opts.onError(error);\n }\n })\n ['catch'](function() {\n opts.onError &&\n opts.onError(new Error('Sentry error code: network unavailable'));\n });\n }\n\n var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();\n if (!request) return;\n\n // if browser doesn't support CORS (e.g. IE7), we are out of luck\n var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';\n\n if (!hasCORS) return;\n\n if ('withCredentials' in request) {\n request.onreadystatechange = function() {\n if (request.readyState !== 4) {\n return;\n } else if (request.status === 200) {\n opts.onSuccess && opts.onSuccess();\n } else if (opts.onError) {\n var err = new Error('Sentry error code: ' + request.status);\n err.request = request;\n opts.onError(err);\n }\n };\n } else {\n request = new XDomainRequest();\n // xdomainrequest cannot go http -> https (or vice versa),\n // so always use protocol relative\n url = url.replace(/^https?:/, '');\n\n // onreadystatechange not supported by XDomainRequest\n if (opts.onSuccess) {\n request.onload = opts.onSuccess;\n }\n if (opts.onError) {\n request.onerror = function() {\n var err = new Error('Sentry error code: XDomainRequest');\n err.request = request;\n opts.onError(err);\n };\n }\n }\n\n request.open('POST', url);\n\n if (evaluatedHeaders) {\n each(evaluatedHeaders, function(key, value) {\n request.setRequestHeader(key, value);\n });\n }\n\n request.send(stringify(opts.data));\n },\n\n _evaluateHash: function(hash) {\n var evaluated = {};\n\n for (var key in hash) {\n if (hash.hasOwnProperty(key)) {\n var value = hash[key];\n evaluated[key] = typeof value === 'function' ? value() : value;\n }\n }\n\n return evaluated;\n },\n\n _logDebug: function(level) {\n // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change\n if (\n this._originalConsoleMethods[level] &&\n (this.debug || this._globalOptions.debug)\n ) {\n // In IE<10 console methods do not have their own 'apply' method\n Function.prototype.apply.call(\n this._originalConsoleMethods[level],\n this._originalConsole,\n [].slice.call(arguments, 1)\n );\n }\n },\n\n _mergeContext: function(key, context) {\n if (isUndefined(context)) {\n delete this._globalContext[key];\n } else {\n this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);\n }\n }\n};\n\n// Deprecations\nRaven.prototype.setUser = Raven.prototype.setUserContext;\nRaven.prototype.setReleaseContext = Raven.prototype.setRelease;\n\nmodule.exports = Raven;\n","/**\n * Enforces a single instance of the Raven client, and the\n * main entry point for Raven. If you are a consumer of the\n * Raven library, you SHOULD load this file (vs raven.js).\n **/\n\nvar RavenConstructor = require('./raven');\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\n\nvar Raven = new RavenConstructor();\n\n/*\n * Allow multiple versions of Raven to be installed.\n * Strip Raven from the global context and returns the instance.\n *\n * @return {Raven}\n */\nRaven.noConflict = function() {\n _window.Raven = _Raven;\n return Raven;\n};\n\nRaven.afterLoad();\n\nmodule.exports = Raven;\n\n/**\n * DISCLAIMER:\n *\n * Expose `Client` constructor for cases where user want to track multiple \"sub-applications\" in one larger app.\n * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.\n * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.\n *\n * It's called `Client' to be in-line with Raven Node implementation.\n *\n * HOWTO:\n *\n * import Raven from 'raven-js';\n *\n * const someAppReporter = new Raven.Client();\n * const someOtherAppReporter = new Raven.Client();\n *\n * someAppReporter.config('__DSN__', {\n * ...config goes here\n * });\n *\n * someOtherAppReporter.config('__OTHER_DSN__', {\n * ...config goes here\n * });\n *\n * someAppReporter.captureMessage(...);\n * someAppReporter.captureException(...);\n * someAppReporter.captureBreadcrumb(...);\n *\n * someOtherAppReporter.captureMessage(...);\n * someOtherAppReporter.captureException(...);\n * someOtherAppReporter.captureBreadcrumb(...);\n *\n * It should \"just work\".\n */\nmodule.exports.Client = RavenConstructor;\n","// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\nimport Raven from 'raven-js';\n\n(() => {\n const isLive = window.location.host === 'plyr.io';\n\n // Raven / Sentry\n // For demo site (https://plyr.io) only\n if (isLive) {\n Raven.config(\n 'https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555',\n ).install();\n }\n\n document.addEventListener('DOMContentLoaded', () => {\n Raven.context(() => {\n const selector = '#player';\n const container = document.getElementById('container');\n\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n if (container.contains(event.target)) {\n return;\n }\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n const focused = document.activeElement;\n\n if (!focused || container.contains(focused)) {\n return;\n }\n\n focused.classList.add(tabClassName);\n }, 10);\n });\n\n // Setup the player\n const player = new Plyr(selector, {\n debug: true,\n title: 'View From A Blue Moon',\n iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n clickToPlay: false,\n /* controls: [\n 'play-large',\n 'restart',\n 'rewind',\n 'play',\n 'fast-forward',\n 'progress',\n 'current-time',\n 'duration',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ], */\n /* i18n: {\n restart: '重新開始',\n rewind: '快退{seektime}秒',\n play: '播放',\n pause: '暫停',\n fastForward: '快進{seektime}秒',\n seek: '尋求',\n played: '發揮',\n buffered: '緩衝的',\n currentTime: '當前時間戳',\n duration: '長短',\n volume: '音量',\n mute: '靜音',\n unmute: '取消靜音',\n enableCaptions: '開啟字幕',\n disableCaptions: '關閉字幕',\n enterFullscreen: '進入全螢幕',\n exitFullscreen: '退出全螢幕',\n frameTitle: '球員為{title}',\n captions: '字幕',\n settings: '設定',\n speed: '速度',\n normal: '正常',\n quality: '質量',\n loop: '循環',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: '重啟',\n disabled: '殘',\n enabled: '啟用',\n advertisement: '廣告',\n }, */\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n enabled: true,\n publisherId: '918848828995742',\n },\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (\n !(type in types) ||\n (!init && type === currentType) ||\n (!currentType.length && type === types.video)\n ) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [\n {\n src:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-576p.mp4',\n type: 'video/mp4',\n size: 576,\n },\n {\n src:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-720p.mp4',\n type: 'video/mp4',\n size: 720,\n },\n {\n src:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1080p.mp4',\n type: 'video/mp4',\n size: 1080,\n },\n {\n src:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1440p.mp4',\n type: 'video/mp4',\n size: 1440,\n },\n ],\n poster:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title:\n 'Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;',\n sources: [\n {\n src:\n 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src:\n 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n sources: [\n {\n src:\n 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n },\n ],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [\n {\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n },\n ],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button =>\n toggleClass(button.parentElement, 'active', false),\n );\n\n // Set active on parent\n toggleClass(\n document.querySelector(`[data-source=\"${type}\"]`),\n 'active',\n true,\n );\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(\n cite => {\n cite.setAttribute('hidden', '');\n },\n );\n document\n .querySelector(`.plyr__cite--${type}`)\n .removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n });\n });\n\n // Google analytics\n // For demo site (https://plyr.io) only\n /* eslint-disable */\n if (isLive) {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(\n window,\n document,\n 'script',\n 'https://www.google-analytics.com/analytics.js',\n 'ga',\n );\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n }\n /* eslint-enable */\n})();\n"]} \ No newline at end of file
+{"version":3,"sources":["node_modules/raven-js/vendor/json-stringify-safe/stringify.js","node_modules/raven-js/src/utils.js","node_modules/raven-js/vendor/TraceKit/tracekit.js","node_modules/raven-js/vendor/md5/md5.js","node_modules/raven-js/src/configError.js","node_modules/raven-js/src/console.js","node_modules/raven-js/src/raven.js","node_modules/raven-js/src/singleton.js","demo/src/js/demo.js"],"names":["indexOf","haystack","needle","i","length","serializer","replacer","cycleReplacer","stack","keys","key","value","slice","join","thisPos","this","splice","push","Infinity","call","Error","err","message","name","Object","prototype","hasOwnProperty","stringifyError","module","exports","obj","spaces","JSON","stringify","getSerialize","_window","window","global","self","isUndefined","what","isPlainObject","toString","isString","isArray","supportsFetch","Headers","Request","Response","e","each","callback","j","hasKey","truncate","str","max","substr","object","joinRegExp","patterns","pattern","sources","len","replace","source","RegExp","htmlElementAsString","elem","className","classes","attr","out","tagName","toLowerCase","id","split","attrWhitelist","getAttribute","isOnlyOneTruthy","a","b","isSameStacktrace","stack1","stack2","frames1","frames","frames2","undefined","filename","lineno","colno","MAX_SERIALIZE_EXCEPTION_DEPTH","MAX_SERIALIZE_EXCEPTION_SIZE","MAX_SERIALIZE_KEYS_LENGTH","jsonSize","encodeURI","utf8Length","serializeValue","type","utils","isObject","isError","isErrorEvent","isDOMError","isDOMException","isFunction","isEmptyObject","_","supportsErrorEvent","ErrorEvent","supportsDOMError","DOMError","supportsDOMException","DOMException","supportsReferrerPolicy","referrerPolicy","supportsPromiseRejectionEvent","PromiseRejectionEvent","wrappedCallback","data","original","normalizedData","objectMerge","obj1","obj2","objectFrozen","isFrozen","urlencode","o","pairs","encodeURIComponent","uuid4","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","c","r","Math","random","htmlTreeAsString","nextStr","height","sepLength","parentNode","reverse","isSameException","ex1","ex2","values","stacktrace","parseUrl","url","match","query","fragment","protocol","host","path","relative","fill","replacement","track","orig","__raven__","__orig__","safeJoin","input","delimiter","output","String","serializeException","ex","depth","maxSize","serialized","serializeObject","reduce","acc","Array","map","val","serializeKeysForMessage","maxLength","filter","usedKeys","sanitize","sanitizeKeys","safeInput","sanitizeRegExp","sanitizeMask","parse","o_O","sanitizeWorker","workerInput","k","test","TraceKit","collectWindowErrors","debug","_slice","UNKNOWN_FUNCTION","ERROR_TYPES_RE","getLocationHref","document","location","href","report","_oldOnerrorHandler","_onErrorHandlerInstalled","handlers","lastArgs","lastException","lastExceptionStack","notifyHandlers","isWindowError","exception","apply","concat","arguments","inner","traceKitWindowOnError","msg","lineNo","colNo","error","computeStackTrace","augmentStackTraceWithInitialElement","processLastException","groups","line","column","func","_lastExceptionStack","_lastArgs","rethrow","args","setTimeout","incomplete","subscribe","handler","onerror","unsubscribe","uninstall","computeStackTraceFromStackProp","submatch","parts","element","chrome","winjs","gecko","geckoEval","chromeEval","lines","exec","isNative","columnNumber","xhr","XMLHttpRequest","open","send","status","responseText","sourceMaps","sourceMapAddress","charAt","origin","hostname","port","stackInfo","initial","unshift","partial","computeStackTraceByWalkingCallerChain","item","functionName","funcs","recursion","curr","caller","substring","result","sourceURL","fileName","lineNumber","description","tracekit","safeAdd","x","y","lsw","md5cmn","q","s","t","cnt","md5ff","d","md5gg","md5hh","md5ii","binlMD5","olda","oldb","oldc","oldd","binl2rstr","length32","fromCharCode","rstr2binl","length8","charCodeAt","rstr2hex","str2rstrUTF8","unescape","rawMD5","rstrMD5","rawHMACMD5","hash","bkey","ipad","opad","rstrHMACMD5","md5_1","string","raw","RavenConfigError","constructor","configError","console$1","console","level","originalConsoleLevel","originalConsole","sentryLevel","logger","extra","Function","wrapConsoleMethod","require$$0","dsnKeys","dsnPattern","now","Date","_document","_navigator","navigator","keepOriginalCallback","Raven","method","_hasJSON","_hasDocument","_hasNavigator","_lastCapturedException","_lastData","_lastEventId","_globalServer","_globalKey","_globalProject","_globalContext","_globalOptions","release","SENTRY_RELEASE","ignoreErrors","ignoreUrls","whitelistUrls","includePaths","headers","captureUnhandledRejections","maxMessageLength","maxUrlLength","stackTraceLimit","autoBreadcrumbs","instrument","sampleRate","_fetchDefaults","keepalive","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_keypressTimeout","_location","_lastHref","_resetBackoff","VERSION","config","dsn","options","_logDebug","globalOptions","setDSN","maxBreadcrumbs","min","autoBreadcrumbDefaults","dom","sentry","instrumentDefaults","tryCatch","install","isSetup","_handleOnErrorStackInfo","_attachPromiseRejectionHandler","_patchFunctionToString","_instrumentTryCatch","_instrumentBreadcrumbs","_drainPlugins","uri","_parseDSN","lastSlash","lastIndexOf","_dsn","user","_globalSecret","pass","_getGlobalServer","_globalEndpoint","context","wrap","_before","__raven_wrapper__","wrapped","deep","_ignoreNextOnError","captureException","property","_detachPromiseRejectionHandler","_unpatchFunctionToString","_restoreBuiltIns","_restoreConsole","_promiseRejectionHandler","event","reason","mechanism","handled","bind","addEventListener","removeEventListener","trimHeadFrames","captureMessage","_getCaptureExceptionOptionsFromPlainObject","_handleStackInfo","currentOptions","exKeys","sort","fingerprint","md5","__serialized__","initialCall","fileurl","_prepareFrames","_send","captureBreadcrumb","crumb","timestamp","breadcrumbCallback","shift","addPlugin","plugin","pluginArgs","setUserContext","setExtraContext","_mergeContext","setTagsContext","tags","clearContext","getContext","setEnvironment","environment","setRelease","setDataCallback","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastEventId","ravenNotConfiguredError","afterLoad","RavenConfig","showReportDialog","eventId","encode","qs","email","globalServer","script","createElement","async","src","head","body","appendChild","_triggerEvent","eventType","evt","toUpperCase","createEvent","initEvent","createEventObject","dispatchEvent","fireEvent","_breadcrumbEventHandler","evtName","target","category","_keypressEventHandler","isContentEditable","timeout","clearTimeout","_captureUrlChange","from","to","parsedLoc","parsedTo","parsedFrom","_originalFunctionToString","wrappedBuiltIns","wrapTimeFn","fn","originalCallback","function","wrapEventTarget","proto","capture","secure","handleEvent","before","clickHandler","keypressHandler","requestAnimationFrame","cb","eventTargets","wrapProp","prop","xhrproto","origOpen","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","props","onreadystatechange","origFetch","fetchInput","fetchData","then","response","attachEvent","hasPushAndReplaceState","app","runtime","history","pushState","replaceState","oldOnPopState","onpopstate","currentHref","historyReplacementFunction","origHistFunction","log","consoleMethodCallback","builtin","installer","m","allowSecretKey","_processException","frame","_normalizeFrame","in_app","stackInfoUrl","normalized","prefixedMessage","transaction","_trimPacket","request","Referer","breadcrumbs","_trimBreadcrumbs","urlProp","urlProps","_getHttpData","httpData","userAgent","User-Agent","referrer","_backoffDuration","_backoffStart","_shouldBackoff","_isRepeatData","current","last","_setBackoffState","retry","get","getResponseHeader","parseInt","baseData","project","platform","serverName","server_name","_sanitizeData","forEach","_sendProcessedPayload","_getUuid","allowDuplicates","event_id","auth","sentry_version","sentry_client","sentry_key","sentry_secret","_makeRequest","onSuccess","onError","opts","evaluatedHeaders","evaluatedFetchParameters","_evaluateHash","fetchParameters","defaultFetchOptions","fetchOptions","fetch","ok","XDomainRequest","onload","setRequestHeader","evaluated","setUser","setReleaseContext","raven","_Raven","RavenConstructor","noConflict","isLive","singleton","Client","container","getElementById","shr","setup","count","classname","contains","classList","remove","keyCode","focused","activeElement","add","player","Plyr","title","iconUrl","keyboard","tooltips","controls","seek","captions","active","google","ads","publisherId","buttons","querySelectorAll","types","video","audio","youtube","vimeo","currentType","historySupport","toggleClass","state","newSource","init","size","poster","tracks","kind","label","srclang","default","provider","button","parentElement","querySelector","cite","setAttribute","removeAttribute","GoogleAnalyticsObject","l","getElementsByTagName","insertBefore","ga"],"mappings":"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","file":"demo.min.js","sourcesContent":["/*\n json-stringify-safe\n Like JSON.stringify, but doesn't throw on circular references.\n\n Originally forked from https://github.com/isaacs/json-stringify-safe\n version 5.0.1 on 3/8/2017 and modified to handle Errors serialization\n and IE8 compatibility. Tests for this are in test/vendor.\n\n ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE\n*/\n\nexports = module.exports = stringify;\nexports.getSerialize = serializer;\n\nfunction indexOf(haystack, needle) {\n for (var i = 0; i < haystack.length; ++i) {\n if (haystack[i] === needle) return i;\n }\n return -1;\n}\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);\n}\n\n// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106\nfunction stringifyError(value) {\n var err = {\n // These properties are implemented as magical getters and don't show up in for in\n stack: value.stack,\n message: value.message,\n name: value.name\n };\n\n for (var i in value) {\n if (Object.prototype.hasOwnProperty.call(value, i)) {\n err[i] = value[i];\n }\n }\n\n return err;\n}\n\nfunction serializer(replacer, cycleReplacer) {\n var stack = [];\n var keys = [];\n\n if (cycleReplacer == null) {\n cycleReplacer = function(key, value) {\n if (stack[0] === value) {\n return '[Circular ~]';\n }\n return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';\n };\n }\n\n return function(key, value) {\n if (stack.length > 0) {\n var thisPos = indexOf(stack, this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n\n if (~indexOf(stack, value)) {\n value = cycleReplacer.call(this, key, value);\n }\n } else {\n stack.push(value);\n }\n\n return replacer == null\n ? value instanceof Error ? stringifyError(value) : value\n : replacer.call(this, key, value);\n };\n}\n","var stringify = require('../vendor/json-stringify-safe/stringify');\n\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : typeof self !== 'undefined'\n ? self\n : {};\n\nfunction isObject(what) {\n return typeof what === 'object' && what !== null;\n}\n\n// Yanked from https://git.io/vS8DV re-used under CC0\n// with some tiny modifications\nfunction isError(value) {\n switch (Object.prototype.toString.call(value)) {\n case '[object Error]':\n return true;\n case '[object Exception]':\n return true;\n case '[object DOMException]':\n return true;\n default:\n return value instanceof Error;\n }\n}\n\nfunction isErrorEvent(value) {\n return Object.prototype.toString.call(value) === '[object ErrorEvent]';\n}\n\nfunction isDOMError(value) {\n return Object.prototype.toString.call(value) === '[object DOMError]';\n}\n\nfunction isDOMException(value) {\n return Object.prototype.toString.call(value) === '[object DOMException]';\n}\n\nfunction isUndefined(what) {\n return what === void 0;\n}\n\nfunction isFunction(what) {\n return typeof what === 'function';\n}\n\nfunction isPlainObject(what) {\n return Object.prototype.toString.call(what) === '[object Object]';\n}\n\nfunction isString(what) {\n return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isArray(what) {\n return Object.prototype.toString.call(what) === '[object Array]';\n}\n\nfunction isEmptyObject(what) {\n if (!isPlainObject(what)) return false;\n\n for (var _ in what) {\n if (what.hasOwnProperty(_)) {\n return false;\n }\n }\n return true;\n}\n\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsDOMError() {\n try {\n new DOMError(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsDOMException() {\n try {\n new DOMException(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsFetch() {\n if (!('fetch' in _window)) return false;\n\n try {\n new Headers(); // eslint-disable-line no-new\n new Request(''); // eslint-disable-line no-new\n new Response(); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n// https://caniuse.com/#feat=referrer-policy\n// It doesn't. And it throw exception instead of ignoring this parameter...\n// REF: https://github.com/getsentry/raven-js/issues/1233\nfunction supportsReferrerPolicy() {\n if (!supportsFetch()) return false;\n\n try {\n // eslint-disable-next-line no-new\n new Request('pickleRick', {\n referrerPolicy: 'origin'\n });\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsPromiseRejectionEvent() {\n return typeof PromiseRejectionEvent === 'function';\n}\n\nfunction wrappedCallback(callback) {\n function dataCallback(data, original) {\n var normalizedData = callback(data) || data;\n if (original) {\n return original(normalizedData) || normalizedData;\n }\n return normalizedData;\n }\n\n return dataCallback;\n}\n\nfunction each(obj, callback) {\n var i, j;\n\n if (isUndefined(obj.length)) {\n for (i in obj) {\n if (hasKey(obj, i)) {\n callback.call(null, i, obj[i]);\n }\n }\n } else {\n j = obj.length;\n if (j) {\n for (i = 0; i < j; i++) {\n callback.call(null, i, obj[i]);\n }\n }\n }\n}\n\nfunction objectMerge(obj1, obj2) {\n if (!obj2) {\n return obj1;\n }\n each(obj2, function(key, value) {\n obj1[key] = value;\n });\n return obj1;\n}\n\n/**\n * This function is only used for react-native.\n * react-native freezes object that have already been sent over the\n * js bridge. We need this function in order to check if the object is frozen.\n * So it's ok that objectFrozen returns false if Object.isFrozen is not\n * supported because it's not relevant for other \"platforms\". See related issue:\n * https://github.com/getsentry/react-native-sentry/issues/57\n */\nfunction objectFrozen(obj) {\n if (!Object.isFrozen) {\n return false;\n }\n return Object.isFrozen(obj);\n}\n\nfunction truncate(str, max) {\n if (typeof max !== 'number') {\n throw new Error('2nd argument to `truncate` function should be a number');\n }\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : str.substr(0, max) + '\\u2026';\n}\n\n/**\n * hasKey, a better form of hasOwnProperty\n * Example: hasKey(MainHostObject, property) === true/false\n *\n * @param {Object} host object to check property\n * @param {string} key to check\n */\nfunction hasKey(object, key) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction joinRegExp(patterns) {\n // Combine an array of regular expressions and strings into one large regexp\n // Be mad.\n var sources = [],\n i = 0,\n len = patterns.length,\n pattern;\n\n for (; i < len; i++) {\n pattern = patterns[i];\n if (isString(pattern)) {\n // If it's a string, we need to escape it\n // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n sources.push(pattern.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1'));\n } else if (pattern && pattern.source) {\n // If it's a regexp already, we want to extract the source\n sources.push(pattern.source);\n }\n // Intentionally skip other cases\n }\n return new RegExp(sources.join('|'), 'i');\n}\n\nfunction urlencode(o) {\n var pairs = [];\n each(o, function(key, value) {\n pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n });\n return pairs.join('&');\n}\n\n// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n// intentionally using regex and not <a/> href parsing trick because React Native and other\n// environments where DOM might not be available\nfunction parseUrl(url) {\n if (typeof url !== 'string') return {};\n var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n var query = match[6] || '';\n var fragment = match[8] || '';\n return {\n protocol: match[2],\n host: match[4],\n path: match[5],\n relative: match[5] + query + fragment // everything minus origin\n };\n}\nfunction uuid4() {\n var crypto = _window.crypto || _window.msCrypto;\n\n if (!isUndefined(crypto) && crypto.getRandomValues) {\n // Use window.crypto API if available\n // eslint-disable-next-line no-undef\n var arr = new Uint16Array(8);\n crypto.getRandomValues(arr);\n\n // set 4 in byte 7\n arr[3] = (arr[3] & 0xfff) | 0x4000;\n // set 2 most significant bits of byte 9 to '10'\n arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n var pad = function(num) {\n var v = num.toString(16);\n while (v.length < 4) {\n v = '0' + v;\n }\n return v;\n };\n\n return (\n pad(arr[0]) +\n pad(arr[1]) +\n pad(arr[2]) +\n pad(arr[3]) +\n pad(arr[4]) +\n pad(arr[5]) +\n pad(arr[6]) +\n pad(arr[7])\n );\n } else {\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @param elem\n * @returns {string}\n */\nfunction htmlTreeAsString(elem) {\n /* eslint no-extra-parens:0*/\n var MAX_TRAVERSE_HEIGHT = 5,\n MAX_OUTPUT_LEN = 80,\n out = [],\n height = 0,\n len = 0,\n separator = ' > ',\n sepLength = separator.length,\n nextStr;\n\n while (elem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = htmlElementAsString(elem);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n if (\n nextStr === 'html' ||\n (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)\n ) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n elem = elem.parentNode;\n }\n\n return out.reverse().join(separator);\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @param HTMLElement\n * @returns {string}\n */\nfunction htmlElementAsString(elem) {\n var out = [],\n className,\n classes,\n key,\n attr,\n i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n if (elem.id) {\n out.push('#' + elem.id);\n }\n\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push('.' + classes[i]);\n }\n }\n var attrWhitelist = ['type', 'name', 'title', 'alt'];\n for (i = 0; i < attrWhitelist.length; i++) {\n key = attrWhitelist[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push('[' + key + '=\"' + attr + '\"]');\n }\n }\n return out.join('');\n}\n\n/**\n * Returns true if either a OR b is truthy, but not both\n */\nfunction isOnlyOneTruthy(a, b) {\n return !!(!!a ^ !!b);\n}\n\n/**\n * Returns true if both parameters are undefined\n */\nfunction isBothUndefined(a, b) {\n return isUndefined(a) && isUndefined(b);\n}\n\n/**\n * Returns true if the two input exception interfaces have the same content\n */\nfunction isSameException(ex1, ex2) {\n if (isOnlyOneTruthy(ex1, ex2)) return false;\n\n ex1 = ex1.values[0];\n ex2 = ex2.values[0];\n\n if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;\n\n // in case both stacktraces are undefined, we can't decide so default to false\n if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;\n\n return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);\n}\n\n/**\n * Returns true if the two input stack trace interfaces have the same content\n */\nfunction isSameStacktrace(stack1, stack2) {\n if (isOnlyOneTruthy(stack1, stack2)) return false;\n\n var frames1 = stack1.frames;\n var frames2 = stack2.frames;\n\n // Exit early if stacktrace is malformed\n if (frames1 === undefined || frames2 === undefined) return false;\n\n // Exit early if frame count differs\n if (frames1.length !== frames2.length) return false;\n\n // Iterate through every frame; bail out if anything differs\n var a, b;\n for (var i = 0; i < frames1.length; i++) {\n a = frames1[i];\n b = frames2[i];\n if (\n a.filename !== b.filename ||\n a.lineno !== b.lineno ||\n a.colno !== b.colno ||\n a['function'] !== b['function']\n )\n return false;\n }\n return true;\n}\n\n/**\n * Polyfill a method\n * @param obj object e.g. `document`\n * @param name method name present on object e.g. `addEventListener`\n * @param replacement replacement function\n * @param track {optional} record instrumentation to an array\n */\nfunction fill(obj, name, replacement, track) {\n if (obj == null) return;\n var orig = obj[name];\n obj[name] = replacement(orig);\n obj[name].__raven__ = true;\n obj[name].__orig__ = orig;\n if (track) {\n track.push([obj, name, orig]);\n }\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns {string}\n */\nfunction safeJoin(input, delimiter) {\n if (!isArray(input)) return '';\n\n var output = [];\n\n for (var i = 0; i < input.length; i++) {\n try {\n output.push(String(input[i]));\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n// Default Node.js REPL depth\nvar MAX_SERIALIZE_EXCEPTION_DEPTH = 3;\n// 50kB, as 100kB is max payload size, so half sounds reasonable\nvar MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;\nvar MAX_SERIALIZE_KEYS_LENGTH = 40;\n\nfunction utf8Length(value) {\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\n\nfunction serializeValue(value) {\n if (typeof value === 'string') {\n var maxLength = 40;\n return truncate(value, maxLength);\n } else if (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'undefined'\n ) {\n return value;\n }\n\n var type = Object.prototype.toString.call(value);\n\n // Node.js REPL notation\n if (type === '[object Object]') return '[Object]';\n if (type === '[object Array]') return '[Array]';\n if (type === '[object Function]')\n return value.name ? '[Function: ' + value.name + ']' : '[Function]';\n\n return value;\n}\n\nfunction serializeObject(value, depth) {\n if (depth === 0) return serializeValue(value);\n\n if (isPlainObject(value)) {\n return Object.keys(value).reduce(function(acc, key) {\n acc[key] = serializeObject(value[key], depth - 1);\n return acc;\n }, {});\n } else if (Array.isArray(value)) {\n return value.map(function(val) {\n return serializeObject(val, depth - 1);\n });\n }\n\n return serializeValue(value);\n}\n\nfunction serializeException(ex, depth, maxSize) {\n if (!isPlainObject(ex)) return ex;\n\n depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;\n maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;\n\n var serialized = serializeObject(ex, depth);\n\n if (jsonSize(stringify(serialized)) > maxSize) {\n return serializeException(ex, depth - 1);\n }\n\n return serialized;\n}\n\nfunction serializeKeysForMessage(keys, maxLength) {\n if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();\n if (!Array.isArray(keys)) return '';\n\n keys = keys.filter(function(key) {\n return typeof key === 'string';\n });\n if (keys.length === 0) return '[object has no keys]';\n\n maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;\n if (keys[0].length >= maxLength) return keys[0];\n\n for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {\n var serialized = keys.slice(0, usedKeys).join(', ');\n if (serialized.length > maxLength) continue;\n if (usedKeys === keys.length) return serialized;\n return serialized + '\\u2026';\n }\n\n return '';\n}\n\nfunction sanitize(input, sanitizeKeys) {\n if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))\n return input;\n\n var sanitizeRegExp = joinRegExp(sanitizeKeys);\n var sanitizeMask = '********';\n var safeInput;\n\n try {\n safeInput = JSON.parse(stringify(input));\n } catch (o_O) {\n return input;\n }\n\n function sanitizeWorker(workerInput) {\n if (isArray(workerInput)) {\n return workerInput.map(function(val) {\n return sanitizeWorker(val);\n });\n }\n\n if (isPlainObject(workerInput)) {\n return Object.keys(workerInput).reduce(function(acc, k) {\n if (sanitizeRegExp.test(k)) {\n acc[k] = sanitizeMask;\n } else {\n acc[k] = sanitizeWorker(workerInput[k]);\n }\n return acc;\n }, {});\n }\n\n return workerInput;\n }\n\n return sanitizeWorker(safeInput);\n}\n\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isDOMError: isDOMError,\n isDOMException: isDOMException,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isPlainObject: isPlainObject,\n isString: isString,\n isArray: isArray,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\n supportsDOMError: supportsDOMError,\n supportsDOMException: supportsDOMException,\n supportsFetch: supportsFetch,\n supportsReferrerPolicy: supportsReferrerPolicy,\n supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,\n wrappedCallback: wrappedCallback,\n each: each,\n objectMerge: objectMerge,\n truncate: truncate,\n objectFrozen: objectFrozen,\n hasKey: hasKey,\n joinRegExp: joinRegExp,\n urlencode: urlencode,\n uuid4: uuid4,\n htmlTreeAsString: htmlTreeAsString,\n htmlElementAsString: htmlElementAsString,\n isSameException: isSameException,\n isSameStacktrace: isSameStacktrace,\n parseUrl: parseUrl,\n fill: fill,\n safeJoin: safeJoin,\n serializeException: serializeException,\n serializeKeysForMessage: serializeKeysForMessage,\n sanitize: sanitize\n};\n","var utils = require('../../src/utils');\n\n/*\n TraceKit - Cross brower stack traces\n\n This was originally forked from github.com/occ/TraceKit, but has since been\n largely re-written and is now maintained as part of raven-js. Tests for\n this are in test/vendor.\n\n MIT license\n*/\n\nvar TraceKit = {\n collectWindowErrors: true,\n debug: false\n};\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n// global reference to slice\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?';\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;\n\nfunction getLocationHref() {\n if (typeof document === 'undefined' || document.location == null) return '';\n return document.location.href;\n}\n\nfunction getLocationOrigin() {\n if (typeof document === 'undefined' || document.location == null) return '';\n\n // Oh dear IE10...\n if (!document.location.origin) {\n return (\n document.location.protocol +\n '//' +\n document.location.hostname +\n (document.location.port ? ':' + document.location.port : '')\n );\n }\n\n return document.location.origin;\n}\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n * TraceKit.report.subscribe(function(stackInfo) { ... })\n * TraceKit.report.unsubscribe(function(stackInfo) { ... })\n * TraceKit.report(exception)\n * try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n * - Firefox: full stack trace with line numbers, plus column number\n * on top frame; column number is not guaranteed\n * - Opera: full stack trace with line and column numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n * - IE: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n * - IE5.5+ (only 8.0 tested)\n * - Firefox 0.9+ (only 3.5+ tested)\n * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n * Exceptions Have Stacktrace to be enabled in opera:config)\n * - Safari 3+ (only 4+ tested)\n * - Chrome 1+ (only 5+ tested)\n * - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = (function reportModuleWrapper() {\n var handlers = [],\n lastArgs = null,\n lastException = null,\n lastExceptionStack = null;\n\n /**\n * Add a crash handler.\n * @param {Function} handler\n */\n function subscribe(handler) {\n installGlobalHandler();\n handlers.push(handler);\n }\n\n /**\n * Remove a crash handler.\n * @param {Function} handler\n */\n function unsubscribe(handler) {\n for (var i = handlers.length - 1; i >= 0; --i) {\n if (handlers[i] === handler) {\n handlers.splice(i, 1);\n }\n }\n }\n\n /**\n * Remove all crash handlers.\n */\n function unsubscribeAll() {\n uninstallGlobalHandler();\n handlers = [];\n }\n\n /**\n * Dispatch stack information to all handlers.\n * @param {Object.<string, *>} stack\n */\n function notifyHandlers(stack, isWindowError) {\n var exception = null;\n if (isWindowError && !TraceKit.collectWindowErrors) {\n return;\n }\n for (var i in handlers) {\n if (handlers.hasOwnProperty(i)) {\n try {\n handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n } catch (inner) {\n exception = inner;\n }\n }\n }\n\n if (exception) {\n throw exception;\n }\n }\n\n var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n /**\n * Ensures all global unhandled exceptions are recorded.\n * Supported by Gecko and IE.\n * @param {string} msg Error message.\n * @param {string} url URL of script that generated the exception.\n * @param {(number|string)} lineNo The line number at which the error\n * occurred.\n * @param {?(number|string)} colNo The column number at which the error\n * occurred.\n * @param {?Error} ex The actual Error object.\n */\n function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {\n var stack = null;\n // If 'ex' is ErrorEvent, get real Error from inside\n var exception = utils.isErrorEvent(ex) ? ex.error : ex;\n // If 'msg' is ErrorEvent, get real message from inside\n var message = utils.isErrorEvent(msg) ? msg.message : msg;\n\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n lastExceptionStack,\n url,\n lineNo,\n message\n );\n processLastException();\n } else if (exception && utils.isError(exception)) {\n // non-string `exception` arg; attempt to extract stack trace\n\n // New chrome and blink send along a real error object\n // Let's just report that like a normal error.\n // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n stack = TraceKit.computeStackTrace(exception);\n notifyHandlers(stack, true);\n } else {\n var location = {\n url: url,\n line: lineNo,\n column: colNo\n };\n\n var name = undefined;\n var groups;\n\n if ({}.toString.call(message) === '[object String]') {\n var groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n message = groups[2];\n }\n }\n\n location.func = UNKNOWN_FUNCTION;\n\n stack = {\n name: name,\n message: message,\n url: getLocationHref(),\n stack: [location]\n };\n notifyHandlers(stack, true);\n }\n\n if (_oldOnerrorHandler) {\n return _oldOnerrorHandler.apply(this, arguments);\n }\n\n return false;\n }\n\n function installGlobalHandler() {\n if (_onErrorHandlerInstalled) {\n return;\n }\n _oldOnerrorHandler = _window.onerror;\n _window.onerror = traceKitWindowOnError;\n _onErrorHandlerInstalled = true;\n }\n\n function uninstallGlobalHandler() {\n if (!_onErrorHandlerInstalled) {\n return;\n }\n _window.onerror = _oldOnerrorHandler;\n _onErrorHandlerInstalled = false;\n _oldOnerrorHandler = undefined;\n }\n\n function processLastException() {\n var _lastExceptionStack = lastExceptionStack,\n _lastArgs = lastArgs;\n lastArgs = null;\n lastExceptionStack = null;\n lastException = null;\n notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n }\n\n /**\n * Reports an unhandled Error to TraceKit.\n * @param {Error} ex\n * @param {?boolean} rethrow If false, do not re-throw the exception.\n * Only used for window.onerror to not cause an infinite loop of\n * rethrowing.\n */\n function report(ex, rethrow) {\n var args = _slice.call(arguments, 1);\n if (lastExceptionStack) {\n if (lastException === ex) {\n return; // already caught by an inner catch block, ignore\n } else {\n processLastException();\n }\n }\n\n var stack = TraceKit.computeStackTrace(ex);\n lastExceptionStack = stack;\n lastException = ex;\n lastArgs = args;\n\n // If the stack trace is incomplete, wait for 2 seconds for\n // slow slow IE to see if onerror occurs or not before reporting\n // this exception; otherwise, we will end up with an incomplete\n // stack trace\n setTimeout(function() {\n if (lastException === ex) {\n processLastException();\n }\n }, stack.incomplete ? 2000 : 0);\n\n if (rethrow !== false) {\n throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n }\n }\n\n report.subscribe = subscribe;\n report.unsubscribe = unsubscribe;\n report.uninstall = unsubscribeAll;\n return report;\n})();\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n * s.name - exception name\n * s.message - exception message\n * s.stack[i].url - JavaScript or HTML file URL\n * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)\n * s.stack[i].args - arguments passed to the function, if known\n * s.stack[i].line - line number, if known\n * s.stack[i].column - column number, if known\n *\n * Supports:\n * - Firefox: full stack trace with line numbers and unreliable column\n * number on top frame\n * - Opera 10: full stack trace with line and column numbers\n * - Opera 9-: full stack trace with line numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the topmost stacktrace element\n * only\n * - IE: no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n * * in Safari, some methods may be missing from the stack trace;\n * * in IE, the topmost function in the stack trace will always be the\n * caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n */\nTraceKit.computeStackTrace = (function computeStackTraceWrapper() {\n // Contents of Exception in various browsers.\n //\n // SAFARI:\n // ex.message = Can't find variable: qq\n // ex.line = 59\n // ex.sourceId = 580238192\n // ex.sourceURL = http://...\n // ex.expressionBeginOffset = 96\n // ex.expressionCaretOffset = 98\n // ex.expressionEndOffset = 98\n // ex.name = ReferenceError\n //\n // FIREFOX:\n // ex.message = qq is not defined\n // ex.fileName = http://...\n // ex.lineNumber = 59\n // ex.columnNumber = 69\n // ex.stack = ...stack trace... (see the example below)\n // ex.name = ReferenceError\n //\n // CHROME:\n // ex.message = qq is not defined\n // ex.name = ReferenceError\n // ex.type = not_defined\n // ex.arguments = ['aa']\n // ex.stack = ...stack trace...\n //\n // INTERNET EXPLORER:\n // ex.message = ...\n // ex.name = ReferenceError\n //\n // OPERA:\n // ex.message = ...message... (see the example below)\n // ex.name = ReferenceError\n // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)\n // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n /**\n * Computes stack trace information from the stack property.\n * Chrome and Gecko use this property.\n * @param {Error} ex\n * @return {?Object.<string, *>} Stack trace information.\n */\n function computeStackTraceFromStackProp(ex) {\n if (typeof ex.stack === 'undefined' || !ex.stack) return;\n\n var chrome = /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n var winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n // NOTE: blob urls are now supposed to always have an origin, therefore it's format\n // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\\/` as well\n var gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\\/.*?|\\[native code\\]|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\n // Used to additionally parse URL/line/column from eval frames\n var geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n var chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n var lines = ex.stack.split('\\n');\n var stack = [];\n var submatch;\n var parts;\n var element;\n var reference = /^(.*) is undefined$/.exec(ex.message);\n\n for (var i = 0, j = lines.length; i < j; ++i) {\n if ((parts = chrome.exec(lines[i]))) {\n var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1]; // url\n parts[3] = submatch[2]; // line\n parts[4] = submatch[3]; // column\n }\n element = {\n url: !isNative ? parts[2] : null,\n func: parts[1] || UNKNOWN_FUNCTION,\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = winjs.exec(lines[i]))) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = gecko.exec(lines[i]))) {\n var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n // throw out eval line/column and use top-most line number\n parts[3] = submatch[1];\n parts[4] = submatch[2];\n parts[5] = null; // no column when eval\n } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = ex.columnNumber + 1;\n }\n element = {\n url: parts[3],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n if (element.url && element.url.substr(0, 5) === 'blob:') {\n // Special case for handling JavaScript loaded into a blob.\n // We use a synchronous AJAX request here as a blob is already in\n // memory - it's not making a network request. This will generate a warning\n // in the browser console, but there has already been an error so that's not\n // that much of an issue.\n var xhr = new XMLHttpRequest();\n xhr.open('GET', element.url, false);\n xhr.send(null);\n\n // If we failed to download the source, skip this patch\n if (xhr.status === 200) {\n var source = xhr.responseText || '';\n\n // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.\n // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175\n source = source.slice(-300);\n\n // Now we dig out the source map URL\n var sourceMaps = source.match(/\\/\\/# sourceMappingURL=(.*)$/);\n\n // If we don't find a source map comment or we find more than one, continue on to the next element.\n if (sourceMaps) {\n var sourceMapAddress = sourceMaps[1];\n\n // Now we check to see if it's a relative URL.\n // If it is, convert it to an absolute one.\n if (sourceMapAddress.charAt(0) === '~') {\n sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);\n }\n\n // Now we strip the '.map' off of the end of the URL and update the\n // element so that Sentry can match the map to the blob.\n element.url = sourceMapAddress.slice(0, -4);\n }\n }\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n }\n\n /**\n * Adds information about the first frame to incomplete stack traces.\n * Safari and IE require this to get complete data on the first frame.\n * @param {Object.<string, *>} stackInfo Stack trace information from\n * one of the compute* methods.\n * @param {string} url The URL of the script that caused an error.\n * @param {(number|string)} lineNo The line number of the script that\n * caused an error.\n * @param {string=} message The error generated by the browser, which\n * hopefully contains the name of the object that caused the error.\n * @return {boolean} Whether or not the stack information was\n * augmented.\n */\n function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {\n var initial = {\n url: url,\n line: lineNo\n };\n\n if (initial.url && initial.line) {\n stackInfo.incomplete = false;\n\n if (!initial.func) {\n initial.func = UNKNOWN_FUNCTION;\n }\n\n if (stackInfo.stack.length > 0) {\n if (stackInfo.stack[0].url === initial.url) {\n if (stackInfo.stack[0].line === initial.line) {\n return false; // already in stack trace\n } else if (\n !stackInfo.stack[0].line &&\n stackInfo.stack[0].func === initial.func\n ) {\n stackInfo.stack[0].line = initial.line;\n return false;\n }\n }\n }\n\n stackInfo.stack.unshift(initial);\n stackInfo.partial = true;\n return true;\n } else {\n stackInfo.incomplete = true;\n }\n\n return false;\n }\n\n /**\n * Computes stack trace information by walking the arguments.caller\n * chain at the time the exception occurred. This will cause earlier\n * frames to be missed but is the only way to get any stack trace in\n * Safari and IE. The top frame is restored by\n * {@link augmentStackTraceWithInitialElement}.\n * @param {Error} ex\n * @return {?Object.<string, *>} Stack trace information.\n */\n function computeStackTraceByWalkingCallerChain(ex, depth) {\n var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,\n stack = [],\n funcs = {},\n recursion = false,\n parts,\n item,\n source;\n\n for (\n var curr = computeStackTraceByWalkingCallerChain.caller;\n curr && !recursion;\n curr = curr.caller\n ) {\n if (curr === computeStackTrace || curr === TraceKit.report) {\n // console.log('skipping internal function');\n continue;\n }\n\n item = {\n url: null,\n func: UNKNOWN_FUNCTION,\n line: null,\n column: null\n };\n\n if (curr.name) {\n item.func = curr.name;\n } else if ((parts = functionName.exec(curr.toString()))) {\n item.func = parts[1];\n }\n\n if (typeof item.func === 'undefined') {\n try {\n item.func = parts.input.substring(0, parts.input.indexOf('{'));\n } catch (e) {}\n }\n\n if (funcs['' + curr]) {\n recursion = true;\n } else {\n funcs['' + curr] = true;\n }\n\n stack.push(item);\n }\n\n if (depth) {\n // console.log('depth is ' + depth);\n // console.log('stack is ' + stack.length);\n stack.splice(0, depth);\n }\n\n var result = {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n augmentStackTraceWithInitialElement(\n result,\n ex.sourceURL || ex.fileName,\n ex.line || ex.lineNumber,\n ex.message || ex.description\n );\n return result;\n }\n\n /**\n * Computes a stack trace for an exception.\n * @param {Error} ex\n * @param {(string|number)=} depth\n */\n function computeStackTrace(ex, depth) {\n var stack = null;\n depth = depth == null ? 0 : +depth;\n\n try {\n stack = computeStackTraceFromStackProp(ex);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n\n try {\n stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref()\n };\n }\n\n computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n\n return computeStackTrace;\n})();\n\nmodule.exports = TraceKit;\n","/*\n * JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\n/*\n* Add integers, wrapping at 2^32. This uses 16-bit operations internally\n* to work around bugs in some JS interpreters.\n*/\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xffff);\n}\n\n/*\n* Bitwise rotate a 32-bit number to the left.\n*/\nfunction bitRotateLeft(num, cnt) {\n return (num << cnt) | (num >>> (32 - cnt));\n}\n\n/*\n* These functions implement the four basic operations the algorithm uses.\n*/\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn((b & c) | (~b & d), a, b, x, s, t);\n}\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\n/*\n* Calculate the MD5 of an array of little-endian words, and a bit length.\n*/\nfunction binlMD5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << (len % 32);\n x[(((len + 64) >>> 9) << 4) + 14] = len;\n\n var i;\n var olda;\n var oldb;\n var oldc;\n var oldd;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (i = 0; i < x.length; i += 16) {\n olda = a;\n oldb = b;\n oldc = c;\n oldd = d;\n\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n return [a, b, c, d];\n}\n\n/*\n* Convert an array of little-endian words to a string\n*/\nfunction binl2rstr(input) {\n var i;\n var output = '';\n var length32 = input.length * 32;\n for (i = 0; i < length32; i += 8) {\n output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);\n }\n return output;\n}\n\n/*\n* Convert a raw string to an array of little-endian words\n* Characters >255 have their high-byte silently ignored.\n*/\nfunction rstr2binl(input) {\n var i;\n var output = [];\n output[(input.length >> 2) - 1] = undefined;\n for (i = 0; i < output.length; i += 1) {\n output[i] = 0;\n }\n var length8 = input.length * 8;\n for (i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);\n }\n return output;\n}\n\n/*\n* Calculate the MD5 of a raw string\n*/\nfunction rstrMD5(s) {\n return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));\n}\n\n/*\n* Calculate the HMAC-MD5, of a key and some data (raw strings)\n*/\nfunction rstrHMACMD5(key, data) {\n var i;\n var bkey = rstr2binl(key);\n var ipad = [];\n var opad = [];\n var hash;\n ipad[15] = opad[15] = undefined;\n if (bkey.length > 16) {\n bkey = binlMD5(bkey, key.length * 8);\n }\n for (i = 0; i < 16; i += 1) {\n ipad[i] = bkey[i] ^ 0x36363636;\n opad[i] = bkey[i] ^ 0x5c5c5c5c;\n }\n hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);\n return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));\n}\n\n/*\n* Convert a raw string to a hex string\n*/\nfunction rstr2hex(input) {\n var hexTab = '0123456789abcdef';\n var output = '';\n var x;\n var i;\n for (i = 0; i < input.length; i += 1) {\n x = input.charCodeAt(i);\n output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);\n }\n return output;\n}\n\n/*\n* Encode a string as utf-8\n*/\nfunction str2rstrUTF8(input) {\n return unescape(encodeURIComponent(input));\n}\n\n/*\n* Take string arguments and return either raw or hex encoded strings\n*/\nfunction rawMD5(s) {\n return rstrMD5(str2rstrUTF8(s));\n}\nfunction hexMD5(s) {\n return rstr2hex(rawMD5(s));\n}\nfunction rawHMACMD5(k, d) {\n return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));\n}\nfunction hexHMACMD5(k, d) {\n return rstr2hex(rawHMACMD5(k, d));\n}\n\nfunction md5(string, key, raw) {\n if (!key) {\n if (!raw) {\n return hexMD5(string);\n }\n return rawMD5(string);\n }\n if (!raw) {\n return hexHMACMD5(key, string);\n }\n return rawHMACMD5(key, string);\n}\n\nmodule.exports = md5;\n","function RavenConfigError(message) {\n this.name = 'RavenConfigError';\n this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\n\nmodule.exports = RavenConfigError;\n","var utils = require('./utils');\n\nvar wrapMethod = function(console, level, callback) {\n var originalConsoleLevel = console[level];\n var originalConsole = console;\n\n if (!(level in console)) {\n return;\n }\n\n var sentryLevel = level === 'warn' ? 'warning' : level;\n\n console[level] = function() {\n var args = [].slice.call(arguments);\n\n var msg = utils.safeJoin(args, ' ');\n var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};\n\n if (level === 'assert') {\n if (args[0] === false) {\n // Default browsers message\n msg =\n 'Assertion failed: ' + (utils.safeJoin(args.slice(1), ' ') || 'console.assert');\n data.extra.arguments = args.slice(1);\n callback && callback(msg, data);\n }\n } else {\n callback && callback(msg, data);\n }\n\n // this fails for some browsers. :(\n if (originalConsoleLevel) {\n // IE9 doesn't allow calling apply on console functions directly\n // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193\n Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);\n }\n };\n};\n\nmodule.exports = {\n wrapMethod: wrapMethod\n};\n","/*global XDomainRequest:false */\n\nvar TraceKit = require('../vendor/TraceKit/tracekit');\nvar stringify = require('../vendor/json-stringify-safe/stringify');\nvar md5 = require('../vendor/md5/md5');\nvar RavenConfigError = require('./configError');\n\nvar utils = require('./utils');\nvar isErrorEvent = utils.isErrorEvent;\nvar isDOMError = utils.isDOMError;\nvar isDOMException = utils.isDOMException;\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isPlainObject = utils.isPlainObject;\nvar isUndefined = utils.isUndefined;\nvar isFunction = utils.isFunction;\nvar isString = utils.isString;\nvar isArray = utils.isArray;\nvar isEmptyObject = utils.isEmptyObject;\nvar each = utils.each;\nvar objectMerge = utils.objectMerge;\nvar truncate = utils.truncate;\nvar objectFrozen = utils.objectFrozen;\nvar hasKey = utils.hasKey;\nvar joinRegExp = utils.joinRegExp;\nvar urlencode = utils.urlencode;\nvar uuid4 = utils.uuid4;\nvar htmlTreeAsString = utils.htmlTreeAsString;\nvar isSameException = utils.isSameException;\nvar isSameStacktrace = utils.isSameStacktrace;\nvar parseUrl = utils.parseUrl;\nvar fill = utils.fill;\nvar supportsFetch = utils.supportsFetch;\nvar supportsReferrerPolicy = utils.supportsReferrerPolicy;\nvar serializeKeysForMessage = utils.serializeKeysForMessage;\nvar serializeException = utils.serializeException;\nvar sanitize = utils.sanitize;\n\nvar wrapConsoleMethod = require('./console').wrapMethod;\n\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\n\nfunction now() {\n return +new Date();\n}\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\n\nfunction keepOriginalCallback(original, callback) {\n return isFunction(callback)\n ? function(data) {\n return callback(data, original);\n }\n : callback;\n}\n\n// First, check for JSON support\n// If there is no JSON, we no-op the core features of Raven\n// since JSON is required to encode the payload\nfunction Raven() {\n this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);\n // Raven can run in contexts where there's no document (react-native)\n this._hasDocument = !isUndefined(_document);\n this._hasNavigator = !isUndefined(_navigator);\n this._lastCapturedException = null;\n this._lastData = null;\n this._lastEventId = null;\n this._globalServer = null;\n this._globalKey = null;\n this._globalProject = null;\n this._globalContext = {};\n this._globalOptions = {\n // SENTRY_RELEASE can be injected by https://github.com/getsentry/sentry-webpack-plugin\n release: _window.SENTRY_RELEASE && _window.SENTRY_RELEASE.id,\n logger: 'javascript',\n ignoreErrors: [],\n ignoreUrls: [],\n whitelistUrls: [],\n includePaths: [],\n headers: null,\n collectWindowErrors: true,\n captureUnhandledRejections: true,\n maxMessageLength: 0,\n // By default, truncates URL values to 250 chars\n maxUrlLength: 250,\n stackTraceLimit: 50,\n autoBreadcrumbs: true,\n instrument: true,\n sampleRate: 1,\n sanitizeKeys: []\n };\n this._fetchDefaults = {\n method: 'POST',\n keepalive: true,\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n // https://caniuse.com/#feat=referrer-policy\n // It doesn't. And it throw exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n referrerPolicy: supportsReferrerPolicy() ? 'origin' : ''\n };\n this._ignoreOnError = 0;\n this._isRavenInstalled = false;\n this._originalErrorStackTraceLimit = Error.stackTraceLimit;\n // capture references to window.console *and* all its methods first\n // before the console plugin has a chance to monkey patch\n this._originalConsole = _window.console || {};\n this._originalConsoleMethods = {};\n this._plugins = [];\n this._startTime = now();\n this._wrappedBuiltIns = [];\n this._breadcrumbs = [];\n this._lastCapturedEvent = null;\n this._keypressTimeout;\n this._location = _window.location;\n this._lastHref = this._location && this._location.href;\n this._resetBackoff();\n\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsole) {\n this._originalConsoleMethods[method] = this._originalConsole[method];\n }\n}\n\n/*\n * The core Raven singleton\n *\n * @this {Raven}\n */\n\nRaven.prototype = {\n // Hardcode version string so that raven source can be loaded directly via\n // webpack (using a build step causes webpack #1617). Grunt verifies that\n // this value matches package.json during build.\n // See: https://github.com/getsentry/raven-js/issues/465\n VERSION: '3.26.3',\n\n debug: false,\n\n TraceKit: TraceKit, // alias to TraceKit\n\n /*\n * Configure Raven with a DSN and extra options\n *\n * @param {string} dsn The public Sentry DSN\n * @param {object} options Set of global options [optional]\n * @return {Raven}\n */\n config: function(dsn, options) {\n var self = this;\n\n if (self._globalServer) {\n this._logDebug('error', 'Error: Raven has already been configured');\n return self;\n }\n if (!dsn) return self;\n\n var globalOptions = self._globalOptions;\n\n // merge in options\n if (options) {\n each(options, function(key, value) {\n // tags and extra are special and need to be put into context\n if (key === 'tags' || key === 'extra' || key === 'user') {\n self._globalContext[key] = value;\n } else {\n globalOptions[key] = value;\n }\n });\n }\n\n self.setDSN(dsn);\n\n // \"Script error.\" is hard coded into browsers for errors that it can't read.\n // this is the result of a script being pulled in from an external domain and CORS.\n globalOptions.ignoreErrors.push(/^Script error\\.?$/);\n globalOptions.ignoreErrors.push(/^Javascript error: Script error\\.? on line 0$/);\n\n // join regexp rules into one big rule\n globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);\n globalOptions.ignoreUrls = globalOptions.ignoreUrls.length\n ? joinRegExp(globalOptions.ignoreUrls)\n : false;\n globalOptions.whitelistUrls = globalOptions.whitelistUrls.length\n ? joinRegExp(globalOptions.whitelistUrls)\n : false;\n globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n globalOptions.maxBreadcrumbs = Math.max(\n 0,\n Math.min(globalOptions.maxBreadcrumbs || 100, 100)\n ); // default and hard limit is 100\n\n var autoBreadcrumbDefaults = {\n xhr: true,\n console: true,\n dom: true,\n location: true,\n sentry: true\n };\n\n var autoBreadcrumbs = globalOptions.autoBreadcrumbs;\n if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {\n autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);\n } else if (autoBreadcrumbs !== false) {\n autoBreadcrumbs = autoBreadcrumbDefaults;\n }\n globalOptions.autoBreadcrumbs = autoBreadcrumbs;\n\n var instrumentDefaults = {\n tryCatch: true\n };\n\n var instrument = globalOptions.instrument;\n if ({}.toString.call(instrument) === '[object Object]') {\n instrument = objectMerge(instrumentDefaults, instrument);\n } else if (instrument !== false) {\n instrument = instrumentDefaults;\n }\n globalOptions.instrument = instrument;\n\n TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n // return for chaining\n return self;\n },\n\n /*\n * Installs a global window.onerror error handler\n * to capture and report uncaught exceptions.\n * At this point, install() is required to be called due\n * to the way TraceKit is set up.\n *\n * @return {Raven}\n */\n install: function() {\n var self = this;\n if (self.isSetup() && !self._isRavenInstalled) {\n TraceKit.report.subscribe(function() {\n self._handleOnErrorStackInfo.apply(self, arguments);\n });\n\n if (self._globalOptions.captureUnhandledRejections) {\n self._attachPromiseRejectionHandler();\n }\n\n self._patchFunctionToString();\n\n if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n self._instrumentTryCatch();\n }\n\n if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n // Install all of the plugins\n self._drainPlugins();\n\n self._isRavenInstalled = true;\n }\n\n Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n return this;\n },\n\n /*\n * Set the DSN (can be called multiple time unlike config)\n *\n * @param {string} dsn The public Sentry DSN\n */\n setDSN: function(dsn) {\n var self = this,\n uri = self._parseDSN(dsn),\n lastSlash = uri.path.lastIndexOf('/'),\n path = uri.path.substr(1, lastSlash);\n\n self._dsn = dsn;\n self._globalKey = uri.user;\n self._globalSecret = uri.pass && uri.pass.substr(1);\n self._globalProject = uri.path.substr(lastSlash + 1);\n\n self._globalServer = self._getGlobalServer(uri);\n\n self._globalEndpoint =\n self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';\n\n // Reset backoff state since we may be pointing at a\n // new project/server\n this._resetBackoff();\n },\n\n /*\n * Wrap code within a context so Raven can capture errors\n * reliably across domains that is executed immediately.\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The callback to be immediately executed within the context\n * @param {array} args An array of arguments to be called with the callback [optional]\n */\n context: function(options, func, args) {\n if (isFunction(options)) {\n args = func || [];\n func = options;\n options = {};\n }\n\n return this.wrap(options, func).apply(this, args);\n },\n\n /*\n * Wrap code within a context and returns back a new function to be executed\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The function to be wrapped in a new context\n * @param {function} _before A function to call before the try/catch wrapper [optional, private]\n * @return {function} The newly wrapped functions with a context\n */\n wrap: function(options, func, _before) {\n var self = this;\n // 1 argument has been passed, and it's not a function\n // so just return it\n if (isUndefined(func) && !isFunction(options)) {\n return options;\n }\n\n // options is optional\n if (isFunction(options)) {\n func = options;\n options = undefined;\n }\n\n // At this point, we've passed along 2 arguments, and the second one\n // is not a function either, so we'll just return the second argument.\n if (!isFunction(func)) {\n return func;\n }\n\n // We don't wanna wrap it twice!\n try {\n if (func.__raven__) {\n return func;\n }\n\n // If this has already been wrapped in the past, return that\n if (func.__raven_wrapper__) {\n return func.__raven_wrapper__;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return func;\n }\n\n function wrapped() {\n var args = [],\n i = arguments.length,\n deep = !options || (options && options.deep !== false);\n\n if (_before && isFunction(_before)) {\n _before.apply(this, arguments);\n }\n\n // Recursively wrap all of a function's arguments that are\n // functions themselves.\n while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];\n\n try {\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means Raven caught an error invoking your application code. This is\n // expected behavior and NOT indicative of a bug with Raven.js.\n return func.apply(this, args);\n } catch (e) {\n self._ignoreNextOnError();\n self.captureException(e, options);\n throw e;\n }\n }\n\n // copy over properties of the old function\n for (var property in func) {\n if (hasKey(func, property)) {\n wrapped[property] = func[property];\n }\n }\n wrapped.prototype = func.prototype;\n\n func.__raven_wrapper__ = wrapped;\n // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n wrapped.__raven__ = true;\n wrapped.__orig__ = func;\n\n return wrapped;\n },\n\n /**\n * Uninstalls the global error handler.\n *\n * @return {Raven}\n */\n uninstall: function() {\n TraceKit.report.uninstall();\n\n this._detachPromiseRejectionHandler();\n this._unpatchFunctionToString();\n this._restoreBuiltIns();\n this._restoreConsole();\n\n Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n this._isRavenInstalled = false;\n\n return this;\n },\n\n /**\n * Callback used for `unhandledrejection` event\n *\n * @param {PromiseRejectionEvent} event An object containing\n * promise: the Promise that was rejected\n * reason: the value with which the Promise was rejected\n * @return void\n */\n _promiseRejectionHandler: function(event) {\n this._logDebug('debug', 'Raven caught unhandled promise rejection:', event);\n this.captureException(event.reason, {\n mechanism: {\n type: 'onunhandledrejection',\n handled: false\n }\n });\n },\n\n /**\n * Installs the global promise rejection handler.\n *\n * @return {raven}\n */\n _attachPromiseRejectionHandler: function() {\n this._promiseRejectionHandler = this._promiseRejectionHandler.bind(this);\n _window.addEventListener &&\n _window.addEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Uninstalls the global promise rejection handler.\n *\n * @return {raven}\n */\n _detachPromiseRejectionHandler: function() {\n _window.removeEventListener &&\n _window.removeEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Manually capture an exception and send it over to Sentry\n *\n * @param {error} ex An exception to be logged\n * @param {object} options A specific set of options for this error [optional]\n * @return {Raven}\n */\n captureException: function(ex, options) {\n options = objectMerge({trimHeadFrames: 0}, options ? options : {});\n\n if (isErrorEvent(ex) && ex.error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n ex = ex.error;\n } else if (isDOMError(ex) || isDOMException(ex)) {\n // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)\n // then we just extract the name and message, as they don't provide anything else\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n var name = ex.name || (isDOMError(ex) ? 'DOMError' : 'DOMException');\n var message = ex.message ? name + ': ' + ex.message : name;\n\n return this.captureMessage(\n message,\n objectMerge(options, {\n // neither DOMError or DOMException provide stack trace and we most likely wont get it this way as well\n // but it's barely any overhead so we may at least try\n stacktrace: true,\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n } else if (isError(ex)) {\n // we have a real Error object\n ex = ex;\n } else if (isPlainObject(ex)) {\n // If it is plain Object, serialize it manually and extract options\n // This will allow us to group events based on top-level keys\n // which is much better than creating new group when any key/value change\n options = this._getCaptureExceptionOptionsFromPlainObject(options, ex);\n ex = new Error(options.message);\n } else {\n // If none of previous checks were valid, then it means that\n // it's not a DOMError/DOMException\n // it's not a plain Object\n // it's not a valid ErrorEvent (one with an error property)\n // it's not an Error\n // So bail out and capture it as a simple message:\n return this.captureMessage(\n ex,\n objectMerge(options, {\n stacktrace: true, // if we fall back to captureMessage, default to attempting a new trace\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n }\n\n // Store the raw exception object for potential debugging and introspection\n this._lastCapturedException = ex;\n\n // TraceKit.report will re-raise any exception passed to it,\n // which means you have to wrap it in try/catch. Instead, we\n // can wrap it here and only re-raise if TraceKit.report\n // raises an exception different from the one we asked to\n // report on.\n try {\n var stack = TraceKit.computeStackTrace(ex);\n this._handleStackInfo(stack, options);\n } catch (ex1) {\n if (ex !== ex1) {\n throw ex1;\n }\n }\n\n return this;\n },\n\n _getCaptureExceptionOptionsFromPlainObject: function(currentOptions, ex) {\n var exKeys = Object.keys(ex).sort();\n var options = objectMerge(currentOptions, {\n message:\n 'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys),\n fingerprint: [md5(exKeys)],\n extra: currentOptions.extra || {}\n });\n options.extra.__serialized__ = serializeException(ex);\n\n return options;\n },\n\n /*\n * Manually send a message to Sentry\n *\n * @param {string} msg A plain message to be captured in Sentry\n * @param {object} options A specific set of options for this message [optional]\n * @return {Raven}\n */\n captureMessage: function(msg, options) {\n // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an\n // early call; we'll error on the side of logging anything called before configuration since it's\n // probably something you should see:\n if (\n !!this._globalOptions.ignoreErrors.test &&\n this._globalOptions.ignoreErrors.test(msg)\n ) {\n return;\n }\n\n options = options || {};\n msg = msg + ''; // Make sure it's actually a string\n\n var data = objectMerge(\n {\n message: msg\n },\n options\n );\n\n var ex;\n // Generate a \"synthetic\" stack trace from this point.\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative\n // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,\n // or if it catches a thrown object without a \"stack\" property.\n try {\n throw new Error(msg);\n } catch (ex1) {\n ex = ex1;\n }\n\n // null exception name so `Error` isn't prefixed to msg\n ex.name = null;\n var stack = TraceKit.computeStackTrace(ex);\n\n // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]\n var initialCall = isArray(stack.stack) && stack.stack[1];\n\n // if stack[1] is `Raven.captureException`, it means that someone passed a string to it and we redirected that call\n // to be handled by `captureMessage`, thus `initialCall` is the 3rd one, not 2nd\n // initialCall => captureException(string) => captureMessage(string)\n if (initialCall && initialCall.func === 'Raven.captureException') {\n initialCall = stack.stack[2];\n }\n\n var fileurl = (initialCall && initialCall.url) || '';\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n // Always attempt to get stacktrace if message is empty.\n // It's the only way to provide any helpful information to the user.\n if (this._globalOptions.stacktrace || options.stacktrace || data.message === '') {\n // fingerprint on msg, not stack trace (legacy behavior, could be revisited)\n data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;\n\n options = objectMerge(\n {\n trimHeadFrames: 0\n },\n options\n );\n // Since we know this is a synthetic trace, the top frame (this function call)\n // MUST be from Raven.js, so mark it for trimming\n // We add to the trim counter so that callers can choose to trim extra frames, such\n // as utility functions.\n options.trimHeadFrames += 1;\n\n var frames = this._prepareFrames(stack, options);\n data.stacktrace = {\n // Sentry expects frames oldest to newest\n frames: frames.reverse()\n };\n }\n\n // Make sure that fingerprint is always wrapped in an array\n if (data.fingerprint) {\n data.fingerprint = isArray(data.fingerprint)\n ? data.fingerprint\n : [data.fingerprint];\n }\n\n // Fire away!\n this._send(data);\n\n return this;\n },\n\n captureBreadcrumb: function(obj) {\n var crumb = objectMerge(\n {\n timestamp: now() / 1000\n },\n obj\n );\n\n if (isFunction(this._globalOptions.breadcrumbCallback)) {\n var result = this._globalOptions.breadcrumbCallback(crumb);\n\n if (isObject(result) && !isEmptyObject(result)) {\n crumb = result;\n } else if (result === false) {\n return this;\n }\n }\n\n this._breadcrumbs.push(crumb);\n if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {\n this._breadcrumbs.shift();\n }\n return this;\n },\n\n addPlugin: function(plugin /*arg1, arg2, ... argN*/) {\n var pluginArgs = [].slice.call(arguments, 1);\n\n this._plugins.push([plugin, pluginArgs]);\n if (this._isRavenInstalled) {\n this._drainPlugins();\n }\n\n return this;\n },\n\n /*\n * Set/clear a user to be sent along with the payload.\n *\n * @param {object} user An object representing user data [optional]\n * @return {Raven}\n */\n setUserContext: function(user) {\n // Intentionally do not merge here since that's an unexpected behavior.\n this._globalContext.user = user;\n\n return this;\n },\n\n /*\n * Merge extra attributes to be sent along with the payload.\n *\n * @param {object} extra An object representing extra data [optional]\n * @return {Raven}\n */\n setExtraContext: function(extra) {\n this._mergeContext('extra', extra);\n\n return this;\n },\n\n /*\n * Merge tags to be sent along with the payload.\n *\n * @param {object} tags An object representing tags [optional]\n * @return {Raven}\n */\n setTagsContext: function(tags) {\n this._mergeContext('tags', tags);\n\n return this;\n },\n\n /*\n * Clear all of the context.\n *\n * @return {Raven}\n */\n clearContext: function() {\n this._globalContext = {};\n\n return this;\n },\n\n /*\n * Get a copy of the current context. This cannot be mutated.\n *\n * @return {object} copy of context\n */\n getContext: function() {\n // lol javascript\n return JSON.parse(stringify(this._globalContext));\n },\n\n /*\n * Set environment of application\n *\n * @param {string} environment Typically something like 'production'.\n * @return {Raven}\n */\n setEnvironment: function(environment) {\n this._globalOptions.environment = environment;\n\n return this;\n },\n\n /*\n * Set release version of application\n *\n * @param {string} release Typically something like a git SHA to identify version\n * @return {Raven}\n */\n setRelease: function(release) {\n this._globalOptions.release = release;\n\n return this;\n },\n\n /*\n * Set the dataCallback option\n *\n * @param {function} callback The callback to run which allows the\n * data blob to be mutated before sending\n * @return {Raven}\n */\n setDataCallback: function(callback) {\n var original = this._globalOptions.dataCallback;\n this._globalOptions.dataCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the breadcrumbCallback option\n *\n * @param {function} callback The callback to run which allows filtering\n * or mutating breadcrumbs\n * @return {Raven}\n */\n setBreadcrumbCallback: function(callback) {\n var original = this._globalOptions.breadcrumbCallback;\n this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the shouldSendCallback option\n *\n * @param {function} callback The callback to run which allows\n * introspecting the blob before sending\n * @return {Raven}\n */\n setShouldSendCallback: function(callback) {\n var original = this._globalOptions.shouldSendCallback;\n this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /**\n * Override the default HTTP transport mechanism that transmits data\n * to the Sentry server.\n *\n * @param {function} transport Function invoked instead of the default\n * `makeRequest` handler.\n *\n * @return {Raven}\n */\n setTransport: function(transport) {\n this._globalOptions.transport = transport;\n\n return this;\n },\n\n /*\n * Get the latest raw exception that was captured by Raven.\n *\n * @return {error}\n */\n lastException: function() {\n return this._lastCapturedException;\n },\n\n /*\n * Get the last event id\n *\n * @return {string}\n */\n lastEventId: function() {\n return this._lastEventId;\n },\n\n /*\n * Determine if Raven is setup and ready to go.\n *\n * @return {boolean}\n */\n isSetup: function() {\n if (!this._hasJSON) return false; // needs JSON support\n if (!this._globalServer) {\n if (!this.ravenNotConfiguredError) {\n this.ravenNotConfiguredError = true;\n this._logDebug('error', 'Error: Raven has not been configured.');\n }\n return false;\n }\n return true;\n },\n\n afterLoad: function() {\n // TODO: remove window dependence?\n\n // Attempt to initialize Raven on load\n var RavenConfig = _window.RavenConfig;\n if (RavenConfig) {\n this.config(RavenConfig.dsn, RavenConfig.config).install();\n }\n },\n\n showReportDialog: function(options) {\n if (\n !_document // doesn't work without a document (React native)\n )\n return;\n\n options = options || {};\n\n var lastEventId = options.eventId || this.lastEventId();\n if (!lastEventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n var dsn = options.dsn || this._dsn;\n if (!dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var qs = '';\n qs += '?eventId=' + encode(lastEventId);\n qs += '&dsn=' + encode(dsn);\n\n var user = options.user || this._globalContext.user;\n if (user) {\n if (user.name) qs += '&name=' + encode(user.name);\n if (user.email) qs += '&email=' + encode(user.email);\n }\n\n var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/' + qs;\n (_document.head || _document.body).appendChild(script);\n },\n\n /**** Private functions ****/\n _ignoreNextOnError: function() {\n var self = this;\n this._ignoreOnError += 1;\n setTimeout(function() {\n // onerror should trigger before setTimeout\n self._ignoreOnError -= 1;\n });\n },\n\n _triggerEvent: function(eventType, options) {\n // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it\n var evt, key;\n\n if (!this._hasDocument) return;\n\n options = options || {};\n\n eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);\n\n if (_document.createEvent) {\n evt = _document.createEvent('HTMLEvents');\n evt.initEvent(eventType, true, true);\n } else {\n evt = _document.createEventObject();\n evt.eventType = eventType;\n }\n\n for (key in options)\n if (hasKey(options, key)) {\n evt[key] = options[key];\n }\n\n if (_document.createEvent) {\n // IE9 if standards\n _document.dispatchEvent(evt);\n } else {\n // IE8 regardless of Quirks or Standards\n // IE9 if quirks\n try {\n _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);\n } catch (e) {\n // Do nothing\n }\n }\n },\n\n /**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param evtName the event name (e.g. \"click\")\n * @returns {Function}\n * @private\n */\n _breadcrumbEventHandler: function(evtName) {\n var self = this;\n return function(evt) {\n // reset keypress timeout; e.g. triggering a 'click' after\n // a 'keypress' will reset the keypress debounce so that a new\n // set of keypresses can be recorded\n self._keypressTimeout = null;\n\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors). Ignore if we've\n // already captured the event.\n if (self._lastCapturedEvent === evt) return;\n\n self._lastCapturedEvent = evt;\n\n // try/catch both:\n // - accessing evt.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // can throw an exception in some circumstances.\n var target;\n try {\n target = htmlTreeAsString(evt.target);\n } catch (e) {\n target = '<unknown>';\n }\n\n self.captureBreadcrumb({\n category: 'ui.' + evtName, // e.g. ui.click, ui.input\n message: target\n });\n };\n },\n\n /**\n * Wraps addEventListener to capture keypress UI events\n * @returns {Function}\n * @private\n */\n _keypressEventHandler: function() {\n var self = this,\n debounceDuration = 1000; // milliseconds\n\n // TODO: if somehow user switches keypress target before\n // debounce timeout is triggered, we will only capture\n // a single breadcrumb from the FIRST target (acceptable?)\n return function(evt) {\n var target;\n try {\n target = evt.target;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n var tagName = target && target.tagName;\n\n // only consider keypress events on actual input elements\n // this will disregard keypresses targeting body (e.g. tabbing\n // through elements, hotkeys, etc)\n if (\n !tagName ||\n (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)\n )\n return;\n\n // record first keypress in a series, but ignore subsequent\n // keypresses until debounce clears\n var timeout = self._keypressTimeout;\n if (!timeout) {\n self._breadcrumbEventHandler('input')(evt);\n }\n clearTimeout(timeout);\n self._keypressTimeout = setTimeout(function() {\n self._keypressTimeout = null;\n }, debounceDuration);\n };\n },\n\n /**\n * Captures a breadcrumb of type \"navigation\", normalizing input URLs\n * @param to the originating URL\n * @param from the target URL\n * @private\n */\n _captureUrlChange: function(from, to) {\n var parsedLoc = parseUrl(this._location.href);\n var parsedTo = parseUrl(to);\n var parsedFrom = parseUrl(from);\n\n // because onpopstate only tells you the \"new\" (to) value of location.href, and\n // not the previous (from) value, we need to track the value of the current URL\n // state ourselves\n this._lastHref = to;\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)\n to = parsedTo.relative;\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)\n from = parsedFrom.relative;\n\n this.captureBreadcrumb({\n category: 'navigation',\n data: {\n to: to,\n from: from\n }\n });\n },\n\n _patchFunctionToString: function() {\n var self = this;\n self._originalFunctionToString = Function.prototype.toString;\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = function() {\n if (typeof this === 'function' && this.__raven__) {\n return self._originalFunctionToString.apply(this.__orig__, arguments);\n }\n return self._originalFunctionToString.apply(this, arguments);\n };\n },\n\n _unpatchFunctionToString: function() {\n if (this._originalFunctionToString) {\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = this._originalFunctionToString;\n }\n },\n\n /**\n * Wrap timer functions and event targets to catch errors and provide\n * better metadata.\n */\n _instrumentTryCatch: function() {\n var self = this;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapTimeFn(orig) {\n return function(fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n var originalCallback = args[0];\n if (isFunction(originalCallback)) {\n args[0] = self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {function: orig.name || '<anonymous>'}\n }\n },\n originalCallback\n );\n }\n\n // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it\n // also supports only two arguments and doesn't care what this is, so we\n // can just call the original function directly.\n if (orig.apply) {\n return orig.apply(this, args);\n } else {\n return orig(args[0], args[1]);\n }\n };\n }\n\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n function wrapEventTarget(global) {\n var proto = _window[global] && _window[global].prototype;\n if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n fill(\n proto,\n 'addEventListener',\n function(orig) {\n return function(evtName, fn, capture, secure) {\n // preserve arity\n try {\n if (fn && fn.handleEvent) {\n fn.handleEvent = self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n target: global,\n function: 'handleEvent',\n handler: (fn && fn.name) || '<anonymous>'\n }\n }\n },\n fn.handleEvent\n );\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`\n // so that we don't have more than one wrapper function\n var before, clickHandler, keypressHandler;\n\n if (\n autoBreadcrumbs &&\n autoBreadcrumbs.dom &&\n (global === 'EventTarget' || global === 'Node')\n ) {\n // NOTE: generating multiple handlers per addEventListener invocation, should\n // revisit and verify we can just use one (almost certainly)\n clickHandler = self._breadcrumbEventHandler('click');\n keypressHandler = self._keypressEventHandler();\n before = function(evt) {\n // need to intercept every DOM event in `before` argument, in case that\n // same wrapped method is re-used for different events (e.g. mousemove THEN click)\n // see #724\n if (!evt) return;\n\n var eventType;\n try {\n eventType = evt.type;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n if (eventType === 'click') return clickHandler(evt);\n else if (eventType === 'keypress') return keypressHandler(evt);\n };\n }\n return orig.call(\n this,\n evtName,\n self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n target: global,\n function: 'addEventListener',\n handler: (fn && fn.name) || '<anonymous>'\n }\n }\n },\n fn,\n before\n ),\n capture,\n secure\n );\n };\n },\n wrappedBuiltIns\n );\n fill(\n proto,\n 'removeEventListener',\n function(orig) {\n return function(evt, fn, capture, secure) {\n try {\n fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);\n } catch (e) {\n // ignore, accessing __raven_wrapper__ will throw in some Selenium environments\n }\n return orig.call(this, evt, fn, capture, secure);\n };\n },\n wrappedBuiltIns\n );\n }\n }\n\n fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n if (_window.requestAnimationFrame) {\n fill(\n _window,\n 'requestAnimationFrame',\n function(orig) {\n return function(cb) {\n return orig(\n self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n function: 'requestAnimationFrame',\n handler: (orig && orig.name) || '<anonymous>'\n }\n }\n },\n cb\n )\n );\n };\n },\n wrappedBuiltIns\n );\n }\n\n // event targets borrowed from bugsnag-js:\n // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666\n var eventTargets = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload'\n ];\n for (var i = 0; i < eventTargets.length; i++) {\n wrapEventTarget(eventTargets[i]);\n }\n },\n\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - XMLHttpRequests\n * - DOM interactions (click/typing)\n * - window.location changes\n * - console\n *\n * Can be disabled or individually configured via the `autoBreadcrumbs` config option\n */\n _instrumentBreadcrumbs: function() {\n var self = this;\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && isFunction(xhr[prop])) {\n fill(xhr, prop, function(orig) {\n return self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {function: prop, handler: (orig && orig.name) || '<anonymous>'}\n }\n },\n orig\n );\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;\n fill(\n xhrproto,\n 'open',\n function(origOpen) {\n return function(method, url) {\n // preserve arity\n\n // if Sentry key appears in URL, don't capture\n if (isString(url) && url.indexOf(self._globalKey) === -1) {\n this.__raven_xhr = {\n method: method,\n url: url,\n status_code: null\n };\n }\n\n return origOpen.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n\n fill(\n xhrproto,\n 'send',\n function(origSend) {\n return function() {\n // preserve arity\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__raven_xhr && xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhr.__raven_xhr.status_code = xhr.status;\n } catch (e) {\n /* do nothing */\n }\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'xhr',\n data: xhr.__raven_xhr\n });\n }\n }\n\n var props = ['onload', 'onerror', 'onprogress'];\n for (var j = 0; j < props.length; j++) {\n wrapProp(props[j], xhr);\n }\n\n if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n fill(\n xhr,\n 'onreadystatechange',\n function(orig) {\n return self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n function: 'onreadystatechange',\n handler: (orig && orig.name) || '<anonymous>'\n }\n }\n },\n orig,\n onreadystatechangeHandler\n );\n } /* intentionally don't track this instrumentation */\n );\n } else {\n // if onreadystatechange wasn't actually set by the page on this xhr, we\n // are free to set our own and capture the breadcrumb\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n\n return origSend.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n }\n\n if (autoBreadcrumbs.xhr && supportsFetch()) {\n fill(\n _window,\n 'fetch',\n function(origFetch) {\n return function() {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n\n var fetchInput = args[0];\n var method = 'GET';\n var url;\n\n if (typeof fetchInput === 'string') {\n url = fetchInput;\n } else if ('Request' in _window && fetchInput instanceof _window.Request) {\n url = fetchInput.url;\n if (fetchInput.method) {\n method = fetchInput.method;\n }\n } else {\n url = '' + fetchInput;\n }\n\n // if Sentry key appears in URL, don't capture, as it's our own request\n if (url.indexOf(self._globalKey) !== -1) {\n return origFetch.apply(this, args);\n }\n\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n\n var fetchData = {\n method: method,\n url: url,\n status_code: null\n };\n\n return origFetch\n .apply(this, args)\n .then(function(response) {\n fetchData.status_code = response.status;\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData\n });\n\n return response;\n })\n ['catch'](function(err) {\n // if there is an error performing the request\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData,\n level: 'error'\n });\n\n throw err;\n });\n };\n },\n wrappedBuiltIns\n );\n }\n\n // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n // to the document. Do this before we instrument addEventListener.\n if (autoBreadcrumbs.dom && this._hasDocument) {\n if (_document.addEventListener) {\n _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);\n _document.addEventListener('keypress', self._keypressEventHandler(), false);\n } else if (_document.attachEvent) {\n // IE8 Compatibility\n _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));\n _document.attachEvent('onkeypress', self._keypressEventHandler());\n }\n }\n\n // record navigation (URL) changes\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n var chrome = _window.chrome;\n var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n var hasPushAndReplaceState =\n !isChromePackagedApp &&\n _window.history &&\n _window.history.pushState &&\n _window.history.replaceState;\n if (autoBreadcrumbs.location && hasPushAndReplaceState) {\n // TODO: remove onpopstate handler on uninstall()\n var oldOnPopState = _window.onpopstate;\n _window.onpopstate = function() {\n var currentHref = self._location.href;\n self._captureUrlChange(self._lastHref, currentHref);\n\n if (oldOnPopState) {\n return oldOnPopState.apply(this, arguments);\n }\n };\n\n var historyReplacementFunction = function(origHistFunction) {\n // note history.pushState.length is 0; intentionally not declaring\n // params to preserve 0 arity\n return function(/* state, title, url */) {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n\n // url argument is optional\n if (url) {\n // coerce to string (this is what pushState does)\n self._captureUrlChange(self._lastHref, url + '');\n }\n\n return origHistFunction.apply(this, arguments);\n };\n };\n\n fill(_window.history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(_window.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n }\n\n if (autoBreadcrumbs.console && 'console' in _window && console.log) {\n // console\n var consoleMethodCallback = function(msg, data) {\n self.captureBreadcrumb({\n message: msg,\n level: data.level,\n category: 'console'\n });\n };\n\n each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {\n wrapConsoleMethod(console, level, consoleMethodCallback);\n });\n }\n },\n\n _restoreBuiltIns: function() {\n // restore any wrapped builtins\n var builtin;\n while (this._wrappedBuiltIns.length) {\n builtin = this._wrappedBuiltIns.shift();\n\n var obj = builtin[0],\n name = builtin[1],\n orig = builtin[2];\n\n obj[name] = orig;\n }\n },\n\n _restoreConsole: function() {\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsoleMethods) {\n this._originalConsole[method] = this._originalConsoleMethods[method];\n }\n },\n\n _drainPlugins: function() {\n var self = this;\n\n // FIX ME TODO\n each(this._plugins, function(_, plugin) {\n var installer = plugin[0];\n var args = plugin[1];\n installer.apply(self, [self].concat(args));\n });\n },\n\n _parseDSN: function(str) {\n var m = dsnPattern.exec(str),\n dsn = {},\n i = 7;\n\n try {\n while (i--) dsn[dsnKeys[i]] = m[i] || '';\n } catch (e) {\n throw new RavenConfigError('Invalid DSN: ' + str);\n }\n\n if (dsn.pass && !this._globalOptions.allowSecretKey) {\n throw new RavenConfigError(\n 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'\n );\n }\n\n return dsn;\n },\n\n _getGlobalServer: function(uri) {\n // assemble the endpoint from the uri pieces\n var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n\n if (uri.protocol) {\n globalServer = uri.protocol + ':' + globalServer;\n }\n return globalServer;\n },\n\n _handleOnErrorStackInfo: function(stackInfo, options) {\n options = options || {};\n options.mechanism = options.mechanism || {\n type: 'onerror',\n handled: false\n };\n\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo(stackInfo, options);\n }\n },\n\n _handleStackInfo: function(stackInfo, options) {\n var frames = this._prepareFrames(stackInfo, options);\n\n this._triggerEvent('handle', {\n stackInfo: stackInfo,\n options: options\n });\n\n this._processException(\n stackInfo.name,\n stackInfo.message,\n stackInfo.url,\n stackInfo.lineno,\n frames,\n options\n );\n },\n\n _prepareFrames: function(stackInfo, options) {\n var self = this;\n var frames = [];\n if (stackInfo.stack && stackInfo.stack.length) {\n each(stackInfo.stack, function(i, stack) {\n var frame = self._normalizeFrame(stack, stackInfo.url);\n if (frame) {\n frames.push(frame);\n }\n });\n\n // e.g. frames captured via captureMessage throw\n if (options && options.trimHeadFrames) {\n for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {\n frames[j].in_app = false;\n }\n }\n }\n frames = frames.slice(0, this._globalOptions.stackTraceLimit);\n return frames;\n },\n\n _normalizeFrame: function(frame, stackInfoUrl) {\n // normalize the frames data\n var normalized = {\n filename: frame.url,\n lineno: frame.line,\n colno: frame.column,\n function: frame.func || '?'\n };\n\n // Case when we don't have any information about the error\n // E.g. throwing a string or raw object, instead of an `Error` in Firefox\n // Generating synthetic error doesn't add any value here\n //\n // We should probably somehow let a user know that they should fix their code\n if (!frame.url) {\n normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler\n }\n\n normalized.in_app = !// determine if an exception came from outside of our app\n // first we check the global includePaths list.\n (\n (!!this._globalOptions.includePaths.test &&\n !this._globalOptions.includePaths.test(normalized.filename)) ||\n // Now we check for fun, if the function name is Raven or TraceKit\n /(Raven|TraceKit)\\./.test(normalized['function']) ||\n // finally, we do a last ditch effort and check for raven.min.js\n /raven\\.(min\\.)?js$/.test(normalized.filename)\n );\n\n return normalized;\n },\n\n _processException: function(type, message, fileurl, lineno, frames, options) {\n var prefixedMessage = (type ? type + ': ' : '') + (message || '');\n if (\n !!this._globalOptions.ignoreErrors.test &&\n (this._globalOptions.ignoreErrors.test(message) ||\n this._globalOptions.ignoreErrors.test(prefixedMessage))\n ) {\n return;\n }\n\n var stacktrace;\n\n if (frames && frames.length) {\n fileurl = frames[0].filename || fileurl;\n // Sentry expects frames oldest to newest\n // and JS sends them as newest to oldest\n frames.reverse();\n stacktrace = {frames: frames};\n } else if (fileurl) {\n stacktrace = {\n frames: [\n {\n filename: fileurl,\n lineno: lineno,\n in_app: true\n }\n ]\n };\n }\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n var data = objectMerge(\n {\n // sentry.interfaces.Exception\n exception: {\n values: [\n {\n type: type,\n value: message,\n stacktrace: stacktrace\n }\n ]\n },\n transaction: fileurl\n },\n options\n );\n\n var ex = data.exception.values[0];\n if (ex.type == null && ex.value === '') {\n ex.value = 'Unrecoverable error caught';\n }\n\n // Move mechanism from options to exception interface\n // We do this, as requiring user to pass `{exception:{mechanism:{ ... }}}` would be\n // too much\n if (!data.exception.mechanism && data.mechanism) {\n data.exception.mechanism = data.mechanism;\n delete data.mechanism;\n }\n\n data.exception.mechanism = objectMerge(\n {\n type: 'generic',\n handled: true\n },\n data.exception.mechanism || {}\n );\n\n // Fire away!\n this._send(data);\n },\n\n _trimPacket: function(data) {\n // For now, we only want to truncate the two different messages\n // but this could/should be expanded to just trim everything\n var max = this._globalOptions.maxMessageLength;\n if (data.message) {\n data.message = truncate(data.message, max);\n }\n if (data.exception) {\n var exception = data.exception.values[0];\n exception.value = truncate(exception.value, max);\n }\n\n var request = data.request;\n if (request) {\n if (request.url) {\n request.url = truncate(request.url, this._globalOptions.maxUrlLength);\n }\n if (request.Referer) {\n request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);\n }\n }\n\n if (data.breadcrumbs && data.breadcrumbs.values)\n this._trimBreadcrumbs(data.breadcrumbs);\n\n return data;\n },\n\n /**\n * Truncate breadcrumb values (right now just URLs)\n */\n _trimBreadcrumbs: function(breadcrumbs) {\n // known breadcrumb properties with urls\n // TODO: also consider arbitrary prop values that start with (https?)?://\n var urlProps = ['to', 'from', 'url'],\n urlProp,\n crumb,\n data;\n\n for (var i = 0; i < breadcrumbs.values.length; ++i) {\n crumb = breadcrumbs.values[i];\n if (\n !crumb.hasOwnProperty('data') ||\n !isObject(crumb.data) ||\n objectFrozen(crumb.data)\n )\n continue;\n\n data = objectMerge({}, crumb.data);\n for (var j = 0; j < urlProps.length; ++j) {\n urlProp = urlProps[j];\n if (data.hasOwnProperty(urlProp) && data[urlProp]) {\n data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);\n }\n }\n breadcrumbs.values[i].data = data;\n }\n },\n\n _getHttpData: function() {\n if (!this._hasNavigator && !this._hasDocument) return;\n var httpData = {};\n\n if (this._hasNavigator && _navigator.userAgent) {\n httpData.headers = {\n 'User-Agent': _navigator.userAgent\n };\n }\n\n // Check in `window` instead of `document`, as we may be in ServiceWorker environment\n if (_window.location && _window.location.href) {\n httpData.url = _window.location.href;\n }\n\n if (this._hasDocument && _document.referrer) {\n if (!httpData.headers) httpData.headers = {};\n httpData.headers.Referer = _document.referrer;\n }\n\n return httpData;\n },\n\n _resetBackoff: function() {\n this._backoffDuration = 0;\n this._backoffStart = null;\n },\n\n _shouldBackoff: function() {\n return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n },\n\n /**\n * Returns true if the in-process data payload matches the signature\n * of the previously-sent data\n *\n * NOTE: This has to be done at this level because TraceKit can generate\n * data from window.onerror WITHOUT an exception object (IE8, IE9,\n * other old browsers). This can take the form of an \"exception\"\n * data object with a single frame (derived from the onerror args).\n */\n _isRepeatData: function(current) {\n var last = this._lastData;\n\n if (\n !last ||\n current.message !== last.message || // defined for captureMessage\n current.transaction !== last.transaction // defined for captureException/onerror\n )\n return false;\n\n // Stacktrace interface (i.e. from captureMessage)\n if (current.stacktrace || last.stacktrace) {\n return isSameStacktrace(current.stacktrace, last.stacktrace);\n } else if (current.exception || last.exception) {\n // Exception interface (i.e. from captureException/onerror)\n return isSameException(current.exception, last.exception);\n }\n\n return true;\n },\n\n _setBackoffState: function(request) {\n // If we are already in a backoff state, don't change anything\n if (this._shouldBackoff()) {\n return;\n }\n\n var status = request.status;\n\n // 400 - project_id doesn't exist or some other fatal\n // 401 - invalid/revoked dsn\n // 429 - too many requests\n if (!(status === 400 || status === 401 || status === 429)) return;\n\n var retry;\n try {\n // If Retry-After is not in Access-Control-Expose-Headers, most\n // browsers will throw an exception trying to access it\n if (supportsFetch()) {\n retry = request.headers.get('Retry-After');\n } else {\n retry = request.getResponseHeader('Retry-After');\n }\n\n // Retry-After is returned in seconds\n retry = parseInt(retry, 10) * 1000;\n } catch (e) {\n /* eslint no-empty:0 */\n }\n\n this._backoffDuration = retry\n ? // If Sentry server returned a Retry-After value, use it\n retry\n : // Otherwise, double the last backoff duration (starts at 1 sec)\n this._backoffDuration * 2 || 1000;\n\n this._backoffStart = now();\n },\n\n _send: function(data) {\n var globalOptions = this._globalOptions;\n\n var baseData = {\n project: this._globalProject,\n logger: globalOptions.logger,\n platform: 'javascript'\n },\n httpData = this._getHttpData();\n\n if (httpData) {\n baseData.request = httpData;\n }\n\n // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload\n if (data.trimHeadFrames) delete data.trimHeadFrames;\n\n data = objectMerge(baseData, data);\n\n // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge\n data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);\n data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);\n\n // Send along our own collected metadata with extra\n data.extra['session:duration'] = now() - this._startTime;\n\n if (this._breadcrumbs && this._breadcrumbs.length > 0) {\n // intentionally make shallow copy so that additions\n // to breadcrumbs aren't accidentally sent in this request\n data.breadcrumbs = {\n values: [].slice.call(this._breadcrumbs, 0)\n };\n }\n\n if (this._globalContext.user) {\n // sentry.interfaces.User\n data.user = this._globalContext.user;\n }\n\n // Include the environment if it's defined in globalOptions\n if (globalOptions.environment) data.environment = globalOptions.environment;\n\n // Include the release if it's defined in globalOptions\n if (globalOptions.release) data.release = globalOptions.release;\n\n // Include server_name if it's defined in globalOptions\n if (globalOptions.serverName) data.server_name = globalOptions.serverName;\n\n data = this._sanitizeData(data);\n\n // Cleanup empty properties before sending them to the server\n Object.keys(data).forEach(function(key) {\n if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {\n delete data[key];\n }\n });\n\n if (isFunction(globalOptions.dataCallback)) {\n data = globalOptions.dataCallback(data) || data;\n }\n\n // Why??????????\n if (!data || isEmptyObject(data)) {\n return;\n }\n\n // Check if the request should be filtered or not\n if (\n isFunction(globalOptions.shouldSendCallback) &&\n !globalOptions.shouldSendCallback(data)\n ) {\n return;\n }\n\n // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),\n // so drop requests until \"cool-off\" period has elapsed.\n if (this._shouldBackoff()) {\n this._logDebug('warn', 'Raven dropped error due to backoff: ', data);\n return;\n }\n\n if (typeof globalOptions.sampleRate === 'number') {\n if (Math.random() < globalOptions.sampleRate) {\n this._sendProcessedPayload(data);\n }\n } else {\n this._sendProcessedPayload(data);\n }\n },\n\n _sanitizeData: function(data) {\n return sanitize(data, this._globalOptions.sanitizeKeys);\n },\n\n _getUuid: function() {\n return uuid4();\n },\n\n _sendProcessedPayload: function(data, callback) {\n var self = this;\n var globalOptions = this._globalOptions;\n\n if (!this.isSetup()) return;\n\n // Try and clean up the packet before sending by truncating long values\n data = this._trimPacket(data);\n\n // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,\n // but this would require copying an un-truncated copy of the data packet, which can be\n // arbitrarily deep (extra_data) -- could be worthwhile? will revisit\n if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {\n this._logDebug('warn', 'Raven dropped repeat event: ', data);\n return;\n }\n\n // Send along an event_id if not explicitly passed.\n // This event_id can be used to reference the error within Sentry itself.\n // Set lastEventId after we know the error should actually be sent\n this._lastEventId = data.event_id || (data.event_id = this._getUuid());\n\n // Store outbound payload after trim\n this._lastData = data;\n\n this._logDebug('debug', 'Raven about to send:', data);\n\n var auth = {\n sentry_version: '7',\n sentry_client: 'raven-js/' + this.VERSION,\n sentry_key: this._globalKey\n };\n\n if (this._globalSecret) {\n auth.sentry_secret = this._globalSecret;\n }\n\n var exception = data.exception && data.exception.values[0];\n\n // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy\n if (\n this._globalOptions.autoBreadcrumbs &&\n this._globalOptions.autoBreadcrumbs.sentry\n ) {\n this.captureBreadcrumb({\n category: 'sentry',\n message: exception\n ? (exception.type ? exception.type + ': ' : '') + exception.value\n : data.message,\n event_id: data.event_id,\n level: data.level || 'error' // presume error unless specified\n });\n }\n\n var url = this._globalEndpoint;\n (globalOptions.transport || this._makeRequest).call(this, {\n url: url,\n auth: auth,\n data: data,\n options: globalOptions,\n onSuccess: function success() {\n self._resetBackoff();\n\n self._triggerEvent('success', {\n data: data,\n src: url\n });\n callback && callback();\n },\n onError: function failure(error) {\n self._logDebug('error', 'Raven transport failed to send: ', error);\n\n if (error.request) {\n self._setBackoffState(error.request);\n }\n\n self._triggerEvent('failure', {\n data: data,\n src: url\n });\n error = error || new Error('Raven send failed (no additional details provided)');\n callback && callback(error);\n }\n });\n },\n\n _makeRequest: function(opts) {\n // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests\n var url = opts.url + '?' + urlencode(opts.auth);\n\n var evaluatedHeaders = null;\n var evaluatedFetchParameters = {};\n\n if (opts.options.headers) {\n evaluatedHeaders = this._evaluateHash(opts.options.headers);\n }\n\n if (opts.options.fetchParameters) {\n evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);\n }\n\n if (supportsFetch()) {\n evaluatedFetchParameters.body = stringify(opts.data);\n\n var defaultFetchOptions = objectMerge({}, this._fetchDefaults);\n var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);\n\n if (evaluatedHeaders) {\n fetchOptions.headers = evaluatedHeaders;\n }\n\n return _window\n .fetch(url, fetchOptions)\n .then(function(response) {\n if (response.ok) {\n opts.onSuccess && opts.onSuccess();\n } else {\n var error = new Error('Sentry error code: ' + response.status);\n // It's called request only to keep compatibility with XHR interface\n // and not add more redundant checks in setBackoffState method\n error.request = response;\n opts.onError && opts.onError(error);\n }\n })\n ['catch'](function() {\n opts.onError &&\n opts.onError(new Error('Sentry error code: network unavailable'));\n });\n }\n\n var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();\n if (!request) return;\n\n // if browser doesn't support CORS (e.g. IE7), we are out of luck\n var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';\n\n if (!hasCORS) return;\n\n if ('withCredentials' in request) {\n request.onreadystatechange = function() {\n if (request.readyState !== 4) {\n return;\n } else if (request.status === 200) {\n opts.onSuccess && opts.onSuccess();\n } else if (opts.onError) {\n var err = new Error('Sentry error code: ' + request.status);\n err.request = request;\n opts.onError(err);\n }\n };\n } else {\n request = new XDomainRequest();\n // xdomainrequest cannot go http -> https (or vice versa),\n // so always use protocol relative\n url = url.replace(/^https?:/, '');\n\n // onreadystatechange not supported by XDomainRequest\n if (opts.onSuccess) {\n request.onload = opts.onSuccess;\n }\n if (opts.onError) {\n request.onerror = function() {\n var err = new Error('Sentry error code: XDomainRequest');\n err.request = request;\n opts.onError(err);\n };\n }\n }\n\n request.open('POST', url);\n\n if (evaluatedHeaders) {\n each(evaluatedHeaders, function(key, value) {\n request.setRequestHeader(key, value);\n });\n }\n\n request.send(stringify(opts.data));\n },\n\n _evaluateHash: function(hash) {\n var evaluated = {};\n\n for (var key in hash) {\n if (hash.hasOwnProperty(key)) {\n var value = hash[key];\n evaluated[key] = typeof value === 'function' ? value() : value;\n }\n }\n\n return evaluated;\n },\n\n _logDebug: function(level) {\n // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change\n if (\n this._originalConsoleMethods[level] &&\n (this.debug || this._globalOptions.debug)\n ) {\n // In IE<10 console methods do not have their own 'apply' method\n Function.prototype.apply.call(\n this._originalConsoleMethods[level],\n this._originalConsole,\n [].slice.call(arguments, 1)\n );\n }\n },\n\n _mergeContext: function(key, context) {\n if (isUndefined(context)) {\n delete this._globalContext[key];\n } else {\n this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);\n }\n }\n};\n\n// Deprecations\nRaven.prototype.setUser = Raven.prototype.setUserContext;\nRaven.prototype.setReleaseContext = Raven.prototype.setRelease;\n\nmodule.exports = Raven;\n","/**\n * Enforces a single instance of the Raven client, and the\n * main entry point for Raven. If you are a consumer of the\n * Raven library, you SHOULD load this file (vs raven.js).\n **/\n\nvar RavenConstructor = require('./raven');\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\n\nvar Raven = new RavenConstructor();\n\n/*\n * Allow multiple versions of Raven to be installed.\n * Strip Raven from the global context and returns the instance.\n *\n * @return {Raven}\n */\nRaven.noConflict = function() {\n _window.Raven = _Raven;\n return Raven;\n};\n\nRaven.afterLoad();\n\nmodule.exports = Raven;\n\n/**\n * DISCLAIMER:\n *\n * Expose `Client` constructor for cases where user want to track multiple \"sub-applications\" in one larger app.\n * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.\n * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.\n *\n * It's called `Client' to be in-line with Raven Node implementation.\n *\n * HOWTO:\n *\n * import Raven from 'raven-js';\n *\n * const someAppReporter = new Raven.Client();\n * const someOtherAppReporter = new Raven.Client();\n *\n * someAppReporter.config('__DSN__', {\n * ...config goes here\n * });\n *\n * someOtherAppReporter.config('__OTHER_DSN__', {\n * ...config goes here\n * });\n *\n * someAppReporter.captureMessage(...);\n * someAppReporter.captureException(...);\n * someAppReporter.captureBreadcrumb(...);\n *\n * someOtherAppReporter.captureMessage(...);\n * someOtherAppReporter.captureException(...);\n * someOtherAppReporter.captureBreadcrumb(...);\n *\n * It should \"just work\".\n */\nmodule.exports.Client = RavenConstructor;\n","// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\nimport Raven from 'raven-js';\n\n(() => {\n const isLive = window.location.host === 'plyr.io';\n\n // Raven / Sentry\n // For demo site (https://plyr.io) only\n if (isLive) {\n Raven.config(\n 'https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555',\n ).install();\n }\n\n document.addEventListener('DOMContentLoaded', () => {\n Raven.context(() => {\n const selector = '#player';\n const container = document.getElementById('container');\n\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n if (container.contains(event.target)) {\n return;\n }\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n const focused = document.activeElement;\n\n if (!focused || container.contains(focused)) {\n return;\n }\n\n focused.classList.add(tabClassName);\n }, 10);\n });\n\n // Setup the player\n const player = new Plyr(selector, {\n debug: true,\n title: 'View From A Blue Moon',\n iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: false,\n seek: false,\n },\n // clickToPlay: false,\n /* controls: [\n 'play-large',\n 'restart',\n 'rewind',\n 'play',\n 'fast-forward',\n 'progress',\n 'current-time',\n 'duration',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ], */\n /* i18n: {\n restart: '重新開始',\n rewind: '快退{seektime}秒',\n play: '播放',\n pause: '暫停',\n fastForward: '快進{seektime}秒',\n seek: '尋求',\n played: '發揮',\n buffered: '緩衝的',\n currentTime: '當前時間戳',\n duration: '長短',\n volume: '音量',\n mute: '靜音',\n unmute: '取消靜音',\n enableCaptions: '開啟字幕',\n disableCaptions: '關閉字幕',\n enterFullscreen: '進入全螢幕',\n exitFullscreen: '退出全螢幕',\n frameTitle: '球員為{title}',\n captions: '字幕',\n settings: '設定',\n speed: '速度',\n normal: '正常',\n quality: '質量',\n loop: '循環',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: '重啟',\n disabled: '殘',\n enabled: '啟用',\n advertisement: '廣告',\n }, */\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n // enabled: true,\n publisherId: '918848828995742',\n },\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (\n !(type in types) ||\n (!init && type === currentType) ||\n (!currentType.length && type === types.video)\n ) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [\n {\n src:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-576p.mp4',\n type: 'video/mp4',\n size: 576,\n },\n {\n src:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-720p.mp4',\n type: 'video/mp4',\n size: 720,\n },\n {\n src:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1080p.mp4',\n type: 'video/mp4',\n size: 1080,\n },\n {\n src:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1440p.mp4',\n type: 'video/mp4',\n size: 1440,\n },\n ],\n poster:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src:\n 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title:\n 'Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;',\n sources: [\n {\n src:\n 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src:\n 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n sources: [\n {\n src:\n 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n },\n ],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [\n {\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n },\n ],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button =>\n toggleClass(button.parentElement, 'active', false),\n );\n\n // Set active on parent\n toggleClass(\n document.querySelector(`[data-source=\"${type}\"]`),\n 'active',\n true,\n );\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(\n cite => {\n cite.setAttribute('hidden', '');\n },\n );\n document\n .querySelector(`.plyr__cite--${type}`)\n .removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n });\n });\n\n // Google analytics\n // For demo site (https://plyr.io) only\n /* eslint-disable */\n if (isLive) {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(\n window,\n document,\n 'script',\n 'https://www.google-analytics.com/analytics.js',\n 'ga',\n );\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n }\n /* eslint-enable */\n})();\n"]} \ No newline at end of file
diff --git a/demo/src/js/demo.js b/demo/src/js/demo.js
index 8892bad8..ec18afaa 100644
--- a/demo/src/js/demo.js
+++ b/demo/src/js/demo.js
@@ -69,9 +69,10 @@ import Raven from 'raven-js';
global: true,
},
tooltips: {
- controls: true,
+ controls: false,
+ seek: false,
},
- clickToPlay: false,
+ // clickToPlay: false,
/* controls: [
'play-large',
'restart',
@@ -129,7 +130,7 @@ import Raven from 'raven-js';
google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',
},
ads: {
- enabled: true,
+ // enabled: true,
publisherId: '918848828995742',
},
});
diff --git a/dist/plyr.css b/dist/plyr.css
index 7f358530..d88d03f1 100644
--- a/dist/plyr.css
+++ b/dist/plyr.css
@@ -1 +1 @@
-@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;direction:ltr;font-family:Avenir,"Avenir Next","Helvetica Neue","Segoe UI",Helvetica,Arial,sans-serif;font-variant-numeric:tabular-nums;font-weight:500;line-height:1.7;max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease}.plyr audio,.plyr video{border-radius:inherit;height:auto;vertical-align:middle;width:100%}.plyr button{font:inherit;line-height:inherit;width:auto}.plyr:focus{outline:0}.plyr--full-ui{box-sizing:border-box}.plyr--full-ui *,.plyr--full-ui ::after,.plyr--full-ui ::before{box-sizing:inherit}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4f5b5f;border-radius:2px;color:#fff;font-size:9px;line-height:1;padding:3px 4px}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{animation:plyr-fade-in .3s ease;bottom:0;color:#fff;display:none;font-size:14px;left:0;padding:10px;position:absolute;text-align:center;transform:translateY(-40px);transition:transform .4s ease-in-out;width:100%}.plyr__captions .plyr__caption{background:rgba(0,0,0,.8);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__captions .plyr__caption div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:16px;padding:20px}}@media (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr__control{background:0 0;border:0;border-radius:3px;color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;pointer-events:none;width:18px}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}.plyr__control.plyr__control--pressed .icon--not-pressed,.plyr__control.plyr__control--pressed .label--not-pressed,.plyr__control:not(.plyr__control--pressed) .icon--pressed,.plyr__control:not(.plyr__control--pressed) .label--pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;display:none;left:50%;padding:15px;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:2}.plyr__control--overlaid svg{height:20px;left:2px;position:relative;width:20px}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;justify-content:flex-end;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0;margin-right:auto}.plyr__controls .plyr__volume{margin-left:5px}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--video .plyr__controls{background:linear-gradient(transparent,rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;left:0;padding:35px 10px 10px;position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:2}.plyr--video .plyr__controls .plyr__control svg{-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__controls .plyr__control.plyr__tab-focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{background:#fff;border-radius:inherit;color:#4f5b5f;padding:10px}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__video-embed{height:0;padding-bottom:56.25%;position:relative}.plyr__video-embed iframe{border:0;height:100%;left:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr--full-ui .plyr__video-embed>.plyr__video-embed__container{padding-bottom:240%;position:relative;transform:translateY(-38.28125%)}.plyr__menu{display:flex;position:relative}.plyr__menu .plyr__control svg{transition:transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{animation:plyr-popup .2s ease;background:rgba(255,255,255,.9);border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:16px;margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:3}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container::after{border:4px solid transparent;border-top-color:rgba(255,255,255,.9);content:'';height:0;position:absolute;right:15px;top:100%;width:0}.plyr__menu__container [role=menu]{padding:7px}.plyr__menu__container [role=menuitem],.plyr__menu__container [role=menuitemradio]{margin-top:2px}.plyr__menu__container [role=menuitem]:first-child,.plyr__menu__container [role=menuitemradio]:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4f5b5f;display:flex;font-size:14px;padding:4px 11px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control>span{align-items:inherit;display:flex;width:100%}.plyr__menu__container .plyr__control::after{border:4px solid transparent;content:'';position:absolute;top:50%;transform:translateY(-50%)}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{border-left-color:rgba(79,91,95,.8);right:5px}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:500;margin:7px;margin-bottom:3px;padding-left:28px;position:relative;width:calc(100% - 14px)}.plyr__menu__container .plyr__control--back::after{border-right-color:rgba(79,91,95,.8);left:7px}.plyr__menu__container .plyr__control--back::before{background:#b7c5cd;box-shadow:0 1px 0 #fff;content:'';height:1px;left:0;margin-top:4px;overflow:hidden;position:absolute;right:0;top:100%}.plyr__menu__container .plyr__control--back.plyr__tab-focus::after,.plyr__menu__container .plyr__control--back:hover::after{border-right-color:currentColor}.plyr__menu__container .plyr__control[role=menuitemradio]{padding-left:7px}.plyr__menu__container .plyr__control[role=menuitemradio]::after,.plyr__menu__container .plyr__control[role=menuitemradio]::before{border-radius:100%}.plyr__menu__container .plyr__control[role=menuitemradio]::before{background:rgba(0,0,0,.1);content:'';display:block;flex-shrink:0;height:16px;margin-right:10px;transition:all .3s ease;width:16px}.plyr__menu__container .plyr__control[role=menuitemradio]::after{background:#fff;border:0;height:6px;left:12px;opacity:0;top:50%;transform:translateY(-50%) scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]::before{background:#1aafff}.plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]::after{opacity:1;transform:translateY(-50%) scale(1)}.plyr__menu__container .plyr__control[role=menuitemradio].plyr__tab-focus::before,.plyr__menu__container .plyr__control[role=menuitemradio]:hover::before{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:-5px;overflow:hidden;padding-left:25px;pointer-events:none}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:28px;color:#1aafff;display:block;height:20px;margin:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:3px;height:6px;-webkit-user-select:none;user-select:none;background-image:linear-gradient(to right,currentColor var(--value,0),transparent var(--value,0))}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;-webkit-appearance:none;margin-top:-4px}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:3px;height:6px;-moz-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:3px;height:6px}.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:3px;height:6px;-ms-user-select:none;user-select:none;color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper{background:0 0;border:0;border-radius:3px;height:6px;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:3px;height:6px;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;margin-top:0}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr__poster{background-color:#000;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .3s ease;width:100%;z-index:1}.plyr--stopped.plyr__poster-enabled .plyr__poster{opacity:1;pointer-events:none}.plyr__time{font-size:14px}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{background:rgba(255,255,255,.9);border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:14px;font-weight:500;line-height:1.3;margin-bottom:10px;opacity:0;padding:5px 7.5px;pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease;white-space:nowrap;z-index:2}.plyr__tooltip::before{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);bottom:-4px;content:'';height:0;left:50%;position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;border-radius:inherit;overflow:hidden;position:relative;z-index:0}.plyr__progress{display:flex;flex:1;left:7px;margin-right:14px;position:relative}.plyr__progress input[type=range],.plyr__progress__buffer{margin-left:-7px;margin-right:-7px;width:calc(100% + 14px)}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{font-size:14px;left:0}.plyr__progress__buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:6px;left:0;margin-top:-3px;padding:0;position:absolute;top:50%}.plyr__progress__buffer::-webkit-progress-bar{background:0 0;transition:width .2s ease}.plyr__progress__buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:6px}.plyr__progress__buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:6px;transition:width .2s ease}.plyr__progress__buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress__buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress__buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress__buffer{animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(47,52,61,.6) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.6) 50%,rgba(47,52,61,.6) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;color:transparent}.plyr--video.plyr--loading .plyr__progress__buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress__buffer{background-color:rgba(183,197,205,.66)}.plyr__volume{flex:1;position:relative}.plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr__volume{max-width:50px}}@media (min-width:768px){.plyr__volume{max-width:80px}}.plyr--is-ios .plyr__volume{display:none!important}.plyr--is-ios.plyr--vimeo [data-plyr=mute]{display:none!important}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:fullscreen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-moz-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size:21px}}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-moz-full-screen .plyr__captions{font-size:21px}}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-ms-fullscreen .plyr__captions{font-size:21px}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;bottom:0;left:0;position:fixed;right:0;top:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback .plyr__video-embed{overflow:visible}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr--fullscreen-fallback.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px}}.plyr__ads{border-radius:inherit;bottom:0;cursor:pointer;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:-1}.plyr__ads>div,.plyr__ads>div iframe{height:100%;position:absolute;width:100%}.plyr__ads::after{background:rgba(47,52,61,.8);border-radius:2px;bottom:10px;color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;z-index:3}.plyr__ads::after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:6px;left:0;margin:-3px 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr--no-transition{transition:none!important}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important}.plyr [hidden]{display:none!important} \ No newline at end of file
+@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;direction:ltr;font-family:Avenir,"Avenir Next","Helvetica Neue","Segoe UI",Helvetica,Arial,sans-serif;font-variant-numeric:tabular-nums;font-weight:500;line-height:1.7;max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease}.plyr audio,.plyr video{border-radius:inherit;height:auto;vertical-align:middle;width:100%}.plyr button{font:inherit;line-height:inherit;width:auto}.plyr:focus{outline:0}.plyr--full-ui{box-sizing:border-box}.plyr--full-ui *,.plyr--full-ui ::after,.plyr--full-ui ::before{box-sizing:inherit}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4f5b5f;border-radius:2px;color:#fff;font-size:9px;line-height:1;padding:3px 4px}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{animation:plyr-fade-in .3s ease;bottom:0;color:#fff;display:none;font-size:14px;left:0;padding:10px;position:absolute;text-align:center;transform:translateY(-40px);transition:transform .4s ease-in-out;width:100%}.plyr__captions .plyr__caption{background:rgba(0,0,0,.8);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__captions .plyr__caption div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:16px;padding:20px}}@media (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr__control{background:0 0;border:0;border-radius:3px;color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;pointer-events:none;width:18px}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}.plyr__control.plyr__control--pressed .icon--not-pressed,.plyr__control.plyr__control--pressed .label--not-pressed,.plyr__control:not(.plyr__control--pressed) .icon--pressed,.plyr__control:not(.plyr__control--pressed) .label--pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;display:none;left:50%;padding:15px;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:2}.plyr__control--overlaid svg{height:20px;left:2px;position:relative;width:20px}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;justify-content:flex-end;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0;margin-right:auto}.plyr__controls .plyr__volume{margin-left:5px}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--video .plyr__controls{background:linear-gradient(transparent,rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;left:0;padding:35px 10px 10px;position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:2}.plyr--video .plyr__controls .plyr__control svg{-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__controls .plyr__control.plyr__tab-focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{background:#fff;border-radius:inherit;color:#4f5b5f;padding:10px}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__video-embed{height:0;padding-bottom:56.25%;position:relative}.plyr__video-embed iframe{border:0;height:100%;left:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr--full-ui .plyr__video-embed>.plyr__video-embed__container{padding-bottom:240%;position:relative;transform:translateY(-38.28125%)}.plyr__menu{display:flex;position:relative}.plyr__menu .plyr__control svg{transition:transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{animation:plyr-popup .2s ease;background:rgba(255,255,255,.9);border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:16px;margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:3}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container::after{border:4px solid transparent;border-top-color:rgba(255,255,255,.9);content:'';height:0;position:absolute;right:15px;top:100%;width:0}.plyr__menu__container [role=menu]{padding:7px}.plyr__menu__container [role=menuitem],.plyr__menu__container [role=menuitemradio]{margin-top:2px}.plyr__menu__container [role=menuitem]:first-child,.plyr__menu__container [role=menuitemradio]:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4f5b5f;display:flex;font-size:14px;padding:4px 11px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control>span{align-items:inherit;display:flex;width:100%}.plyr__menu__container .plyr__control::after{border:4px solid transparent;content:'';position:absolute;top:50%;transform:translateY(-50%)}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{border-left-color:rgba(79,91,95,.8);right:5px}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:500;margin:7px;margin-bottom:3px;padding-left:28px;position:relative;width:calc(100% - 14px)}.plyr__menu__container .plyr__control--back::after{border-right-color:rgba(79,91,95,.8);left:7px}.plyr__menu__container .plyr__control--back::before{background:#b7c5cd;box-shadow:0 1px 0 #fff;content:'';height:1px;left:0;margin-top:4px;overflow:hidden;position:absolute;right:0;top:100%}.plyr__menu__container .plyr__control--back.plyr__tab-focus::after,.plyr__menu__container .plyr__control--back:hover::after{border-right-color:currentColor}.plyr__menu__container .plyr__control[role=menuitemradio]{padding-left:7px}.plyr__menu__container .plyr__control[role=menuitemradio]::after,.plyr__menu__container .plyr__control[role=menuitemradio]::before{border-radius:100%}.plyr__menu__container .plyr__control[role=menuitemradio]::before{background:rgba(0,0,0,.1);content:'';display:block;flex-shrink:0;height:16px;margin-right:10px;transition:all .3s ease;width:16px}.plyr__menu__container .plyr__control[role=menuitemradio]::after{background:#fff;border:0;height:6px;left:12px;opacity:0;top:50%;transform:translateY(-50%) scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]::before{background:#1aafff}.plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]::after{opacity:1;transform:translateY(-50%) scale(1)}.plyr__menu__container .plyr__control[role=menuitemradio].plyr__tab-focus::before,.plyr__menu__container .plyr__control[role=menuitemradio]:hover::before{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:-5px;overflow:hidden;padding-left:25px;pointer-events:none}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:28px;color:#1aafff;display:block;height:20px;margin:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:3px;height:6px;-webkit-user-select:none;user-select:none;background-image:linear-gradient(to right,currentColor var(--value,0),transparent var(--value,0))}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);height:14px;position:relative;transition:all .2s ease;width:14px;-webkit-appearance:none;margin-top:-4px}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:3px;height:6px;-moz-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);height:14px;position:relative;transition:all .2s ease;width:14px}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:3px;height:6px}.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:3px;height:6px;-ms-user-select:none;user-select:none;color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper{background:0 0;border:0;border-radius:3px;height:6px;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:3px;height:6px;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);height:14px;position:relative;transition:all .2s ease;width:14px;margin-top:0}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr__poster{background-color:#000;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;display:none;height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;z-index:1}.plyr--stopped.plyr__poster-enabled .plyr__poster{display:block}.plyr__time{font-size:14px}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{background:rgba(255,255,255,.9);border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:14px;font-weight:500;line-height:1.3;margin-bottom:10px;opacity:0;padding:5px 7.5px;pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease;white-space:nowrap;z-index:2}.plyr__tooltip::before{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);bottom:-4px;content:'';height:0;left:50%;position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;border-radius:inherit;overflow:hidden;position:relative;z-index:0}.plyr__progress{flex:1;left:7px;margin-right:14px;position:relative}.plyr__progress input[type=range],.plyr__progress__buffer{margin-left:-7px;margin-right:-7px;width:calc(100% + 14px)}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{font-size:14px;left:0}.plyr__progress__buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:6px;left:0;margin-top:-3px;padding:0;position:absolute;top:50%}.plyr__progress__buffer::-webkit-progress-bar{background:0 0;transition:width .2s ease}.plyr__progress__buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:6px}.plyr__progress__buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:6px;transition:width .2s ease}.plyr__progress__buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress__buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress__buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress__buffer{animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(47,52,61,.6) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.6) 50%,rgba(47,52,61,.6) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;color:transparent}.plyr--video.plyr--loading .plyr__progress__buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress__buffer{background-color:rgba(183,197,205,.66)}.plyr__volume{flex:1;position:relative}.plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr__volume{max-width:50px}}@media (min-width:768px){.plyr__volume{max-width:80px}}.plyr--is-ios .plyr__volume{display:none!important}.plyr--is-ios.plyr--vimeo [data-plyr=mute]{display:none!important}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:fullscreen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-moz-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size:21px}}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-moz-full-screen .plyr__captions{font-size:21px}}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-ms-fullscreen .plyr__captions{font-size:21px}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;bottom:0;left:0;position:fixed;right:0;top:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback .plyr__video-embed{overflow:visible}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr--fullscreen-fallback.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px}}.plyr__ads{border-radius:inherit;bottom:0;cursor:pointer;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:-1}.plyr__ads>div,.plyr__ads>div iframe{height:100%;position:absolute;width:100%}.plyr__ads::after{background:rgba(47,52,61,.8);border-radius:2px;bottom:10px;color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;z-index:3}.plyr__ads::after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:6px;left:0;margin:-3px 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr--no-transition{transition:none!important}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important}.plyr [hidden]{display:none!important} \ No newline at end of file
diff --git a/dist/plyr.js b/dist/plyr.js
index 413e2d2f..10f2d300 100644
--- a/dist/plyr.js
+++ b/dist/plyr.js
@@ -671,9 +671,13 @@ typeof navigator === "object" && (function (global, factory) {
// Force repaint of element
function repaint(element) {
setTimeout(function () {
- toggleHidden(element, true);
- element.offsetHeight; // eslint-disable-line
- toggleHidden(element, false);
+ try {
+ toggleHidden(element, true);
+ element.offsetHeight; // eslint-disable-line
+ toggleHidden(element, false);
+ } catch (e) {
+ // Do nothing
+ }
}, 0);
}
@@ -1697,7 +1701,7 @@ typeof navigator === "object" && (function (global, factory) {
// Show the respective menu
if (!isRadioButton && [32, 39].includes(event.which)) {
- controls.showMenuPanel.call(_this, type);
+ controls.showMenuPanel.call(_this, type, true);
} else {
var target = void 0;
@@ -1804,7 +1808,7 @@ typeof navigator === "object" && (function (global, factory) {
break;
}
- controls.showMenuPanel.call(_this2, 'home');
+ controls.showMenuPanel.call(_this2, 'home', event.type === 'keydown');
}, type, false);
controls.bindMenuItemShortcuts.call(this, menuItem, type);
@@ -2473,6 +2477,7 @@ typeof navigator === "object" && (function (global, factory) {
var _this8 = this;
var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
+ var tabFocus = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var target = document.getElementById('plyr-settings-' + this.id + '-' + type);
@@ -2527,7 +2532,7 @@ typeof navigator === "object" && (function (global, factory) {
// Focus the first item
var firstItem = target.querySelector('[role^="menuitem"]');
- setFocus.call(this, firstItem, true);
+ setFocus.call(this, firstItem, tabFocus);
},
@@ -2687,7 +2692,7 @@ typeof navigator === "object" && (function (global, factory) {
// Show menu on click
on(menuItem, 'click', function () {
- controls.showMenuPanel.call(_this9, type);
+ controls.showMenuPanel.call(_this9, type, false);
});
var flex = createElement('span', null, i18n.get(type, _this9.config));
@@ -2737,12 +2742,12 @@ typeof navigator === "object" && (function (global, factory) {
event.stopPropagation();
// Show the respective menu
- controls.showMenuPanel.call(_this9, 'home');
+ controls.showMenuPanel.call(_this9, 'home', true);
}, false);
// Go back via button click
on(backButton, 'click', function () {
- controls.showMenuPanel.call(_this9, 'home');
+ controls.showMenuPanel.call(_this9, 'home', false);
});
// Add to pane
@@ -4319,7 +4324,7 @@ typeof navigator === "object" && (function (global, factory) {
createClass(Listeners, [{
key: 'handleKey',
value: function handleKey(event) {
- var _this = this;
+ var player = this.player;
var code = event.keyCode ? event.keyCode : event.which;
var pressed = event.type === 'keydown';
@@ -4339,7 +4344,7 @@ typeof navigator === "object" && (function (global, factory) {
// Seek by the number keys
var seekByKey = function seekByKey() {
// Divide the max duration into 10th's and times by the number value
- _this.player.currentTime = _this.player.duration / 10 * (code - 48);
+ player.currentTime = player.duration / 10 * (code - 48);
};
// Handle the key on keydown
@@ -4350,8 +4355,8 @@ typeof navigator === "object" && (function (global, factory) {
// and any that accept key input http://webaim.org/techniques/keyboard/
var focused = document.activeElement;
if (is.element(focused)) {
- var editable = this.player.config.selectors.editable;
- var seek = this.player.elements.inputs.seek;
+ var editable = player.config.selectors.editable;
+ var seek = player.elements.inputs.seek;
if (focused !== seek && matches(focused, editable)) {
@@ -4393,52 +4398,52 @@ typeof navigator === "object" && (function (global, factory) {
case 75:
// Space and K key
if (!repeat) {
- this.player.togglePlay();
+ player.togglePlay();
}
break;
case 38:
// Arrow up
- this.player.increaseVolume(0.1);
+ player.increaseVolume(0.1);
break;
case 40:
// Arrow down
- this.player.decreaseVolume(0.1);
+ player.decreaseVolume(0.1);
break;
case 77:
// M key
if (!repeat) {
- this.player.muted = !this.player.muted;
+ player.muted = !player.muted;
}
break;
case 39:
// Arrow forward
- this.player.forward();
+ player.forward();
break;
case 37:
// Arrow back
- this.player.rewind();
+ player.rewind();
break;
case 70:
// F key
- this.player.fullscreen.toggle();
+ player.fullscreen.toggle();
break;
case 67:
// C key
if (!repeat) {
- this.player.toggleCaptions();
+ player.toggleCaptions();
}
break;
case 76:
// L key
- this.player.loop = !this.player.loop;
+ player.loop = !player.loop;
break;
/* case 73:
@@ -4457,8 +4462,8 @@ typeof navigator === "object" && (function (global, factory) {
// Escape is handle natively when in full screen
// So we only need to worry about non native
- if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {
- this.player.fullscreen.toggle();
+ if (!player.fullscreen.enabled && player.fullscreen.active && code === 27) {
+ player.fullscreen.toggle();
}
// Store last code for next cycle
@@ -4481,15 +4486,19 @@ typeof navigator === "object" && (function (global, factory) {
}, {
key: 'firstTouch',
value: function firstTouch() {
- this.player.touch = true;
+ var player = this.player;
+
+
+ player.touch = true;
// Add touch class
- toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);
+ toggleClass(player.elements.container, player.config.classNames.isTouch, true);
}
}, {
key: 'setTabFocus',
value: function setTabFocus(event) {
- var _this2 = this;
+ var player = this.player;
+
clearTimeout(this.focusTimer);
@@ -4505,8 +4514,8 @@ typeof navigator === "object" && (function (global, factory) {
// Remove current classes
var removeCurrent = function removeCurrent() {
- var className = _this2.player.config.classNames.tabFocus;
- var current = getElements.call(_this2.player, '.' + className);
+ var className = player.config.classNames.tabFocus;
+ var current = getElements.call(player, '.' + className);
toggleClass(current, className, false);
};
@@ -4523,16 +4532,15 @@ typeof navigator === "object" && (function (global, factory) {
// Delay the adding of classname until the focus has changed
// This event fires before the focusin event
-
this.focusTimer = setTimeout(function () {
var focused = document.activeElement;
// Ignore if current focus element isn't inside the player
- if (!_this2.player.elements.container.contains(focused)) {
+ if (!player.elements.container.contains(focused)) {
return;
}
- toggleClass(document.activeElement, _this2.player.config.classNames.tabFocus, true);
+ toggleClass(document.activeElement, player.config.classNames.tabFocus, true);
}, 10);
}
@@ -4542,20 +4550,22 @@ typeof navigator === "object" && (function (global, factory) {
key: 'global',
value: function global() {
var toggle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
+ var player = this.player;
// Keyboard shortcuts
- if (this.player.config.keyboard.global) {
- toggleListener.call(this.player, window, 'keydown keyup', this.handleKey, toggle, false);
+
+ if (player.config.keyboard.global) {
+ toggleListener.call(player, window, 'keydown keyup', this.handleKey, toggle, false);
}
// Click anywhere closes menu
- toggleListener.call(this.player, document.body, 'click', this.toggleMenu, toggle);
+ toggleListener.call(player, document.body, 'click', this.toggleMenu, toggle);
// Detect touch by events
- once.call(this.player, document.body, 'touchstart', this.firstTouch);
+ once.call(player, document.body, 'touchstart', this.firstTouch);
// Tab focus detection
- toggleListener.call(this.player, document.body, 'keydown focus blur', this.setTabFocus, toggle, false, true);
+ toggleListener.call(player, document.body, 'keydown focus blur', this.setTabFocus, toggle, false, true);
}
// Container listeners
@@ -4563,16 +4573,17 @@ typeof navigator === "object" && (function (global, factory) {
}, {
key: 'container',
value: function container() {
- var _this3 = this;
+ var player = this.player;
// Keyboard shortcuts
- if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {
- on.call(this.player, this.player.elements.container, 'keydown keyup', this.handleKey, false);
+
+ if (!player.config.keyboard.global && player.config.keyboard.focused) {
+ on.call(player, player.elements.container, 'keydown keyup', this.handleKey, false);
}
// Toggle controls on mouse events and entering fullscreen
- on.call(this.player, this.player.elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', function (event) {
- var controls$$1 = _this3.player.elements.controls;
+ on.call(player, player.elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', function (event) {
+ var controls$$1 = player.elements.controls;
// Remove button states for fullscreen
@@ -4587,17 +4598,17 @@ typeof navigator === "object" && (function (global, factory) {
var delay = 0;
if (show) {
- ui.toggleControls.call(_this3.player, true);
+ ui.toggleControls.call(player, true);
// Use longer timeout for touch devices
- delay = _this3.player.touch ? 3000 : 2000;
+ delay = player.touch ? 3000 : 2000;
}
// Clear timer
- clearTimeout(_this3.player.timers.controls);
+ clearTimeout(player.timers.controls);
// Set new timer to prevent flicker when seeking
- _this3.player.timers.controls = setTimeout(function () {
- return ui.toggleControls.call(_this3.player, false);
+ player.timers.controls = setTimeout(function () {
+ return ui.toggleControls.call(player, false);
}, delay);
});
}
@@ -4607,76 +4618,77 @@ typeof navigator === "object" && (function (global, factory) {
}, {
key: 'media',
value: function media() {
- var _this4 = this;
+ var player = this.player;
// Time change on media
- on.call(this.player, this.player.media, 'timeupdate seeking seeked', function (event) {
- return controls.timeUpdate.call(_this4.player, event);
+
+ on.call(player, player.media, 'timeupdate seeking seeked', function (event) {
+ return controls.timeUpdate.call(player, event);
});
// Display duration
- on.call(this.player, this.player.media, 'durationchange loadeddata loadedmetadata', function (event) {
- return controls.durationUpdate.call(_this4.player, event);
+ on.call(player, player.media, 'durationchange loadeddata loadedmetadata', function (event) {
+ return controls.durationUpdate.call(player, event);
});
// Check for audio tracks on load
// We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point
- on.call(this.player, this.player.media, 'canplay', function () {
- toggleHidden(_this4.player.elements.volume, !_this4.player.hasAudio);
- toggleHidden(_this4.player.elements.buttons.mute, !_this4.player.hasAudio);
+ on.call(player, player.media, 'canplay', function () {
+ toggleHidden(player.elements.volume, !player.hasAudio);
+ toggleHidden(player.elements.buttons.mute, !player.hasAudio);
});
// Handle the media finishing
- on.call(this.player, this.player.media, 'ended', function () {
+ on.call(player, player.media, 'ended', function () {
// Show poster on end
- if (_this4.player.isHTML5 && _this4.player.isVideo && _this4.player.config.resetOnEnd) {
+ if (player.isHTML5 && player.isVideo && player.config.resetOnEnd) {
// Restart
- _this4.player.restart();
+ player.restart();
}
});
// Check for buffer progress
- on.call(this.player, this.player.media, 'progress playing seeking seeked', function (event) {
- return controls.updateProgress.call(_this4.player, event);
+ on.call(player, player.media, 'progress playing seeking seeked', function (event) {
+ return controls.updateProgress.call(player, event);
});
// Handle volume changes
- on.call(this.player, this.player.media, 'volumechange', function (event) {
- return controls.updateVolume.call(_this4.player, event);
+ on.call(player, player.media, 'volumechange', function (event) {
+ return controls.updateVolume.call(player, event);
});
// Handle play/pause
- on.call(this.player, this.player.media, 'playing play pause ended emptied timeupdate', function (event) {
- return ui.checkPlaying.call(_this4.player, event);
+ on.call(player, player.media, 'playing play pause ended emptied timeupdate', function (event) {
+ return ui.checkPlaying.call(player, event);
});
// Loading state
- on.call(this.player, this.player.media, 'waiting canplay seeked playing', function (event) {
- return ui.checkLoading.call(_this4.player, event);
+ on.call(player, player.media, 'waiting canplay seeked playing', function (event) {
+ return ui.checkLoading.call(player, event);
});
// If autoplay, then load advertisement if required
// TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows
- on.call(this.player, this.player.media, 'playing', function () {
- if (!_this4.player.ads) {
+ on.call(player, player.media, 'playing', function () {
+ if (!player.ads) {
return;
}
// If ads are enabled, wait for them first
- if (_this4.player.ads.enabled && !_this4.player.ads.initialized) {
+ if (player.ads.enabled && !player.ads.initialized) {
// Wait for manager response
- _this4.player.ads.managerPromise.then(function () {
- return _this4.player.ads.play();
+ player.ads.managerPromise.then(function () {
+ return player.ads.play();
}).catch(function () {
- return _this4.player.play();
+ return player.play();
});
}
});
// Click video
- if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {
+ if (player.supported.ui && player.config.clickToPlay && !player.isAudio) {
// Re-fetch the wrapper
- var wrapper = getElement.call(this.player, '.' + this.player.config.classNames.video);
+ var wrapper = getElement.call(player, '.' + player.config.classNames.video);
// Bail if there's no wrapper (this should never happen)
if (!is.element(wrapper)) {
@@ -4684,75 +4696,81 @@ typeof navigator === "object" && (function (global, factory) {
}
// On click play, pause ore restart
- on.call(this.player, wrapper, 'click', function () {
- // Touch devices will just show controls (if we're hiding controls)
- if (_this4.player.config.hideControls && _this4.player.touch && !_this4.player.paused) {
+ on.call(player, player.elements.container, 'click touchstart', function (event) {
+ var targets = [player.elements.container, wrapper];
+
+ // Ignore if click if not container or in video wrapper
+ if (!targets.includes(event.target) && !wrapper.contains(event.target)) {
+ return;
+ }
+
+ // First touch on touch devices will just show controls (if we're hiding controls)
+ // If controls are shown then it'll toggle like a pointer device
+ if (player.config.hideControls && player.touch && hasClass(player.elements.container, player.config.classNames.hideControls)) {
return;
}
- if (_this4.player.paused) {
- _this4.player.play();
- } else if (_this4.player.ended) {
- _this4.player.restart();
- _this4.player.play();
+ if (player.ended) {
+ player.restart();
+ player.play();
} else {
- _this4.player.pause();
+ player.togglePlay();
}
});
}
// Disable right click
- if (this.player.supported.ui && this.player.config.disableContextMenu) {
- on.call(this.player, this.player.elements.wrapper, 'contextmenu', function (event) {
+ if (player.supported.ui && player.config.disableContextMenu) {
+ on.call(player, player.elements.wrapper, 'contextmenu', function (event) {
event.preventDefault();
}, false);
}
// Volume change
- on.call(this.player, this.player.media, 'volumechange', function () {
+ on.call(player, player.media, 'volumechange', function () {
// Save to storage
- _this4.player.storage.set({
- volume: _this4.player.volume,
- muted: _this4.player.muted
+ player.storage.set({
+ volume: player.volume,
+ muted: player.muted
});
});
// Speed change
- on.call(this.player, this.player.media, 'ratechange', function () {
+ on.call(player, player.media, 'ratechange', function () {
// Update UI
- controls.updateSetting.call(_this4.player, 'speed');
+ controls.updateSetting.call(player, 'speed');
// Save to storage
- _this4.player.storage.set({ speed: _this4.player.speed });
+ player.storage.set({ speed: player.speed });
});
// Quality request
- on.call(this.player, this.player.media, 'qualityrequested', function (event) {
+ on.call(player, player.media, 'qualityrequested', function (event) {
// Save to storage
- _this4.player.storage.set({ quality: event.detail.quality });
+ player.storage.set({ quality: event.detail.quality });
});
// Quality change
- on.call(this.player, this.player.media, 'qualitychange', function (event) {
+ on.call(player, player.media, 'qualitychange', function (event) {
// Update UI
- controls.updateSetting.call(_this4.player, 'quality', null, event.detail.quality);
+ controls.updateSetting.call(player, 'quality', null, event.detail.quality);
});
// Proxy events to container
// Bubble up key events for Edge
- var proxyEvents = this.player.config.events.concat(['keyup', 'keydown']).join(' ');
+ var proxyEvents = player.config.events.concat(['keyup', 'keydown']).join(' ');
- on.call(this.player, this.player.media, proxyEvents, function (event) {
+ on.call(player, player.media, proxyEvents, function (event) {
var _event$detail = event.detail,
detail = _event$detail === undefined ? {} : _event$detail;
// Get error details from media
if (event.type === 'error') {
- detail = _this4.player.media.error;
+ detail = player.media.error;
}
- triggerEvent.call(_this4.player, _this4.player.elements.container, event.type, true, detail);
+ triggerEvent.call(player, player.elements.container, event.type, true, detail);
});
}
@@ -4761,18 +4779,20 @@ typeof navigator === "object" && (function (global, factory) {
}, {
key: 'proxy',
value: function proxy(event, defaultHandler, customHandlerKey) {
- var customHandler = this.player.config.listeners[customHandlerKey];
+ var player = this.player;
+
+ var customHandler = player.config.listeners[customHandlerKey];
var hasCustomHandler = is.function(customHandler);
var returned = true;
// Execute custom handler
if (hasCustomHandler) {
- returned = customHandler.call(this.player, event);
+ returned = customHandler.call(player, event);
}
// Only call default handler if not prevented in custom handler
if (returned && is.function(defaultHandler)) {
- defaultHandler.call(this.player, event);
+ defaultHandler.call(player, event);
}
}
@@ -4781,15 +4801,16 @@ typeof navigator === "object" && (function (global, factory) {
}, {
key: 'bind',
value: function bind(element, type, defaultHandler, customHandlerKey) {
- var _this5 = this;
+ var _this = this;
var passive = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;
+ var player = this.player;
- var customHandler = this.player.config.listeners[customHandlerKey];
+ var customHandler = player.config.listeners[customHandlerKey];
var hasCustomHandler = is.function(customHandler);
- on.call(this.player, element, type, function (event) {
- return _this5.proxy(event, defaultHandler, customHandlerKey);
+ on.call(player, element, type, function (event) {
+ return _this.proxy(event, defaultHandler, customHandlerKey);
}, passive && !hasCustomHandler);
}
@@ -4798,57 +4819,60 @@ typeof navigator === "object" && (function (global, factory) {
}, {
key: 'controls',
value: function controls$$1() {
- var _this6 = this;
+ var _this2 = this;
+
+ var player = this.player;
// IE doesn't support input event, so we fallback to change
+
var inputEvent = browser.isIE ? 'change' : 'input';
// Play/pause toggle
- if (this.player.elements.buttons.play) {
- Array.from(this.player.elements.buttons.play).forEach(function (button) {
- _this6.bind(button, 'click', _this6.player.togglePlay, 'play');
+ if (player.elements.buttons.play) {
+ Array.from(player.elements.buttons.play).forEach(function (button) {
+ _this2.bind(button, 'click', player.togglePlay, 'play');
});
}
// Pause
- this.bind(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');
+ this.bind(player.elements.buttons.restart, 'click', player.restart, 'restart');
// Rewind
- this.bind(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');
+ this.bind(player.elements.buttons.rewind, 'click', player.rewind, 'rewind');
// Rewind
- this.bind(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');
+ this.bind(player.elements.buttons.fastForward, 'click', player.forward, 'fastForward');
// Mute toggle
- this.bind(this.player.elements.buttons.mute, 'click', function () {
- _this6.player.muted = !_this6.player.muted;
+ this.bind(player.elements.buttons.mute, 'click', function () {
+ player.muted = !player.muted;
}, 'mute');
// Captions toggle
- this.bind(this.player.elements.buttons.captions, 'click', function () {
- return _this6.player.toggleCaptions();
+ this.bind(player.elements.buttons.captions, 'click', function () {
+ return player.toggleCaptions();
});
// Fullscreen toggle
- this.bind(this.player.elements.buttons.fullscreen, 'click', function () {
- _this6.player.fullscreen.toggle();
+ this.bind(player.elements.buttons.fullscreen, 'click', function () {
+ player.fullscreen.toggle();
}, 'fullscreen');
// Picture-in-Picture
- this.bind(this.player.elements.buttons.pip, 'click', function () {
- _this6.player.pip = 'toggle';
+ this.bind(player.elements.buttons.pip, 'click', function () {
+ player.pip = 'toggle';
}, 'pip');
// Airplay
- this.bind(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');
+ this.bind(player.elements.buttons.airplay, 'click', player.airplay, 'airplay');
// Settings menu - click toggle
- this.bind(this.player.elements.buttons.settings, 'click', function (event) {
- controls.toggleMenu.call(_this6.player, event);
+ this.bind(player.elements.buttons.settings, 'click', function (event) {
+ controls.toggleMenu.call(player, event);
});
// Settings menu - keyboard toggle
- this.bind(this.player.elements.buttons.settings, 'keydown', function (event) {
+ this.bind(player.elements.buttons.settings, 'keydown', function (event) {
// We only care about space
if (event.which !== 32) {
return;
@@ -4861,44 +4885,44 @@ typeof navigator === "object" && (function (global, factory) {
event.stopPropagation();
// Toggle menu
- controls.toggleMenu.call(_this6.player, event);
+ controls.toggleMenu.call(player, event);
}, null, false);
// Set range input alternative "value", which matches the tooltip time (#954)
- this.bind(this.player.elements.inputs.seek, 'mousedown mousemove', function (event) {
- var clientRect = _this6.player.elements.progress.getBoundingClientRect();
- var percent = 100 / clientRect.width * (event.pageX - clientRect.left);
+ this.bind(player.elements.inputs.seek, 'mousedown mousemove', function (event) {
+ var rect = player.elements.progress.getBoundingClientRect();
+ var percent = 100 / rect.width * (event.pageX - rect.left);
event.currentTarget.setAttribute('seek-value', percent);
});
// Pause while seeking
- this.bind(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', function (event) {
+ this.bind(player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', function (event) {
var seek = event.currentTarget;
-
var code = event.keyCode ? event.keyCode : event.which;
var eventType = event.type;
+ var attribute = 'play-on-seeked';
if ((eventType === 'keydown' || eventType === 'keyup') && code !== 39 && code !== 37) {
return;
}
// Was playing before?
- var play = seek.hasAttribute('play-on-seeked');
+ var play = seek.hasAttribute(attribute);
// Done seeking
var done = ['mouseup', 'touchend', 'keyup'].includes(event.type);
// If we're done seeking and it was playing, resume playback
if (play && done) {
- seek.removeAttribute('play-on-seeked');
- _this6.player.play();
- } else if (!done && _this6.player.playing) {
- seek.setAttribute('play-on-seeked', '');
- _this6.player.pause();
+ seek.removeAttribute(attribute);
+ player.play();
+ } else if (!done && player.playing) {
+ seek.setAttribute(attribute, '');
+ player.pause();
}
});
// Seek
- this.bind(this.player.elements.inputs.seek, inputEvent, function (event) {
+ this.bind(player.elements.inputs.seek, inputEvent, function (event) {
var seek = event.currentTarget;
// If it exists, use seek-value instead of "value" for consistency with tooltip time (#954)
@@ -4910,89 +4934,95 @@ typeof navigator === "object" && (function (global, factory) {
seek.removeAttribute('seek-value');
- _this6.player.currentTime = seekTo / seek.max * _this6.player.duration;
+ // Super weird iOS bug where after you interact with an <input type="range">,
+ // it takes over further interactions on the page. This is a hack
+ if (browser.isIos) {
+ repaint(seek);
+ }
+
+ player.currentTime = seekTo / seek.max * player.duration;
}, 'seek');
// Current time invert
// Only if one time element is used for both currentTime and duration
- if (this.player.config.toggleInvert && !is.element(this.player.elements.display.duration)) {
- this.bind(this.player.elements.display.currentTime, 'click', function () {
+ if (player.config.toggleInvert && !is.element(player.elements.display.duration)) {
+ this.bind(player.elements.display.currentTime, 'click', function () {
// Do nothing if we're at the start
- if (_this6.player.currentTime === 0) {
+ if (player.currentTime === 0) {
return;
}
- _this6.player.config.invertTime = !_this6.player.config.invertTime;
+ player.config.invertTime = !player.config.invertTime;
- controls.timeUpdate.call(_this6.player);
+ controls.timeUpdate.call(player);
});
}
// Volume
- this.bind(this.player.elements.inputs.volume, inputEvent, function (event) {
- _this6.player.volume = event.target.value;
+ this.bind(player.elements.inputs.volume, inputEvent, function (event) {
+ player.volume = event.target.value;
}, 'volume');
// Polyfill for lower fill in <input type="range"> for webkit
if (browser.isWebkit) {
- Array.from(getElements.call(this.player, 'input[type="range"]')).forEach(function (element) {
- _this6.bind(element, 'input', function (event) {
- return controls.updateRangeFill.call(_this6.player, event.target);
+ Array.from(getElements.call(player, 'input[type="range"]')).forEach(function (element) {
+ _this2.bind(element, 'input', function (event) {
+ return controls.updateRangeFill.call(player, event.target);
});
});
}
// Seek tooltip
- this.bind(this.player.elements.progress, 'mouseenter mouseleave mousemove', function (event) {
- return controls.updateSeekTooltip.call(_this6.player, event);
+ this.bind(player.elements.progress, 'mouseenter mouseleave mousemove', function (event) {
+ return controls.updateSeekTooltip.call(player, event);
});
// Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)
- this.bind(this.player.elements.controls, 'mouseenter mouseleave', function (event) {
- _this6.player.elements.controls.hover = !_this6.player.touch && event.type === 'mouseenter';
+ this.bind(player.elements.controls, 'mouseenter mouseleave', function (event) {
+ player.elements.controls.hover = !player.touch && event.type === 'mouseenter';
});
// Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)
- this.bind(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', function (event) {
- _this6.player.elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);
+ this.bind(player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', function (event) {
+ player.elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);
});
// Focus in/out on controls
- this.bind(this.player.elements.controls, 'focusin focusout', function (event) {
- var _player = _this6.player,
- config = _player.config,
- elements = _player.elements,
- timers = _player.timers;
+ this.bind(player.elements.controls, 'focusin focusout', function (event) {
+ var config = player.config,
+ elements = player.elements,
+ timers = player.timers;
- // Skip transition to prevent focus from scrolling the parent element
+ var isFocusIn = event.type === 'focusin';
- toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');
+ // Skip transition to prevent focus from scrolling the parent element
+ toggleClass(elements.controls, config.classNames.noTransition, isFocusIn);
// Toggle
- ui.toggleControls.call(_this6.player, event.type === 'focusin');
+ ui.toggleControls.call(player, isFocusIn);
// If focusin, hide again after delay
- if (event.type === 'focusin') {
+ if (isFocusIn) {
// Restore transition
setTimeout(function () {
toggleClass(elements.controls, config.classNames.noTransition, false);
}, 0);
// Delay a little more for keyboard users
- var delay = _this6.touch ? 3000 : 4000;
+ var delay = _this2.touch ? 3000 : 4000;
// Clear timer
clearTimeout(timers.controls);
// Hide
timers.controls = setTimeout(function () {
- return ui.toggleControls.call(_this6.player, false);
+ return ui.toggleControls.call(player, false);
}, delay);
}
});
// Mouse wheel for volume
- this.bind(this.player.elements.inputs.volume, 'wheel', function (event) {
+ this.bind(player.elements.inputs.volume, 'wheel', function (event) {
// Detect "natural" scroll - suppored on OS X Safari only
// Other browsers on OS X will be inverted until support improves
var inverted = event.webkitDirectionInvertedFromDevice;
@@ -5012,10 +5042,10 @@ typeof navigator === "object" && (function (global, factory) {
var direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y);
// Change the volume by 2%
- _this6.player.increaseVolume(direction / 50);
+ player.increaseVolume(direction / 50);
// Don't break page scrolling at max and min
- var volume = _this6.player.media.volume;
+ var volume = player.media.volume;
if (direction === 1 && volume < 1 || direction === -1 && volume > 0) {
event.preventDefault();
@@ -7310,7 +7340,7 @@ typeof navigator === "object" && (function (global, factory) {
if (this.media.hasAttribute('autoplay')) {
this.config.autoplay = true;
}
- if (this.media.hasAttribute('playsinline')) {
+ if (this.media.hasAttribute('playsinline') || this.media.hasAttribute('webkit-playsinline')) {
this.config.playsinline = true;
}
if (this.media.hasAttribute('muted')) {
@@ -7382,7 +7412,9 @@ typeof navigator === "object" && (function (global, factory) {
this.fullscreen = new Fullscreen(this);
// Setup ads if provided
- this.ads = new Ads(this);
+ if (this.config.ads.enabled) {
+ this.ads = new Ads(this);
+ }
// Autoplay if required
if (this.config.autoplay) {
@@ -7588,13 +7620,16 @@ typeof navigator === "object" && (function (global, factory) {
if (hiding && this.config.controls.includes('settings') && !is.empty(this.config.settings)) {
controls.toggleMenu.call(this, false);
}
+
// Trigger event on change
if (hiding !== isHidden) {
var eventName = hiding ? 'controlshidden' : 'controlsshown';
triggerEvent.call(this, this.media, eventName);
}
+
return !hiding;
}
+
return false;
}
@@ -8084,7 +8119,9 @@ typeof navigator === "object" && (function (global, factory) {
}
// Trigger request event
- triggerEvent.call(this, this.media, 'qualityrequested', false, { quality: quality });
+ triggerEvent.call(this, this.media, 'qualityrequested', false, {
+ quality: quality
+ });
// Update config
config.selected = quality;
diff --git a/dist/plyr.js.map b/dist/plyr.js.map
index c830a0cb..102e7b48 100644
--- a/dist/plyr.js.map
+++ b/dist/plyr.js.map
@@ -1 +1 @@
-{"version":3,"sources":["src/js/utils/is.js","src/js/utils/events.js","src/js/utils/elements.js","src/js/utils/animation.js","src/js/utils/browser.js","src/js/support.js","src/js/html5.js","src/js/utils/objects.js","src/js/utils/strings.js","src/js/i18n.js","src/js/utils/arrays.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","src/js/utils/loadImage.js","src/js/ui.js","src/js/listeners.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils/loadScript.js","src/js/plugins/vimeo.js","src/js/plugins/youtube.js","src/js/media.js","src/js/plugins/ads.js","src/js/source.js","src/js/plyr.js"],"names":["getConstructor","input","constructor","instanceOf","Boolean","isNullOrUndefined","isObject","Object","isNumber","Number","isNaN","isString","String","isBoolean","isFunction","Function","isArray","Array","isWeakMap","WeakMap","isNodeList","NodeList","isElement","Element","isTextNode","Text","isEvent","Event","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","cue","track","url","empty","supportsPassiveListeners","supported","options","defineProperty","get","addEventListener","removeEventListener","toggleListener","callback","toggle","passive","capture","is","events","split","forEach","eventListeners","push","type","on","call","off","once","onceCallback","args","apply","triggerEvent","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","unbindListeners","item","ready","Promise","setTimeout","resolve","elements","container","then","wrap","wrapper","targets","from","reverse","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","insertBefore","setAttributes","attributes","entries","filter","value","key","setAttribute","createElement","text","document","innerText","insertAfter","target","insertElement","removeElement","removeChild","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","selector","s","trim","className","replace","stripped","parts","start","charAt","class","id","toggleHidden","hidden","hide","hasAttribute","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","navigator","userAgent","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","cancelRequests","blankVideo","debug","log","cloneDeep","JSON","parse","stringify","getDeep","path","reduce","obj","shift","generateId","prefix","Math","floor","random","format","toString","i","getPercentage","current","max","toFixed","replaceAll","RegExp","toTitleCase","toUpperCase","substr","toLowerCase","toPascalCase","toCamelCase","slice","stripHTML","fragment","createDocumentFragment","innerHTML","firstChild","getHTML","i18n","seekTime","title","dedupe","indexOf","closest","prev","curr","abs","Storage","enabled","storage","store","localStorage","getItem","json","setItem","removeItem","fetch","responseType","reject","request","XMLHttpRequest","responseText","response","Error","status","open","send","loadSprite","hasId","isCached","exists","getElementById","update","data","body","insertAdjacentElement","useStorage","cached","content","result","catch","getHours","parseInt","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","iconUrl","location","cors","host","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","tooltip","error","warn","toggleNativeControls","createIcon","namespace","iconPath","iconPrefix","icon","createElementNS","role","use","setAttributeNS","createLabel","attr","universals","join","createBadge","badge","menu","createButton","buttonType","button","label","labelPressed","iconPressed","control","controlPressed","enumerable","pressed","createRange","min","step","autocomplete","updateRangeFill","createProgress","suffixKey","played","suffix","createTime","bindMenuItemShortcuts","menuItem","which","stopPropagation","isRadioButton","showMenuPanel","nextElementSibling","firstElementChild","previousElementSibling","lastElementChild","createMenuItem","list","checked","flex","children","node","listeners","bind","currentTrack","speed","parseFloat","forceHours","updateTimeDisplay","updateVolume","setRange","muted","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","toggleMenu","popup","show","isMenuItem","isButton","firstItem","getMenuSize","tab","clone","position","opacity","scrollWidth","height","scrollHeight","size","restore","propertyName","create","inner","home","backButton","inject","props","seektime","insertAdjacentHTML","labels","parseUrl","safe","parser","href","buildUrlParams","params","URLSearchParams","setup","isVideo","isYouTube","protocol","createObjectURL","blob","languages","userLanguage","active","trackEvents","meta","currentTrackNode","languageExists","mode","updateCues","setLanguage","activeClass","findTrack","embed","enableTextTrack","has","sortIsDefault","sorted","every","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","changed","caption","defaults","autoplay","autopause","toggleInvert","ratio","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","global","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","end","all","reset","disabled","advertisement","qualityBadge","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","Fullscreen","property","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","currentTarget","eventType","done","seekTo","webkitDirectionInvertedFromDevice","deltaX","deltaY","direction","sign","define","this","loadScript","loadjs","success","parseId","regex","$2","getAspectRatio","getRatio","w","h","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","padding","paddingBottom","offset","transform","byline","portrait","transparent","gesture","thumbnail_large","pathname","Player","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","setPlaybackRate","name","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","setAutopause","state","getVideoTitle","getCurrentTime","getDuration","getTextTracks","strippedCues","getPaused","frame","seconds","mapQualityUnit","qualities","hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","entry","mapQualityUnits","levels","level","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","items","snippet","currentId","posterSrc","playerVars","rel","showinfo","iv_load_policy","modestbranding","disablekb","widget_referrer","cc_load_policy","cc_lang_pref","onError","message","onPlaybackQualityChange","onPlaybackRateChange","instance","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","onStateChange","seeked","getAvailableQualityLevels","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","attribute","change","tagName","crossorigin","Plyr","failed","jQuery","original","searchParams","truthy","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","realDuration","Infinity","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","states","inline","webkitPresentationMode","t"],"mappings":"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","file":"plyr.js","sourcesContent":["// ==========================================================================\n// Type checking utils\n// ==========================================================================\n\nconst getConstructor = input => (input !== null && typeof input !== 'undefined' ? input.constructor : null);\nconst instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\nconst isNullOrUndefined = input => input === null || typeof input === 'undefined';\nconst isObject = input => getConstructor(input) === Object;\nconst isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\nconst isString = input => getConstructor(input) === String;\nconst isBoolean = input => getConstructor(input) === Boolean;\nconst isFunction = input => getConstructor(input) === Function;\nconst isArray = input => Array.isArray(input);\nconst isWeakMap = input => instanceOf(input, WeakMap);\nconst isNodeList = input => instanceOf(input, NodeList);\nconst isElement = input => instanceOf(input, Element);\nconst isTextNode = input => getConstructor(input) === Text;\nconst isEvent = input => instanceOf(input, Event);\nconst 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 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(\n element,\n event,\n callback,\n toggle = false,\n passive = true,\n capture = false,\n) {\n // Bail if no element, event, or callback\n if (\n !element ||\n !('addEventListener' in element) ||\n is.empty(event) ||\n !is.function(callback)\n ) {\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (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'](\n type,\n callback,\n options,\n );\n });\n}\n\n// Bind event handler\nexport function on(\n element,\n events = '',\n callback,\n passive = true,\n capture = false,\n) {\n toggleListener.call(\n this,\n element,\n events,\n callback,\n true,\n passive,\n capture,\n );\n}\n\n// Unbind event handler\nexport function off(\n element,\n events = '',\n callback,\n passive = true,\n capture = false,\n) {\n toggleListener.call(\n this,\n element,\n events,\n callback,\n false,\n passive,\n capture,\n );\n}\n\n// Bind once-only event handler\nexport function once(\n element,\n events = '',\n callback,\n passive = true,\n capture = false,\n) {\n function onceCallback(...args) {\n off(element, events, onceCallback, passive, capture);\n callback.apply(this, args);\n }\n\n toggleListener.call(\n this,\n element,\n events,\n onceCallback,\n true,\n passive,\n capture,\n );\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 =>\n this.ready\n ? setTimeout(resolve, 0)\n : 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 (\n !is.element(oldChild) ||\n !is.element(oldChild.parentNode) ||\n !is.element(newChild)\n ) {\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.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n}\n\n// Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\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(\n this,\n 'button:not(:disabled), input:not(:disabled), [tabindex]',\n );\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(\n this,\n this.elements.container,\n 'keydown',\n trap,\n toggle,\n false,\n );\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 toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n toggleHidden(element, false);\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 });\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// Object utils\n// ==========================================================================\n\nimport is from './is';\n\n// Clone nested objects\nexport function cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n}\n\n// Get a nested value in an object\nexport function getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n}\n\n// Deep extend destination object with N more objects\nexport function extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return extend(target, ...sources);\n}\n","// ==========================================================================\n// String utils\n// ==========================================================================\n\nimport is from './is';\n\n// Generate a random ID\nexport function generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n}\n\n// Format string\nexport function format(input, ...args) {\n if (is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => args[i].toString());\n}\n\n// Get percentage\nexport function getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n}\n\n// Replace all occurances of a string in a string\nexport function replaceAll(input = '', find = '', replace = '') {\n return input.replace(\n new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'),\n replace.toString(),\n );\n}\n\n// Convert to title case\nexport function toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n}\n\n// Convert string to pascalCase\nexport function toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = toTitleCase(string);\n\n // Convert to pascal case\n return replaceAll(string, ' ', '');\n}\n\n// Convert string to pascalCase\nexport function toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n// Remove HTML from a string\nexport function stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n}\n\n// Like outerHTML, but also works for DocumentFragment\nexport function getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n}\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport is from './utils/is';\nimport { getDeep } from './utils/objects';\nimport { replaceAll } from './utils/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// 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// 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 i18n from './i18n';\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 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(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n } 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 // Toggle classname when pressed property is set\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 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 bindMenuItemShortcuts(menuItem, type) {\n // Handle space or -> to open menu\n on(menuItem, 'keydown', 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 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);\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 }, false);\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 keydown',\n event => {\n if (event.type === 'keydown' && 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');\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}%`);\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 // 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 const show = is.boolean(input) ? input : is.element(popup) && popup.hasAttribute('hidden');\n\n if (is.event(input)) {\n const isMenuItem = is.element(popup) && popup.contains(input.target);\n const isButton = input.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n input.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n // Show the actual popup\n if (is.element(popup)) {\n toggleHidden(popup, !show);\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n // Focus the first item if key interaction\n if (show && is.event(input) && input.type === 'keydown') {\n const pane = Object.values(this.elements.settings.panels).find(pane => !pane.hidden);\n const firstItem = pane.querySelector('[role^=\"menuitem\"]');\n setFocus.call(this, firstItem, true);\n }\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 = '') {\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 const firstItem = target.querySelector('[role^=\"menuitem\"]');\n setFocus.call(this, firstItem, true);\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (is.empty(this.config.controls)) {\n return null;\n }\n\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 // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n 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 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 id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const popup = createElement('div', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\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);\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(pane, 'keydown', 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');\n }, false);\n\n // Go back via button click\n on(backButton, 'click', () => {\n controls.showMenuPanel.call(this, 'home');\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 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 (is.string(this.config.controls) || is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([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\n if (is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n 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 i18n from './i18n';\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 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 languages = dedupe(\n Array.from(navigator.languages || navigator.language || navigator.userLanguage).map(language => language.split('-')[0]),\n );\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: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [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 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress__buffer',\n loop: '.plyr__progress__loop', // Used later\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n caption: '.plyr__caption',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n 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// ==========================================================================\n\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 // 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 if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Load image avoiding xhr/fetch CORS issues\n// Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded\n// By default it checks if it is at least 1px, but you can add a second argument to change this\n// ==========================================================================\n\nexport default function loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n\n Object.assign(image, { onload: handler, onerror: handler, src });\n });\n}\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\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 browser from './utils/browser';\nimport {\n getElement,\n getElements,\n matches,\n toggleClass,\n toggleHidden,\n} 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 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 this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // 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 } = this.player.config.selectors;\n const { seek } = this.player.elements.inputs;\n\n if (focused !== seek && matches(focused, editable)) {\n return;\n }\n\n if (\n event.which === 32 &&\n matches(focused, 'button, [role^=\"menuitem\"]')\n ) {\n return;\n }\n }\n\n // Which keycodes should we prevent default\n const preventDefault = [\n 32,\n 37,\n 38,\n 39,\n 40,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 67,\n 70,\n 73,\n 75,\n 76,\n 77,\n 79,\n ];\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (\n !this.player.fullscreen.enabled &&\n this.player.fullscreen.active &&\n code === 27\n ) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n toggleClass(\n this.player.elements.container,\n this.player.config.classNames.isTouch,\n true,\n );\n }\n\n setTabFocus(event) {\n clearTimeout(this.focusTimer);\n\n // Ignore any key other than tab\n if (event.type === 'keydown' && event.code !== 'Tab') {\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 = this.player.config.classNames.tabFocus;\n const current = getElements.call(this.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\n this.focusTimer = setTimeout(() => {\n const focused = document.activeElement;\n\n // Ignore if current focus element isn't inside the player\n if (!this.player.elements.container.contains(focused)) {\n return;\n }\n\n toggleClass(\n document.activeElement,\n this.player.config.classNames.tabFocus,\n true,\n );\n }, 10);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n toggleListener.call(\n this.player,\n window,\n 'keydown keyup',\n this.handleKey,\n toggle,\n false,\n );\n }\n\n // Click anywhere closes menu\n toggleListener.call(\n this.player,\n document.body,\n 'click',\n this.toggleMenu,\n toggle,\n );\n\n // Detect touch by events\n once.call(this.player, document.body, 'touchstart', this.firstTouch);\n\n // Tab focus detection\n toggleListener.call(\n this.player,\n document.body,\n 'keydown focus blur',\n this.setTabFocus,\n toggle,\n false,\n true,\n );\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (\n !this.player.config.keyboard.global &&\n this.player.config.keyboard.focused\n ) {\n on.call(\n this.player,\n this.player.elements.container,\n 'keydown keyup',\n this.handleKey,\n false,\n );\n }\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n this.player,\n this.player.elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = ['touchstart', 'touchmove', 'mousemove'].includes(\n event.type,\n );\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n\n // Set new timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(\n () => ui.toggleControls.call(this.player, false),\n delay,\n );\n },\n );\n }\n\n // Listen for media events\n media() {\n // Time change on media\n on.call(\n this.player,\n this.player.media,\n 'timeupdate seeking seeked',\n event => controls.timeUpdate.call(this.player, event),\n );\n\n // Display duration\n on.call(\n this.player,\n this.player.media,\n 'durationchange loadeddata loadedmetadata',\n event => controls.durationUpdate.call(this.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(this.player, this.player.media, 'canplay', () => {\n toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n toggleHidden(\n this.player.elements.buttons.mute,\n !this.player.hasAudio,\n );\n });\n\n // Handle the media finishing\n on.call(this.player, this.player.media, 'ended', () => {\n // Show poster on end\n if (\n this.player.isHTML5 &&\n this.player.isVideo &&\n this.player.config.resetOnEnd\n ) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n on.call(\n this.player,\n this.player.media,\n 'progress playing seeking seeked',\n event => controls.updateProgress.call(this.player, event),\n );\n\n // Handle volume changes\n on.call(this.player, this.player.media, 'volumechange', event =>\n controls.updateVolume.call(this.player, event),\n );\n\n // Handle play/pause\n on.call(\n this.player,\n this.player.media,\n 'playing play pause ended emptied timeupdate',\n event => ui.checkPlaying.call(this.player, event),\n );\n\n // Loading state\n on.call(\n this.player,\n this.player.media,\n 'waiting canplay seeked playing',\n event => ui.checkLoading.call(this.player, event),\n );\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(this.player, this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise\n .then(() => this.player.ads.play())\n .catch(() => this.player.play());\n }\n });\n\n // Click video\n if (\n this.player.supported.ui &&\n this.player.config.clickToPlay &&\n !this.player.isAudio\n ) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(\n this.player,\n `.${this.player.config.classNames.video}`,\n );\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(this.player, wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (\n this.player.config.hideControls &&\n this.player.touch &&\n !this.player.paused\n ) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n on.call(\n this.player,\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n on.call(this.player, this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({\n volume: this.player.volume,\n muted: this.player.muted,\n });\n });\n\n // Speed change\n on.call(this.player, this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n on.call(this.player, this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n on.call(this.player, this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(\n this.player,\n 'quality',\n null,\n event.detail.quality,\n );\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = this.player.config.events\n .concat(['keyup', 'keydown'])\n .join(' ');\n\n on.call(this.player, this.player.media, proxyEvents, event => {\n let { detail = {} } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n triggerEvent.call(\n this.player,\n this.player.elements.container,\n event.type,\n true,\n detail,\n );\n });\n }\n\n // Run default and custom handlers\n proxy(event, defaultHandler, customHandlerKey) {\n const customHandler = this.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(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n }\n\n // Trigger custom and default handlers\n bind(element, type, defaultHandler, customHandlerKey, passive = true) {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n\n on.call(\n this.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 // 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 (this.player.elements.buttons.play) {\n Array.from(this.player.elements.buttons.play).forEach(button => {\n this.bind(button, 'click', this.player.togglePlay, 'play');\n });\n }\n\n // Pause\n this.bind(\n this.player.elements.buttons.restart,\n 'click',\n this.player.restart,\n 'restart',\n );\n\n // Rewind\n this.bind(\n this.player.elements.buttons.rewind,\n 'click',\n this.player.rewind,\n 'rewind',\n );\n\n // Rewind\n this.bind(\n this.player.elements.buttons.fastForward,\n 'click',\n this.player.forward,\n 'fastForward',\n );\n\n // Mute toggle\n this.bind(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n this.bind(this.player.elements.buttons.captions, 'click', () =>\n this.player.toggleCaptions(),\n );\n\n // Fullscreen toggle\n this.bind(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n this.bind(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n this.bind(\n this.player.elements.buttons.airplay,\n 'click',\n this.player.airplay,\n 'airplay',\n );\n\n // Settings menu - click toggle\n this.bind(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu - keyboard toggle\n this.bind(\n this.player.elements.buttons.settings,\n 'keydown',\n event => {\n // We only care about space\n if (event.which !== 32) {\n return;\n }\n\n // Prevent scroll\n event.preventDefault();\n\n // Prevent playing video\n event.stopPropagation();\n\n // Toggle menu\n controls.toggleMenu.call(this.player, event);\n },\n null,\n false,\n );\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n this.bind(\n this.player.elements.inputs.seek,\n 'mousedown mousemove',\n event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent =\n 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n },\n );\n\n // Pause while seeking\n this.bind(\n this.player.elements.inputs.seek,\n 'mousedown mouseup keydown keyup touchstart touchend',\n event => {\n const seek = event.currentTarget;\n\n const code = event.keyCode ? event.keyCode : event.which;\n const eventType = event.type;\n\n if (\n (eventType === 'keydown' || eventType === 'keyup') &&\n (code !== 39 && code !== 37)\n ) {\n return;\n }\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\n\n // Done seeking\n const done = ['mouseup', 'touchend', 'keyup'].includes(\n event.type,\n );\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n },\n );\n\n // Seek\n this.bind(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n this.player.currentTime =\n seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (\n this.player.config.toggleInvert &&\n !is.element(this.player.elements.display.duration)\n ) {\n this.bind(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n this.bind(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n Array.from(\n getElements.call(this.player, 'input[type=\"range\"]'),\n ).forEach(element => {\n this.bind(element, 'input', event =>\n controls.updateRangeFill.call(this.player, event.target),\n );\n });\n }\n\n // Seek tooltip\n this.bind(\n this.player.elements.progress,\n 'mouseenter mouseleave mousemove',\n event => controls.updateSeekTooltip.call(this.player, event),\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(\n this.player.elements.controls,\n 'mouseenter mouseleave',\n event => {\n this.player.elements.controls.hover =\n !this.player.touch && event.type === 'mouseenter';\n },\n );\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(\n this.player.elements.controls,\n 'mousedown mouseup touchstart touchend touchcancel',\n event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n },\n );\n\n // Focus in/out on controls\n this.bind(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(\n elements.controls,\n config.classNames.noTransition,\n event.type === 'focusin',\n );\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\n // Restore transition\n setTimeout(() => {\n toggleClass(\n elements.controls,\n config.classNames.noTransition,\n false,\n );\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(\n () => ui.toggleControls.call(this.player, false),\n delay,\n );\n }\n });\n\n // Mouse wheel for volume\n this.bind(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n\n // Get delta from event. Invert if `inverted` is true\n const [x, y] = [event.deltaX, -event.deltaY].map(\n value => (inverted ? -value : value),\n );\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 this.player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const { volume } = this.player.media;\n if (\n (direction === 1 && volume < 1) ||\n (direction === -1 && volume > 0)\n ) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n}\n\nexport default Listeners;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Load an external script\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nexport default function loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n}\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from '../captions';\nimport controls from '../controls';\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { format, stripHTML } from '../utils/strings';\nimport { buildUrlParams } from '../utils/urls';\n\n// Parse Vimeo ID from URL\nfunction parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n\n if (is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n}\n\n// Get aspect ratio for dimensions\nfunction getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!is.object(window.Vimeo)) {\n loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const [x, y] = (is.string(input) ? input : this.config.ratio).split(':');\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 controls from '../controls';\nimport ui from '../ui';\nimport { dedupe } from '../utils/arrays';\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// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n const qualities = {\n hd2160: 2160,\n hd1440: 1440,\n hd1080: 1080,\n hd720: 720,\n large: 480,\n medium: 360,\n small: 240,\n tiny: 144,\n };\n\n const entry = Object.entries(qualities).find(entry => entry.includes(input));\n\n if (entry) {\n // Get the match corresponding to the input\n return entry.find(value => value !== input);\n }\n\n return 'default';\n}\n\nfunction mapQualityUnits(levels) {\n if (is.empty(levels)) {\n return levels;\n }\n\n return dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n 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 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 onPlaybackQualityChange() {\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n triggerEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // If paused 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 // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n instance.setPlaybackQuality(mapQualityUnit(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 // Get quality\n controls.setQualityMenu.call(\n player,\n mapQualityUnits(instance.getAvailableQualityLevels()),\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 i18n from '../i18n';\nimport { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\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 // 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 // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n 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.3.22\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.searchParams.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 } 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')) {\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 this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n\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 // Trigger request event\n triggerEvent.call(this, this.media, 'qualityrequested', false, { quality });\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 // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n triggerEvent.call(this, this.media, eventName);\n }\n return !hiding;\n }\n return false;\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n on.call(this, this.elements.container, event, callback);\n }\n\n /**\n * Add event listeners once\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n once(event, callback) {\n once.call(this, this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n removeElement(this.elements.buttons.play);\n removeElement(this.elements.captions);\n removeElement(this.elements.controls);\n removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n unbindListeners.call(this);\n\n // Replace the container with the original element provided\n replaceElement(this.elements.original, this.elements.container);\n\n // Event\n triggerEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Provider specific stuff\n if (this.isHTML5) {\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n } else if (this.isYouTube) {\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n } else if (this.isVimeo) {\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (is.array(selector)) {\n targets = selector.filter(is.element);\n }\n\n if (is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = cloneDeep(defaults);\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["src/js/utils/is.js","src/js/utils/events.js","src/js/utils/elements.js","src/js/utils/animation.js","src/js/utils/browser.js","src/js/support.js","src/js/html5.js","src/js/utils/objects.js","src/js/utils/strings.js","src/js/i18n.js","src/js/utils/arrays.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","src/js/utils/loadImage.js","src/js/ui.js","src/js/listeners.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils/loadScript.js","src/js/plugins/vimeo.js","src/js/plugins/youtube.js","src/js/media.js","src/js/plugins/ads.js","src/js/source.js","src/js/plyr.js"],"names":["getConstructor","input","constructor","instanceOf","Boolean","isNullOrUndefined","isObject","Object","isNumber","Number","isNaN","isString","String","isBoolean","isFunction","Function","isArray","Array","isWeakMap","WeakMap","isNodeList","NodeList","isElement","Element","isTextNode","Text","isEvent","Event","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","cue","track","url","empty","supportsPassiveListeners","supported","options","defineProperty","get","addEventListener","removeEventListener","toggleListener","callback","toggle","passive","capture","is","events","split","forEach","eventListeners","push","type","on","call","off","once","onceCallback","args","apply","triggerEvent","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","unbindListeners","item","ready","Promise","setTimeout","resolve","elements","container","then","wrap","wrapper","targets","from","reverse","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","insertBefore","setAttributes","attributes","entries","filter","value","key","setAttribute","createElement","text","document","innerText","insertAfter","target","insertElement","removeElement","removeChild","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","selector","s","trim","className","replace","stripped","parts","start","charAt","class","id","toggleHidden","hidden","hide","hasAttribute","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","navigator","userAgent","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","cancelRequests","blankVideo","debug","log","cloneDeep","JSON","parse","stringify","getDeep","path","reduce","obj","shift","generateId","prefix","Math","floor","random","format","toString","i","getPercentage","current","max","toFixed","replaceAll","RegExp","toTitleCase","toUpperCase","substr","toLowerCase","toPascalCase","toCamelCase","slice","stripHTML","fragment","createDocumentFragment","innerHTML","firstChild","getHTML","i18n","seekTime","title","dedupe","indexOf","closest","prev","curr","abs","Storage","enabled","storage","store","localStorage","getItem","json","setItem","removeItem","fetch","responseType","reject","request","XMLHttpRequest","responseText","response","Error","status","open","send","loadSprite","hasId","isCached","exists","getElementById","update","data","body","insertAdjacentElement","useStorage","cached","content","result","catch","getHours","parseInt","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","iconUrl","location","cors","host","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","tooltip","error","warn","toggleNativeControls","createIcon","namespace","iconPath","iconPrefix","icon","createElementNS","role","use","setAttributeNS","createLabel","attr","universals","join","createBadge","badge","menu","createButton","buttonType","button","label","labelPressed","iconPressed","control","controlPressed","enumerable","pressed","createRange","min","step","autocomplete","updateRangeFill","createProgress","suffixKey","played","suffix","createTime","bindMenuItemShortcuts","menuItem","which","stopPropagation","isRadioButton","showMenuPanel","nextElementSibling","firstElementChild","previousElementSibling","lastElementChild","createMenuItem","list","checked","flex","children","node","listeners","bind","currentTrack","speed","parseFloat","forceHours","updateTimeDisplay","updateVolume","setRange","muted","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","toggleMenu","popup","show","isMenuItem","isButton","firstItem","getMenuSize","tab","clone","position","opacity","scrollWidth","height","scrollHeight","size","restore","propertyName","create","inner","home","backButton","inject","props","seektime","insertAdjacentHTML","labels","parseUrl","safe","parser","href","buildUrlParams","params","URLSearchParams","setup","isVideo","isYouTube","protocol","createObjectURL","blob","languages","userLanguage","active","trackEvents","meta","currentTrackNode","languageExists","mode","updateCues","setLanguage","activeClass","findTrack","embed","enableTextTrack","has","sortIsDefault","sorted","every","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","changed","caption","defaults","autoplay","autopause","toggleInvert","ratio","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","global","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","end","all","reset","disabled","advertisement","qualityBadge","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","Fullscreen","property","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","eventType","attribute","done","seekTo","isFocusIn","webkitDirectionInvertedFromDevice","deltaX","deltaY","direction","sign","define","this","loadScript","loadjs","success","parseId","regex","$2","getAspectRatio","getRatio","w","h","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","padding","paddingBottom","offset","transform","byline","portrait","transparent","gesture","thumbnail_large","pathname","Player","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","setPlaybackRate","name","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","setAutopause","state","getVideoTitle","getCurrentTime","getDuration","getTextTracks","strippedCues","getPaused","frame","seconds","mapQualityUnit","qualities","hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","entry","mapQualityUnits","levels","level","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","items","snippet","currentId","posterSrc","playerVars","rel","showinfo","iv_load_policy","modestbranding","disablekb","widget_referrer","cc_load_policy","cc_lang_pref","onError","message","onPlaybackQualityChange","onPlaybackRateChange","instance","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","onStateChange","seeked","getAvailableQualityLevels","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","searchParams","truthy","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","realDuration","Infinity","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","states","inline","webkitPresentationMode","t"],"mappings":"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","file":"plyr.js","sourcesContent":["// ==========================================================================\n// Type checking utils\n// ==========================================================================\n\nconst getConstructor = input => (input !== null && typeof input !== 'undefined' ? input.constructor : null);\nconst instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\nconst isNullOrUndefined = input => input === null || typeof input === 'undefined';\nconst isObject = input => getConstructor(input) === Object;\nconst isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\nconst isString = input => getConstructor(input) === String;\nconst isBoolean = input => getConstructor(input) === Boolean;\nconst isFunction = input => getConstructor(input) === Function;\nconst isArray = input => Array.isArray(input);\nconst isWeakMap = input => instanceOf(input, WeakMap);\nconst isNodeList = input => instanceOf(input, NodeList);\nconst isElement = input => instanceOf(input, Element);\nconst isTextNode = input => getConstructor(input) === Text;\nconst isEvent = input => instanceOf(input, Event);\nconst 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 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(\n element,\n event,\n callback,\n toggle = false,\n passive = true,\n capture = false,\n) {\n // Bail if no element, event, or callback\n if (\n !element ||\n !('addEventListener' in element) ||\n is.empty(event) ||\n !is.function(callback)\n ) {\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (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'](\n type,\n callback,\n options,\n );\n });\n}\n\n// Bind event handler\nexport function on(\n element,\n events = '',\n callback,\n passive = true,\n capture = false,\n) {\n toggleListener.call(\n this,\n element,\n events,\n callback,\n true,\n passive,\n capture,\n );\n}\n\n// Unbind event handler\nexport function off(\n element,\n events = '',\n callback,\n passive = true,\n capture = false,\n) {\n toggleListener.call(\n this,\n element,\n events,\n callback,\n false,\n passive,\n capture,\n );\n}\n\n// Bind once-only event handler\nexport function once(\n element,\n events = '',\n callback,\n passive = true,\n capture = false,\n) {\n function onceCallback(...args) {\n off(element, events, onceCallback, passive, capture);\n callback.apply(this, args);\n }\n\n toggleListener.call(\n this,\n element,\n events,\n onceCallback,\n true,\n passive,\n capture,\n );\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 =>\n this.ready\n ? setTimeout(resolve, 0)\n : 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 (\n !is.element(oldChild) ||\n !is.element(oldChild.parentNode) ||\n !is.element(newChild)\n ) {\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.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n}\n\n// Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\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(\n this,\n 'button:not(:disabled), input:not(:disabled), [tabindex]',\n );\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(\n this,\n this.elements.container,\n 'keydown',\n trap,\n toggle,\n false,\n );\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(\n event => element.style[event] !== undefined,\n );\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 =\n browser.isIPhone && playsinline && support.playsinline;\n const api = support[type] || provider !== 'html5';\n const ui =\n api &&\n support.rangeInput &&\n (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: (() =>\n !browser.isIPhone &&\n 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(\n type && this.media.canPlayType(type).replace(/no/, ''),\n );\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:\n 'matchMedia' in window &&\n 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 });\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// Object utils\n// ==========================================================================\n\nimport is from './is';\n\n// Clone nested objects\nexport function cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n}\n\n// Get a nested value in an object\nexport function getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n}\n\n// Deep extend destination object with N more objects\nexport function extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return extend(target, ...sources);\n}\n","// ==========================================================================\n// String utils\n// ==========================================================================\n\nimport is from './is';\n\n// Generate a random ID\nexport function generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n}\n\n// Format string\nexport function format(input, ...args) {\n if (is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => args[i].toString());\n}\n\n// Get percentage\nexport function getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n}\n\n// Replace all occurances of a string in a string\nexport function replaceAll(input = '', find = '', replace = '') {\n return input.replace(\n new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'),\n replace.toString(),\n );\n}\n\n// Convert to title case\nexport function toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n}\n\n// Convert string to pascalCase\nexport function toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = toTitleCase(string);\n\n // Convert to pascal case\n return replaceAll(string, ' ', '');\n}\n\n// Convert string to pascalCase\nexport function toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n// Remove HTML from a string\nexport function stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n}\n\n// Like outerHTML, but also works for DocumentFragment\nexport function getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n}\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport is from './utils/is';\nimport { getDeep } from './utils/objects';\nimport { replaceAll } from './utils/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// 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// 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 i18n from './i18n';\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 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(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n } 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 // Toggle classname when pressed property is set\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 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 bindMenuItemShortcuts(menuItem, type) {\n // Handle space or -> to open menu\n on(menuItem, 'keydown', 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 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 }, false);\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 keydown',\n event => {\n if (event.type === 'keydown' && 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', event.type === 'keydown');\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}%`);\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 // 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 const show = is.boolean(input) ? input : is.element(popup) && popup.hasAttribute('hidden');\n\n if (is.event(input)) {\n const isMenuItem = is.element(popup) && popup.contains(input.target);\n const isButton = input.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n input.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n // Show the actual popup\n if (is.element(popup)) {\n toggleHidden(popup, !show);\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n // Focus the first item if key interaction\n if (show && is.event(input) && input.type === 'keydown') {\n const pane = Object.values(this.elements.settings.panels).find(pane => !pane.hidden);\n const firstItem = pane.querySelector('[role^=\"menuitem\"]');\n setFocus.call(this, firstItem, true);\n }\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 const firstItem = target.querySelector('[role^=\"menuitem\"]');\n setFocus.call(this, firstItem, tabFocus);\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (is.empty(this.config.controls)) {\n return null;\n }\n\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 // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n 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 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 id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const popup = createElement('div', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\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(pane, 'keydown', 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 }, false);\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 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 (is.string(this.config.controls) || is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([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\n if (is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n 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 i18n from './i18n';\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 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 languages = dedupe(\n Array.from(navigator.languages || navigator.language || navigator.userLanguage).map(language => language.split('-')[0]),\n );\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: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [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 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress__buffer',\n loop: '.plyr__progress__loop', // Used later\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n caption: '.plyr__caption',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n 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// ==========================================================================\n\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 // 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 if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Load image avoiding xhr/fetch CORS issues\n// Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded\n// By default it checks if it is at least 1px, but you can add a second argument to change this\n// ==========================================================================\n\nexport default function loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n\n Object.assign(image, { onload: handler, onerror: handler, src });\n });\n}\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\nimport is from './utils/is';\nimport loadImage from './utils/loadImage';\n\nconst ui = {\n addStyleHook() {\n toggleClass(\n this.elements.container,\n this.config.selectors.container.replace('.', ''),\n true,\n );\n toggleClass(\n this.elements.container,\n this.config.classNames.uiSupported,\n this.supported.ui,\n );\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(\n `Basic support only for ${this.provider} ${this.type}`,\n );\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(\n this.elements.container,\n this.config.classNames.airplay.supported,\n support.airplay && this.isHTML5,\n );\n\n // Add iOS class\n toggleClass(\n this.elements.container,\n this.config.classNames.isIos,\n browser.isIos,\n );\n\n // Add touch class\n toggleClass(\n this.elements.container,\n this.config.classNames.isTouch,\n this.touch,\n );\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)\n ? this.config.title\n : '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(\n this.elements.container,\n this.config.classNames.posterEnabled,\n enable,\n );\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(\n 'setPoster cancelled by later call to setPoster',\n );\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(\n this.elements.container,\n this.config.classNames.playing,\n this.playing,\n );\n toggleClass(\n this.elements.container,\n this.config.classNames.paused,\n this.paused,\n );\n toggleClass(\n this.elements.container,\n this.config.classNames.stopped,\n this.stopped,\n );\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(\n this.elements.container,\n this.config.classNames.loading,\n this.loading,\n );\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(\n Boolean(\n force ||\n this.loading ||\n this.paused ||\n controls.pressed ||\n controls.hover,\n ),\n );\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 {\n getElement,\n getElements,\n hasClass,\n matches,\n toggleClass,\n toggleHidden,\n} 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 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 } = player.elements.inputs;\n\n if (focused !== seek && matches(focused, editable)) {\n return;\n }\n\n if (\n event.which === 32 &&\n matches(focused, 'button, [role^=\"menuitem\"]')\n ) {\n return;\n }\n }\n\n // Which keycodes should we prevent default\n const preventDefault = [\n 32,\n 37,\n 38,\n 39,\n 40,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 67,\n 70,\n 73,\n 75,\n 76,\n 77,\n 79,\n ];\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n 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 (\n !player.fullscreen.enabled &&\n player.fullscreen.active &&\n code === 27\n ) {\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\n player.touch = true;\n\n // Add touch class\n toggleClass(\n player.elements.container,\n player.config.classNames.isTouch,\n true,\n );\n }\n\n setTabFocus(event) {\n const { player } = this;\n\n clearTimeout(this.focusTimer);\n\n // Ignore any key other than tab\n if (event.type === 'keydown' && event.code !== 'Tab') {\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 (!player.elements.container.contains(focused)) {\n return;\n }\n\n toggleClass(\n document.activeElement,\n player.config.classNames.tabFocus,\n true,\n );\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(\n player,\n window,\n 'keydown keyup',\n this.handleKey,\n toggle,\n false,\n );\n }\n\n // Click anywhere closes menu\n toggleListener.call(\n player,\n document.body,\n 'click',\n this.toggleMenu,\n toggle,\n );\n\n // Detect touch by events\n once.call(player, document.body, 'touchstart', this.firstTouch);\n\n // Tab focus detection\n toggleListener.call(\n player,\n document.body,\n 'keydown focus blur',\n this.setTabFocus,\n toggle,\n false,\n true,\n );\n }\n\n // Container listeners\n container() {\n const { player } = this;\n\n // Keyboard shortcuts\n if (!player.config.keyboard.global && player.config.keyboard.focused) {\n on.call(\n player,\n player.elements.container,\n 'keydown keyup',\n this.handleKey,\n false,\n );\n }\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n player,\n player.elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = player.elements;\n\n // Remove button states for fullscreen\n if (event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = ['touchstart', 'touchmove', 'mousemove'].includes(\n event.type,\n );\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(\n () => ui.toggleControls.call(player, false),\n delay,\n );\n },\n );\n }\n\n // Listen for media events\n media() {\n const { player } = this;\n\n // Time change on media\n on.call(player, player.media, 'timeupdate seeking seeked', event =>\n controls.timeUpdate.call(player, event),\n );\n\n // Display duration\n on.call(\n player,\n player.media,\n 'durationchange loadeddata loadedmetadata',\n event => 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(player.elements.volume, !player.hasAudio);\n toggleHidden(player.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(\n player,\n player.media,\n 'progress playing seeking seeked',\n event => controls.updateProgress.call(player, event),\n );\n\n // Handle volume changes\n on.call(player, player.media, 'volumechange', event =>\n controls.updateVolume.call(player, event),\n );\n\n // Handle play/pause\n on.call(\n player,\n player.media,\n 'playing play pause ended emptied timeupdate',\n event => ui.checkPlaying.call(player, event),\n );\n\n // Loading state\n on.call(player, player.media, 'waiting canplay seeked playing', event =>\n ui.checkLoading.call(player, event),\n );\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\n .then(() => player.ads.play())\n .catch(() => player.play());\n }\n });\n\n // Click video\n if (\n player.supported.ui &&\n player.config.clickToPlay &&\n !player.isAudio\n ) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(\n player,\n `.${player.config.classNames.video}`,\n );\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(\n player,\n player.elements.container,\n 'click touchstart',\n event => {\n const targets = [player.elements.container, wrapper];\n\n // Ignore if click if not container or in video wrapper\n if (\n !targets.includes(event.target) &&\n !wrapper.contains(event.target)\n ) {\n return;\n }\n\n // First touch on touch devices will just show controls (if we're hiding controls)\n // If controls are shown then it'll toggle like a pointer device\n if (\n player.config.hideControls &&\n player.touch &&\n hasClass(\n player.elements.container,\n player.config.classNames.hideControls,\n )\n ) {\n return;\n }\n\n if (player.ended) {\n player.restart();\n player.play();\n } else {\n player.togglePlay();\n }\n },\n );\n }\n\n // Disable right click\n if (player.supported.ui && player.config.disableContextMenu) {\n on.call(\n player,\n player.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 request\n on.call(player, player.media, 'qualityrequested', event => {\n // Save to storage\n player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n on.call(player, player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(\n player,\n 'quality',\n null,\n event.detail.quality,\n );\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = player.config.events\n .concat(['keyup', 'keydown'])\n .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(\n player,\n player.elements.container,\n event.type,\n true,\n detail,\n );\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\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 (player.elements.buttons.play) {\n Array.from(player.elements.buttons.play).forEach(button => {\n this.bind(button, 'click', player.togglePlay, 'play');\n });\n }\n\n // Pause\n this.bind(\n player.elements.buttons.restart,\n 'click',\n player.restart,\n 'restart',\n );\n\n // Rewind\n this.bind(\n player.elements.buttons.rewind,\n 'click',\n player.rewind,\n 'rewind',\n );\n\n // Rewind\n this.bind(\n player.elements.buttons.fastForward,\n 'click',\n player.forward,\n 'fastForward',\n );\n\n // Mute toggle\n this.bind(\n player.elements.buttons.mute,\n 'click',\n () => {\n player.muted = !player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n this.bind(player.elements.buttons.captions, 'click', () =>\n player.toggleCaptions(),\n );\n\n // Fullscreen toggle\n this.bind(\n player.elements.buttons.fullscreen,\n 'click',\n () => {\n player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n this.bind(\n player.elements.buttons.pip,\n 'click',\n () => {\n player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n this.bind(\n player.elements.buttons.airplay,\n 'click',\n player.airplay,\n 'airplay',\n );\n\n // Settings menu - click toggle\n this.bind(player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(player, event);\n });\n\n // Settings menu - keyboard toggle\n this.bind(\n player.elements.buttons.settings,\n 'keydown',\n event => {\n // We only care about space\n if (event.which !== 32) {\n return;\n }\n\n // Prevent scroll\n event.preventDefault();\n\n // Prevent playing video\n event.stopPropagation();\n\n // Toggle menu\n controls.toggleMenu.call(player, event);\n },\n null,\n false,\n );\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n this.bind(player.elements.inputs.seek, 'mousedown mousemove', event => {\n const rect = player.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(\n player.elements.inputs.seek,\n 'mousedown mouseup keydown keyup touchstart touchend',\n event => {\n const seek = event.currentTarget;\n const code = event.keyCode ? event.keyCode : event.which;\n const eventType = event.type;\n const attribute = 'play-on-seeked';\n\n if (\n (eventType === 'keydown' || eventType === 'keyup') &&\n (code !== 39 && code !== 37)\n ) {\n return;\n }\n // Was playing before?\n const play = seek.hasAttribute(attribute);\n\n // Done seeking\n const done = ['mouseup', 'touchend', 'keyup'].includes(\n event.type,\n );\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\n // Seek\n this.bind(\n player.elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\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 repaint(seek);\n }\n\n player.currentTime = seekTo / seek.max * player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (\n player.config.toggleInvert &&\n !is.element(player.elements.display.duration)\n ) {\n this.bind(player.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 player.elements.inputs.volume,\n inputEvent,\n event => {\n player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n Array.from(getElements.call(player, 'input[type=\"range\"]')).forEach(\n element => {\n this.bind(element, 'input', event =>\n controls.updateRangeFill.call(player, event.target),\n );\n },\n );\n }\n\n // Seek tooltip\n this.bind(\n player.elements.progress,\n 'mouseenter mouseleave mousemove',\n event => controls.updateSeekTooltip.call(player, event),\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(player.elements.controls, 'mouseenter mouseleave', event => {\n player.elements.controls.hover =\n !player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(\n player.elements.controls,\n 'mousedown mouseup touchstart touchend touchcancel',\n event => {\n player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n },\n );\n\n // Focus in/out on controls\n this.bind(player.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(\n elements.controls,\n config.classNames.noTransition,\n isFocusIn,\n );\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(\n elements.controls,\n config.classNames.noTransition,\n false,\n );\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(\n () => ui.toggleControls.call(player, false),\n delay,\n );\n }\n });\n\n // Mouse wheel for volume\n this.bind(\n player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n\n // Get delta from event. Invert if `inverted` is true\n const [x, y] = [event.deltaX, -event.deltaY].map(\n value => (inverted ? -value : value),\n );\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 (\n (direction === 1 && volume < 1) ||\n (direction === -1 && volume > 0)\n ) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n}\n\nexport default Listeners;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Load an external script\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nexport default function loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n}\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from '../captions';\nimport controls from '../controls';\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { format, stripHTML } from '../utils/strings';\nimport { buildUrlParams } from '../utils/urls';\n\n// Parse Vimeo ID from URL\nfunction parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n\n if (is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n}\n\n// Get aspect ratio for dimensions\nfunction getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!is.object(window.Vimeo)) {\n loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const [x, y] = (is.string(input) ? input : this.config.ratio).split(':');\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 controls from '../controls';\nimport ui from '../ui';\nimport { dedupe } from '../utils/arrays';\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// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n const qualities = {\n hd2160: 2160,\n hd1440: 1440,\n hd1080: 1080,\n hd720: 720,\n large: 480,\n medium: 360,\n small: 240,\n tiny: 144,\n };\n\n const entry = Object.entries(qualities).find(entry => entry.includes(input));\n\n if (entry) {\n // Get the match corresponding to the input\n return entry.find(value => value !== input);\n }\n\n return 'default';\n}\n\nfunction mapQualityUnits(levels) {\n if (is.empty(levels)) {\n return levels;\n }\n\n return dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n 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 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 onPlaybackQualityChange() {\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n triggerEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // If paused 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 // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n instance.setPlaybackQuality(mapQualityUnit(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 // Get quality\n controls.setQualityMenu.call(\n player,\n mapQualityUnits(instance.getAvailableQualityLevels()),\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 i18n from '../i18n';\nimport { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\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 // 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 // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n 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.3.22\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 (\n (window.jQuery && this.media instanceof jQuery) ||\n is.nodeList(this.media) ||\n is.array(this.media)\n ) {\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(\n this.media.getAttribute('data-plyr-config'),\n );\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.searchParams.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(\n url.searchParams.get('playsinline'),\n );\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(\n this.config.attributes.embed.provider,\n );\n\n // Remove attribute\n this.media.removeAttribute(\n this.config.attributes.embed.provider,\n );\n }\n\n // Unsupported or missing provider\n if (\n is.empty(this.provider) ||\n !Object.keys(providers).includes(this.provider)\n ) {\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 (\n this.media.hasAttribute('playsinline') ||\n this.media.hasAttribute('webkit-playsinline')\n ) {\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(\n this.type,\n this.provider,\n this.config.playsinline,\n );\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(\n this,\n this.elements.container,\n this.config.events.join(' '),\n event => {\n this.debug.log(`event: ${event.type}`);\n },\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 =\n this.currentTime -\n (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 =\n this.currentTime +\n (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\n ? Math.min(input, this.duration)\n : 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 =\n !is.number(realDuration) || realDuration === Infinity\n ? 0\n : 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(\n `Unsupported quality option: ${quality}, using ${value} instead`,\n );\n quality = value;\n }\n\n // Trigger request event\n triggerEvent.call(this, this.media, 'qualityrequested', false, {\n quality,\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(\n toggle ? states.pip : states.inline,\n );\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n 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(\n this.elements.container,\n this.config.classNames.hideControls,\n );\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(\n this.elements.container,\n this.config.classNames.hideControls,\n force,\n );\n\n // Close menu\n if (\n hiding &&\n this.config.controls.includes('settings') &&\n !is.empty(this.config.settings)\n ) {\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(\n this,\n this.elements.original,\n 'destroyed',\n true,\n );\n\n // Callback\n if (is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Provider specific stuff\n if (this.isHTML5) {\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n } else if (this.isYouTube) {\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n } else if (this.isVimeo) {\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (is.array(selector)) {\n targets = selector.filter(is.element);\n }\n\n if (is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = cloneDeep(defaults);\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/dist/plyr.min.js b/dist/plyr.min.js
index f8a6b1c1..3bda1e1d 100644
--- a/dist/plyr.min.js
+++ b/dist/plyr.min.js
@@ -1,2 +1,2 @@
-"object"==typeof navigator&&function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e=function(e){return null!=e?e.constructor:null},t=function(e,t){return Boolean(e&&t&&e instanceof t)},i=function(e){return null==e},n=function(t){return e(t)===Object},a=function(t){return e(t)===String},s=function(e){return Array.isArray(e)},r=function(e){return t(e,NodeList)},l=function(e){return i(e)||(a(e)||s(e)||r(e))&&!e.length||n(e)&&!Object.keys(e).length},o={nullOrUndefined:i,object:n,number:function(t){return e(t)===Number&&!Number.isNaN(t)},string:a,boolean:function(t){return e(t)===Boolean},function:function(t){return e(t)===Function},array:s,weakMap:function(e){return t(e,WeakMap)},nodeList:r,element:function(e){return t(e,Element)},textNode:function(t){return e(t)===Text},event:function(e){return t(e,Event)},cue:function(e){return t(e,window.TextTrackCue)||t(e,window.VTTCue)},track:function(e){return t(e,TextTrack)||!i(e)&&a(e.kind)},url:function(e){if(t(e,window.URL))return!0;var i=e;e.startsWith("http://")&&e.startsWith("https://")||(i="http://"+e);try{return!l(new URL(i).hostname)}catch(e){return!1}},empty:l},c=function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}return e}();function u(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],a=this,s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],r=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(e&&"addEventListener"in e&&!o.empty(t)&&o.function(i)){var l=t.split(" "),u=r;c&&(u={passive:s,capture:r}),l.forEach(function(t){a&&a.eventListeners&&n&&a.eventListeners.push({element:e,type:t,callback:i,options:u}),e[n?"addEventListener":"removeEventListener"](t,i,u)})}}function d(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.call(this,e,t,i,!0,n,a)}function h(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.call(this,e,t,i,!1,n,a)}function p(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.call(this,e,t,function s(){h(e,t,s,n,a);for(var r=arguments.length,l=Array(r),o=0;o<r;o++)l[o]=arguments[o];i.apply(this,l)},!0,n,a)}function m(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(o.element(e)&&!o.empty(t)){var a=new CustomEvent(t,{bubbles:i,detail:Object.assign({},n,{plyr:this})});e.dispatchEvent(a)}}var f=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},g=function(){function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t}}(),y=function(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e},v=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var i=[],n=!0,a=!1,s=void 0;try{for(var r,l=e[Symbol.iterator]();!(n=(r=l.next()).done)&&(i.push(r.value),!t||i.length!==t);n=!0);}catch(e){a=!0,s=e}finally{try{!n&&l.return&&l.return()}finally{if(a)throw s}}return i}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function b(e,t){var i=e.length?e:[e];Array.from(i).reverse().forEach(function(e,i){var n=i>0?t.cloneNode(!0):t,a=e.parentNode,s=e.nextSibling;n.appendChild(e),s?a.insertBefore(n,s):a.appendChild(n)})}function k(e,t){o.element(e)&&!o.empty(t)&&Object.entries(t).filter(function(e){var t=v(e,2)[1];return!o.nullOrUndefined(t)}).forEach(function(t){var i=v(t,2),n=i[0],a=i[1];return e.setAttribute(n,a)})}function w(e,t,i){var n=document.createElement(e);return o.object(t)&&k(n,t),o.string(i)&&(n.innerText=i),n}function T(e,t,i,n){o.element(t)&&t.appendChild(w(e,i,n))}function A(e){o.nodeList(e)||o.array(e)?Array.from(e).forEach(A):o.element(e)&&o.element(e.parentNode)&&e.parentNode.removeChild(e)}function E(e){if(o.element(e))for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1}function C(e,t){return o.element(t)&&o.element(t.parentNode)&&o.element(e)?(t.parentNode.replaceChild(e,t),e):null}function P(e,t){if(!o.string(e)||o.empty(e))return{};var i={},n=t;return e.split(",").forEach(function(e){var t=e.trim(),a=t.replace(".",""),s=t.replace(/[[\]]/g,"").split("="),r=s[0],l=s.length>1?s[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":o.object(n)&&o.string(n.class)&&(n.class+=" "+a),i.class=a;break;case"#":i.id=t.replace("#","");break;case"[":i[r]=l}}),i}function S(e,t){if(o.element(e)){var i=t;o.boolean(i)||(i=!e.hasAttribute("hidden")),i?e.setAttribute("hidden",""):e.removeAttribute("hidden")}}function N(e,t,i){if(o.nodeList(e))return Array.from(e).map(function(e){return N(e,t,i)});if(o.element(e)){var n="toggle";return void 0!==i&&(n=i?"add":"remove"),e.classList[n](t),e.classList.contains(t)}return!1}function M(e,t){return o.element(e)&&e.classList.contains(t)}function L(e,t){var i={Element:Element};return(i.matches||i.webkitMatchesSelector||i.mozMatchesSelector||i.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)}).call(e,t)}function x(e){return this.elements.container.querySelectorAll(e)}function _(e){return this.elements.container.querySelector(e)}function I(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];o.element(e)&&(e.focus(),t&&N(e,this.config.classNames.tabFocus))}var q,O,j,R=(q=document.createElement("span"),O={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},j=Object.keys(O).find(function(e){return void 0!==q.style[e]}),!!o.string(j)&&O[j]);var B,H={isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)},V={"audio/ogg":"vorbis","audio/wav":"1","video/webm":"vp8, vorbis","video/mp4":"avc1.42E01E, mp4a.40.2","video/ogg":"theora"},D={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,i){var n=H.isIPhone&&i&&D.playsinline,a=D[e]||"html5"!==t;return{api:a,ui:a&&D.rangeInput&&("video"!==e||!H.isIPhone||n)}},pip:!H.isIPhone&&o.function(w("video").webkitSetPresentationMode),airplay:o.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=e.split("/"),i=v(t,1)[0];if(!this.isHTML5||i!==this.type)return!1;var n=void 0;e&&e.includes("codecs=")?n=e:"audio/mpeg"===e?n="audio/mpeg;":e in V&&(n=e+'; codecs="'+V[e]+'"');try{return Boolean(n&&this.media.canPlayType(n).replace(/no/,""))}catch(e){return!1}},textTracks:"textTracks"in document.createElement("video"),rangeInput:(B=document.createElement("input"),B.type="range","range"===B.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==R,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},F={getSources:function(){var e=this;return this.isHTML5?Array.from(this.media.querySelectorAll("source")).filter(function(t){return D.mime.call(e,t.getAttribute("type"))}):[]},getQualityOptions:function(){return F.getSources.call(this).map(function(e){return Number(e.getAttribute("size"))}).filter(Boolean)},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=F.getSources.call(e).find(function(t){return t.getAttribute("src")===e.source});return t&&Number(t.getAttribute("size"))},set:function(t){var i=F.getSources.call(e).find(function(e){return Number(e.getAttribute("size"))===t});if(i){var n=e.media,a=n.currentTime,s=n.paused,r=n.preload,l=n.readyState;e.media.src=i.getAttribute("src"),("none"!==r||l)&&(e.once("loadedmetadata",function(){e.currentTime=a,s||e.play()}),e.media.load()),m.call(e,e.media,"qualitychange",!1,{quality:t})}}})}},cancelRequests:function(){this.isHTML5&&(A(F.getSources.call(this)),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}};function U(e,t){return t.split(".").reduce(function(e,t){return e&&e[t]},e)}function z(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];if(!i.length)return e;var a=i.shift();return o.object(a)?(Object.keys(a).forEach(function(t){o.object(a[t])?(Object.keys(e).includes(t)||Object.assign(e,y({},t,{})),z(e[t],a[t])):Object.assign(e,y({},t,a[t]))}),z.apply(void 0,[e].concat(i))):e}function W(e){for(var t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];return o.empty(e)?e:e.toString().replace(/{(\d+)}/g,function(e,t){return i[t].toString()})}function K(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),i.toString())}function Y(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})}function Q(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=K(e,"-"," "),e=K(e,"_"," "),K(e=Y(e)," ","")}(e)).charAt(0).toLowerCase()+e.slice(1)}function J(e){var t=document.createElement("div");return t.appendChild(e),t.innerHTML}var $=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(o.empty(e)||o.empty(t))return"";var i=U(t.i18n,e);if(o.empty(i))return"";var n={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(n).forEach(function(e){var t=v(e,2),n=t[0],a=t[1];i=K(i,n,a)}),i};function G(e){return o.array(e)?e.filter(function(t,i){return e.indexOf(t)===i}):e}var X=function(){function e(t){f(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return g(e,[{key:"get",value:function(t){if(!e.supported||!this.enabled)return null;var i=window.localStorage.getItem(this.key);if(o.empty(i))return null;var n=JSON.parse(i);return o.string(t)&&t.length?n[t]:n}},{key:"set",value:function(t){if(e.supported&&this.enabled&&o.object(t)){var i=this.get();o.empty(i)&&(i={}),z(i,t),window.localStorage.setItem(this.key,JSON.stringify(i))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}();function Z(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(i,n){try{var a=new XMLHttpRequest;if(!("withCredentials"in a))return;a.addEventListener("load",function(){if("text"===t)try{i(JSON.parse(a.responseText))}catch(e){i(a.responseText)}else i(a.response)}),a.addEventListener("error",function(){throw new Error(a.status)}),a.open("GET",e,!0),a.responseType=t,a.send()}catch(e){n(e)}})}function ee(e,t){if(o.string(e)){var i=o.string(t),n=function(){return null!==document.getElementById(t)},a=function(e,t){e.innerHTML=t,i&&n()||document.body.insertAdjacentElement("afterbegin",e)};if(!i||!n()){var s=X.supported,r=document.createElement("div");if(r.setAttribute("hidden",""),i&&r.setAttribute("id",t),s){var l=window.localStorage.getItem("cache-"+t);if(null!==l){var c=JSON.parse(l);a(r,c.content)}}Z(e).then(function(e){o.empty(e)||(s&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),a(r,e))}).catch(function(){})}}}var te=function(e){return parseInt(e/60/60%60,10)},ie=function(e){return parseInt(e/60%60,10)},ne=function(e){return parseInt(e%60,10)};function ae(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!o.number(e))return ae(null,t,i);var n=function(e){return("0"+e).slice(-2)},a=te(e),s=ie(e),r=ne(e);return t||a>0?a+=":":a="",(i&&e>0?"-":"")+a+n(s)+":"+n(r)}var se={getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||H.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=_.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:x.call(this,this.config.selectors.buttons.play),pause:_.call(this,this.config.selectors.buttons.pause),restart:_.call(this,this.config.selectors.buttons.restart),rewind:_.call(this,this.config.selectors.buttons.rewind),fastForward:_.call(this,this.config.selectors.buttons.fastForward),mute:_.call(this,this.config.selectors.buttons.mute),pip:_.call(this,this.config.selectors.buttons.pip),airplay:_.call(this,this.config.selectors.buttons.airplay),settings:_.call(this,this.config.selectors.buttons.settings),captions:_.call(this,this.config.selectors.buttons.captions),fullscreen:_.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=_.call(this,this.config.selectors.progress),this.elements.inputs={seek:_.call(this,this.config.selectors.inputs.seek),volume:_.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:_.call(this,this.config.selectors.display.buffer),currentTime:_.call(this,this.config.selectors.display.currentTime),duration:_.call(this,this.config.selectors.display.duration)},o.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},createIcon:function(e,t){var i=se.getIconUrl.call(this),n=(i.cors?"":i.url)+"#"+this.config.iconPrefix,a=document.createElementNS("http://www.w3.org/2000/svg","svg");k(a,z(t,{role:"presentation",focusable:"false"}));var s=document.createElementNS("http://www.w3.org/2000/svg","use"),r=n+"-"+e;return"href"in s?s.setAttributeNS("http://www.w3.org/1999/xlink","href",r):s.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",r),a.appendChild(s),a},createLabel:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i={pip:"PIP",airplay:"AirPlay"}[e]||$(e,this.config);return w("span",Object.assign({},t,{class:[t.class,this.config.classNames.hidden].filter(Boolean).join(" ")}),i)},createBadge:function(e){if(o.empty(e))return null;var t=w("span",{class:this.config.classNames.menu.value});return t.appendChild(w("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var i=w("button"),n=Object.assign({},t),a=Q(e),s=!1,r=void 0,l=void 0,c=void 0,u=void 0;switch("type"in n||(n.type="button"),"class"in n?n.class.includes(this.config.classNames.control)||(n.class+=" "+this.config.classNames.control):n.class=this.config.classNames.control,e){case"play":s=!0,r="play",c="pause",l="play",u="pause";break;case"mute":s=!0,r="mute",c="unmute",l="volume",u="muted";break;case"captions":s=!0,r="enableCaptions",c="disableCaptions",l="captions-off",u="captions-on";break;case"fullscreen":s=!0,r="enterFullscreen",c="exitFullscreen",l="enter-fullscreen",u="exit-fullscreen";break;case"play-large":n.class+=" "+this.config.classNames.control+"--overlaid",a="play",r="play",l="play";break;default:r=a,l=e}s?(i.appendChild(se.createIcon.call(this,u,{class:"icon--pressed"})),i.appendChild(se.createIcon.call(this,l,{class:"icon--not-pressed"})),i.appendChild(se.createLabel.call(this,c,{class:"label--pressed"})),i.appendChild(se.createLabel.call(this,r,{class:"label--not-pressed"}))):(i.appendChild(se.createIcon.call(this,l)),i.appendChild(se.createLabel.call(this,r))),z(n,P(this.config.selectors.buttons[a],n)),k(i,n),"play"===a?(o.array(this.elements.buttons[a])||(this.elements.buttons[a]=[]),this.elements.buttons[a].push(i)):this.elements.buttons[a]=i;var d=this.config.classNames.controlPressed;return Object.defineProperty(i,"pressed",{enumerable:!0,get:function(){return M(i,d)},set:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];N(i,d,e)}}),i},createRange:function(e,t){var i=w("input",z(P(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-label":$(e,this.config),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=i,se.updateRangeFill.call(this,i),i},createProgress:function(e,t){var i=w("progress",z(P(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){i.appendChild(w("span",null,"0"));var n={played:"played",buffer:"buffered"}[e],a=n?$(n,this.config):"";i.innerText="% "+a.toLowerCase()}return this.elements.display[e]=i,i},createTime:function(e){var t=P(this.config.selectors.display[e]),i=w("div",z(t,{class:(this.config.classNames.display.time+" "+(t.class?t.class:"")).trim(),"aria-label":$(e,this.config)}),"00:00");return this.elements.display[e]=i,i},bindMenuItemShortcuts:function(e,t){var i=this;d(e,"keydown",function(n){if([32,38,39,40].includes(n.which)){n.preventDefault(),n.stopPropagation();var a=L(e,'[role="menuitemradio"]');if(!a&&[32,39].includes(n.which))se.showMenuPanel.call(i,t);else{var s=void 0;32!==n.which&&(40===n.which||a&&39===n.which?(s=e.nextElementSibling,o.element(s)||(s=e.parentNode.firstElementChild)):(s=e.previousElementSibling,o.element(s)||(s=e.parentNode.lastElementChild)),I.call(i,s,!0))}}},!1)},createMenuItem:function(e){var t=this,i=e.value,n=e.list,a=e.type,s=e.title,r=e.badge,l=void 0===r?null:r,c=e.checked,u=void 0!==c&&c,d=P(this.config.selectors.inputs[a]),h=w("button",z(d,{type:"button",role:"menuitemradio",class:(this.config.classNames.control+" "+(d.class?d.class:"")).trim(),"aria-checked":u,value:i})),p=w("span");p.innerHTML=s,o.element(l)&&p.appendChild(l),h.appendChild(p),Object.defineProperty(h,"checked",{enumerable:!0,get:function(){return"true"===h.getAttribute("aria-checked")},set:function(e){e&&Array.from(h.parentNode.children).filter(function(e){return L(e,'[role="menuitemradio"]')}).forEach(function(e){return e.setAttribute("aria-checked","false")}),h.setAttribute("aria-checked",e?"true":"false")}}),this.listeners.bind(h,"click keydown",function(e){if("keydown"!==e.type||32===e.which){switch(e.preventDefault(),e.stopPropagation(),h.checked=!0,a){case"language":t.currentTrack=Number(i);break;case"quality":t.quality=i;break;case"speed":t.speed=parseFloat(i)}se.showMenuPanel.call(t,"home")}},a,!1),se.bindMenuItemShortcuts.call(this,h,a),n.appendChild(h)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return o.number(e)?ae(e,te(this.duration)>0,t):e},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];o.element(e)&&o.number(t)&&(e.innerText=se.formatTime(t,i))},updateVolume:function(){this.supported.ui&&(o.element(this.elements.inputs.volume)&&se.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),o.element(this.elements.buttons.mute)&&(this.elements.buttons.mute.pressed=this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;o.element(e)&&(e.value=t,se.updateRangeFill.call(this,e))},updateProgress:function(e){var t=this;if(this.supported.ui&&o.event(e)){var i,n,a=0;if(e)switch(e.type){case"timeupdate":case"seeking":case"seeked":i=this.currentTime,n=this.duration,a=0===i||0===n||Number.isNaN(i)||Number.isNaN(n)?0:(i/n*100).toFixed(2),"timeupdate"===e.type&&se.setRange.call(this,this.elements.inputs.seek,a);break;case"playing":case"progress":!function(e,i){var n=o.number(i)?i:0,a=o.element(e)?e:t.elements.display.buffer;if(o.element(a)){a.value=n;var s=a.getElementsByTagName("span")[0];o.element(s)&&(s.childNodes[0].nodeValue=n)}}(this.elements.display.buffer,100*this.buffered)}}},updateRangeFill:function(e){var t=o.event(e)?e.target:e;if(o.element(t)&&"range"===t.getAttribute("type")){if(L(t,this.config.selectors.inputs.seek)){t.setAttribute("aria-valuenow",this.currentTime);var i=se.formatTime(this.currentTime),n=se.formatTime(this.duration),a=$("seekLabel",this.config);t.setAttribute("aria-valuetext",a.replace("{currentTime}",i).replace("{duration}",n))}else if(L(t,this.config.selectors.inputs.volume)){var s=100*t.value;t.setAttribute("aria-valuenow",s),t.setAttribute("aria-valuetext",s+"%")}else t.setAttribute("aria-valuenow",t.value);H.isWebkit&&t.style.setProperty("--value",t.value/t.max*100+"%")}},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&o.element(this.elements.inputs.seek)&&o.element(this.elements.display.seekTooltip)&&0!==this.duration){var i=0,n=this.elements.progress.getBoundingClientRect(),a=this.config.classNames.tooltip+"--visible",s=function(e){N(t.elements.display.seekTooltip,a,e)};if(this.touch)s(!1);else{if(o.event(e))i=100/n.width*(e.pageX-n.left);else{if(!M(this.elements.display.seekTooltip,a))return;i=parseFloat(this.elements.display.seekTooltip.style.left,10)}i<0?i=0:i>100&&(i=100),se.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*i),this.elements.display.seekTooltip.style.left=i+"%",o.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&s("mouseenter"===e.type)}}},timeUpdate:function(e){var t=!o.element(this.elements.display.duration)&&this.config.invertTime;se.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||se.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui&&(this.config.invertTime||!this.currentTime)){if(this.duration>=Math.pow(2,32))return S(this.elements.display.currentTime,!0),void S(this.elements.progress,!0);o.element(this.elements.inputs.seek)&&this.elements.inputs.seek.setAttribute("aria-valuemax",this.duration);var e=o.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&se.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&se.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),se.updateSeekTooltip.call(this)}},toggleMenuButton:function(e,t){S(this.elements.settings.buttons[e],!t)},updateSetting:function(e,t,i){var n=this.elements.settings.panels[e],a=null,s=t;if("captions"===e)a=this.currentTrack;else{if(a=o.empty(i)?this[e]:i,o.empty(a)&&(a=this.config[e].default),!o.empty(this.options[e])&&!this.options[e].includes(a))return void this.debug.warn("Unsupported value of '"+a+"' for "+e);if(!this.config[e].options.includes(a))return void this.debug.warn("Disabled value of '"+a+"' for "+e)}if(o.element(s)||(s=n&&n.querySelector('[role="menu"]')),o.element(s)){this.elements.settings.buttons[e].querySelector("."+this.config.classNames.menu.value).innerHTML=se.getLabel.call(this,e,a);var r=s&&s.querySelector('[value="'+a+'"]');o.element(r)&&(r.checked=!0)}},getLabel:function(e,t){switch(e){case"speed":return 1===t?$("normal",this.config):t+"&times;";case"quality":if(o.number(t)){var i=$("qualityLabel."+t,this.config);return i.length?i:t+"p"}return Y(t);case"captions":return oe.getLabel.call(this);default:return null}},setQualityMenu:function(e){var t=this;if(o.element(this.elements.settings.panels.quality)){var i=this.elements.settings.panels.quality.querySelector('[role="menu"]');o.array(e)&&(this.options.quality=G(e).filter(function(e){return t.config.quality.options.includes(e)}));var n=!o.empty(this.options.quality)&&this.options.quality.length>1;if(se.toggleMenuButton.call(this,"quality",n),E(i),se.checkMenu.call(this),n){this.options.quality.sort(function(e,i){var n=t.config.quality.options;return n.indexOf(e)>n.indexOf(i)?1:-1}).forEach(function(e){se.createMenuItem.call(t,{value:e,list:i,type:"quality",title:se.getLabel.call(t,"quality",e),badge:function(e){var i=$("qualityBadge."+e,t.config);return i.length?se.createBadge.call(t,i):null}(e)})}),se.updateSetting.call(this,"quality",i)}}},setCaptionsMenu:function(){var e=this;if(o.element(this.elements.settings.panels.captions)){var t=this.elements.settings.panels.captions.querySelector('[role="menu"]'),i=oe.getTracks.call(this),n=Boolean(i.length);if(se.toggleMenuButton.call(this,"captions",n),E(t),se.checkMenu.call(this),n){var a=i.map(function(i,n){return{value:n,checked:e.captions.toggled&&e.currentTrack===n,title:oe.getLabel.call(e,i),badge:i.language&&se.createBadge.call(e,i.language.toUpperCase()),list:t,type:"language"}});a.unshift({value:-1,checked:!this.captions.toggled,title:$("disabled",this.config),list:t,type:"language"}),a.forEach(se.createMenuItem.bind(this)),se.updateSetting.call(this,"captions",t)}}},setSpeedMenu:function(e){var t=this;if(o.element(this.elements.settings.panels.speed)){var i=this.elements.settings.panels.speed.querySelector('[role="menu"]');o.array(e)?this.options.speed=e:(this.isHTML5||this.isVimeo)&&(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(e){return t.config.speed.options.includes(e)});var n=!o.empty(this.options.speed)&&this.options.speed.length>1;se.toggleMenuButton.call(this,"speed",n),E(i),se.checkMenu.call(this),n&&(this.options.speed.forEach(function(e){se.createMenuItem.call(t,{value:e,list:i,type:"speed",title:se.getLabel.call(t,"speed",e)})}),se.updateSetting.call(this,"speed",i))}},checkMenu:function(){var e=this.elements.settings.buttons,t=!o.empty(e)&&Object.values(e).some(function(e){return!e.hidden});S(this.elements.settings.menu,!t)},toggleMenu:function(e){var t=this.elements.settings.popup,i=this.elements.buttons.settings;if(o.element(t)&&o.element(i)){var n=o.boolean(e)?e:o.element(t)&&t.hasAttribute("hidden");if(o.event(e)){var a=o.element(t)&&t.contains(e.target),s=e.target===this.elements.buttons.settings;if(a||!a&&!s&&n)return;s&&e.stopPropagation()}if(o.element(i)&&i.setAttribute("aria-expanded",n),o.element(t)&&(S(t,!n),N(this.elements.container,this.config.classNames.menu.open,n),n&&o.event(e)&&"keydown"===e.type)){var r=Object.values(this.elements.settings.panels).find(function(e){return!e.hidden}).querySelector('[role^="menuitem"]');I.call(this,r,!0)}}},getMenuSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),e.parentNode.appendChild(t);var i=t.scrollWidth,n=t.scrollHeight;return A(t),{width:i,height:n}},showMenuPanel:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",i=document.getElementById("plyr-settings-"+this.id+"-"+t);if(o.element(i)){var n=i.parentNode,a=Array.from(n.children).find(function(e){return!e.hidden});if(D.transitions&&!D.reducedMotion){n.style.width=a.scrollWidth+"px",n.style.height=a.scrollHeight+"px";var s=se.getMenuSize.call(this,i);d.call(this,n,R,function t(i){i.target===n&&["width","height"].includes(i.propertyName)&&(n.style.width="",n.style.height="",h.call(e,n,R,t))}),n.style.width=s.width+"px",n.style.height=s.height+"px"}S(a,!0),S(i,!1);var r=i.querySelector('[role^="menuitem"]');I.call(this,r,!0)}},create:function(e){var t=this;if(o.empty(this.config.controls))return null;var i=w("div",P(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&i.appendChild(se.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&i.appendChild(se.createButton.call(this,"rewind")),this.config.controls.includes("play")&&i.appendChild(se.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&i.appendChild(se.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var n=w("div",P(this.config.selectors.progress));if(n.appendChild(se.createRange.call(this,"seek",{id:"plyr-seek-"+e.id})),n.appendChild(se.createProgress.call(this,"buffer")),this.config.tooltips.seek){var a=w("span",{class:this.config.classNames.tooltip},"00:00");n.appendChild(a),this.elements.display.seekTooltip=a}this.elements.progress=n,i.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&i.appendChild(se.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&i.appendChild(se.createTime.call(this,"duration")),this.config.controls.includes("mute")&&i.appendChild(se.createButton.call(this,"mute")),this.config.controls.includes("volume")){var s=w("div",{class:"plyr__volume"}),r={max:1,step:.05,value:this.config.volume};s.appendChild(se.createRange.call(this,"volume",z(r,{id:"plyr-volume-"+e.id}))),this.elements.volume=s,i.appendChild(s)}if(this.config.controls.includes("captions")&&i.appendChild(se.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!o.empty(this.config.settings)){var l=w("div",{class:"plyr__menu",hidden:""});l.appendChild(se.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var c=w("div",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,hidden:"","aria-labelled-by":"plyr-settings-toggle-"+e.id}),u=w("div"),h=w("div",{id:"plyr-settings-"+e.id+"-home"}),p=w("div",{role:"menu"});h.appendChild(p),u.appendChild(h),this.elements.settings.panels.home=h,this.config.settings.forEach(function(i){var n=w("button",z(P(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",role:"menuitem","aria-haspopup":!0,hidden:""}));se.bindMenuItemShortcuts.call(t,n,i),d(n,"click",function(){se.showMenuPanel.call(t,i)});var a=w("span",null,$(i,t.config)),s=w("span",{class:t.config.classNames.menu.value});s.innerHTML=e[i],a.appendChild(s),n.appendChild(a),p.appendChild(n);var r=w("div",{id:"plyr-settings-"+e.id+"-"+i,hidden:""}),l=w("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back"});l.appendChild(w("span",{"aria-hidden":!0},$(i,t.config))),l.appendChild(w("span",{class:t.config.classNames.hidden},$("menuBack",t.config))),d(r,"keydown",function(e){37===e.which&&(e.preventDefault(),e.stopPropagation(),se.showMenuPanel.call(t,"home"))},!1),d(l,"click",function(){se.showMenuPanel.call(t,"home")}),r.appendChild(l),r.appendChild(w("div",{role:"menu"})),u.appendChild(r),t.elements.settings.buttons[i]=n,t.elements.settings.panels[i]=r}),c.appendChild(u),l.appendChild(c),i.appendChild(l),this.elements.settings.popup=c,this.elements.settings.menu=l}return this.config.controls.includes("pip")&&D.pip&&i.appendChild(se.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&D.airplay&&i.appendChild(se.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&i.appendChild(se.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(se.createButton.call(this,"play-large")),this.elements.controls=i,this.isHTML5&&se.setQualityMenu.call(this,F.getQualityOptions.call(this)),se.setSpeedMenu.call(this),i},inject:function(){var e=this;if(this.config.loadSprite){var t=se.getIconUrl.call(this);t.cors&&ee(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var i=null;this.elements.controls=null;var n={id:this.id,seektime:this.config.seekTime,title:this.config.title},a=!0;o.string(this.config.controls)||o.element(this.config.controls)?i=this.config.controls:o.function(this.config.controls)?i=this.config.controls.call(this,n):(i=se.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:oe.getLabel.call(this)}),a=!1);var s=function(e){var t=e;return Object.entries(n).forEach(function(e){var i=v(e,2),n=i[0],a=i[1];t=K(t,"{"+n+"}",a)}),t};a&&(o.string(this.config.controls)?i=s(i):o.element(i)&&(i.innerHTML=s(i.innerHTML)));var r,l=void 0;if(o.string(this.config.selectors.controls.container)&&(l=document.querySelector(this.config.selectors.controls.container)),o.element(l)||(l=this.elements.container),o.element(i)?l.appendChild(i):i&&l.insertAdjacentHTML("beforeend",i),o.element(this.elements.controls)||se.findElements.call(this),window.navigator.userAgent.includes("Edge")&&(r=l,setTimeout(function(){S(r,!0),r.offsetHeight,S(r,!1)},0)),this.config.tooltips.controls){var c=this.config,u=c.classNames,d=c.selectors,h=d.controls.wrapper+" "+d.labels+" ."+u.hidden,p=x.call(this,h);Array.from(p).forEach(function(t){N(t,e.config.classNames.hidden,!1),N(t,e.config.classNames.tooltip,!0)})}}};function re(e){var t=e;if(!(arguments.length>1&&void 0!==arguments[1])||arguments[1]){var i=document.createElement("a");i.href=t,t=i.href}try{return new URL(t)}catch(e){return null}}function le(e){var t=new URLSearchParams;return o.object(e)&&Object.entries(e).forEach(function(e){var i=v(e,2),n=i[0],a=i[1];t.set(n,a)}),t}var oe={setup:function(){if(this.supported.ui)if(!this.isVideo||this.isYouTube||this.isHTML5&&!D.textTracks)o.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&se.setCaptionsMenu.call(this);else{var e,t;if(o.element(this.elements.captions)||(this.elements.captions=w("div",P(this.config.selectors.captions)),e=this.elements.captions,t=this.elements.wrapper,o.element(e)&&o.element(t)&&t.parentNode.insertBefore(e,t.nextSibling)),H.isIE&&window.URL){var i=this.media.querySelectorAll("track");Array.from(i).forEach(function(e){var t=e.getAttribute("src"),i=re(t);null!==i&&i.hostname!==window.location.href.hostname&&["http:","https:"].includes(i.protocol)&&Z(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){A(e)})})}var n=G(Array.from(navigator.languages||navigator.language||navigator.userLanguage).map(function(e){return e.split("-")[0]})),a=(this.storage.get("language")||this.config.captions.language||"auto").toLowerCase();if("auto"===a)a=v(n,1)[0];var s=this.storage.get("captions");if(o.boolean(s)||(s=this.config.captions.active),Object.assign(this.captions,{toggled:!1,active:s,language:a,languages:n}),this.isHTML5){var r=this.config.captions.update?"addtrack removetrack":"removetrack";d.call(this,this.media.textTracks,r,oe.update.bind(this))}setTimeout(oe.update.bind(this),0)}},update:function(){var e=this,t=oe.getTracks.call(this,!0),i=this.captions,n=i.active,a=i.language,s=i.meta,r=i.currentTrackNode,l=Boolean(t.find(function(e){return e.language===a}));this.isHTML5&&this.isVideo&&t.filter(function(e){return!s.get(e)}).forEach(function(t){e.debug.log("Track added",t),s.set(t,{default:"showing"===t.mode}),t.mode="hidden",d.call(e,t,"cuechange",function(){return oe.updateCues.call(e)})}),(l&&this.language!==a||!t.includes(r))&&(oe.setLanguage.call(this,a),oe.toggle.call(this,n&&l)),N(this.elements.container,this.config.classNames.captions.enabled,!o.empty(t)),(this.config.controls||[]).includes("settings")&&this.config.settings.includes("captions")&&se.setCaptionsMenu.call(this)},toggle:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(this.supported.ui){var i=this.captions.toggled,n=this.config.classNames.captions.active,a=o.nullOrUndefined(e)?!i:e;if(a!==i){if(t||(this.captions.active=a,this.storage.set({captions:a})),!this.language&&a&&!t){var s=oe.getTracks.call(this),r=oe.findTrack.call(this,[this.captions.language].concat(function(e){if(Array.isArray(e)){for(var t=0,i=Array(e.length);t<e.length;t++)i[t]=e[t];return i}return Array.from(e)}(this.captions.languages)),!0);return this.captions.language=r.language,void oe.set.call(this,s.indexOf(r))}this.elements.buttons.captions&&(this.elements.buttons.captions.pressed=a),N(this.elements.container,n,a),this.captions.toggled=a,se.updateSetting.call(this,"captions"),m.call(this,this.media,a?"captionsenabled":"captionsdisabled")}}},set:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=oe.getTracks.call(this);if(-1!==e)if(o.number(e))if(e in i){if(this.captions.currentTrack!==e){this.captions.currentTrack=e;var n=i[e],a=(n||{}).language;this.captions.currentTrackNode=n,se.updateSetting.call(this,"captions"),t||(this.captions.language=a,this.storage.set({language:a})),this.isVimeo&&this.embed.enableTextTrack(a),m.call(this,this.media,"languagechange")}oe.toggle.call(this,!0,t),this.isHTML5&&this.isVideo&&oe.updateCues.call(this)}else this.debug.warn("Track not found",e);else this.debug.warn("Invalid caption argument",e);else oe.toggle.call(this,!1,t)},setLanguage:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(o.string(e)){var i=e.toLowerCase();this.captions.language=i;var n=oe.getTracks.call(this),a=oe.findTrack.call(this,[i]);oe.set.call(this,n.indexOf(a),t)}else this.debug.warn("Invalid language argument",e)},getTracks:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return Array.from((this.media||{}).textTracks||[]).filter(function(i){return!e.isHTML5||t||e.captions.meta.has(i)}).filter(function(e){return["captions","subtitles"].includes(e.kind)})},findTrack:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=oe.getTracks.call(this),a=function(e){return Number((t.captions.meta.get(e)||{}).default)},s=Array.from(n).sort(function(e,t){return a(t)-a(e)}),r=void 0;return e.every(function(e){return!(r=s.find(function(t){return t.language===e}))}),r||(i?s[0]:void 0)},getCurrentTrack:function(){return oe.getTracks.call(this)[this.currentTrack]},getLabel:function(e){var t=e;return!o.track(t)&&D.textTracks&&this.captions.toggled&&(t=oe.getCurrentTrack.call(this)),o.track(t)?o.empty(t.label)?o.empty(t.language)?$("enabled",this.config):e.language.toUpperCase():t.label:$("disabled",this.config)},updateCues:function(e){if(this.supported.ui)if(o.element(this.elements.captions))if(o.nullOrUndefined(e)||Array.isArray(e)){var t=e;if(!t){var i=oe.getCurrentTrack.call(this);t=Array.from((i||{}).activeCues||[]).map(function(e){return e.getCueAsHTML()}).map(J)}var n=t.map(function(e){return e.trim()}).join("\n");if(n!==this.elements.captions.innerHTML){E(this.elements.captions);var a=w("span",P(this.config.selectors.caption));a.innerHTML=n,this.elements.captions.appendChild(a),m.call(this,this.media,"cuechange")}}else this.debug.warn("updateCues: Invalid input",e);else this.debug.warn("No captions element to render to")}},ce={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,playsinline:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.3.12/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240,"default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:"auto",update:!1},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime}s",play:"Play",pause:"Pause",fastForward:"Forward {seektime}s",seek:"Seek",seekLabel:"{currentTime} of {duration}",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",menuBack:"Go back to previous menu",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad",qualityBadge:{2160:"4K",1440:"HD",1080:"HD",720:"HD",576:"SD",480:"SD"}},urls:{vimeo:{sdk:"https://player.vimeo.com/api/player.js",iframe:"https://player.vimeo.com/video/{0}?{1}",api:"https://vimeo.com/api/v2/video/{0}.json"},youtube:{sdk:"https://www.youtube.com/iframe_api",api:"https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet"},googleIMA:{sdk:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adscontentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress__buffer",loop:".plyr__progress__loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",caption:".plyr__caption",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{type:"plyr--{0}",provider:"plyr--{0}",video:"plyr__video-wrapper",embed:"plyr__video-embed",embedContainer:"plyr__video-embed__container",poster:"plyr__poster",posterEnabled:"plyr__poster-enabled",ads:"plyr__ads",control:"plyr__control",controlPressed:"plyr__control--pressed",playing:"plyr--playing",paused:"plyr--paused",stopped:"plyr--stopped",loading:"plyr--loading",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",display:{time:"plyr__time"},menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:""}},ue={html5:"html5",youtube:"youtube",vimeo:"vimeo"},de={audio:"audio",video:"video"};var he=function(){},pe=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];f(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return g(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):he}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):he}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):he}}]),e}();function me(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;o.element(e)&&(e.pressed=this.active),m.call(this.player,this.target,this.active?"enterfullscreen":"exitfullscreen",!0),H.isIos||function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(o.element(e)){var i=x.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),n=i[0],a=i[i.length-1];u.call(this,this.elements.container,"keydown",function(e){if("Tab"===e.key&&9===e.keyCode){var t=document.activeElement;t!==a||e.shiftKey?t===n&&e.shiftKey&&(a.focus(),e.preventDefault()):(n.focus(),e.preventDefault())}},t,!1)}}.call(this.player,this.target,this.active)}}function fe(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",N(this.target,this.player.config.classNames.fullscreen.fallback,e),me.call(this)}var ge=function(){function e(t){var i=this;f(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},d.call(this.player,document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){me.call(i)}),d.call(this.player,this.player.elements.container,"dblclick",function(e){o.element(i.player.elements.controls)&&i.player.elements.controls.contains(e.target)||i.toggle()}),this.update()}return g(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),N(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(H.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?o.empty(this.prefix)||this.target[this.prefix+"Request"+this.property]():this.target.requestFullscreen():fe.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(H.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!o.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.property]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else fe.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[""+this.prefix+this.property+"Element"]:document.fullscreenElement)===this.target:M(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return H.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(o.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!o.function(document[t+"ExitFullscreen"])&&!o.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}();function ye(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Promise(function(i,n){var a=new Image,s=function(){delete a.onload,delete a.onerror,(a.naturalWidth>=t?i:n)(a)};Object.assign(a,{onload:s,onerror:s,src:e})})}var ve={addStyleHook:function(){N(this.elements.container,this.config.selectors.container.replace(".",""),!0),N(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void ve.toggleNativeControls.call(this,!0);o.element(this.elements.controls)||(se.inject.call(this),this.listeners.controls()),ve.toggleNativeControls.call(this),this.isHTML5&&oe.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,se.updateVolume.call(this),se.timeUpdate.call(this),ve.checkPlaying.call(this),N(this.elements.container,this.config.classNames.pip.supported,D.pip&&this.isHTML5&&this.isVideo),N(this.elements.container,this.config.classNames.airplay.supported,D.airplay&&this.isHTML5),N(this.elements.container,this.config.classNames.isIos,H.isIos),N(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){m.call(e,e.media,"ready")},0),ve.setTitle.call(this),this.poster&&ve.setPoster.call(this,this.poster,!1).catch(function(){}),this.config.duration&&se.durationUpdate.call(this)},setTitle:function(){var e=$("play",this.config);if(o.string(this.config.title)&&!o.empty(this.config.title)&&(e+=", "+this.config.title),Array.from(this.elements.buttons.play||[]).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=_.call(this,"iframe");if(!o.element(t))return;var i=o.empty(this.config.title)?"video":this.config.title,n=$("frameTitle",this.config);t.setAttribute("title",n.replace("{title}",i))}},togglePoster:function(e){N(this.elements.container,this.config.classNames.posterEnabled,e)},setPoster:function(e){var t=this;return arguments.length>1&&void 0!==arguments[1]&&!arguments[1]||!this.poster?(this.media.setAttribute("poster",e),function(){var e=this;return new Promise(function(t){return e.ready?setTimeout(t,0):d.call(e,e.elements.container,"ready",t)}).then(function(){})}.call(this).then(function(){return ye(e)}).catch(function(i){throw e===t.poster&&ve.togglePoster.call(t,!1),i}).then(function(){if(e!==t.poster)throw new Error("setPoster cancelled by later call to setPoster")}).then(function(){return Object.assign(t.elements.poster.style,{backgroundImage:"url('"+e+"')",backgroundSize:""}),ve.togglePoster.call(t,!0),e})):Promise.reject(new Error("Poster already set"))},checkPlaying:function(e){var t=this;N(this.elements.container,this.config.classNames.playing,this.playing),N(this.elements.container,this.config.classNames.paused,this.paused),N(this.elements.container,this.config.classNames.stopped,this.stopped),Array.from(this.elements.buttons.play||[]).forEach(function(e){e.pressed=t.playing}),o.event(e)&&"timeupdate"===e.type||ve.toggleControls.call(this)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){N(t.elements.container,t.config.classNames.loading,t.loading),ve.toggleControls.call(t)},this.loading?250:0)},toggleControls:function(e){var t=this.elements.controls;t&&this.config.hideControls&&this.toggleControls(Boolean(e||this.loading||this.paused||t.pressed||t.hover))}},be=function(){function e(t){f(this,e),this.player=t,this.lastKey=null,this.focusTimer=null,this.lastKeyDown=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.setTabFocus=this.setTabFocus.bind(this),this.firstTouch=this.firstTouch.bind(this)}return g(e,[{key:"handleKey",value:function(e){var t=this,i=e.keyCode?e.keyCode:e.which,n="keydown"===e.type,a=n&&i===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&o.number(i)){if(n){var s=document.activeElement;if(o.element(s)){var r=this.player.config.selectors.editable;if(s!==this.player.elements.inputs.seek&&L(s,r))return;if(32===e.which&&L(s,'button, [role^="menuitem"]'))return}switch([32,37,38,39,40,48,49,50,51,52,53,54,56,57,67,70,73,75,76,77,79].includes(i)&&(e.preventDefault(),e.stopPropagation()),i){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:a||(t.player.currentTime=t.player.duration/10*(i-48));break;case 32:case 75:a||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:a||(this.player.muted=!this.player.muted);break;case 39:this.player.forward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:a||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===i&&this.player.fullscreen.toggle(),this.lastKey=i}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){se.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){this.player.touch=!0,N(this.player.elements.container,this.player.config.classNames.isTouch,!0)}},{key:"setTabFocus",value:function(e){var t=this;if(clearTimeout(this.focusTimer),"keydown"!==e.type||"Tab"===e.code){"keydown"===e.type&&(this.lastKeyDown=e.timeStamp);var i,n=e.timeStamp-this.lastKeyDown<=20;if("focus"!==e.type||n)i=t.player.config.classNames.tabFocus,N(x.call(t.player,"."+i),i,!1),this.focusTimer=setTimeout(function(){var e=document.activeElement;t.player.elements.container.contains(e)&&N(document.activeElement,t.player.config.classNames.tabFocus,!0)},10)}}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&u.call(this.player,window,"keydown keyup",this.handleKey,e,!1),u.call(this.player,document.body,"click",this.toggleMenu,e),p.call(this.player,document.body,"touchstart",this.firstTouch),u.call(this.player,document.body,"keydown focus blur",this.setTabFocus,e,!1,!0)}},{key:"container",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&d.call(this.player,this.player.elements.container,"keydown keyup",this.handleKey,!1),d.call(this.player,this.player.elements.container,"mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen",function(t){var i=e.player.elements.controls;"enterfullscreen"===t.type&&(i.pressed=!1,i.hover=!1);var n=0;["touchstart","touchmove","mousemove"].includes(t.type)&&(ve.toggleControls.call(e.player,!0),n=e.player.touch?3e3:2e3),clearTimeout(e.player.timers.controls),e.player.timers.controls=setTimeout(function(){return ve.toggleControls.call(e.player,!1)},n)})}},{key:"media",value:function(){var e=this;if(d.call(this.player,this.player.media,"timeupdate seeking seeked",function(t){return se.timeUpdate.call(e.player,t)}),d.call(this.player,this.player.media,"durationchange loadeddata loadedmetadata",function(t){return se.durationUpdate.call(e.player,t)}),d.call(this.player,this.player.media,"canplay",function(){S(e.player.elements.volume,!e.player.hasAudio),S(e.player.elements.buttons.mute,!e.player.hasAudio)}),d.call(this.player,this.player.media,"ended",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.resetOnEnd&&e.player.restart()}),d.call(this.player,this.player.media,"progress playing seeking seeked",function(t){return se.updateProgress.call(e.player,t)}),d.call(this.player,this.player.media,"volumechange",function(t){return se.updateVolume.call(e.player,t)}),d.call(this.player,this.player.media,"playing play pause ended emptied timeupdate",function(t){return ve.checkPlaying.call(e.player,t)}),d.call(this.player,this.player.media,"waiting canplay seeked playing",function(t){return ve.checkLoading.call(e.player,t)}),d.call(this.player,this.player.media,"playing",function(){e.player.ads&&e.player.ads.enabled&&!e.player.ads.initialized&&e.player.ads.managerPromise.then(function(){return e.player.ads.play()}).catch(function(){return e.player.play()})}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=_.call(this.player,"."+this.player.config.classNames.video);if(!o.element(t))return;d.call(this.player,t,"click",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&d.call(this.player,this.player.elements.wrapper,"contextmenu",function(e){e.preventDefault()},!1),d.call(this.player,this.player.media,"volumechange",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),d.call(this.player,this.player.media,"ratechange",function(){se.updateSetting.call(e.player,"speed"),e.player.storage.set({speed:e.player.speed})}),d.call(this.player,this.player.media,"qualityrequested",function(t){e.player.storage.set({quality:t.detail.quality})}),d.call(this.player,this.player.media,"qualitychange",function(t){se.updateSetting.call(e.player,"quality",null,t.detail.quality)});var i=this.player.config.events.concat(["keyup","keydown"]).join(" ");d.call(this.player,this.player.media,i,function(t){var i=t.detail,n=void 0===i?{}:i;"error"===t.type&&(n=e.player.media.error),m.call(e.player,e.player.elements.container,t.type,!0,n)})}},{key:"proxy",value:function(e,t,i){var n=this.player.config.listeners[i],a=!0;o.function(n)&&(a=n.call(this.player,e)),a&&o.function(t)&&t.call(this.player,e)}},{key:"bind",value:function(e,t,i,n){var a=this,s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],r=this.player.config.listeners[n],l=o.function(r);d.call(this.player,e,t,function(e){return a.proxy(e,i,n)},s&&!l)}},{key:"controls",value:function(){var e=this,t=H.isIE?"change":"input";this.player.elements.buttons.play&&Array.from(this.player.elements.buttons.play).forEach(function(t){e.bind(t,"click",e.player.togglePlay,"play")}),this.bind(this.player.elements.buttons.restart,"click",this.player.restart,"restart"),this.bind(this.player.elements.buttons.rewind,"click",this.player.rewind,"rewind"),this.bind(this.player.elements.buttons.fastForward,"click",this.player.forward,"fastForward"),this.bind(this.player.elements.buttons.mute,"click",function(){e.player.muted=!e.player.muted},"mute"),this.bind(this.player.elements.buttons.captions,"click",function(){return e.player.toggleCaptions()}),this.bind(this.player.elements.buttons.fullscreen,"click",function(){e.player.fullscreen.toggle()},"fullscreen"),this.bind(this.player.elements.buttons.pip,"click",function(){e.player.pip="toggle"},"pip"),this.bind(this.player.elements.buttons.airplay,"click",this.player.airplay,"airplay"),this.bind(this.player.elements.buttons.settings,"click",function(t){se.toggleMenu.call(e.player,t)}),this.bind(this.player.elements.buttons.settings,"keydown",function(t){32===t.which&&(t.preventDefault(),t.stopPropagation(),se.toggleMenu.call(e.player,t))},null,!1),this.bind(this.player.elements.inputs.seek,"mousedown mousemove",function(t){var i=e.player.elements.progress.getBoundingClientRect(),n=100/i.width*(t.pageX-i.left);t.currentTarget.setAttribute("seek-value",n)}),this.bind(this.player.elements.inputs.seek,"mousedown mouseup keydown keyup touchstart touchend",function(t){var i=t.currentTarget,n=t.keyCode?t.keyCode:t.which,a=t.type;if("keydown"!==a&&"keyup"!==a||39===n||37===n){var s=i.hasAttribute("play-on-seeked"),r=["mouseup","touchend","keyup"].includes(t.type);s&&r?(i.removeAttribute("play-on-seeked"),e.player.play()):!r&&e.player.playing&&(i.setAttribute("play-on-seeked",""),e.player.pause())}}),this.bind(this.player.elements.inputs.seek,t,function(t){var i=t.currentTarget,n=i.getAttribute("seek-value");o.empty(n)&&(n=i.value),i.removeAttribute("seek-value"),e.player.currentTime=n/i.max*e.player.duration},"seek"),this.player.config.toggleInvert&&!o.element(this.player.elements.display.duration)&&this.bind(this.player.elements.display.currentTime,"click",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,se.timeUpdate.call(e.player))}),this.bind(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},"volume"),H.isWebkit&&Array.from(x.call(this.player,'input[type="range"]')).forEach(function(t){e.bind(t,"input",function(t){return se.updateRangeFill.call(e.player,t.target)})}),this.bind(this.player.elements.progress,"mouseenter mouseleave mousemove",function(t){return se.updateSeekTooltip.call(e.player,t)}),this.bind(this.player.elements.controls,"mouseenter mouseleave",function(t){e.player.elements.controls.hover=!e.player.touch&&"mouseenter"===t.type}),this.bind(this.player.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.player.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),this.bind(this.player.elements.controls,"focusin focusout",function(t){var i=e.player,n=i.config,a=i.elements,s=i.timers;if(N(a.controls,n.classNames.noTransition,"focusin"===t.type),ve.toggleControls.call(e.player,"focusin"===t.type),"focusin"===t.type){setTimeout(function(){N(a.controls,n.classNames.noTransition,!1)},0);var r=e.touch?3e3:4e3;clearTimeout(s.controls),s.controls=setTimeout(function(){return ve.toggleControls.call(e.player,!1)},r)}}),this.bind(this.player.elements.inputs.volume,"wheel",function(t){var i=t.webkitDirectionInvertedFromDevice,n=[t.deltaX,-t.deltaY].map(function(e){return i?-e:e}),a=v(n,2),s=a[0],r=a[1],l=Math.sign(Math.abs(s)>Math.abs(r)?s:r);e.player.increaseVolume(l/50);var o=e.player.media.volume;(1===l&&o<1||-1===l&&o>0)&&t.preventDefault()},"volume",!1)}}]),e}();"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var ke,we=(function(e,t){var i;i=function(){var e=function(){},t={},i={},n={};function a(e,t){if(e){var a=n[e];if(i[e]=t,a)for(;a.length;)a[0](e,t),a.splice(0,1)}}function s(t,i){t.call&&(t={success:t}),i.length?(t.error||e)(i):(t.success||e)(t)}function r(t,i,n,a){var s,l,o=document,c=n.async,u=(n.numRetries||0)+1,d=n.before||e,h=t.replace(/^(css|img)!/,"");a=a||0,/(^css!|\.css$)/.test(t)?(s=!0,(l=o.createElement("link")).rel="stylesheet",l.href=h):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(l=o.createElement("img")).src=h:((l=o.createElement("script")).src=t,l.async=void 0===c||c),l.onload=l.onerror=l.onbeforeload=function(e){var o=e.type[0];if(s&&"hideFocus"in l)try{l.sheet.cssText.length||(o="e")}catch(e){o="e"}if("e"==o&&(a+=1)<u)return r(t,i,n,a);i(t,o,e.defaultPrevented)},!1!==d(t,l)&&o.head.appendChild(l)}function l(e,i,n){var l,o;if(i&&i.trim&&(l=i),o=(l?n:i)||{},l){if(l in t)throw"LoadJS";t[l]=!0}!function(e,t,i){var n,a,s=(e=e.push?e:[e]).length,l=s,o=[];for(n=function(e,i,n){if("e"==i&&o.push(e),"b"==i){if(!n)return;o.push(e)}--s||t(o)},a=0;a<l;a++)r(e[a],n,i)}(e,function(e){s(o,e),a(l,e)},o)}return l.ready=function(e,t){return function(e,t){e=e.push?e:[e];var a,s,r,l=[],o=e.length,c=o;for(a=function(e,i){i.length&&l.push(e),--c||t(l)};o--;)s=e[o],(r=i[s])?a(s,r):(n[s]=n[s]||[]).push(a)}(e,function(e){s(t,e)}),l},l.done=function(e){a(e,[])},l.reset=function(){t={},i={},n={}},l.isDefined=function(e){return e in t},l},e.exports=i()}(ke={exports:{}},ke.exports),ke.exports);function Te(e){return new Promise(function(t,i){we(e,{success:t,error:i})})}function Ae(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,m.call(this,this.media,e?"play":"pause"))}var Ee={setup:function(){var e=this;N(this.elements.wrapper,this.config.classNames.embed,!0),Ee.setAspectRatio.call(this),o.object(window.Vimeo)?Ee.ready.call(this):Te(this.config.urls.vimeo.sdk).then(function(){Ee.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=(o.string(e)?e:this.config.ratio).split(":"),i=v(t,2),n=100/i[0]*i[1];if(this.elements.wrapper.style.paddingBottom=n+"%",this.supported.ui){var a=(240-n)/4.8;this.media.style.transform="translateY(-"+a+"%)"}},ready:function(){var e=this,t=this,i=le({loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative}),n=t.media.getAttribute("src");o.empty(n)&&(n=t.media.getAttribute(t.config.attributes.embed.id));var a,s=(a=n,o.empty(a)?null:o.number(Number(a))?a:a.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:a),r=w("iframe"),l=W(t.config.urls.vimeo.iframe,s,i);r.setAttribute("src",l),r.setAttribute("allowfullscreen",""),r.setAttribute("allowtransparency",""),r.setAttribute("allow","autoplay");var c=w("div",{poster:t.poster,class:t.config.classNames.embedContainer});c.appendChild(r),t.media=C(c,t.media),Z(W(t.config.urls.vimeo.api,s),"json").then(function(e){if(!o.empty(e)){var i=new URL(e[0].thumbnail_large);i.pathname=i.pathname.split("_")[0]+".jpg",ve.setPoster.call(t,i.href).catch(function(){})}}),t.embed=new window.Vimeo.Player(r,{autopause:t.config.autopause,muted:t.muted}),t.media.paused=!0,t.media.currentTime=0,t.supported.ui&&t.embed.disableTextTrack(),t.media.play=function(){return Ae.call(t,!0),t.embed.play()},t.media.pause=function(){return Ae.call(t,!1),t.embed.pause()},t.media.stop=function(){t.pause(),t.currentTime=0};var u=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return u},set:function(e){var i=t.embed,n=t.media,a=t.paused,s=t.volume,r=a&&!i.hasPlayed;n.seeking=!0,m.call(t,n,"seeking"),Promise.resolve(r&&i.setVolume(0)).then(function(){return i.setCurrentTime(e)}).then(function(){return r&&i.pause()}).then(function(){return r&&i.setVolume(s)}).catch(function(){})}});var d=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return d},set:function(e){t.embed.setPlaybackRate(e).then(function(){d=e,m.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&se.setSpeedMenu.call(t,[])})}});var h=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return h},set:function(e){t.embed.setVolume(e).then(function(){h=e,m.call(t,t.media,"volumechange")})}});var p=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return p},set:function(e){var i=!!o.boolean(e)&&e;t.embed.setVolume(i?0:t.config.volume).then(function(){p=i,m.call(t,t.media,"volumechange")})}});var f=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return f},set:function(e){var i=o.boolean(e)?e:t.config.loop.active;t.embed.setLoop(i).then(function(){f=i})}});var g=void 0;t.embed.getVideoUrl().then(function(e){g=e}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return g}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var i=function(e,t){var i=function e(t,i){return 0===i?t:e(i,t%i)}(e,t);return e/i+":"+t/i}(t[0],t[1]);Ee.setAspectRatio.call(e,i)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(i){t.config.title=i,ve.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){u=e,m.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,m.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,oe.setup.call(t)}),t.embed.on("cuechange",function(e){var i=e.cues,n=(void 0===i?[]:i).map(function(e){return t=e.text,i=document.createDocumentFragment(),n=document.createElement("div"),i.appendChild(n),n.innerHTML=t,i.firstChild.innerText;var t,i,n});oe.updateCues.call(t,n)}),t.embed.on("loaded",function(){(t.embed.getPaused().then(function(e){Ae.call(t,!e),e||m.call(t,t.media,"playing")}),o.element(t.embed.element)&&t.supported.ui)&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){Ae.call(t,!0),m.call(t,t.media,"playing")}),t.embed.on("pause",function(){Ae.call(t,!1)}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,u=e.seconds,m.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,m.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&m.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,m.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,m.call(t,t.media,"seeked")}),t.embed.on("ended",function(){t.media.paused=!0,m.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,m.call(t,t.media,"error")}),setTimeout(function(){return ve.build.call(t)},0)}};function Ce(e){var t=Object.entries({hd2160:2160,hd1440:1440,hd1080:1080,hd720:720,large:480,medium:360,small:240,tiny:144}).find(function(t){return t.includes(e)});return t?t.find(function(t){return t!==e}):"default"}function Pe(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,m.call(this,this.media,e?"play":"pause"))}var Se,Ne={setup:function(){var e=this;N(this.elements.wrapper,this.config.classNames.embed,!0),Ne.setAspectRatio.call(this),o.object(window.YT)&&o.function(window.YT.Player)?Ne.ready.call(this):(Te(this.config.urls.youtube.sdk).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){Ne.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(o.function(this.embed.getVideoData)){var i=this.embed.getVideoData().title;if(o.empty(i))return this.config.title=i,void ve.setTitle.call(this)}var n=this.config.keys.google;o.string(n)&&!o.empty(n)&&Z(W(this.config.urls.youtube.api,e,n)).then(function(e){o.object(e)&&(t.config.title=e.items[0].snippet.title,ve.setTitle.call(t))}).catch(function(){})},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(o.empty(t)||!t.startsWith("youtube-")){var i=e.media.getAttribute("src");o.empty(i)&&(i=e.media.getAttribute(this.config.attributes.embed.id));var n,a=(n=i,o.empty(n)?null:n.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:n),s=e.provider+"-"+Math.floor(1e4*Math.random()),r=w("div",{id:s,poster:e.poster});e.media=C(r,e.media);var l=function(e){return"https://img.youtube.com/vi/"+a+"/"+e+"default.jpg"};ye(l("maxres"),121).catch(function(){return ye(l("sd"),121)}).catch(function(){return ye(l("hq"))}).then(function(t){return ve.setPoster.call(e,t.src)}).then(function(t){t.includes("maxres")||(e.elements.poster.style.backgroundSize="cover")}).catch(function(){}),e.embed=new window.YT.Player(s,{videoId:a,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!e.media.error){var i=t.data,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.",5:"The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.",100:"The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.",101:"The owner of the requested video does not allow it to be played in embedded players.",150:"The owner of the requested video does not allow it to be played in embedded players."}[i]||"An unknown error occured";e.media.error={code:i,message:n},m.call(e,e.media,"error")}},onPlaybackQualityChange:function(){m.call(e,e.media,"qualitychange",!1,{quality:e.media.quality})},onPlaybackRateChange:function(t){var i=t.target;e.media.playbackRate=i.getPlaybackRate(),m.call(e,e.media,"ratechange")},onReady:function(t){var i=t.target;Ne.getTitle.call(e,a),e.media.play=function(){Pe.call(e,!0),i.playVideo()},e.media.pause=function(){Pe.call(e,!1),i.pauseVideo()},e.media.stop=function(){i.stopVideo()},e.media.duration=i.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(i.getCurrentTime())},set:function(t){e.paused&&!e.embed.hasPlayed&&e.embed.mute(),e.media.seeking=!0,m.call(e,e.media,"seeking"),i.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return i.getPlaybackRate()},set:function(e){i.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return Ce(i.getPlaybackQuality())},set:function(e){i.setPlaybackQuality(Ce(e))}});var n=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return n},set:function(t){n=t,i.setVolume(100*n),m.call(e,e.media,"volumechange")}});var s=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return s},set:function(t){var n=o.boolean(t)?t:s;s=n,i[n?"mute":"unMute"](),m.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return i.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=i.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),m.call(e,e.media,"timeupdate"),m.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=i.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&m.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),m.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return ve.build.call(e)},50)},onStateChange:function(t){var i,n=t.target;switch(clearInterval(e.timers.playing),e.media.seeking&&[1,2].includes(t.data)&&(e.media.seeking=!1,m.call(e,e.media,"seeked")),t.data){case-1:m.call(e,e.media,"timeupdate"),e.media.buffered=n.getVideoLoadedFraction(),m.call(e,e.media,"progress");break;case 0:Pe.call(e,!1),e.media.loop?(n.stopVideo(),n.playVideo()):m.call(e,e.media,"ended");break;case 1:e.media.paused&&!e.embed.hasPlayed?e.media.pause():(Pe.call(e,!0),m.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){m.call(e,e.media,"timeupdate")},50),e.media.duration!==n.getDuration()&&(e.media.duration=n.getDuration(),m.call(e,e.media,"durationchange")),se.setQualityMenu.call(e,(i=n.getAvailableQualityLevels(),o.empty(i)?i:G(i.map(function(e){return Ce(e)})))));break;case 2:e.muted||e.embed.unMute(),Pe.call(e,!1)}m.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},Me={setup:function(){this.media?(N(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),N(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&N(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.isVideo&&(this.elements.wrapper=w("div",{class:this.config.classNames.video}),b(this.media,this.elements.wrapper),this.elements.poster=w("div",{class:this.config.classNames.poster}),this.elements.wrapper.appendChild(this.elements.poster)),this.isHTML5?F.extend.call(this):this.isYouTube?Ne.setup.call(this):this.isVimeo&&Ee.setup.call(this)):this.debug.warn("No media element found!")}},Le=function(){function e(t){var i=this;f(this,e),this.player=t,this.publisherId=t.config.ads.publisherId,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){i.on("loaded",e),i.on("error",t)}),this.load()}return g(e,[{key:"load",value:function(){var e=this;this.enabled&&(o.object(window.google)&&o.object(window.google.ima)?this.ready():Te(this.player.config.urls.googleIMA.sdk).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=w("div",{class:this.player.config.classNames.ads}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var i=new google.ima.AdsRequest;i.adTagUrl=this.tagUrl,i.linearAdSlotWidth=t.offsetWidth,i.linearAdSlotHeight=t.offsetHeight,i.nonLinearAdSlotWidth=t.offsetWidth,i.nonLinearAdSlotHeight=t.offsetHeight,i.forceNonLinearFullSlot=!1,i.setAdWillPlayMuted(!this.player.muted),this.loader.requestAds(i)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=ae(Math.max(e.manager.getRemainingTime(),0)),i=$("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",i)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,i=new google.ima.AdsRenderingSettings;i.restoreCustomPlaybackStateOnAdBreakComplete=!0,i.enablePreloading=!0,this.manager=e.getAdsManager(this.player,i),this.cuePoints=this.manager.getCuePoints(),o.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var i=t.player.elements.progress;if(o.element(i)){var n=100/t.player.duration*e,a=w("span",{class:t.player.config.classNames.cues});a.style.left=n.toString()+"%",i.appendChild(a)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,i=this.player.elements.container,n=e.getAd(),a=function(e){var i="ads"+e.replace(/_/g,"").toLowerCase();m.call(t.player,t.player.media,i)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),a(e.type),this.pollCountdown(!0),n.isLinear()||(n.width=i.offsetWidth,n.height=i.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:a(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:a(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:a(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:a(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,i=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return i=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;o.empty(e.cuePoints)||e.cuePoints.forEach(function(n,a){i<n&&n<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(a,1))})}),window.addEventListener("resize",function(){e.manager&&e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("error"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,i=arguments.length,n=Array(i>1?i-1:0),a=1;a<i;a++)n[a-1]=arguments[a];var s=this.events[e];o.array(s)&&s.forEach(function(e){o.function(e)&&e.apply(t,n)})}},{key:"on",value:function(e,t){return o.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var i=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){i.cancel(),i.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){o.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"enabled",get:function(){return this.player.isHTML5&&this.player.isVideo&&this.player.config.ads.enabled&&!o.empty(this.publisherId)}},{key:"tagUrl",get:function(){return"https://go.aniview.com/api/adserver6/vast/?"+le({AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:window.location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId})}}]),e}(),xe={insertElements:function(e,t){var i=this;o.string(t)?T(e,this.media,{src:t}):o.array(t)&&t.forEach(function(t){T(e,i.media,t)})},change:function(e){var t=this;U(e,"sources.length")?(F.cancelRequests.call(this),this.destroy.call(this,function(){t.options.quality=[],A(t.media),t.media=null,o.element(t.elements.container)&&t.elements.container.removeAttribute("class");var i=e.sources,n=e.type,a=v(i,1)[0],s=a.provider,r=void 0===s?ue.html5:s,l=a.src,c="html5"===r?n:"div",u="html5"===r?{}:{src:l};Object.assign(t,{provider:r,type:n,supported:D.check(n,r,t.config.playsinline),media:w(c,u)}),t.elements.container.appendChild(t.media),o.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),o.empty(e.poster)||(t.poster=e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.playsinline&&t.media.setAttribute("playsinline","")),ve.addStyleHook.call(t),t.isHTML5&&xe.insertElements.call(t,"source",i),t.config.title=e.title,Me.setup.call(t),t.isHTML5&&("tracks"in e&&xe.insertElements.call(t,"track",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&ve.build.call(t),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}},_e=function(){function e(t,i){var n=this;if(f(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=D.touch,this.media=t,o.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||o.nodeList(this.media)||o.array(this.media))&&(this.media=this.media[0]),this.config=z({},ce,e.defaults,i||{},function(){try{return JSON.parse(n.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,captions:null,buttons:{},display:{},progress:{},inputs:{},settings:{popup:null,menu:null,panels:{},buttons:{}}},this.captions={active:null,currentTrack:-1,meta:new WeakMap},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new pe(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",D),!o.nullOrUndefined(this.media)&&o.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(D.check().api){var a=this.media.cloneNode(!0);a.autoplay=!1,this.elements.original=a;var s=this.media.tagName.toLowerCase(),r=null,l=null;switch(s){case"div":if(r=this.media.querySelector("iframe"),o.element(r)){if(l=re(r.getAttribute("src")),this.provider=function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?ue.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{0,9}(?=\b|\/)/.test(e)?ue.vimeo:null}(l.toString()),this.elements.container=this.media,this.media=r,this.elements.container.className="",l.searchParams.length){var c=["1","true"];c.includes(l.searchParams.get("autoplay"))&&(this.config.autoplay=!0),c.includes(l.searchParams.get("loop"))&&(this.config.loop.active=!0),this.isYouTube?this.config.playsinline=c.includes(l.searchParams.get("playsinline")):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(o.empty(this.provider)||!Object.keys(ue).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=de.video;break;case"video":case"audio":this.type=s,this.provider=ue.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.playsinline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=D.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.eventListeners=[],this.listeners=new be(this),this.storage=new X(this),this.media.plyr=this,o.element(this.elements.container)||(this.elements.container=w("div"),b(this.media,this.elements.container)),ve.addStyleHook.call(this),Me.setup.call(this),this.config.debug&&d.call(this,this.elements.container,this.config.events.join(" "),function(e){n.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&ve.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new ge(this),this.ads=new Le(this),this.config.autoplay&&this.play()):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return g(e,[{key:"play",value:function(){return o.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&o.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(o.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?(this.pause(),this.restart()):o.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(o.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(o.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(o.number(e)?e:0)}},{key:"decreaseVolume",value:function(e){this.increaseVolume(-e)}},{key:"toggleCaptions",value:function(e){oe.toggle.call(this,e,!1)}},{key:"airplay",value:function(){D.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){if(this.supported.ui&&!this.isAudio){var t=M(this.elements.container,this.config.classNames.hideControls),i=void 0===e?void 0:!e,n=N(this.elements.container,this.config.classNames.hideControls,i);if(n&&this.config.controls.includes("settings")&&!o.empty(this.config.settings)&&se.toggleMenu.call(this,!1),n!==t){var a=n?"controlshidden":"controlsshown";m.call(this,this.media,a)}return!n}return!1}},{key:"on",value:function(e,t){d.call(this,this.elements.container,e,t)}},{key:"once",value:function(e,t){p.call(this,this.elements.container,e,t)}},{key:"off",value:function(e,t){h(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var n=function(){document.body.style.overflow="",t.embed=null,i?(Object.keys(t.elements).length&&(A(t.elements.buttons.play),A(t.elements.captions),A(t.elements.controls),A(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),o.function(e)&&e()):(function(){this&&this.eventListeners&&(this.eventListeners.forEach(function(e){var t=e.element,i=e.type,n=e.callback,a=e.options;t.removeEventListener(i,n,a)}),this.eventListeners=[])}.call(t),C(t.elements.original,t.elements.container),m.call(t,t.elements.original,"destroyed",!0),o.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};this.stop(),this.isHTML5?(clearTimeout(this.timers.loading),ve.toggleNativeControls.call(this,!0),n()):this.isYouTube?(clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&o.function(this.embed.destroy)&&this.embed.destroy(),n()):this.isVimeo&&(null!==this.embed&&this.embed.unload().then(n),setTimeout(n,200))}}},{key:"supports",value:function(e){return D.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===ue.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===ue.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===ue.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===de.video)}},{key:"isAudio",get:function(){return Boolean(this.type===de.audio)}},{key:"playing",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"stopped",get:function(){return Boolean(this.paused&&0===this.currentTime)}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){if(this.duration){var t=o.number(e)&&e>0;this.media.currentTime=t?Math.min(e,this.duration):0,this.debug.log("Seeking to "+this.currentTime+" seconds")}},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return o.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseFloat(this.config.duration),t=(this.media||{}).duration,i=o.number(t)&&t!==1/0?t:0;return e||i}},{key:"volume",set:function(e){var t=e;o.string(t)&&(t=Number(t)),o.number(t)||(t=this.storage.get("volume")),o.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!o.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;o.boolean(t)||(t=this.storage.get("muted")),o.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;o.number(e)&&(t=e),o.number(t)||(t=this.storage.get("speed")),o.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=this.config.quality,i=this.options.quality;if(i.length){var n=[!o.empty(e)&&Number(e),this.storage.get("quality"),t.selected,t.default].find(o.number);if(!i.includes(n)){var a=function(e,t){return o.array(e)&&e.length?e.reduce(function(e,i){return Math.abs(i-t)<Math.abs(e-t)?i:e}):null}(i,n);this.debug.warn("Unsupported quality option: "+n+", using "+a+" instead"),n=a}m.call(this,this.media,"qualityrequested",!1,{quality:n}),t.selected=n,this.media.quality=n}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=o.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){xe.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isVideo?ve.setPoster.call(this,e,!1).catch(function(){}):this.debug.warn("Poster can only be set for video")},get:function(){return this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=o.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"currentTrack",set:function(e){oe.set.call(this,e,!1)},get:function(){var e=this.captions,t=e.toggled,i=e.currentTrack;return t?i:-1}},{key:"language",set:function(e){oe.setLanguage.call(this,e,!1)},get:function(){return(oe.getCurrentTrack.call(this)||{}).language}},{key:"pip",set:function(e){var t="picture-in-picture",i="inline";if(D.pip){var n=o.boolean(e)?e:this.pip===i;this.media.webkitSetPresentationMode(n?t:i)}},get:function(){return D.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,i){return D.check(e,t,i)}},{key:"loadSprite",value:function(e,t){return ee(e,t)}},{key:"setup",value:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null;return o.string(t)?n=Array.from(document.querySelectorAll(t)):o.nodeList(t)?n=Array.from(t):o.array(t)&&(n=t.filter(o.element)),o.empty(n)?null:n.map(function(t){return new e(t,i)})}}]),e}();return _e.defaults=(Se=ce,JSON.parse(JSON.stringify(Se))),_e});
+"object"==typeof navigator&&function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e=function(e){return null!=e?e.constructor:null},t=function(e,t){return Boolean(e&&t&&e instanceof t)},i=function(e){return null==e},n=function(t){return e(t)===Object},s=function(t){return e(t)===String},a=function(e){return Array.isArray(e)},r=function(e){return t(e,NodeList)},o=function(e){return i(e)||(s(e)||a(e)||r(e))&&!e.length||n(e)&&!Object.keys(e).length},l={nullOrUndefined:i,object:n,number:function(t){return e(t)===Number&&!Number.isNaN(t)},string:s,boolean:function(t){return e(t)===Boolean},function:function(t){return e(t)===Function},array:a,weakMap:function(e){return t(e,WeakMap)},nodeList:r,element:function(e){return t(e,Element)},textNode:function(t){return e(t)===Text},event:function(e){return t(e,Event)},cue:function(e){return t(e,window.TextTrackCue)||t(e,window.VTTCue)},track:function(e){return t(e,TextTrack)||!i(e)&&s(e.kind)},url:function(e){if(t(e,window.URL))return!0;var i=e;e.startsWith("http://")&&e.startsWith("https://")||(i="http://"+e);try{return!o(new URL(i).hostname)}catch(e){return!1}},empty:o},c=function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}return e}();function u(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=this,a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],r=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(e&&"addEventListener"in e&&!l.empty(t)&&l.function(i)){var o=t.split(" "),u=r;c&&(u={passive:a,capture:r}),o.forEach(function(t){s&&s.eventListeners&&n&&s.eventListeners.push({element:e,type:t,callback:i,options:u}),e[n?"addEventListener":"removeEventListener"](t,i,u)})}}function d(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.call(this,e,t,i,!0,n,s)}function h(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.call(this,e,t,i,!1,n,s)}function p(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.call(this,e,t,function a(){h(e,t,a,n,s);for(var r=arguments.length,o=Array(r),l=0;l<r;l++)o[l]=arguments[l];i.apply(this,o)},!0,n,s)}function m(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(l.element(e)&&!l.empty(t)){var s=new CustomEvent(t,{bubbles:i,detail:Object.assign({},n,{plyr:this})});e.dispatchEvent(s)}}var f=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},g=function(){function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t}}(),y=function(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e},v=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var i=[],n=!0,s=!1,a=void 0;try{for(var r,o=e[Symbol.iterator]();!(n=(r=o.next()).done)&&(i.push(r.value),!t||i.length!==t);n=!0);}catch(e){s=!0,a=e}finally{try{!n&&o.return&&o.return()}finally{if(s)throw a}}return i}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function b(e,t){var i=e.length?e:[e];Array.from(i).reverse().forEach(function(e,i){var n=i>0?t.cloneNode(!0):t,s=e.parentNode,a=e.nextSibling;n.appendChild(e),a?s.insertBefore(n,a):s.appendChild(n)})}function k(e,t){l.element(e)&&!l.empty(t)&&Object.entries(t).filter(function(e){var t=v(e,2)[1];return!l.nullOrUndefined(t)}).forEach(function(t){var i=v(t,2),n=i[0],s=i[1];return e.setAttribute(n,s)})}function w(e,t,i){var n=document.createElement(e);return l.object(t)&&k(n,t),l.string(i)&&(n.innerText=i),n}function T(e,t,i,n){l.element(t)&&t.appendChild(w(e,i,n))}function A(e){l.nodeList(e)||l.array(e)?Array.from(e).forEach(A):l.element(e)&&l.element(e.parentNode)&&e.parentNode.removeChild(e)}function E(e){if(l.element(e))for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1}function C(e,t){return l.element(t)&&l.element(t.parentNode)&&l.element(e)?(t.parentNode.replaceChild(e,t),e):null}function P(e,t){if(!l.string(e)||l.empty(e))return{};var i={},n=t;return e.split(",").forEach(function(e){var t=e.trim(),s=t.replace(".",""),a=t.replace(/[[\]]/g,"").split("="),r=a[0],o=a.length>1?a[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":l.object(n)&&l.string(n.class)&&(n.class+=" "+s),i.class=s;break;case"#":i.id=t.replace("#","");break;case"[":i[r]=o}}),i}function S(e,t){if(l.element(e)){var i=t;l.boolean(i)||(i=!e.hasAttribute("hidden")),i?e.setAttribute("hidden",""):e.removeAttribute("hidden")}}function N(e,t,i){if(l.nodeList(e))return Array.from(e).map(function(e){return N(e,t,i)});if(l.element(e)){var n="toggle";return void 0!==i&&(n=i?"add":"remove"),e.classList[n](t),e.classList.contains(t)}return!1}function M(e,t){return l.element(e)&&e.classList.contains(t)}function L(e,t){var i={Element:Element};return(i.matches||i.webkitMatchesSelector||i.mozMatchesSelector||i.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)}).call(e,t)}function x(e){return this.elements.container.querySelectorAll(e)}function _(e){return this.elements.container.querySelector(e)}function I(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];l.element(e)&&(e.focus(),t&&N(e,this.config.classNames.tabFocus))}var q,O,j,R=(q=document.createElement("span"),O={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},j=Object.keys(O).find(function(e){return void 0!==q.style[e]}),!!l.string(j)&&O[j]);function B(e){setTimeout(function(){try{S(e,!0),e.offsetHeight,S(e,!1)}catch(e){}},0)}var H,V={isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)},D={"audio/ogg":"vorbis","audio/wav":"1","video/webm":"vp8, vorbis","video/mp4":"avc1.42E01E, mp4a.40.2","video/ogg":"theora"},F={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,i){var n=V.isIPhone&&i&&F.playsinline,s=F[e]||"html5"!==t;return{api:s,ui:s&&F.rangeInput&&("video"!==e||!V.isIPhone||n)}},pip:!V.isIPhone&&l.function(w("video").webkitSetPresentationMode),airplay:l.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=e.split("/"),i=v(t,1)[0];if(!this.isHTML5||i!==this.type)return!1;var n=void 0;e&&e.includes("codecs=")?n=e:"audio/mpeg"===e?n="audio/mpeg;":e in D&&(n=e+'; codecs="'+D[e]+'"');try{return Boolean(n&&this.media.canPlayType(n).replace(/no/,""))}catch(e){return!1}},textTracks:"textTracks"in document.createElement("video"),rangeInput:(H=document.createElement("input"),H.type="range","range"===H.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==R,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},U={getSources:function(){var e=this;return this.isHTML5?Array.from(this.media.querySelectorAll("source")).filter(function(t){return F.mime.call(e,t.getAttribute("type"))}):[]},getQualityOptions:function(){return U.getSources.call(this).map(function(e){return Number(e.getAttribute("size"))}).filter(Boolean)},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=U.getSources.call(e).find(function(t){return t.getAttribute("src")===e.source});return t&&Number(t.getAttribute("size"))},set:function(t){var i=U.getSources.call(e).find(function(e){return Number(e.getAttribute("size"))===t});if(i){var n=e.media,s=n.currentTime,a=n.paused,r=n.preload,o=n.readyState;e.media.src=i.getAttribute("src"),("none"!==r||o)&&(e.once("loadedmetadata",function(){e.currentTime=s,a||e.play()}),e.media.load()),m.call(e,e.media,"qualitychange",!1,{quality:t})}}})}},cancelRequests:function(){this.isHTML5&&(A(U.getSources.call(this)),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}};function z(e,t){return t.split(".").reduce(function(e,t){return e&&e[t]},e)}function W(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];if(!i.length)return e;var s=i.shift();return l.object(s)?(Object.keys(s).forEach(function(t){l.object(s[t])?(Object.keys(e).includes(t)||Object.assign(e,y({},t,{})),W(e[t],s[t])):Object.assign(e,y({},t,s[t]))}),W.apply(void 0,[e].concat(i))):e}function K(e){for(var t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];return l.empty(e)?e:e.toString().replace(/{(\d+)}/g,function(e,t){return i[t].toString()})}function Y(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),i.toString())}function Q(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})}function J(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=Y(e,"-"," "),e=Y(e,"_"," "),Y(e=Q(e)," ","")}(e)).charAt(0).toLowerCase()+e.slice(1)}function $(e){var t=document.createElement("div");return t.appendChild(e),t.innerHTML}var G=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(l.empty(e)||l.empty(t))return"";var i=z(t.i18n,e);if(l.empty(i))return"";var n={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(n).forEach(function(e){var t=v(e,2),n=t[0],s=t[1];i=Y(i,n,s)}),i};function X(e){return l.array(e)?e.filter(function(t,i){return e.indexOf(t)===i}):e}var Z=function(){function e(t){f(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return g(e,[{key:"get",value:function(t){if(!e.supported||!this.enabled)return null;var i=window.localStorage.getItem(this.key);if(l.empty(i))return null;var n=JSON.parse(i);return l.string(t)&&t.length?n[t]:n}},{key:"set",value:function(t){if(e.supported&&this.enabled&&l.object(t)){var i=this.get();l.empty(i)&&(i={}),W(i,t),window.localStorage.setItem(this.key,JSON.stringify(i))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}();function ee(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(i,n){try{var s=new XMLHttpRequest;if(!("withCredentials"in s))return;s.addEventListener("load",function(){if("text"===t)try{i(JSON.parse(s.responseText))}catch(e){i(s.responseText)}else i(s.response)}),s.addEventListener("error",function(){throw new Error(s.status)}),s.open("GET",e,!0),s.responseType=t,s.send()}catch(e){n(e)}})}function te(e,t){if(l.string(e)){var i=l.string(t),n=function(){return null!==document.getElementById(t)},s=function(e,t){e.innerHTML=t,i&&n()||document.body.insertAdjacentElement("afterbegin",e)};if(!i||!n()){var a=Z.supported,r=document.createElement("div");if(r.setAttribute("hidden",""),i&&r.setAttribute("id",t),a){var o=window.localStorage.getItem("cache-"+t);if(null!==o){var c=JSON.parse(o);s(r,c.content)}}ee(e).then(function(e){l.empty(e)||(a&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),s(r,e))}).catch(function(){})}}}var ie=function(e){return parseInt(e/60/60%60,10)},ne=function(e){return parseInt(e/60%60,10)},se=function(e){return parseInt(e%60,10)};function ae(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!l.number(e))return ae(null,t,i);var n=function(e){return("0"+e).slice(-2)},s=ie(e),a=ne(e),r=se(e);return t||s>0?s+=":":s="",(i&&e>0?"-":"")+s+n(a)+":"+n(r)}var re={getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||V.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=_.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:x.call(this,this.config.selectors.buttons.play),pause:_.call(this,this.config.selectors.buttons.pause),restart:_.call(this,this.config.selectors.buttons.restart),rewind:_.call(this,this.config.selectors.buttons.rewind),fastForward:_.call(this,this.config.selectors.buttons.fastForward),mute:_.call(this,this.config.selectors.buttons.mute),pip:_.call(this,this.config.selectors.buttons.pip),airplay:_.call(this,this.config.selectors.buttons.airplay),settings:_.call(this,this.config.selectors.buttons.settings),captions:_.call(this,this.config.selectors.buttons.captions),fullscreen:_.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=_.call(this,this.config.selectors.progress),this.elements.inputs={seek:_.call(this,this.config.selectors.inputs.seek),volume:_.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:_.call(this,this.config.selectors.display.buffer),currentTime:_.call(this,this.config.selectors.display.currentTime),duration:_.call(this,this.config.selectors.display.duration)},l.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},createIcon:function(e,t){var i=re.getIconUrl.call(this),n=(i.cors?"":i.url)+"#"+this.config.iconPrefix,s=document.createElementNS("http://www.w3.org/2000/svg","svg");k(s,W(t,{role:"presentation",focusable:"false"}));var a=document.createElementNS("http://www.w3.org/2000/svg","use"),r=n+"-"+e;return"href"in a?a.setAttributeNS("http://www.w3.org/1999/xlink","href",r):a.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",r),s.appendChild(a),s},createLabel:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i={pip:"PIP",airplay:"AirPlay"}[e]||G(e,this.config);return w("span",Object.assign({},t,{class:[t.class,this.config.classNames.hidden].filter(Boolean).join(" ")}),i)},createBadge:function(e){if(l.empty(e))return null;var t=w("span",{class:this.config.classNames.menu.value});return t.appendChild(w("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var i=w("button"),n=Object.assign({},t),s=J(e),a=!1,r=void 0,o=void 0,c=void 0,u=void 0;switch("type"in n||(n.type="button"),"class"in n?n.class.includes(this.config.classNames.control)||(n.class+=" "+this.config.classNames.control):n.class=this.config.classNames.control,e){case"play":a=!0,r="play",c="pause",o="play",u="pause";break;case"mute":a=!0,r="mute",c="unmute",o="volume",u="muted";break;case"captions":a=!0,r="enableCaptions",c="disableCaptions",o="captions-off",u="captions-on";break;case"fullscreen":a=!0,r="enterFullscreen",c="exitFullscreen",o="enter-fullscreen",u="exit-fullscreen";break;case"play-large":n.class+=" "+this.config.classNames.control+"--overlaid",s="play",r="play",o="play";break;default:r=s,o=e}a?(i.appendChild(re.createIcon.call(this,u,{class:"icon--pressed"})),i.appendChild(re.createIcon.call(this,o,{class:"icon--not-pressed"})),i.appendChild(re.createLabel.call(this,c,{class:"label--pressed"})),i.appendChild(re.createLabel.call(this,r,{class:"label--not-pressed"}))):(i.appendChild(re.createIcon.call(this,o)),i.appendChild(re.createLabel.call(this,r))),W(n,P(this.config.selectors.buttons[s],n)),k(i,n),"play"===s?(l.array(this.elements.buttons[s])||(this.elements.buttons[s]=[]),this.elements.buttons[s].push(i)):this.elements.buttons[s]=i;var d=this.config.classNames.controlPressed;return Object.defineProperty(i,"pressed",{enumerable:!0,get:function(){return M(i,d)},set:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];N(i,d,e)}}),i},createRange:function(e,t){var i=w("input",W(P(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-label":G(e,this.config),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=i,re.updateRangeFill.call(this,i),i},createProgress:function(e,t){var i=w("progress",W(P(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){i.appendChild(w("span",null,"0"));var n={played:"played",buffer:"buffered"}[e],s=n?G(n,this.config):"";i.innerText="% "+s.toLowerCase()}return this.elements.display[e]=i,i},createTime:function(e){var t=P(this.config.selectors.display[e]),i=w("div",W(t,{class:(this.config.classNames.display.time+" "+(t.class?t.class:"")).trim(),"aria-label":G(e,this.config)}),"00:00");return this.elements.display[e]=i,i},bindMenuItemShortcuts:function(e,t){var i=this;d(e,"keydown",function(n){if([32,38,39,40].includes(n.which)){n.preventDefault(),n.stopPropagation();var s=L(e,'[role="menuitemradio"]');if(!s&&[32,39].includes(n.which))re.showMenuPanel.call(i,t,!0);else{var a=void 0;32!==n.which&&(40===n.which||s&&39===n.which?(a=e.nextElementSibling,l.element(a)||(a=e.parentNode.firstElementChild)):(a=e.previousElementSibling,l.element(a)||(a=e.parentNode.lastElementChild)),I.call(i,a,!0))}}},!1)},createMenuItem:function(e){var t=this,i=e.value,n=e.list,s=e.type,a=e.title,r=e.badge,o=void 0===r?null:r,c=e.checked,u=void 0!==c&&c,d=P(this.config.selectors.inputs[s]),h=w("button",W(d,{type:"button",role:"menuitemradio",class:(this.config.classNames.control+" "+(d.class?d.class:"")).trim(),"aria-checked":u,value:i})),p=w("span");p.innerHTML=a,l.element(o)&&p.appendChild(o),h.appendChild(p),Object.defineProperty(h,"checked",{enumerable:!0,get:function(){return"true"===h.getAttribute("aria-checked")},set:function(e){e&&Array.from(h.parentNode.children).filter(function(e){return L(e,'[role="menuitemradio"]')}).forEach(function(e){return e.setAttribute("aria-checked","false")}),h.setAttribute("aria-checked",e?"true":"false")}}),this.listeners.bind(h,"click keydown",function(e){if("keydown"!==e.type||32===e.which){switch(e.preventDefault(),e.stopPropagation(),h.checked=!0,s){case"language":t.currentTrack=Number(i);break;case"quality":t.quality=i;break;case"speed":t.speed=parseFloat(i)}re.showMenuPanel.call(t,"home","keydown"===e.type)}},s,!1),re.bindMenuItemShortcuts.call(this,h,s),n.appendChild(h)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return l.number(e)?ae(e,ie(this.duration)>0,t):e},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];l.element(e)&&l.number(t)&&(e.innerText=re.formatTime(t,i))},updateVolume:function(){this.supported.ui&&(l.element(this.elements.inputs.volume)&&re.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),l.element(this.elements.buttons.mute)&&(this.elements.buttons.mute.pressed=this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;l.element(e)&&(e.value=t,re.updateRangeFill.call(this,e))},updateProgress:function(e){var t=this;if(this.supported.ui&&l.event(e)){var i,n,s=0;if(e)switch(e.type){case"timeupdate":case"seeking":case"seeked":i=this.currentTime,n=this.duration,s=0===i||0===n||Number.isNaN(i)||Number.isNaN(n)?0:(i/n*100).toFixed(2),"timeupdate"===e.type&&re.setRange.call(this,this.elements.inputs.seek,s);break;case"playing":case"progress":!function(e,i){var n=l.number(i)?i:0,s=l.element(e)?e:t.elements.display.buffer;if(l.element(s)){s.value=n;var a=s.getElementsByTagName("span")[0];l.element(a)&&(a.childNodes[0].nodeValue=n)}}(this.elements.display.buffer,100*this.buffered)}}},updateRangeFill:function(e){var t=l.event(e)?e.target:e;if(l.element(t)&&"range"===t.getAttribute("type")){if(L(t,this.config.selectors.inputs.seek)){t.setAttribute("aria-valuenow",this.currentTime);var i=re.formatTime(this.currentTime),n=re.formatTime(this.duration),s=G("seekLabel",this.config);t.setAttribute("aria-valuetext",s.replace("{currentTime}",i).replace("{duration}",n))}else if(L(t,this.config.selectors.inputs.volume)){var a=100*t.value;t.setAttribute("aria-valuenow",a),t.setAttribute("aria-valuetext",a+"%")}else t.setAttribute("aria-valuenow",t.value);V.isWebkit&&t.style.setProperty("--value",t.value/t.max*100+"%")}},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&l.element(this.elements.inputs.seek)&&l.element(this.elements.display.seekTooltip)&&0!==this.duration){var i=0,n=this.elements.progress.getBoundingClientRect(),s=this.config.classNames.tooltip+"--visible",a=function(e){N(t.elements.display.seekTooltip,s,e)};if(this.touch)a(!1);else{if(l.event(e))i=100/n.width*(e.pageX-n.left);else{if(!M(this.elements.display.seekTooltip,s))return;i=parseFloat(this.elements.display.seekTooltip.style.left,10)}i<0?i=0:i>100&&(i=100),re.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*i),this.elements.display.seekTooltip.style.left=i+"%",l.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&a("mouseenter"===e.type)}}},timeUpdate:function(e){var t=!l.element(this.elements.display.duration)&&this.config.invertTime;re.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||re.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui&&(this.config.invertTime||!this.currentTime)){if(this.duration>=Math.pow(2,32))return S(this.elements.display.currentTime,!0),void S(this.elements.progress,!0);l.element(this.elements.inputs.seek)&&this.elements.inputs.seek.setAttribute("aria-valuemax",this.duration);var e=l.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&re.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&re.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),re.updateSeekTooltip.call(this)}},toggleMenuButton:function(e,t){S(this.elements.settings.buttons[e],!t)},updateSetting:function(e,t,i){var n=this.elements.settings.panels[e],s=null,a=t;if("captions"===e)s=this.currentTrack;else{if(s=l.empty(i)?this[e]:i,l.empty(s)&&(s=this.config[e].default),!l.empty(this.options[e])&&!this.options[e].includes(s))return void this.debug.warn("Unsupported value of '"+s+"' for "+e);if(!this.config[e].options.includes(s))return void this.debug.warn("Disabled value of '"+s+"' for "+e)}if(l.element(a)||(a=n&&n.querySelector('[role="menu"]')),l.element(a)){this.elements.settings.buttons[e].querySelector("."+this.config.classNames.menu.value).innerHTML=re.getLabel.call(this,e,s);var r=a&&a.querySelector('[value="'+s+'"]');l.element(r)&&(r.checked=!0)}},getLabel:function(e,t){switch(e){case"speed":return 1===t?G("normal",this.config):t+"&times;";case"quality":if(l.number(t)){var i=G("qualityLabel."+t,this.config);return i.length?i:t+"p"}return Q(t);case"captions":return ce.getLabel.call(this);default:return null}},setQualityMenu:function(e){var t=this;if(l.element(this.elements.settings.panels.quality)){var i=this.elements.settings.panels.quality.querySelector('[role="menu"]');l.array(e)&&(this.options.quality=X(e).filter(function(e){return t.config.quality.options.includes(e)}));var n=!l.empty(this.options.quality)&&this.options.quality.length>1;if(re.toggleMenuButton.call(this,"quality",n),E(i),re.checkMenu.call(this),n){this.options.quality.sort(function(e,i){var n=t.config.quality.options;return n.indexOf(e)>n.indexOf(i)?1:-1}).forEach(function(e){re.createMenuItem.call(t,{value:e,list:i,type:"quality",title:re.getLabel.call(t,"quality",e),badge:function(e){var i=G("qualityBadge."+e,t.config);return i.length?re.createBadge.call(t,i):null}(e)})}),re.updateSetting.call(this,"quality",i)}}},setCaptionsMenu:function(){var e=this;if(l.element(this.elements.settings.panels.captions)){var t=this.elements.settings.panels.captions.querySelector('[role="menu"]'),i=ce.getTracks.call(this),n=Boolean(i.length);if(re.toggleMenuButton.call(this,"captions",n),E(t),re.checkMenu.call(this),n){var s=i.map(function(i,n){return{value:n,checked:e.captions.toggled&&e.currentTrack===n,title:ce.getLabel.call(e,i),badge:i.language&&re.createBadge.call(e,i.language.toUpperCase()),list:t,type:"language"}});s.unshift({value:-1,checked:!this.captions.toggled,title:G("disabled",this.config),list:t,type:"language"}),s.forEach(re.createMenuItem.bind(this)),re.updateSetting.call(this,"captions",t)}}},setSpeedMenu:function(e){var t=this;if(l.element(this.elements.settings.panels.speed)){var i=this.elements.settings.panels.speed.querySelector('[role="menu"]');l.array(e)?this.options.speed=e:(this.isHTML5||this.isVimeo)&&(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(e){return t.config.speed.options.includes(e)});var n=!l.empty(this.options.speed)&&this.options.speed.length>1;re.toggleMenuButton.call(this,"speed",n),E(i),re.checkMenu.call(this),n&&(this.options.speed.forEach(function(e){re.createMenuItem.call(t,{value:e,list:i,type:"speed",title:re.getLabel.call(t,"speed",e)})}),re.updateSetting.call(this,"speed",i))}},checkMenu:function(){var e=this.elements.settings.buttons,t=!l.empty(e)&&Object.values(e).some(function(e){return!e.hidden});S(this.elements.settings.menu,!t)},toggleMenu:function(e){var t=this.elements.settings.popup,i=this.elements.buttons.settings;if(l.element(t)&&l.element(i)){var n=l.boolean(e)?e:l.element(t)&&t.hasAttribute("hidden");if(l.event(e)){var s=l.element(t)&&t.contains(e.target),a=e.target===this.elements.buttons.settings;if(s||!s&&!a&&n)return;a&&e.stopPropagation()}if(l.element(i)&&i.setAttribute("aria-expanded",n),l.element(t)&&(S(t,!n),N(this.elements.container,this.config.classNames.menu.open,n),n&&l.event(e)&&"keydown"===e.type)){var r=Object.values(this.elements.settings.panels).find(function(e){return!e.hidden}).querySelector('[role^="menuitem"]');I.call(this,r,!0)}}},getMenuSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),e.parentNode.appendChild(t);var i=t.scrollWidth,n=t.scrollHeight;return A(t),{width:i,height:n}},showMenuPanel:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=document.getElementById("plyr-settings-"+this.id+"-"+t);if(l.element(n)){var s=n.parentNode,a=Array.from(s.children).find(function(e){return!e.hidden});if(F.transitions&&!F.reducedMotion){s.style.width=a.scrollWidth+"px",s.style.height=a.scrollHeight+"px";var r=re.getMenuSize.call(this,n);d.call(this,s,R,function t(i){i.target===s&&["width","height"].includes(i.propertyName)&&(s.style.width="",s.style.height="",h.call(e,s,R,t))}),s.style.width=r.width+"px",s.style.height=r.height+"px"}S(a,!0),S(n,!1);var o=n.querySelector('[role^="menuitem"]');I.call(this,o,i)}},create:function(e){var t=this;if(l.empty(this.config.controls))return null;var i=w("div",P(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&i.appendChild(re.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&i.appendChild(re.createButton.call(this,"rewind")),this.config.controls.includes("play")&&i.appendChild(re.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&i.appendChild(re.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var n=w("div",P(this.config.selectors.progress));if(n.appendChild(re.createRange.call(this,"seek",{id:"plyr-seek-"+e.id})),n.appendChild(re.createProgress.call(this,"buffer")),this.config.tooltips.seek){var s=w("span",{class:this.config.classNames.tooltip},"00:00");n.appendChild(s),this.elements.display.seekTooltip=s}this.elements.progress=n,i.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&i.appendChild(re.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&i.appendChild(re.createTime.call(this,"duration")),this.config.controls.includes("mute")&&i.appendChild(re.createButton.call(this,"mute")),this.config.controls.includes("volume")){var a=w("div",{class:"plyr__volume"}),r={max:1,step:.05,value:this.config.volume};a.appendChild(re.createRange.call(this,"volume",W(r,{id:"plyr-volume-"+e.id}))),this.elements.volume=a,i.appendChild(a)}if(this.config.controls.includes("captions")&&i.appendChild(re.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!l.empty(this.config.settings)){var o=w("div",{class:"plyr__menu",hidden:""});o.appendChild(re.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var c=w("div",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,hidden:"","aria-labelled-by":"plyr-settings-toggle-"+e.id}),u=w("div"),h=w("div",{id:"plyr-settings-"+e.id+"-home"}),p=w("div",{role:"menu"});h.appendChild(p),u.appendChild(h),this.elements.settings.panels.home=h,this.config.settings.forEach(function(i){var n=w("button",W(P(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",role:"menuitem","aria-haspopup":!0,hidden:""}));re.bindMenuItemShortcuts.call(t,n,i),d(n,"click",function(){re.showMenuPanel.call(t,i,!1)});var s=w("span",null,G(i,t.config)),a=w("span",{class:t.config.classNames.menu.value});a.innerHTML=e[i],s.appendChild(a),n.appendChild(s),p.appendChild(n);var r=w("div",{id:"plyr-settings-"+e.id+"-"+i,hidden:""}),o=w("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back"});o.appendChild(w("span",{"aria-hidden":!0},G(i,t.config))),o.appendChild(w("span",{class:t.config.classNames.hidden},G("menuBack",t.config))),d(r,"keydown",function(e){37===e.which&&(e.preventDefault(),e.stopPropagation(),re.showMenuPanel.call(t,"home",!0))},!1),d(o,"click",function(){re.showMenuPanel.call(t,"home",!1)}),r.appendChild(o),r.appendChild(w("div",{role:"menu"})),u.appendChild(r),t.elements.settings.buttons[i]=n,t.elements.settings.panels[i]=r}),c.appendChild(u),o.appendChild(c),i.appendChild(o),this.elements.settings.popup=c,this.elements.settings.menu=o}return this.config.controls.includes("pip")&&F.pip&&i.appendChild(re.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&F.airplay&&i.appendChild(re.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&i.appendChild(re.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(re.createButton.call(this,"play-large")),this.elements.controls=i,this.isHTML5&&re.setQualityMenu.call(this,U.getQualityOptions.call(this)),re.setSpeedMenu.call(this),i},inject:function(){var e=this;if(this.config.loadSprite){var t=re.getIconUrl.call(this);t.cors&&te(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var i=null;this.elements.controls=null;var n={id:this.id,seektime:this.config.seekTime,title:this.config.title},s=!0;l.string(this.config.controls)||l.element(this.config.controls)?i=this.config.controls:l.function(this.config.controls)?i=this.config.controls.call(this,n):(i=re.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:ce.getLabel.call(this)}),s=!1);var a=function(e){var t=e;return Object.entries(n).forEach(function(e){var i=v(e,2),n=i[0],s=i[1];t=Y(t,"{"+n+"}",s)}),t};s&&(l.string(this.config.controls)?i=a(i):l.element(i)&&(i.innerHTML=a(i.innerHTML)));var r=void 0;if(l.string(this.config.selectors.controls.container)&&(r=document.querySelector(this.config.selectors.controls.container)),l.element(r)||(r=this.elements.container),l.element(i)?r.appendChild(i):i&&r.insertAdjacentHTML("beforeend",i),l.element(this.elements.controls)||re.findElements.call(this),window.navigator.userAgent.includes("Edge")&&B(r),this.config.tooltips.controls){var o=this.config,c=o.classNames,u=o.selectors,d=u.controls.wrapper+" "+u.labels+" ."+c.hidden,h=x.call(this,d);Array.from(h).forEach(function(t){N(t,e.config.classNames.hidden,!1),N(t,e.config.classNames.tooltip,!0)})}}};function oe(e){var t=e;if(!(arguments.length>1&&void 0!==arguments[1])||arguments[1]){var i=document.createElement("a");i.href=t,t=i.href}try{return new URL(t)}catch(e){return null}}function le(e){var t=new URLSearchParams;return l.object(e)&&Object.entries(e).forEach(function(e){var i=v(e,2),n=i[0],s=i[1];t.set(n,s)}),t}var ce={setup:function(){if(this.supported.ui)if(!this.isVideo||this.isYouTube||this.isHTML5&&!F.textTracks)l.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&re.setCaptionsMenu.call(this);else{var e,t;if(l.element(this.elements.captions)||(this.elements.captions=w("div",P(this.config.selectors.captions)),e=this.elements.captions,t=this.elements.wrapper,l.element(e)&&l.element(t)&&t.parentNode.insertBefore(e,t.nextSibling)),V.isIE&&window.URL){var i=this.media.querySelectorAll("track");Array.from(i).forEach(function(e){var t=e.getAttribute("src"),i=oe(t);null!==i&&i.hostname!==window.location.href.hostname&&["http:","https:"].includes(i.protocol)&&ee(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){A(e)})})}var n=X(Array.from(navigator.languages||navigator.language||navigator.userLanguage).map(function(e){return e.split("-")[0]})),s=(this.storage.get("language")||this.config.captions.language||"auto").toLowerCase();if("auto"===s)s=v(n,1)[0];var a=this.storage.get("captions");if(l.boolean(a)||(a=this.config.captions.active),Object.assign(this.captions,{toggled:!1,active:a,language:s,languages:n}),this.isHTML5){var r=this.config.captions.update?"addtrack removetrack":"removetrack";d.call(this,this.media.textTracks,r,ce.update.bind(this))}setTimeout(ce.update.bind(this),0)}},update:function(){var e=this,t=ce.getTracks.call(this,!0),i=this.captions,n=i.active,s=i.language,a=i.meta,r=i.currentTrackNode,o=Boolean(t.find(function(e){return e.language===s}));this.isHTML5&&this.isVideo&&t.filter(function(e){return!a.get(e)}).forEach(function(t){e.debug.log("Track added",t),a.set(t,{default:"showing"===t.mode}),t.mode="hidden",d.call(e,t,"cuechange",function(){return ce.updateCues.call(e)})}),(o&&this.language!==s||!t.includes(r))&&(ce.setLanguage.call(this,s),ce.toggle.call(this,n&&o)),N(this.elements.container,this.config.classNames.captions.enabled,!l.empty(t)),(this.config.controls||[]).includes("settings")&&this.config.settings.includes("captions")&&re.setCaptionsMenu.call(this)},toggle:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(this.supported.ui){var i=this.captions.toggled,n=this.config.classNames.captions.active,s=l.nullOrUndefined(e)?!i:e;if(s!==i){if(t||(this.captions.active=s,this.storage.set({captions:s})),!this.language&&s&&!t){var a=ce.getTracks.call(this),r=ce.findTrack.call(this,[this.captions.language].concat(function(e){if(Array.isArray(e)){for(var t=0,i=Array(e.length);t<e.length;t++)i[t]=e[t];return i}return Array.from(e)}(this.captions.languages)),!0);return this.captions.language=r.language,void ce.set.call(this,a.indexOf(r))}this.elements.buttons.captions&&(this.elements.buttons.captions.pressed=s),N(this.elements.container,n,s),this.captions.toggled=s,re.updateSetting.call(this,"captions"),m.call(this,this.media,s?"captionsenabled":"captionsdisabled")}}},set:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=ce.getTracks.call(this);if(-1!==e)if(l.number(e))if(e in i){if(this.captions.currentTrack!==e){this.captions.currentTrack=e;var n=i[e],s=(n||{}).language;this.captions.currentTrackNode=n,re.updateSetting.call(this,"captions"),t||(this.captions.language=s,this.storage.set({language:s})),this.isVimeo&&this.embed.enableTextTrack(s),m.call(this,this.media,"languagechange")}ce.toggle.call(this,!0,t),this.isHTML5&&this.isVideo&&ce.updateCues.call(this)}else this.debug.warn("Track not found",e);else this.debug.warn("Invalid caption argument",e);else ce.toggle.call(this,!1,t)},setLanguage:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(l.string(e)){var i=e.toLowerCase();this.captions.language=i;var n=ce.getTracks.call(this),s=ce.findTrack.call(this,[i]);ce.set.call(this,n.indexOf(s),t)}else this.debug.warn("Invalid language argument",e)},getTracks:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return Array.from((this.media||{}).textTracks||[]).filter(function(i){return!e.isHTML5||t||e.captions.meta.has(i)}).filter(function(e){return["captions","subtitles"].includes(e.kind)})},findTrack:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=ce.getTracks.call(this),s=function(e){return Number((t.captions.meta.get(e)||{}).default)},a=Array.from(n).sort(function(e,t){return s(t)-s(e)}),r=void 0;return e.every(function(e){return!(r=a.find(function(t){return t.language===e}))}),r||(i?a[0]:void 0)},getCurrentTrack:function(){return ce.getTracks.call(this)[this.currentTrack]},getLabel:function(e){var t=e;return!l.track(t)&&F.textTracks&&this.captions.toggled&&(t=ce.getCurrentTrack.call(this)),l.track(t)?l.empty(t.label)?l.empty(t.language)?G("enabled",this.config):e.language.toUpperCase():t.label:G("disabled",this.config)},updateCues:function(e){if(this.supported.ui)if(l.element(this.elements.captions))if(l.nullOrUndefined(e)||Array.isArray(e)){var t=e;if(!t){var i=ce.getCurrentTrack.call(this);t=Array.from((i||{}).activeCues||[]).map(function(e){return e.getCueAsHTML()}).map($)}var n=t.map(function(e){return e.trim()}).join("\n");if(n!==this.elements.captions.innerHTML){E(this.elements.captions);var s=w("span",P(this.config.selectors.caption));s.innerHTML=n,this.elements.captions.appendChild(s),m.call(this,this.media,"cuechange")}}else this.debug.warn("updateCues: Invalid input",e);else this.debug.warn("No captions element to render to")}},ue={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,playsinline:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.3.12/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240,"default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:"auto",update:!1},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime}s",play:"Play",pause:"Pause",fastForward:"Forward {seektime}s",seek:"Seek",seekLabel:"{currentTime} of {duration}",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",menuBack:"Go back to previous menu",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad",qualityBadge:{2160:"4K",1440:"HD",1080:"HD",720:"HD",576:"SD",480:"SD"}},urls:{vimeo:{sdk:"https://player.vimeo.com/api/player.js",iframe:"https://player.vimeo.com/video/{0}?{1}",api:"https://vimeo.com/api/v2/video/{0}.json"},youtube:{sdk:"https://www.youtube.com/iframe_api",api:"https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet"},googleIMA:{sdk:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adscontentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress__buffer",loop:".plyr__progress__loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",caption:".plyr__caption",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{type:"plyr--{0}",provider:"plyr--{0}",video:"plyr__video-wrapper",embed:"plyr__video-embed",embedContainer:"plyr__video-embed__container",poster:"plyr__poster",posterEnabled:"plyr__poster-enabled",ads:"plyr__ads",control:"plyr__control",controlPressed:"plyr__control--pressed",playing:"plyr--playing",paused:"plyr--paused",stopped:"plyr--stopped",loading:"plyr--loading",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",display:{time:"plyr__time"},menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:""}},de={html5:"html5",youtube:"youtube",vimeo:"vimeo"},he={audio:"audio",video:"video"};var pe=function(){},me=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];f(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return g(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):pe}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):pe}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):pe}}]),e}();function fe(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;l.element(e)&&(e.pressed=this.active),m.call(this.player,this.target,this.active?"enterfullscreen":"exitfullscreen",!0),V.isIos||function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(l.element(e)){var i=x.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),n=i[0],s=i[i.length-1];u.call(this,this.elements.container,"keydown",function(e){if("Tab"===e.key&&9===e.keyCode){var t=document.activeElement;t!==s||e.shiftKey?t===n&&e.shiftKey&&(s.focus(),e.preventDefault()):(n.focus(),e.preventDefault())}},t,!1)}}.call(this.player,this.target,this.active)}}function ge(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",N(this.target,this.player.config.classNames.fullscreen.fallback,e),fe.call(this)}var ye=function(){function e(t){var i=this;f(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},d.call(this.player,document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){fe.call(i)}),d.call(this.player,this.player.elements.container,"dblclick",function(e){l.element(i.player.elements.controls)&&i.player.elements.controls.contains(e.target)||i.toggle()}),this.update()}return g(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),N(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(V.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?l.empty(this.prefix)||this.target[this.prefix+"Request"+this.property]():this.target.requestFullscreen():ge.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(V.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!l.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.property]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else ge.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[""+this.prefix+this.property+"Element"]:document.fullscreenElement)===this.target:M(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return V.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(l.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!l.function(document[t+"ExitFullscreen"])&&!l.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}();function ve(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Promise(function(i,n){var s=new Image,a=function(){delete s.onload,delete s.onerror,(s.naturalWidth>=t?i:n)(s)};Object.assign(s,{onload:a,onerror:a,src:e})})}var be={addStyleHook:function(){N(this.elements.container,this.config.selectors.container.replace(".",""),!0),N(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void be.toggleNativeControls.call(this,!0);l.element(this.elements.controls)||(re.inject.call(this),this.listeners.controls()),be.toggleNativeControls.call(this),this.isHTML5&&ce.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,re.updateVolume.call(this),re.timeUpdate.call(this),be.checkPlaying.call(this),N(this.elements.container,this.config.classNames.pip.supported,F.pip&&this.isHTML5&&this.isVideo),N(this.elements.container,this.config.classNames.airplay.supported,F.airplay&&this.isHTML5),N(this.elements.container,this.config.classNames.isIos,V.isIos),N(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){m.call(e,e.media,"ready")},0),be.setTitle.call(this),this.poster&&be.setPoster.call(this,this.poster,!1).catch(function(){}),this.config.duration&&re.durationUpdate.call(this)},setTitle:function(){var e=G("play",this.config);if(l.string(this.config.title)&&!l.empty(this.config.title)&&(e+=", "+this.config.title),Array.from(this.elements.buttons.play||[]).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=_.call(this,"iframe");if(!l.element(t))return;var i=l.empty(this.config.title)?"video":this.config.title,n=G("frameTitle",this.config);t.setAttribute("title",n.replace("{title}",i))}},togglePoster:function(e){N(this.elements.container,this.config.classNames.posterEnabled,e)},setPoster:function(e){var t=this;return arguments.length>1&&void 0!==arguments[1]&&!arguments[1]||!this.poster?(this.media.setAttribute("poster",e),function(){var e=this;return new Promise(function(t){return e.ready?setTimeout(t,0):d.call(e,e.elements.container,"ready",t)}).then(function(){})}.call(this).then(function(){return ve(e)}).catch(function(i){throw e===t.poster&&be.togglePoster.call(t,!1),i}).then(function(){if(e!==t.poster)throw new Error("setPoster cancelled by later call to setPoster")}).then(function(){return Object.assign(t.elements.poster.style,{backgroundImage:"url('"+e+"')",backgroundSize:""}),be.togglePoster.call(t,!0),e})):Promise.reject(new Error("Poster already set"))},checkPlaying:function(e){var t=this;N(this.elements.container,this.config.classNames.playing,this.playing),N(this.elements.container,this.config.classNames.paused,this.paused),N(this.elements.container,this.config.classNames.stopped,this.stopped),Array.from(this.elements.buttons.play||[]).forEach(function(e){e.pressed=t.playing}),l.event(e)&&"timeupdate"===e.type||be.toggleControls.call(this)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){N(t.elements.container,t.config.classNames.loading,t.loading),be.toggleControls.call(t)},this.loading?250:0)},toggleControls:function(e){var t=this.elements.controls;t&&this.config.hideControls&&this.toggleControls(Boolean(e||this.loading||this.paused||t.pressed||t.hover))}},ke=function(){function e(t){f(this,e),this.player=t,this.lastKey=null,this.focusTimer=null,this.lastKeyDown=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.setTabFocus=this.setTabFocus.bind(this),this.firstTouch=this.firstTouch.bind(this)}return g(e,[{key:"handleKey",value:function(e){var t=this.player,i=e.keyCode?e.keyCode:e.which,n="keydown"===e.type,s=n&&i===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&l.number(i)){if(n){var a=document.activeElement;if(l.element(a)){var r=t.config.selectors.editable;if(a!==t.elements.inputs.seek&&L(a,r))return;if(32===e.which&&L(a,'button, [role^="menuitem"]'))return}switch([32,37,38,39,40,48,49,50,51,52,53,54,56,57,67,70,73,75,76,77,79].includes(i)&&(e.preventDefault(),e.stopPropagation()),i){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:s||(t.currentTime=t.duration/10*(i-48));break;case 32:case 75:s||t.togglePlay();break;case 38:t.increaseVolume(.1);break;case 40:t.decreaseVolume(.1);break;case 77:s||(t.muted=!t.muted);break;case 39:t.forward();break;case 37:t.rewind();break;case 70:t.fullscreen.toggle();break;case 67:s||t.toggleCaptions();break;case 76:t.loop=!t.loop}!t.fullscreen.enabled&&t.fullscreen.active&&27===i&&t.fullscreen.toggle(),this.lastKey=i}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){re.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){var e=this.player;e.touch=!0,N(e.elements.container,e.config.classNames.isTouch,!0)}},{key:"setTabFocus",value:function(e){var t=this.player;if(clearTimeout(this.focusTimer),"keydown"!==e.type||"Tab"===e.code){"keydown"===e.type&&(this.lastKeyDown=e.timeStamp);var i,n=e.timeStamp-this.lastKeyDown<=20;if("focus"!==e.type||n)i=t.config.classNames.tabFocus,N(x.call(t,"."+i),i,!1),this.focusTimer=setTimeout(function(){var e=document.activeElement;t.elements.container.contains(e)&&N(document.activeElement,t.config.classNames.tabFocus,!0)},10)}}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=this.player;t.config.keyboard.global&&u.call(t,window,"keydown keyup",this.handleKey,e,!1),u.call(t,document.body,"click",this.toggleMenu,e),p.call(t,document.body,"touchstart",this.firstTouch),u.call(t,document.body,"keydown focus blur",this.setTabFocus,e,!1,!0)}},{key:"container",value:function(){var e=this.player;!e.config.keyboard.global&&e.config.keyboard.focused&&d.call(e,e.elements.container,"keydown keyup",this.handleKey,!1),d.call(e,e.elements.container,"mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen",function(t){var i=e.elements.controls;"enterfullscreen"===t.type&&(i.pressed=!1,i.hover=!1);var n=0;["touchstart","touchmove","mousemove"].includes(t.type)&&(be.toggleControls.call(e,!0),n=e.touch?3e3:2e3),clearTimeout(e.timers.controls),e.timers.controls=setTimeout(function(){return be.toggleControls.call(e,!1)},n)})}},{key:"media",value:function(){var e=this.player;if(d.call(e,e.media,"timeupdate seeking seeked",function(t){return re.timeUpdate.call(e,t)}),d.call(e,e.media,"durationchange loadeddata loadedmetadata",function(t){return re.durationUpdate.call(e,t)}),d.call(e,e.media,"canplay",function(){S(e.elements.volume,!e.hasAudio),S(e.elements.buttons.mute,!e.hasAudio)}),d.call(e,e.media,"ended",function(){e.isHTML5&&e.isVideo&&e.config.resetOnEnd&&e.restart()}),d.call(e,e.media,"progress playing seeking seeked",function(t){return re.updateProgress.call(e,t)}),d.call(e,e.media,"volumechange",function(t){return re.updateVolume.call(e,t)}),d.call(e,e.media,"playing play pause ended emptied timeupdate",function(t){return be.checkPlaying.call(e,t)}),d.call(e,e.media,"waiting canplay seeked playing",function(t){return be.checkLoading.call(e,t)}),d.call(e,e.media,"playing",function(){e.ads&&e.ads.enabled&&!e.ads.initialized&&e.ads.managerPromise.then(function(){return e.ads.play()}).catch(function(){return e.play()})}),e.supported.ui&&e.config.clickToPlay&&!e.isAudio){var t=_.call(e,"."+e.config.classNames.video);if(!l.element(t))return;d.call(e,e.elements.container,"click touchstart",function(i){([e.elements.container,t].includes(i.target)||t.contains(i.target))&&(e.config.hideControls&&e.touch&&M(e.elements.container,e.config.classNames.hideControls)||(e.ended?(e.restart(),e.play()):e.togglePlay()))})}e.supported.ui&&e.config.disableContextMenu&&d.call(e,e.elements.wrapper,"contextmenu",function(e){e.preventDefault()},!1),d.call(e,e.media,"volumechange",function(){e.storage.set({volume:e.volume,muted:e.muted})}),d.call(e,e.media,"ratechange",function(){re.updateSetting.call(e,"speed"),e.storage.set({speed:e.speed})}),d.call(e,e.media,"qualityrequested",function(t){e.storage.set({quality:t.detail.quality})}),d.call(e,e.media,"qualitychange",function(t){re.updateSetting.call(e,"quality",null,t.detail.quality)});var i=e.config.events.concat(["keyup","keydown"]).join(" ");d.call(e,e.media,i,function(t){var i=t.detail,n=void 0===i?{}:i;"error"===t.type&&(n=e.media.error),m.call(e,e.elements.container,t.type,!0,n)})}},{key:"proxy",value:function(e,t,i){var n=this.player,s=n.config.listeners[i],a=!0;l.function(s)&&(a=s.call(n,e)),a&&l.function(t)&&t.call(n,e)}},{key:"bind",value:function(e,t,i,n){var s=this,a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],r=this.player,o=r.config.listeners[n],c=l.function(o);d.call(r,e,t,function(e){return s.proxy(e,i,n)},a&&!c)}},{key:"controls",value:function(){var e=this,t=this.player,i=V.isIE?"change":"input";t.elements.buttons.play&&Array.from(t.elements.buttons.play).forEach(function(i){e.bind(i,"click",t.togglePlay,"play")}),this.bind(t.elements.buttons.restart,"click",t.restart,"restart"),this.bind(t.elements.buttons.rewind,"click",t.rewind,"rewind"),this.bind(t.elements.buttons.fastForward,"click",t.forward,"fastForward"),this.bind(t.elements.buttons.mute,"click",function(){t.muted=!t.muted},"mute"),this.bind(t.elements.buttons.captions,"click",function(){return t.toggleCaptions()}),this.bind(t.elements.buttons.fullscreen,"click",function(){t.fullscreen.toggle()},"fullscreen"),this.bind(t.elements.buttons.pip,"click",function(){t.pip="toggle"},"pip"),this.bind(t.elements.buttons.airplay,"click",t.airplay,"airplay"),this.bind(t.elements.buttons.settings,"click",function(e){re.toggleMenu.call(t,e)}),this.bind(t.elements.buttons.settings,"keydown",function(e){32===e.which&&(e.preventDefault(),e.stopPropagation(),re.toggleMenu.call(t,e))},null,!1),this.bind(t.elements.inputs.seek,"mousedown mousemove",function(e){var i=t.elements.progress.getBoundingClientRect(),n=100/i.width*(e.pageX-i.left);e.currentTarget.setAttribute("seek-value",n)}),this.bind(t.elements.inputs.seek,"mousedown mouseup keydown keyup touchstart touchend",function(e){var i=e.currentTarget,n=e.keyCode?e.keyCode:e.which,s=e.type;if("keydown"!==s&&"keyup"!==s||39===n||37===n){var a=i.hasAttribute("play-on-seeked"),r=["mouseup","touchend","keyup"].includes(e.type);a&&r?(i.removeAttribute("play-on-seeked"),t.play()):!r&&t.playing&&(i.setAttribute("play-on-seeked",""),t.pause())}}),this.bind(t.elements.inputs.seek,i,function(e){var i=e.currentTarget,n=i.getAttribute("seek-value");l.empty(n)&&(n=i.value),i.removeAttribute("seek-value"),V.isIos&&B(i),t.currentTime=n/i.max*t.duration},"seek"),t.config.toggleInvert&&!l.element(t.elements.display.duration)&&this.bind(t.elements.display.currentTime,"click",function(){0!==t.currentTime&&(t.config.invertTime=!t.config.invertTime,re.timeUpdate.call(t))}),this.bind(t.elements.inputs.volume,i,function(e){t.volume=e.target.value},"volume"),V.isWebkit&&Array.from(x.call(t,'input[type="range"]')).forEach(function(i){e.bind(i,"input",function(e){return re.updateRangeFill.call(t,e.target)})}),this.bind(t.elements.progress,"mouseenter mouseleave mousemove",function(e){return re.updateSeekTooltip.call(t,e)}),this.bind(t.elements.controls,"mouseenter mouseleave",function(e){t.elements.controls.hover=!t.touch&&"mouseenter"===e.type}),this.bind(t.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(e){t.elements.controls.pressed=["mousedown","touchstart"].includes(e.type)}),this.bind(t.elements.controls,"focusin focusout",function(i){var n=t.config,s=t.elements,a=t.timers,r="focusin"===i.type;if(N(s.controls,n.classNames.noTransition,r),be.toggleControls.call(t,r),r){setTimeout(function(){N(s.controls,n.classNames.noTransition,!1)},0);var o=e.touch?3e3:4e3;clearTimeout(a.controls),a.controls=setTimeout(function(){return be.toggleControls.call(t,!1)},o)}}),this.bind(t.elements.inputs.volume,"wheel",function(e){var i=e.webkitDirectionInvertedFromDevice,n=[e.deltaX,-e.deltaY].map(function(e){return i?-e:e}),s=v(n,2),a=s[0],r=s[1],o=Math.sign(Math.abs(a)>Math.abs(r)?a:r);t.increaseVolume(o/50);var l=t.media.volume;(1===o&&l<1||-1===o&&l>0)&&e.preventDefault()},"volume",!1)}}]),e}();"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var we,Te=(function(e,t){var i;i=function(){var e=function(){},t={},i={},n={};function s(e,t){if(e){var s=n[e];if(i[e]=t,s)for(;s.length;)s[0](e,t),s.splice(0,1)}}function a(t,i){t.call&&(t={success:t}),i.length?(t.error||e)(i):(t.success||e)(t)}function r(t,i,n,s){var a,o,l=document,c=n.async,u=(n.numRetries||0)+1,d=n.before||e,h=t.replace(/^(css|img)!/,"");s=s||0,/(^css!|\.css$)/.test(t)?(a=!0,(o=l.createElement("link")).rel="stylesheet",o.href=h):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(o=l.createElement("img")).src=h:((o=l.createElement("script")).src=t,o.async=void 0===c||c),o.onload=o.onerror=o.onbeforeload=function(e){var l=e.type[0];if(a&&"hideFocus"in o)try{o.sheet.cssText.length||(l="e")}catch(e){l="e"}if("e"==l&&(s+=1)<u)return r(t,i,n,s);i(t,l,e.defaultPrevented)},!1!==d(t,o)&&l.head.appendChild(o)}function o(e,i,n){var o,l;if(i&&i.trim&&(o=i),l=(o?n:i)||{},o){if(o in t)throw"LoadJS";t[o]=!0}!function(e,t,i){var n,s,a=(e=e.push?e:[e]).length,o=a,l=[];for(n=function(e,i,n){if("e"==i&&l.push(e),"b"==i){if(!n)return;l.push(e)}--a||t(l)},s=0;s<o;s++)r(e[s],n,i)}(e,function(e){a(l,e),s(o,e)},l)}return o.ready=function(e,t){return function(e,t){e=e.push?e:[e];var s,a,r,o=[],l=e.length,c=l;for(s=function(e,i){i.length&&o.push(e),--c||t(o)};l--;)a=e[l],(r=i[a])?s(a,r):(n[a]=n[a]||[]).push(s)}(e,function(e){a(t,e)}),o},o.done=function(e){s(e,[])},o.reset=function(){t={},i={},n={}},o.isDefined=function(e){return e in t},o},e.exports=i()}(we={exports:{}},we.exports),we.exports);function Ae(e){return new Promise(function(t,i){Te(e,{success:t,error:i})})}function Ee(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,m.call(this,this.media,e?"play":"pause"))}var Ce={setup:function(){var e=this;N(this.elements.wrapper,this.config.classNames.embed,!0),Ce.setAspectRatio.call(this),l.object(window.Vimeo)?Ce.ready.call(this):Ae(this.config.urls.vimeo.sdk).then(function(){Ce.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=(l.string(e)?e:this.config.ratio).split(":"),i=v(t,2),n=100/i[0]*i[1];if(this.elements.wrapper.style.paddingBottom=n+"%",this.supported.ui){var s=(240-n)/4.8;this.media.style.transform="translateY(-"+s+"%)"}},ready:function(){var e=this,t=this,i=le({loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative}),n=t.media.getAttribute("src");l.empty(n)&&(n=t.media.getAttribute(t.config.attributes.embed.id));var s,a=(s=n,l.empty(s)?null:l.number(Number(s))?s:s.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:s),r=w("iframe"),o=K(t.config.urls.vimeo.iframe,a,i);r.setAttribute("src",o),r.setAttribute("allowfullscreen",""),r.setAttribute("allowtransparency",""),r.setAttribute("allow","autoplay");var c=w("div",{poster:t.poster,class:t.config.classNames.embedContainer});c.appendChild(r),t.media=C(c,t.media),ee(K(t.config.urls.vimeo.api,a),"json").then(function(e){if(!l.empty(e)){var i=new URL(e[0].thumbnail_large);i.pathname=i.pathname.split("_")[0]+".jpg",be.setPoster.call(t,i.href).catch(function(){})}}),t.embed=new window.Vimeo.Player(r,{autopause:t.config.autopause,muted:t.muted}),t.media.paused=!0,t.media.currentTime=0,t.supported.ui&&t.embed.disableTextTrack(),t.media.play=function(){return Ee.call(t,!0),t.embed.play()},t.media.pause=function(){return Ee.call(t,!1),t.embed.pause()},t.media.stop=function(){t.pause(),t.currentTime=0};var u=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return u},set:function(e){var i=t.embed,n=t.media,s=t.paused,a=t.volume,r=s&&!i.hasPlayed;n.seeking=!0,m.call(t,n,"seeking"),Promise.resolve(r&&i.setVolume(0)).then(function(){return i.setCurrentTime(e)}).then(function(){return r&&i.pause()}).then(function(){return r&&i.setVolume(a)}).catch(function(){})}});var d=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return d},set:function(e){t.embed.setPlaybackRate(e).then(function(){d=e,m.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&re.setSpeedMenu.call(t,[])})}});var h=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return h},set:function(e){t.embed.setVolume(e).then(function(){h=e,m.call(t,t.media,"volumechange")})}});var p=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return p},set:function(e){var i=!!l.boolean(e)&&e;t.embed.setVolume(i?0:t.config.volume).then(function(){p=i,m.call(t,t.media,"volumechange")})}});var f=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return f},set:function(e){var i=l.boolean(e)?e:t.config.loop.active;t.embed.setLoop(i).then(function(){f=i})}});var g=void 0;t.embed.getVideoUrl().then(function(e){g=e}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return g}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var i=function(e,t){var i=function e(t,i){return 0===i?t:e(i,t%i)}(e,t);return e/i+":"+t/i}(t[0],t[1]);Ce.setAspectRatio.call(e,i)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(i){t.config.title=i,be.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){u=e,m.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,m.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,ce.setup.call(t)}),t.embed.on("cuechange",function(e){var i=e.cues,n=(void 0===i?[]:i).map(function(e){return t=e.text,i=document.createDocumentFragment(),n=document.createElement("div"),i.appendChild(n),n.innerHTML=t,i.firstChild.innerText;var t,i,n});ce.updateCues.call(t,n)}),t.embed.on("loaded",function(){(t.embed.getPaused().then(function(e){Ee.call(t,!e),e||m.call(t,t.media,"playing")}),l.element(t.embed.element)&&t.supported.ui)&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){Ee.call(t,!0),m.call(t,t.media,"playing")}),t.embed.on("pause",function(){Ee.call(t,!1)}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,u=e.seconds,m.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,m.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&m.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,m.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,m.call(t,t.media,"seeked")}),t.embed.on("ended",function(){t.media.paused=!0,m.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,m.call(t,t.media,"error")}),setTimeout(function(){return be.build.call(t)},0)}};function Pe(e){var t=Object.entries({hd2160:2160,hd1440:1440,hd1080:1080,hd720:720,large:480,medium:360,small:240,tiny:144}).find(function(t){return t.includes(e)});return t?t.find(function(t){return t!==e}):"default"}function Se(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,m.call(this,this.media,e?"play":"pause"))}var Ne,Me={setup:function(){var e=this;N(this.elements.wrapper,this.config.classNames.embed,!0),Me.setAspectRatio.call(this),l.object(window.YT)&&l.function(window.YT.Player)?Me.ready.call(this):(Ae(this.config.urls.youtube.sdk).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){Me.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(l.function(this.embed.getVideoData)){var i=this.embed.getVideoData().title;if(l.empty(i))return this.config.title=i,void be.setTitle.call(this)}var n=this.config.keys.google;l.string(n)&&!l.empty(n)&&ee(K(this.config.urls.youtube.api,e,n)).then(function(e){l.object(e)&&(t.config.title=e.items[0].snippet.title,be.setTitle.call(t))}).catch(function(){})},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(l.empty(t)||!t.startsWith("youtube-")){var i=e.media.getAttribute("src");l.empty(i)&&(i=e.media.getAttribute(this.config.attributes.embed.id));var n,s=(n=i,l.empty(n)?null:n.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:n),a=e.provider+"-"+Math.floor(1e4*Math.random()),r=w("div",{id:a,poster:e.poster});e.media=C(r,e.media);var o=function(e){return"https://img.youtube.com/vi/"+s+"/"+e+"default.jpg"};ve(o("maxres"),121).catch(function(){return ve(o("sd"),121)}).catch(function(){return ve(o("hq"))}).then(function(t){return be.setPoster.call(e,t.src)}).then(function(t){t.includes("maxres")||(e.elements.poster.style.backgroundSize="cover")}).catch(function(){}),e.embed=new window.YT.Player(a,{videoId:s,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!e.media.error){var i=t.data,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.",5:"The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.",100:"The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.",101:"The owner of the requested video does not allow it to be played in embedded players.",150:"The owner of the requested video does not allow it to be played in embedded players."}[i]||"An unknown error occured";e.media.error={code:i,message:n},m.call(e,e.media,"error")}},onPlaybackQualityChange:function(){m.call(e,e.media,"qualitychange",!1,{quality:e.media.quality})},onPlaybackRateChange:function(t){var i=t.target;e.media.playbackRate=i.getPlaybackRate(),m.call(e,e.media,"ratechange")},onReady:function(t){var i=t.target;Me.getTitle.call(e,s),e.media.play=function(){Se.call(e,!0),i.playVideo()},e.media.pause=function(){Se.call(e,!1),i.pauseVideo()},e.media.stop=function(){i.stopVideo()},e.media.duration=i.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(i.getCurrentTime())},set:function(t){e.paused&&!e.embed.hasPlayed&&e.embed.mute(),e.media.seeking=!0,m.call(e,e.media,"seeking"),i.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return i.getPlaybackRate()},set:function(e){i.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return Pe(i.getPlaybackQuality())},set:function(e){i.setPlaybackQuality(Pe(e))}});var n=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return n},set:function(t){n=t,i.setVolume(100*n),m.call(e,e.media,"volumechange")}});var a=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return a},set:function(t){var n=l.boolean(t)?t:a;a=n,i[n?"mute":"unMute"](),m.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return i.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=i.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),m.call(e,e.media,"timeupdate"),m.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=i.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&m.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),m.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return be.build.call(e)},50)},onStateChange:function(t){var i,n=t.target;switch(clearInterval(e.timers.playing),e.media.seeking&&[1,2].includes(t.data)&&(e.media.seeking=!1,m.call(e,e.media,"seeked")),t.data){case-1:m.call(e,e.media,"timeupdate"),e.media.buffered=n.getVideoLoadedFraction(),m.call(e,e.media,"progress");break;case 0:Se.call(e,!1),e.media.loop?(n.stopVideo(),n.playVideo()):m.call(e,e.media,"ended");break;case 1:e.media.paused&&!e.embed.hasPlayed?e.media.pause():(Se.call(e,!0),m.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){m.call(e,e.media,"timeupdate")},50),e.media.duration!==n.getDuration()&&(e.media.duration=n.getDuration(),m.call(e,e.media,"durationchange")),re.setQualityMenu.call(e,(i=n.getAvailableQualityLevels(),l.empty(i)?i:X(i.map(function(e){return Pe(e)})))));break;case 2:e.muted||e.embed.unMute(),Se.call(e,!1)}m.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},Le={setup:function(){this.media?(N(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),N(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&N(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.isVideo&&(this.elements.wrapper=w("div",{class:this.config.classNames.video}),b(this.media,this.elements.wrapper),this.elements.poster=w("div",{class:this.config.classNames.poster}),this.elements.wrapper.appendChild(this.elements.poster)),this.isHTML5?U.extend.call(this):this.isYouTube?Me.setup.call(this):this.isVimeo&&Ce.setup.call(this)):this.debug.warn("No media element found!")}},xe=function(){function e(t){var i=this;f(this,e),this.player=t,this.publisherId=t.config.ads.publisherId,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){i.on("loaded",e),i.on("error",t)}),this.load()}return g(e,[{key:"load",value:function(){var e=this;this.enabled&&(l.object(window.google)&&l.object(window.google.ima)?this.ready():Ae(this.player.config.urls.googleIMA.sdk).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=w("div",{class:this.player.config.classNames.ads}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var i=new google.ima.AdsRequest;i.adTagUrl=this.tagUrl,i.linearAdSlotWidth=t.offsetWidth,i.linearAdSlotHeight=t.offsetHeight,i.nonLinearAdSlotWidth=t.offsetWidth,i.nonLinearAdSlotHeight=t.offsetHeight,i.forceNonLinearFullSlot=!1,i.setAdWillPlayMuted(!this.player.muted),this.loader.requestAds(i)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=ae(Math.max(e.manager.getRemainingTime(),0)),i=G("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",i)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,i=new google.ima.AdsRenderingSettings;i.restoreCustomPlaybackStateOnAdBreakComplete=!0,i.enablePreloading=!0,this.manager=e.getAdsManager(this.player,i),this.cuePoints=this.manager.getCuePoints(),l.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var i=t.player.elements.progress;if(l.element(i)){var n=100/t.player.duration*e,s=w("span",{class:t.player.config.classNames.cues});s.style.left=n.toString()+"%",i.appendChild(s)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,i=this.player.elements.container,n=e.getAd(),s=function(e){var i="ads"+e.replace(/_/g,"").toLowerCase();m.call(t.player,t.player.media,i)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),s(e.type),this.pollCountdown(!0),n.isLinear()||(n.width=i.offsetWidth,n.height=i.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:s(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:s(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:s(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:s(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,i=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return i=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;l.empty(e.cuePoints)||e.cuePoints.forEach(function(n,s){i<n&&n<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(s,1))})}),window.addEventListener("resize",function(){e.manager&&e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("error"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,i=arguments.length,n=Array(i>1?i-1:0),s=1;s<i;s++)n[s-1]=arguments[s];var a=this.events[e];l.array(a)&&a.forEach(function(e){l.function(e)&&e.apply(t,n)})}},{key:"on",value:function(e,t){return l.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var i=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){i.cancel(),i.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){l.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"enabled",get:function(){return this.player.isHTML5&&this.player.isVideo&&this.player.config.ads.enabled&&!l.empty(this.publisherId)}},{key:"tagUrl",get:function(){return"https://go.aniview.com/api/adserver6/vast/?"+le({AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:window.location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId})}}]),e}(),_e={insertElements:function(e,t){var i=this;l.string(t)?T(e,this.media,{src:t}):l.array(t)&&t.forEach(function(t){T(e,i.media,t)})},change:function(e){var t=this;z(e,"sources.length")?(U.cancelRequests.call(this),this.destroy.call(this,function(){t.options.quality=[],A(t.media),t.media=null,l.element(t.elements.container)&&t.elements.container.removeAttribute("class");var i=e.sources,n=e.type,s=v(i,1)[0],a=s.provider,r=void 0===a?de.html5:a,o=s.src,c="html5"===r?n:"div",u="html5"===r?{}:{src:o};Object.assign(t,{provider:r,type:n,supported:F.check(n,r,t.config.playsinline),media:w(c,u)}),t.elements.container.appendChild(t.media),l.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),l.empty(e.poster)||(t.poster=e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.playsinline&&t.media.setAttribute("playsinline","")),be.addStyleHook.call(t),t.isHTML5&&_e.insertElements.call(t,"source",i),t.config.title=e.title,Le.setup.call(t),t.isHTML5&&("tracks"in e&&_e.insertElements.call(t,"track",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&be.build.call(t),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}},Ie=function(){function e(t,i){var n=this;if(f(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=F.touch,this.media=t,l.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||l.nodeList(this.media)||l.array(this.media))&&(this.media=this.media[0]),this.config=W({},ue,e.defaults,i||{},function(){try{return JSON.parse(n.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,captions:null,buttons:{},display:{},progress:{},inputs:{},settings:{popup:null,menu:null,panels:{},buttons:{}}},this.captions={active:null,currentTrack:-1,meta:new WeakMap},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new me(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",F),!l.nullOrUndefined(this.media)&&l.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(F.check().api){var s=this.media.cloneNode(!0);s.autoplay=!1,this.elements.original=s;var a=this.media.tagName.toLowerCase(),r=null,o=null;switch(a){case"div":if(r=this.media.querySelector("iframe"),l.element(r)){if(o=oe(r.getAttribute("src")),this.provider=function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?de.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{0,9}(?=\b|\/)/.test(e)?de.vimeo:null}(o.toString()),this.elements.container=this.media,this.media=r,this.elements.container.className="",o.searchParams.length){var c=["1","true"];c.includes(o.searchParams.get("autoplay"))&&(this.config.autoplay=!0),c.includes(o.searchParams.get("loop"))&&(this.config.loop.active=!0),this.isYouTube?this.config.playsinline=c.includes(o.searchParams.get("playsinline")):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(l.empty(this.provider)||!Object.keys(de).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=he.video;break;case"video":case"audio":this.type=a,this.provider=de.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),(this.media.hasAttribute("playsinline")||this.media.hasAttribute("webkit-playsinline"))&&(this.config.playsinline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=F.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.eventListeners=[],this.listeners=new ke(this),this.storage=new Z(this),this.media.plyr=this,l.element(this.elements.container)||(this.elements.container=w("div"),b(this.media,this.elements.container)),be.addStyleHook.call(this),Le.setup.call(this),this.config.debug&&d.call(this,this.elements.container,this.config.events.join(" "),function(e){n.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&be.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new ye(this),this.config.ads.enabled&&(this.ads=new xe(this)),this.config.autoplay&&this.play()):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return g(e,[{key:"play",value:function(){return l.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&l.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(l.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?(this.pause(),this.restart()):l.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(l.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(l.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(l.number(e)?e:0)}},{key:"decreaseVolume",value:function(e){this.increaseVolume(-e)}},{key:"toggleCaptions",value:function(e){ce.toggle.call(this,e,!1)}},{key:"airplay",value:function(){F.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){if(this.supported.ui&&!this.isAudio){var t=M(this.elements.container,this.config.classNames.hideControls),i=void 0===e?void 0:!e,n=N(this.elements.container,this.config.classNames.hideControls,i);if(n&&this.config.controls.includes("settings")&&!l.empty(this.config.settings)&&re.toggleMenu.call(this,!1),n!==t){var s=n?"controlshidden":"controlsshown";m.call(this,this.media,s)}return!n}return!1}},{key:"on",value:function(e,t){d.call(this,this.elements.container,e,t)}},{key:"once",value:function(e,t){p.call(this,this.elements.container,e,t)}},{key:"off",value:function(e,t){h(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var n=function(){document.body.style.overflow="",t.embed=null,i?(Object.keys(t.elements).length&&(A(t.elements.buttons.play),A(t.elements.captions),A(t.elements.controls),A(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),l.function(e)&&e()):(function(){this&&this.eventListeners&&(this.eventListeners.forEach(function(e){var t=e.element,i=e.type,n=e.callback,s=e.options;t.removeEventListener(i,n,s)}),this.eventListeners=[])}.call(t),C(t.elements.original,t.elements.container),m.call(t,t.elements.original,"destroyed",!0),l.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};this.stop(),this.isHTML5?(clearTimeout(this.timers.loading),be.toggleNativeControls.call(this,!0),n()):this.isYouTube?(clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&l.function(this.embed.destroy)&&this.embed.destroy(),n()):this.isVimeo&&(null!==this.embed&&this.embed.unload().then(n),setTimeout(n,200))}}},{key:"supports",value:function(e){return F.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===de.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===de.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===de.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===he.video)}},{key:"isAudio",get:function(){return Boolean(this.type===he.audio)}},{key:"playing",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"stopped",get:function(){return Boolean(this.paused&&0===this.currentTime)}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){if(this.duration){var t=l.number(e)&&e>0;this.media.currentTime=t?Math.min(e,this.duration):0,this.debug.log("Seeking to "+this.currentTime+" seconds")}},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return l.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseFloat(this.config.duration),t=(this.media||{}).duration,i=l.number(t)&&t!==1/0?t:0;return e||i}},{key:"volume",set:function(e){var t=e;l.string(t)&&(t=Number(t)),l.number(t)||(t=this.storage.get("volume")),l.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!l.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;l.boolean(t)||(t=this.storage.get("muted")),l.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;l.number(e)&&(t=e),l.number(t)||(t=this.storage.get("speed")),l.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=this.config.quality,i=this.options.quality;if(i.length){var n=[!l.empty(e)&&Number(e),this.storage.get("quality"),t.selected,t.default].find(l.number);if(!i.includes(n)){var s=function(e,t){return l.array(e)&&e.length?e.reduce(function(e,i){return Math.abs(i-t)<Math.abs(e-t)?i:e}):null}(i,n);this.debug.warn("Unsupported quality option: "+n+", using "+s+" instead"),n=s}m.call(this,this.media,"qualityrequested",!1,{quality:n}),t.selected=n,this.media.quality=n}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=l.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){_e.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isVideo?be.setPoster.call(this,e,!1).catch(function(){}):this.debug.warn("Poster can only be set for video")},get:function(){return this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=l.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"currentTrack",set:function(e){ce.set.call(this,e,!1)},get:function(){var e=this.captions,t=e.toggled,i=e.currentTrack;return t?i:-1}},{key:"language",set:function(e){ce.setLanguage.call(this,e,!1)},get:function(){return(ce.getCurrentTrack.call(this)||{}).language}},{key:"pip",set:function(e){var t="picture-in-picture",i="inline";if(F.pip){var n=l.boolean(e)?e:this.pip===i;this.media.webkitSetPresentationMode(n?t:i)}},get:function(){return F.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,i){return F.check(e,t,i)}},{key:"loadSprite",value:function(e,t){return te(e,t)}},{key:"setup",value:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null;return l.string(t)?n=Array.from(document.querySelectorAll(t)):l.nodeList(t)?n=Array.from(t):l.array(t)&&(n=t.filter(l.element)),l.empty(n)?null:n.map(function(t){return new e(t,i)})}}]),e}();return Ie.defaults=(Ne=ue,JSON.parse(JSON.stringify(Ne))),Ie});
//# sourceMappingURL=plyr.min.js.map
diff --git a/dist/plyr.min.js.map b/dist/plyr.min.js.map
index 7c0ef477..bc8a9f1a 100644
--- a/dist/plyr.min.js.map
+++ b/dist/plyr.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["src/js/utils/is.js","src/js/utils/events.js","src/js/utils/elements.js","src/js/utils/animation.js","src/js/utils/browser.js","src/js/support.js","src/js/html5.js","src/js/utils/objects.js","src/js/utils/strings.js","src/js/i18n.js","src/js/utils/arrays.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","src/js/utils/loadImage.js","src/js/ui.js","src/js/listeners.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils/loadScript.js","src/js/plugins/vimeo.js","src/js/plugins/youtube.js","src/js/media.js","src/js/plugins/ads.js","src/js/source.js","src/js/plyr.js"],"names":["getConstructor","input","constructor","instanceOf","Boolean","isNullOrUndefined","isObject","Object","isString","String","isArray","Array","isNodeList","NodeList","isEmpty","length","keys","is","nullOrUndefined","object","number","Number","isNaN","string","boolean","function","Function","array","weakMap","WeakMap","nodeList","element","Element","textNode","Text","event","Event","cue","window","TextTrackCue","VTTCue","track","TextTrack","kind","url","URL","startsWith","hostname","e","empty","supportsPassiveListeners","supported","options","defineProperty","get","addEventListener","removeEventListener","toggleListener","callback","toggle","arguments","undefined","_this","this","passive","capture","events","split","forEach","type","eventListeners","push","on","call","off","once","onceCallback","_len","args","_key","apply","triggerEvent","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","wrap","elements","wrapper","targets","from","reverse","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","insertBefore","setAttributes","attributes","entries","filter","_ref","value","slicedToArray","_ref3","_ref4","key","setAttribute","createElement","text","document","innerText","insertElement","removeElement","removeChild","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","s","selector","trim","className","replace","parts","charAt","class","id","toggleHidden","hidden","hide","hasAttribute","removeAttribute","toggleClass","force","map","method","classList","contains","hasClass","matches","prototype","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelectorAll","includes","getElements","container","getElement","querySelector","setFocus","tabFocus","focus","config","classNames","transitionEndEvent","WebkitTransition","MozTransition","OTransition","transition","find","style","range","browser","isIE","documentMode","isWebkit","documentElement","test","navigator","userAgent","isIPhone","platform","isIos","defaultCodecs","audio/ogg","audio/wav","video/webm","video/mp4","video/ogg","support","audio","video","check","provider","playsinline","canPlayInline","api","ui","rangeInput","pip","webkitSetPresentationMode","airplay","WebKitPlaybackTargetAvailabilityEvent","mime","inputType","_inputType$split","mediaType","isHTML5","media","canPlayType","err","textTracks","touch","transitions","reducedMotion","matchMedia","html5","getSources","source","getAttribute","getQualityOptions","extend","player","set","_player$media","currentTime","paused","preload","readyState","src","play","load","quality","cancelRequests","blankVideo","debug","log","getDeep","path","reduce","obj","target","sources","shift","concat","format","toString","match","i","replaceAll","RegExp","toTitleCase","toUpperCase","substr","toLowerCase","toCamelCase","toPascalCase","slice","getHTML","innerHTML","i18n","{seektime}","seekTime","{title}","title","_ref2","dedupe","item","indexOf","Storage","classCallCheck","enabled","storage","store","localStorage","getItem","json","JSON","parse","setItem","stringify","removeItem","fetch","responseType","Promise","resolve","reject","request","XMLHttpRequest","responseText","response","Error","status","open","send","loadSprite","hasId","exists","getElementById","update","data","body","insertAdjacentElement","useStorage","cached","prefix","content","then","result","catch","getHours","parseInt","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","cors","iconUrl","location","host","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","tooltip","error","warn","toggleNativeControls","createIcon","iconPath","iconPrefix","icon","createElementNS","role","focusable","use","setAttributeNS","createLabel","attr","join","createBadge","badge","menu","createButton","buttonType","button","label","labelPressed","iconPressed","control","controlPressed","enumerable","pressed","createRange","min","max","step","autocomplete","aria-label","aria-valuemin","aria-valuemax","aria-valuenow","updateRangeFill","createProgress","aria-hidden","suffixKey","played","suffix","createTime","bindMenuItemShortcuts","menuItem","which","preventDefault","stopPropagation","isRadioButton","showMenuPanel","nextElementSibling","firstElementChild","previousElementSibling","lastElementChild","createMenuItem","_this2","list","_ref$badge","_ref$checked","checked","aria-checked","flex","children","node","listeners","bind","currentTrack","speed","parseFloat","updateTimeDisplay","updateVolume","setRange","muted","updateProgress","_this3","current","toFixed","getElementsByTagName","nodeValue","setProgress","buffered","percent","setProperty","updateSeekTooltip","_this4","tooltips","clientRect","getBoundingClientRect","visible","_toggle","width","pageX","left","timeUpdate","invert","invertTime","seeking","durationUpdate","Math","pow","hasDuration","displayDuration","toggleMenuButton","setting","updateSetting","pane","panels","default","getLabel","setQualityMenu","_this5","checkMenu","sort","a","b","sorting","getBadge","setCaptionsMenu","_this6","tracks","getTracks","toggled","language","unshift","setSpeedMenu","_this7","isVimeo","values","some","toggleMenu","popup","show","isMenuItem","isButton","firstItem","getMenuSize","tab","clone","position","opacity","scrollWidth","height","scrollHeight","_this8","size","restore","propertyName","create","_this9","aria-haspopup","aria-controls","aria-expanded","aria-labelled-by","inner","home","backButton","inject","_this10","floor","random","props","seektime","insertAdjacentHTML","setTimeout","offsetHeight","_config","labels","parseUrl","parser","href","buildUrlParams","params","URLSearchParams","setup","isVideo","isYouTube","protocol","blob","createObjectURL","languages","userLanguage","active","trackEvents","_captions","meta","currentTrackNode","languageExists","mode","updateCues","setLanguage","activeClass","findTrack","toConsumableArray","embed","enableTextTrack","has","sortIsDefault","sorted","every","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","caption","defaults","autoplay","autopause","toggleInvert","ratio","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","focused","global","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","start","end","all","reset","disabled","advertisement","qualityBadge","2160","1440","1080","720","576","480","urls","vimeo","sdk","iframe","youtube","googleIMA","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","google","publisherId","providers","types","noop","Console","console","onChange","first","last","keyCode","activeElement","shiftKey","toggleFallback","scrollPosition","x","scrollX","y","scrollY","scrollTo","overflow","Fullscreen","property","native","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exit","enter","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","loadImage","minWidth","image","Image","handler","onload","onerror","naturalWidth","addStyleHook","build","checkPlaying","ready","setTitle","setPoster","isEmbed","togglePoster","enable","backgroundImage","backgroundSize","toggleControls","checkLoading","clearTimeout","timers","Listeners","lastKey","focusTimer","lastKeyDown","handleKey","setTabFocus","firstTouch","code","repeat","altKey","ctrlKey","metaKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","timeStamp","wasKeyDown","delay","hasAudio","initialized","managerPromise","isAudio","ended","proxyEvents","_event$detail","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","proxy","inputEvent","currentTarget","eventType","done","seekTo","_player","webkitDirectionInvertedFromDevice","_map","deltaX","deltaY","_map2","direction","sign","abs","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","splice","executeCallbacks","depsNotFound","success","loadFile","callbackFn","numTries","isCss","doc","async","maxTries","numRetries","beforeCallbackFn","before","pathStripped","rel","onbeforeload","ev","sheet","cssText","defaultPrevented","head","loadjs","paths","arg1","arg2","fn","numWaiting","loadFiles","deps","bundleIds","r","subscribe","isDefined","module","exports","loadScript","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","_split","_split2","padding","paddingBottom","offset","transform","byline","portrait","transparent","gesture","$2","thumbnail_large","pathname","Player","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","setPlaybackRate","name","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","getRatio","w","h","getAspectRatio","setAutopause","state","getVideoTitle","getCurrentTime","getDuration","getTextTracks","_ref$cues","strippedCues","fragment","createDocumentFragment","firstChild","getPaused","seconds","mapQualityUnit","entry","hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","items","snippet","currentId","posterSrc","format$$1","playerVars","showinfo","iv_load_policy","modestbranding","disablekb","widget_referrer","cc_load_policy","cc_lang_pref","onError","message","2","5","100","101","150","onPlaybackQualityChange","onPlaybackRateChange","instance","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","onStateChange","levels","getAvailableQualityLevels","level","unMute","Ads","displayContainer","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","_this11","handlers","_this12","base","AV_PUBLISHERID","AV_CHANNELID","AV_URL","cb","Date","now","AV_WIDTH","AV_HEIGHT","AV_CDIM2","insertElements","attribute","change","_sources$","_sources$$provider","tagName","crossorigin","Plyr","failed","jQuery","original","getProviderByUrl","searchParams","truthy","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","realDuration","Infinity","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","prev","curr","closest","states","webkitPresentationMode","inline","t"],"mappings":"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","file":"plyr.min.js","sourcesContent":["// ==========================================================================\n// Type checking utils\n// ==========================================================================\n\nconst getConstructor = input => (input !== null && typeof input !== 'undefined' ? input.constructor : null);\nconst instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\nconst isNullOrUndefined = input => input === null || typeof input === 'undefined';\nconst isObject = input => getConstructor(input) === Object;\nconst isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\nconst isString = input => getConstructor(input) === String;\nconst isBoolean = input => getConstructor(input) === Boolean;\nconst isFunction = input => getConstructor(input) === Function;\nconst isArray = input => Array.isArray(input);\nconst isWeakMap = input => instanceOf(input, WeakMap);\nconst isNodeList = input => instanceOf(input, NodeList);\nconst isElement = input => instanceOf(input, Element);\nconst isTextNode = input => getConstructor(input) === Text;\nconst isEvent = input => instanceOf(input, Event);\nconst 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 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(\n element,\n event,\n callback,\n toggle = false,\n passive = true,\n capture = false,\n) {\n // Bail if no element, event, or callback\n if (\n !element ||\n !('addEventListener' in element) ||\n is.empty(event) ||\n !is.function(callback)\n ) {\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (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'](\n type,\n callback,\n options,\n );\n });\n}\n\n// Bind event handler\nexport function on(\n element,\n events = '',\n callback,\n passive = true,\n capture = false,\n) {\n toggleListener.call(\n this,\n element,\n events,\n callback,\n true,\n passive,\n capture,\n );\n}\n\n// Unbind event handler\nexport function off(\n element,\n events = '',\n callback,\n passive = true,\n capture = false,\n) {\n toggleListener.call(\n this,\n element,\n events,\n callback,\n false,\n passive,\n capture,\n );\n}\n\n// Bind once-only event handler\nexport function once(\n element,\n events = '',\n callback,\n passive = true,\n capture = false,\n) {\n function onceCallback(...args) {\n off(element, events, onceCallback, passive, capture);\n callback.apply(this, args);\n }\n\n toggleListener.call(\n this,\n element,\n events,\n onceCallback,\n true,\n passive,\n capture,\n );\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 =>\n this.ready\n ? setTimeout(resolve, 0)\n : 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 (\n !is.element(oldChild) ||\n !is.element(oldChild.parentNode) ||\n !is.element(newChild)\n ) {\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.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n}\n\n// Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\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(\n this,\n 'button:not(:disabled), input:not(:disabled), [tabindex]',\n );\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(\n this,\n this.elements.container,\n 'keydown',\n trap,\n toggle,\n false,\n );\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 toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n toggleHidden(element, false);\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 });\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// Object utils\n// ==========================================================================\n\nimport is from './is';\n\n// Clone nested objects\nexport function cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n}\n\n// Get a nested value in an object\nexport function getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n}\n\n// Deep extend destination object with N more objects\nexport function extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return extend(target, ...sources);\n}\n","// ==========================================================================\n// String utils\n// ==========================================================================\n\nimport is from './is';\n\n// Generate a random ID\nexport function generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n}\n\n// Format string\nexport function format(input, ...args) {\n if (is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => args[i].toString());\n}\n\n// Get percentage\nexport function getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n}\n\n// Replace all occurances of a string in a string\nexport function replaceAll(input = '', find = '', replace = '') {\n return input.replace(\n new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'),\n replace.toString(),\n );\n}\n\n// Convert to title case\nexport function toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n}\n\n// Convert string to pascalCase\nexport function toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = toTitleCase(string);\n\n // Convert to pascal case\n return replaceAll(string, ' ', '');\n}\n\n// Convert string to pascalCase\nexport function toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n// Remove HTML from a string\nexport function stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n}\n\n// Like outerHTML, but also works for DocumentFragment\nexport function getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n}\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport is from './utils/is';\nimport { getDeep } from './utils/objects';\nimport { replaceAll } from './utils/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// 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// 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 i18n from './i18n';\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 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(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n } 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 // Toggle classname when pressed property is set\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 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 bindMenuItemShortcuts(menuItem, type) {\n // Handle space or -> to open menu\n on(menuItem, 'keydown', 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 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);\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 }, false);\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 keydown',\n event => {\n if (event.type === 'keydown' && 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');\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}%`);\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 // 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 const show = is.boolean(input) ? input : is.element(popup) && popup.hasAttribute('hidden');\n\n if (is.event(input)) {\n const isMenuItem = is.element(popup) && popup.contains(input.target);\n const isButton = input.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n input.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n // Show the actual popup\n if (is.element(popup)) {\n toggleHidden(popup, !show);\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n // Focus the first item if key interaction\n if (show && is.event(input) && input.type === 'keydown') {\n const pane = Object.values(this.elements.settings.panels).find(pane => !pane.hidden);\n const firstItem = pane.querySelector('[role^=\"menuitem\"]');\n setFocus.call(this, firstItem, true);\n }\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 = '') {\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 const firstItem = target.querySelector('[role^=\"menuitem\"]');\n setFocus.call(this, firstItem, true);\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (is.empty(this.config.controls)) {\n return null;\n }\n\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 // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n 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 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 id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const popup = createElement('div', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\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);\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(pane, 'keydown', 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');\n }, false);\n\n // Go back via button click\n on(backButton, 'click', () => {\n controls.showMenuPanel.call(this, 'home');\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 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 (is.string(this.config.controls) || is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([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\n if (is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n 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 i18n from './i18n';\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 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 languages = dedupe(\n Array.from(navigator.languages || navigator.language || navigator.userLanguage).map(language => language.split('-')[0]),\n );\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: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [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 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress__buffer',\n loop: '.plyr__progress__loop', // Used later\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n caption: '.plyr__caption',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n 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// ==========================================================================\n\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 // 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 if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Load image avoiding xhr/fetch CORS issues\n// Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded\n// By default it checks if it is at least 1px, but you can add a second argument to change this\n// ==========================================================================\n\nexport default function loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n\n Object.assign(image, { onload: handler, onerror: handler, src });\n });\n}\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\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 browser from './utils/browser';\nimport {\n getElement,\n getElements,\n matches,\n toggleClass,\n toggleHidden,\n} 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 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 this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // 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 } = this.player.config.selectors;\n const { seek } = this.player.elements.inputs;\n\n if (focused !== seek && matches(focused, editable)) {\n return;\n }\n\n if (\n event.which === 32 &&\n matches(focused, 'button, [role^=\"menuitem\"]')\n ) {\n return;\n }\n }\n\n // Which keycodes should we prevent default\n const preventDefault = [\n 32,\n 37,\n 38,\n 39,\n 40,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 67,\n 70,\n 73,\n 75,\n 76,\n 77,\n 79,\n ];\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (\n !this.player.fullscreen.enabled &&\n this.player.fullscreen.active &&\n code === 27\n ) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n toggleClass(\n this.player.elements.container,\n this.player.config.classNames.isTouch,\n true,\n );\n }\n\n setTabFocus(event) {\n clearTimeout(this.focusTimer);\n\n // Ignore any key other than tab\n if (event.type === 'keydown' && event.code !== 'Tab') {\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 = this.player.config.classNames.tabFocus;\n const current = getElements.call(this.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\n this.focusTimer = setTimeout(() => {\n const focused = document.activeElement;\n\n // Ignore if current focus element isn't inside the player\n if (!this.player.elements.container.contains(focused)) {\n return;\n }\n\n toggleClass(\n document.activeElement,\n this.player.config.classNames.tabFocus,\n true,\n );\n }, 10);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n toggleListener.call(\n this.player,\n window,\n 'keydown keyup',\n this.handleKey,\n toggle,\n false,\n );\n }\n\n // Click anywhere closes menu\n toggleListener.call(\n this.player,\n document.body,\n 'click',\n this.toggleMenu,\n toggle,\n );\n\n // Detect touch by events\n once.call(this.player, document.body, 'touchstart', this.firstTouch);\n\n // Tab focus detection\n toggleListener.call(\n this.player,\n document.body,\n 'keydown focus blur',\n this.setTabFocus,\n toggle,\n false,\n true,\n );\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (\n !this.player.config.keyboard.global &&\n this.player.config.keyboard.focused\n ) {\n on.call(\n this.player,\n this.player.elements.container,\n 'keydown keyup',\n this.handleKey,\n false,\n );\n }\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n this.player,\n this.player.elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = ['touchstart', 'touchmove', 'mousemove'].includes(\n event.type,\n );\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n\n // Set new timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(\n () => ui.toggleControls.call(this.player, false),\n delay,\n );\n },\n );\n }\n\n // Listen for media events\n media() {\n // Time change on media\n on.call(\n this.player,\n this.player.media,\n 'timeupdate seeking seeked',\n event => controls.timeUpdate.call(this.player, event),\n );\n\n // Display duration\n on.call(\n this.player,\n this.player.media,\n 'durationchange loadeddata loadedmetadata',\n event => controls.durationUpdate.call(this.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(this.player, this.player.media, 'canplay', () => {\n toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n toggleHidden(\n this.player.elements.buttons.mute,\n !this.player.hasAudio,\n );\n });\n\n // Handle the media finishing\n on.call(this.player, this.player.media, 'ended', () => {\n // Show poster on end\n if (\n this.player.isHTML5 &&\n this.player.isVideo &&\n this.player.config.resetOnEnd\n ) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n on.call(\n this.player,\n this.player.media,\n 'progress playing seeking seeked',\n event => controls.updateProgress.call(this.player, event),\n );\n\n // Handle volume changes\n on.call(this.player, this.player.media, 'volumechange', event =>\n controls.updateVolume.call(this.player, event),\n );\n\n // Handle play/pause\n on.call(\n this.player,\n this.player.media,\n 'playing play pause ended emptied timeupdate',\n event => ui.checkPlaying.call(this.player, event),\n );\n\n // Loading state\n on.call(\n this.player,\n this.player.media,\n 'waiting canplay seeked playing',\n event => ui.checkLoading.call(this.player, event),\n );\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(this.player, this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise\n .then(() => this.player.ads.play())\n .catch(() => this.player.play());\n }\n });\n\n // Click video\n if (\n this.player.supported.ui &&\n this.player.config.clickToPlay &&\n !this.player.isAudio\n ) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(\n this.player,\n `.${this.player.config.classNames.video}`,\n );\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(this.player, wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (\n this.player.config.hideControls &&\n this.player.touch &&\n !this.player.paused\n ) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n on.call(\n this.player,\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n on.call(this.player, this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({\n volume: this.player.volume,\n muted: this.player.muted,\n });\n });\n\n // Speed change\n on.call(this.player, this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n on.call(this.player, this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n on.call(this.player, this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(\n this.player,\n 'quality',\n null,\n event.detail.quality,\n );\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = this.player.config.events\n .concat(['keyup', 'keydown'])\n .join(' ');\n\n on.call(this.player, this.player.media, proxyEvents, event => {\n let { detail = {} } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n triggerEvent.call(\n this.player,\n this.player.elements.container,\n event.type,\n true,\n detail,\n );\n });\n }\n\n // Run default and custom handlers\n proxy(event, defaultHandler, customHandlerKey) {\n const customHandler = this.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(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n }\n\n // Trigger custom and default handlers\n bind(element, type, defaultHandler, customHandlerKey, passive = true) {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n\n on.call(\n this.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 // 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 (this.player.elements.buttons.play) {\n Array.from(this.player.elements.buttons.play).forEach(button => {\n this.bind(button, 'click', this.player.togglePlay, 'play');\n });\n }\n\n // Pause\n this.bind(\n this.player.elements.buttons.restart,\n 'click',\n this.player.restart,\n 'restart',\n );\n\n // Rewind\n this.bind(\n this.player.elements.buttons.rewind,\n 'click',\n this.player.rewind,\n 'rewind',\n );\n\n // Rewind\n this.bind(\n this.player.elements.buttons.fastForward,\n 'click',\n this.player.forward,\n 'fastForward',\n );\n\n // Mute toggle\n this.bind(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n this.bind(this.player.elements.buttons.captions, 'click', () =>\n this.player.toggleCaptions(),\n );\n\n // Fullscreen toggle\n this.bind(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n this.bind(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n this.bind(\n this.player.elements.buttons.airplay,\n 'click',\n this.player.airplay,\n 'airplay',\n );\n\n // Settings menu - click toggle\n this.bind(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu - keyboard toggle\n this.bind(\n this.player.elements.buttons.settings,\n 'keydown',\n event => {\n // We only care about space\n if (event.which !== 32) {\n return;\n }\n\n // Prevent scroll\n event.preventDefault();\n\n // Prevent playing video\n event.stopPropagation();\n\n // Toggle menu\n controls.toggleMenu.call(this.player, event);\n },\n null,\n false,\n );\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n this.bind(\n this.player.elements.inputs.seek,\n 'mousedown mousemove',\n event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent =\n 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n },\n );\n\n // Pause while seeking\n this.bind(\n this.player.elements.inputs.seek,\n 'mousedown mouseup keydown keyup touchstart touchend',\n event => {\n const seek = event.currentTarget;\n\n const code = event.keyCode ? event.keyCode : event.which;\n const eventType = event.type;\n\n if (\n (eventType === 'keydown' || eventType === 'keyup') &&\n (code !== 39 && code !== 37)\n ) {\n return;\n }\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\n\n // Done seeking\n const done = ['mouseup', 'touchend', 'keyup'].includes(\n event.type,\n );\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n },\n );\n\n // Seek\n this.bind(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n this.player.currentTime =\n seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (\n this.player.config.toggleInvert &&\n !is.element(this.player.elements.display.duration)\n ) {\n this.bind(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n this.bind(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n Array.from(\n getElements.call(this.player, 'input[type=\"range\"]'),\n ).forEach(element => {\n this.bind(element, 'input', event =>\n controls.updateRangeFill.call(this.player, event.target),\n );\n });\n }\n\n // Seek tooltip\n this.bind(\n this.player.elements.progress,\n 'mouseenter mouseleave mousemove',\n event => controls.updateSeekTooltip.call(this.player, event),\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(\n this.player.elements.controls,\n 'mouseenter mouseleave',\n event => {\n this.player.elements.controls.hover =\n !this.player.touch && event.type === 'mouseenter';\n },\n );\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(\n this.player.elements.controls,\n 'mousedown mouseup touchstart touchend touchcancel',\n event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n },\n );\n\n // Focus in/out on controls\n this.bind(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(\n elements.controls,\n config.classNames.noTransition,\n event.type === 'focusin',\n );\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\n // Restore transition\n setTimeout(() => {\n toggleClass(\n elements.controls,\n config.classNames.noTransition,\n false,\n );\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(\n () => ui.toggleControls.call(this.player, false),\n delay,\n );\n }\n });\n\n // Mouse wheel for volume\n this.bind(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n\n // Get delta from event. Invert if `inverted` is true\n const [x, y] = [event.deltaX, -event.deltaY].map(\n value => (inverted ? -value : value),\n );\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 this.player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const { volume } = this.player.media;\n if (\n (direction === 1 && volume < 1) ||\n (direction === -1 && volume > 0)\n ) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n}\n\nexport default Listeners;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Load an external script\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nexport default function loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n}\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from '../captions';\nimport controls from '../controls';\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { format, stripHTML } from '../utils/strings';\nimport { buildUrlParams } from '../utils/urls';\n\n// Parse Vimeo ID from URL\nfunction parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n\n if (is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n}\n\n// Get aspect ratio for dimensions\nfunction getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!is.object(window.Vimeo)) {\n loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const [x, y] = (is.string(input) ? input : this.config.ratio).split(':');\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 controls from '../controls';\nimport ui from '../ui';\nimport { dedupe } from '../utils/arrays';\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// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n const qualities = {\n hd2160: 2160,\n hd1440: 1440,\n hd1080: 1080,\n hd720: 720,\n large: 480,\n medium: 360,\n small: 240,\n tiny: 144,\n };\n\n const entry = Object.entries(qualities).find(entry => entry.includes(input));\n\n if (entry) {\n // Get the match corresponding to the input\n return entry.find(value => value !== input);\n }\n\n return 'default';\n}\n\nfunction mapQualityUnits(levels) {\n if (is.empty(levels)) {\n return levels;\n }\n\n return dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n 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 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 onPlaybackQualityChange() {\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n triggerEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // If paused 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 // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n instance.setPlaybackQuality(mapQualityUnit(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 // Get quality\n controls.setQualityMenu.call(\n player,\n mapQualityUnits(instance.getAvailableQualityLevels()),\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 i18n from '../i18n';\nimport { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\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 // 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 // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n 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.3.22\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.searchParams.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 } 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')) {\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 this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n\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 // Trigger request event\n triggerEvent.call(this, this.media, 'qualityrequested', false, { quality });\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 // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n triggerEvent.call(this, this.media, eventName);\n }\n return !hiding;\n }\n return false;\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n on.call(this, this.elements.container, event, callback);\n }\n\n /**\n * Add event listeners once\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n once(event, callback) {\n once.call(this, this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n removeElement(this.elements.buttons.play);\n removeElement(this.elements.captions);\n removeElement(this.elements.controls);\n removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n unbindListeners.call(this);\n\n // Replace the container with the original element provided\n replaceElement(this.elements.original, this.elements.container);\n\n // Event\n triggerEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Provider specific stuff\n if (this.isHTML5) {\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n } else if (this.isYouTube) {\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n } else if (this.isVimeo) {\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (is.array(selector)) {\n targets = selector.filter(is.element);\n }\n\n if (is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = cloneDeep(defaults);\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["src/js/utils/is.js","src/js/utils/events.js","src/js/utils/elements.js","src/js/utils/animation.js","src/js/utils/browser.js","src/js/support.js","src/js/html5.js","src/js/utils/objects.js","src/js/utils/strings.js","src/js/i18n.js","src/js/utils/arrays.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","src/js/utils/loadImage.js","src/js/ui.js","src/js/listeners.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils/loadScript.js","src/js/plugins/vimeo.js","src/js/plugins/youtube.js","src/js/media.js","src/js/plugins/ads.js","src/js/source.js","src/js/plyr.js"],"names":["getConstructor","input","constructor","instanceOf","Boolean","isNullOrUndefined","isObject","Object","isString","String","isArray","Array","isNodeList","NodeList","isEmpty","length","keys","is","nullOrUndefined","object","number","Number","isNaN","string","boolean","function","Function","array","weakMap","WeakMap","nodeList","element","Element","textNode","Text","event","Event","cue","window","TextTrackCue","VTTCue","track","TextTrack","kind","url","URL","startsWith","hostname","e","empty","supportsPassiveListeners","supported","options","defineProperty","get","addEventListener","removeEventListener","toggleListener","callback","toggle","arguments","undefined","_this","this","passive","capture","events","split","forEach","type","eventListeners","push","on","call","off","once","onceCallback","_len","args","_key","apply","triggerEvent","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","wrap","elements","wrapper","targets","from","reverse","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","insertBefore","setAttributes","attributes","entries","filter","_ref","value","slicedToArray","_ref3","_ref4","key","setAttribute","createElement","text","document","innerText","insertElement","removeElement","removeChild","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","s","selector","trim","className","replace","parts","charAt","class","id","toggleHidden","hidden","hide","hasAttribute","removeAttribute","toggleClass","force","map","method","classList","contains","hasClass","matches","prototype","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelectorAll","includes","getElements","container","getElement","querySelector","setFocus","tabFocus","focus","config","classNames","transitionEndEvent","WebkitTransition","MozTransition","OTransition","transition","find","style","repaint","setTimeout","offsetHeight","range","browser","isIE","documentMode","isWebkit","documentElement","test","navigator","userAgent","isIPhone","platform","isIos","defaultCodecs","audio/ogg","audio/wav","video/webm","video/mp4","video/ogg","support","audio","video","check","provider","playsinline","canPlayInline","api","ui","rangeInput","pip","webkitSetPresentationMode","airplay","WebKitPlaybackTargetAvailabilityEvent","mime","inputType","_inputType$split","mediaType","isHTML5","media","canPlayType","err","textTracks","touch","transitions","reducedMotion","matchMedia","html5","getSources","source","getAttribute","getQualityOptions","extend","player","set","_player$media","currentTime","paused","preload","readyState","src","play","load","quality","cancelRequests","blankVideo","debug","log","getDeep","path","reduce","obj","target","sources","shift","concat","format","toString","match","i","replaceAll","RegExp","toTitleCase","toUpperCase","substr","toLowerCase","toCamelCase","toPascalCase","slice","getHTML","innerHTML","i18n","{seektime}","seekTime","{title}","title","_ref2","dedupe","item","indexOf","Storage","classCallCheck","enabled","storage","store","localStorage","getItem","json","JSON","parse","setItem","stringify","removeItem","fetch","responseType","Promise","resolve","reject","request","XMLHttpRequest","responseText","response","Error","status","open","send","loadSprite","hasId","exists","getElementById","update","data","body","insertAdjacentElement","useStorage","cached","prefix","content","then","result","catch","getHours","parseInt","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","cors","iconUrl","location","host","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","tooltip","error","warn","toggleNativeControls","createIcon","iconPath","iconPrefix","icon","createElementNS","role","focusable","use","setAttributeNS","createLabel","attr","join","createBadge","badge","menu","createButton","buttonType","button","label","labelPressed","iconPressed","control","controlPressed","enumerable","pressed","createRange","min","max","step","autocomplete","aria-label","aria-valuemin","aria-valuemax","aria-valuenow","updateRangeFill","createProgress","aria-hidden","suffixKey","played","suffix","createTime","bindMenuItemShortcuts","menuItem","which","preventDefault","stopPropagation","isRadioButton","showMenuPanel","nextElementSibling","firstElementChild","previousElementSibling","lastElementChild","createMenuItem","_this2","list","_ref$badge","_ref$checked","checked","aria-checked","flex","children","node","listeners","bind","currentTrack","speed","parseFloat","updateTimeDisplay","updateVolume","setRange","muted","updateProgress","_this3","current","toFixed","getElementsByTagName","nodeValue","setProgress","buffered","percent","setProperty","updateSeekTooltip","_this4","tooltips","clientRect","getBoundingClientRect","visible","_toggle","width","pageX","left","timeUpdate","invert","invertTime","seeking","durationUpdate","Math","pow","hasDuration","displayDuration","toggleMenuButton","setting","updateSetting","pane","panels","default","getLabel","setQualityMenu","_this5","checkMenu","sort","a","b","sorting","getBadge","setCaptionsMenu","_this6","tracks","getTracks","toggled","language","unshift","setSpeedMenu","_this7","isVimeo","values","some","toggleMenu","popup","show","isMenuItem","isButton","firstItem","getMenuSize","tab","clone","position","opacity","scrollWidth","height","scrollHeight","_this8","size","restore","propertyName","create","_this9","aria-haspopup","aria-controls","aria-expanded","aria-labelled-by","inner","home","backButton","inject","_this10","floor","random","props","seektime","insertAdjacentHTML","_config","labels","parseUrl","parser","href","buildUrlParams","params","URLSearchParams","setup","isVideo","isYouTube","protocol","blob","createObjectURL","languages","userLanguage","active","trackEvents","_captions","meta","currentTrackNode","languageExists","mode","updateCues","setLanguage","activeClass","findTrack","toConsumableArray","embed","enableTextTrack","has","sortIsDefault","sorted","every","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","caption","defaults","autoplay","autopause","toggleInvert","ratio","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","focused","global","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","start","end","all","reset","disabled","advertisement","qualityBadge","2160","1440","1080","720","576","480","urls","vimeo","sdk","iframe","youtube","googleIMA","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","google","publisherId","providers","types","noop","Console","console","onChange","first","last","keyCode","activeElement","shiftKey","toggleFallback","scrollPosition","x","scrollX","y","scrollY","scrollTo","overflow","Fullscreen","property","native","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exit","enter","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","loadImage","minWidth","image","Image","handler","onload","onerror","naturalWidth","addStyleHook","build","checkPlaying","ready","setTitle","setPoster","isEmbed","togglePoster","enable","backgroundImage","backgroundSize","toggleControls","checkLoading","clearTimeout","timers","Listeners","lastKey","focusTimer","lastKeyDown","handleKey","setTabFocus","firstTouch","code","repeat","altKey","ctrlKey","metaKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","timeStamp","wasKeyDown","delay","hasAudio","initialized","managerPromise","isAudio","ended","proxyEvents","_event$detail","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","proxy","inputEvent","rect","currentTarget","eventType","done","seekTo","isFocusIn","webkitDirectionInvertedFromDevice","_map","deltaX","deltaY","_map2","direction","sign","abs","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","splice","executeCallbacks","depsNotFound","success","loadFile","callbackFn","numTries","isCss","doc","async","maxTries","numRetries","beforeCallbackFn","before","pathStripped","rel","onbeforeload","ev","sheet","cssText","defaultPrevented","head","loadjs","paths","arg1","arg2","fn","numWaiting","loadFiles","deps","bundleIds","r","subscribe","isDefined","module","exports","loadScript","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","_split","_split2","padding","paddingBottom","offset","transform","byline","portrait","transparent","gesture","$2","thumbnail_large","pathname","Player","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","setPlaybackRate","name","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","getRatio","w","h","getAspectRatio","setAutopause","state","getVideoTitle","getCurrentTime","getDuration","getTextTracks","_ref$cues","strippedCues","fragment","createDocumentFragment","firstChild","getPaused","seconds","mapQualityUnit","entry","hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","items","snippet","currentId","posterSrc","format$$1","playerVars","showinfo","iv_load_policy","modestbranding","disablekb","widget_referrer","cc_load_policy","cc_lang_pref","onError","message","2","5","100","101","150","onPlaybackQualityChange","onPlaybackRateChange","instance","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","onStateChange","levels","getAvailableQualityLevels","level","unMute","Ads","displayContainer","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","_this11","handlers","_this12","base","AV_PUBLISHERID","AV_CHANNELID","AV_URL","cb","Date","now","AV_WIDTH","AV_HEIGHT","AV_CDIM2","insertElements","attribute","change","_sources$","_sources$$provider","tagName","crossorigin","Plyr","failed","jQuery","original","getProviderByUrl","searchParams","truthy","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","realDuration","Infinity","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","prev","curr","closest","states","webkitPresentationMode","inline","t"],"mappings":"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","file":"plyr.min.js","sourcesContent":["// ==========================================================================\n// Type checking utils\n// ==========================================================================\n\nconst getConstructor = input => (input !== null && typeof input !== 'undefined' ? input.constructor : null);\nconst instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\nconst isNullOrUndefined = input => input === null || typeof input === 'undefined';\nconst isObject = input => getConstructor(input) === Object;\nconst isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\nconst isString = input => getConstructor(input) === String;\nconst isBoolean = input => getConstructor(input) === Boolean;\nconst isFunction = input => getConstructor(input) === Function;\nconst isArray = input => Array.isArray(input);\nconst isWeakMap = input => instanceOf(input, WeakMap);\nconst isNodeList = input => instanceOf(input, NodeList);\nconst isElement = input => instanceOf(input, Element);\nconst isTextNode = input => getConstructor(input) === Text;\nconst isEvent = input => instanceOf(input, Event);\nconst 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 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(\n element,\n event,\n callback,\n toggle = false,\n passive = true,\n capture = false,\n) {\n // Bail if no element, event, or callback\n if (\n !element ||\n !('addEventListener' in element) ||\n is.empty(event) ||\n !is.function(callback)\n ) {\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (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'](\n type,\n callback,\n options,\n );\n });\n}\n\n// Bind event handler\nexport function on(\n element,\n events = '',\n callback,\n passive = true,\n capture = false,\n) {\n toggleListener.call(\n this,\n element,\n events,\n callback,\n true,\n passive,\n capture,\n );\n}\n\n// Unbind event handler\nexport function off(\n element,\n events = '',\n callback,\n passive = true,\n capture = false,\n) {\n toggleListener.call(\n this,\n element,\n events,\n callback,\n false,\n passive,\n capture,\n );\n}\n\n// Bind once-only event handler\nexport function once(\n element,\n events = '',\n callback,\n passive = true,\n capture = false,\n) {\n function onceCallback(...args) {\n off(element, events, onceCallback, passive, capture);\n callback.apply(this, args);\n }\n\n toggleListener.call(\n this,\n element,\n events,\n onceCallback,\n true,\n passive,\n capture,\n );\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 =>\n this.ready\n ? setTimeout(resolve, 0)\n : 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 (\n !is.element(oldChild) ||\n !is.element(oldChild.parentNode) ||\n !is.element(newChild)\n ) {\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.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n}\n\n// Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\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(\n this,\n 'button:not(:disabled), input:not(:disabled), [tabindex]',\n );\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(\n this,\n this.elements.container,\n 'keydown',\n trap,\n toggle,\n false,\n );\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(\n event => element.style[event] !== undefined,\n );\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 =\n browser.isIPhone && playsinline && support.playsinline;\n const api = support[type] || provider !== 'html5';\n const ui =\n api &&\n support.rangeInput &&\n (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: (() =>\n !browser.isIPhone &&\n 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(\n type && this.media.canPlayType(type).replace(/no/, ''),\n );\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:\n 'matchMedia' in window &&\n 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 });\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// Object utils\n// ==========================================================================\n\nimport is from './is';\n\n// Clone nested objects\nexport function cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n}\n\n// Get a nested value in an object\nexport function getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n}\n\n// Deep extend destination object with N more objects\nexport function extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return extend(target, ...sources);\n}\n","// ==========================================================================\n// String utils\n// ==========================================================================\n\nimport is from './is';\n\n// Generate a random ID\nexport function generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n}\n\n// Format string\nexport function format(input, ...args) {\n if (is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => args[i].toString());\n}\n\n// Get percentage\nexport function getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n}\n\n// Replace all occurances of a string in a string\nexport function replaceAll(input = '', find = '', replace = '') {\n return input.replace(\n new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'),\n replace.toString(),\n );\n}\n\n// Convert to title case\nexport function toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n}\n\n// Convert string to pascalCase\nexport function toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = toTitleCase(string);\n\n // Convert to pascal case\n return replaceAll(string, ' ', '');\n}\n\n// Convert string to pascalCase\nexport function toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n// Remove HTML from a string\nexport function stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n}\n\n// Like outerHTML, but also works for DocumentFragment\nexport function getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n}\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport is from './utils/is';\nimport { getDeep } from './utils/objects';\nimport { replaceAll } from './utils/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// 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// 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 i18n from './i18n';\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 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(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n } 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 // Toggle classname when pressed property is set\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 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 bindMenuItemShortcuts(menuItem, type) {\n // Handle space or -> to open menu\n on(menuItem, 'keydown', 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 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 }, false);\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 keydown',\n event => {\n if (event.type === 'keydown' && 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', event.type === 'keydown');\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}%`);\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 // 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 const show = is.boolean(input) ? input : is.element(popup) && popup.hasAttribute('hidden');\n\n if (is.event(input)) {\n const isMenuItem = is.element(popup) && popup.contains(input.target);\n const isButton = input.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n input.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n // Show the actual popup\n if (is.element(popup)) {\n toggleHidden(popup, !show);\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n // Focus the first item if key interaction\n if (show && is.event(input) && input.type === 'keydown') {\n const pane = Object.values(this.elements.settings.panels).find(pane => !pane.hidden);\n const firstItem = pane.querySelector('[role^=\"menuitem\"]');\n setFocus.call(this, firstItem, true);\n }\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 const firstItem = target.querySelector('[role^=\"menuitem\"]');\n setFocus.call(this, firstItem, tabFocus);\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (is.empty(this.config.controls)) {\n return null;\n }\n\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 // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n 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 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 id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const popup = createElement('div', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\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(pane, 'keydown', 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 }, false);\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 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 (is.string(this.config.controls) || is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([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\n if (is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n 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 i18n from './i18n';\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 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 languages = dedupe(\n Array.from(navigator.languages || navigator.language || navigator.userLanguage).map(language => language.split('-')[0]),\n );\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: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [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 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress__buffer',\n loop: '.plyr__progress__loop', // Used later\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n caption: '.plyr__caption',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n 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// ==========================================================================\n\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 // 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 if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Load image avoiding xhr/fetch CORS issues\n// Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded\n// By default it checks if it is at least 1px, but you can add a second argument to change this\n// ==========================================================================\n\nexport default function loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n\n Object.assign(image, { onload: handler, onerror: handler, src });\n });\n}\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\nimport is from './utils/is';\nimport loadImage from './utils/loadImage';\n\nconst ui = {\n addStyleHook() {\n toggleClass(\n this.elements.container,\n this.config.selectors.container.replace('.', ''),\n true,\n );\n toggleClass(\n this.elements.container,\n this.config.classNames.uiSupported,\n this.supported.ui,\n );\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(\n `Basic support only for ${this.provider} ${this.type}`,\n );\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(\n this.elements.container,\n this.config.classNames.airplay.supported,\n support.airplay && this.isHTML5,\n );\n\n // Add iOS class\n toggleClass(\n this.elements.container,\n this.config.classNames.isIos,\n browser.isIos,\n );\n\n // Add touch class\n toggleClass(\n this.elements.container,\n this.config.classNames.isTouch,\n this.touch,\n );\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)\n ? this.config.title\n : '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(\n this.elements.container,\n this.config.classNames.posterEnabled,\n enable,\n );\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(\n 'setPoster cancelled by later call to setPoster',\n );\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(\n this.elements.container,\n this.config.classNames.playing,\n this.playing,\n );\n toggleClass(\n this.elements.container,\n this.config.classNames.paused,\n this.paused,\n );\n toggleClass(\n this.elements.container,\n this.config.classNames.stopped,\n this.stopped,\n );\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(\n this.elements.container,\n this.config.classNames.loading,\n this.loading,\n );\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(\n Boolean(\n force ||\n this.loading ||\n this.paused ||\n controls.pressed ||\n controls.hover,\n ),\n );\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 {\n getElement,\n getElements,\n hasClass,\n matches,\n toggleClass,\n toggleHidden,\n} 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 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 } = player.elements.inputs;\n\n if (focused !== seek && matches(focused, editable)) {\n return;\n }\n\n if (\n event.which === 32 &&\n matches(focused, 'button, [role^=\"menuitem\"]')\n ) {\n return;\n }\n }\n\n // Which keycodes should we prevent default\n const preventDefault = [\n 32,\n 37,\n 38,\n 39,\n 40,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 67,\n 70,\n 73,\n 75,\n 76,\n 77,\n 79,\n ];\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n 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 (\n !player.fullscreen.enabled &&\n player.fullscreen.active &&\n code === 27\n ) {\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\n player.touch = true;\n\n // Add touch class\n toggleClass(\n player.elements.container,\n player.config.classNames.isTouch,\n true,\n );\n }\n\n setTabFocus(event) {\n const { player } = this;\n\n clearTimeout(this.focusTimer);\n\n // Ignore any key other than tab\n if (event.type === 'keydown' && event.code !== 'Tab') {\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 (!player.elements.container.contains(focused)) {\n return;\n }\n\n toggleClass(\n document.activeElement,\n player.config.classNames.tabFocus,\n true,\n );\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(\n player,\n window,\n 'keydown keyup',\n this.handleKey,\n toggle,\n false,\n );\n }\n\n // Click anywhere closes menu\n toggleListener.call(\n player,\n document.body,\n 'click',\n this.toggleMenu,\n toggle,\n );\n\n // Detect touch by events\n once.call(player, document.body, 'touchstart', this.firstTouch);\n\n // Tab focus detection\n toggleListener.call(\n player,\n document.body,\n 'keydown focus blur',\n this.setTabFocus,\n toggle,\n false,\n true,\n );\n }\n\n // Container listeners\n container() {\n const { player } = this;\n\n // Keyboard shortcuts\n if (!player.config.keyboard.global && player.config.keyboard.focused) {\n on.call(\n player,\n player.elements.container,\n 'keydown keyup',\n this.handleKey,\n false,\n );\n }\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n player,\n player.elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = player.elements;\n\n // Remove button states for fullscreen\n if (event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = ['touchstart', 'touchmove', 'mousemove'].includes(\n event.type,\n );\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(\n () => ui.toggleControls.call(player, false),\n delay,\n );\n },\n );\n }\n\n // Listen for media events\n media() {\n const { player } = this;\n\n // Time change on media\n on.call(player, player.media, 'timeupdate seeking seeked', event =>\n controls.timeUpdate.call(player, event),\n );\n\n // Display duration\n on.call(\n player,\n player.media,\n 'durationchange loadeddata loadedmetadata',\n event => 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(player.elements.volume, !player.hasAudio);\n toggleHidden(player.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(\n player,\n player.media,\n 'progress playing seeking seeked',\n event => controls.updateProgress.call(player, event),\n );\n\n // Handle volume changes\n on.call(player, player.media, 'volumechange', event =>\n controls.updateVolume.call(player, event),\n );\n\n // Handle play/pause\n on.call(\n player,\n player.media,\n 'playing play pause ended emptied timeupdate',\n event => ui.checkPlaying.call(player, event),\n );\n\n // Loading state\n on.call(player, player.media, 'waiting canplay seeked playing', event =>\n ui.checkLoading.call(player, event),\n );\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\n .then(() => player.ads.play())\n .catch(() => player.play());\n }\n });\n\n // Click video\n if (\n player.supported.ui &&\n player.config.clickToPlay &&\n !player.isAudio\n ) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(\n player,\n `.${player.config.classNames.video}`,\n );\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(\n player,\n player.elements.container,\n 'click touchstart',\n event => {\n const targets = [player.elements.container, wrapper];\n\n // Ignore if click if not container or in video wrapper\n if (\n !targets.includes(event.target) &&\n !wrapper.contains(event.target)\n ) {\n return;\n }\n\n // First touch on touch devices will just show controls (if we're hiding controls)\n // If controls are shown then it'll toggle like a pointer device\n if (\n player.config.hideControls &&\n player.touch &&\n hasClass(\n player.elements.container,\n player.config.classNames.hideControls,\n )\n ) {\n return;\n }\n\n if (player.ended) {\n player.restart();\n player.play();\n } else {\n player.togglePlay();\n }\n },\n );\n }\n\n // Disable right click\n if (player.supported.ui && player.config.disableContextMenu) {\n on.call(\n player,\n player.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 request\n on.call(player, player.media, 'qualityrequested', event => {\n // Save to storage\n player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n on.call(player, player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(\n player,\n 'quality',\n null,\n event.detail.quality,\n );\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = player.config.events\n .concat(['keyup', 'keydown'])\n .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(\n player,\n player.elements.container,\n event.type,\n true,\n detail,\n );\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\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 (player.elements.buttons.play) {\n Array.from(player.elements.buttons.play).forEach(button => {\n this.bind(button, 'click', player.togglePlay, 'play');\n });\n }\n\n // Pause\n this.bind(\n player.elements.buttons.restart,\n 'click',\n player.restart,\n 'restart',\n );\n\n // Rewind\n this.bind(\n player.elements.buttons.rewind,\n 'click',\n player.rewind,\n 'rewind',\n );\n\n // Rewind\n this.bind(\n player.elements.buttons.fastForward,\n 'click',\n player.forward,\n 'fastForward',\n );\n\n // Mute toggle\n this.bind(\n player.elements.buttons.mute,\n 'click',\n () => {\n player.muted = !player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n this.bind(player.elements.buttons.captions, 'click', () =>\n player.toggleCaptions(),\n );\n\n // Fullscreen toggle\n this.bind(\n player.elements.buttons.fullscreen,\n 'click',\n () => {\n player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n this.bind(\n player.elements.buttons.pip,\n 'click',\n () => {\n player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n this.bind(\n player.elements.buttons.airplay,\n 'click',\n player.airplay,\n 'airplay',\n );\n\n // Settings menu - click toggle\n this.bind(player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(player, event);\n });\n\n // Settings menu - keyboard toggle\n this.bind(\n player.elements.buttons.settings,\n 'keydown',\n event => {\n // We only care about space\n if (event.which !== 32) {\n return;\n }\n\n // Prevent scroll\n event.preventDefault();\n\n // Prevent playing video\n event.stopPropagation();\n\n // Toggle menu\n controls.toggleMenu.call(player, event);\n },\n null,\n false,\n );\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n this.bind(player.elements.inputs.seek, 'mousedown mousemove', event => {\n const rect = player.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(\n player.elements.inputs.seek,\n 'mousedown mouseup keydown keyup touchstart touchend',\n event => {\n const seek = event.currentTarget;\n const code = event.keyCode ? event.keyCode : event.which;\n const eventType = event.type;\n const attribute = 'play-on-seeked';\n\n if (\n (eventType === 'keydown' || eventType === 'keyup') &&\n (code !== 39 && code !== 37)\n ) {\n return;\n }\n // Was playing before?\n const play = seek.hasAttribute(attribute);\n\n // Done seeking\n const done = ['mouseup', 'touchend', 'keyup'].includes(\n event.type,\n );\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\n // Seek\n this.bind(\n player.elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\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 repaint(seek);\n }\n\n player.currentTime = seekTo / seek.max * player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (\n player.config.toggleInvert &&\n !is.element(player.elements.display.duration)\n ) {\n this.bind(player.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 player.elements.inputs.volume,\n inputEvent,\n event => {\n player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n Array.from(getElements.call(player, 'input[type=\"range\"]')).forEach(\n element => {\n this.bind(element, 'input', event =>\n controls.updateRangeFill.call(player, event.target),\n );\n },\n );\n }\n\n // Seek tooltip\n this.bind(\n player.elements.progress,\n 'mouseenter mouseleave mousemove',\n event => controls.updateSeekTooltip.call(player, event),\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(player.elements.controls, 'mouseenter mouseleave', event => {\n player.elements.controls.hover =\n !player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(\n player.elements.controls,\n 'mousedown mouseup touchstart touchend touchcancel',\n event => {\n player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n },\n );\n\n // Focus in/out on controls\n this.bind(player.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(\n elements.controls,\n config.classNames.noTransition,\n isFocusIn,\n );\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(\n elements.controls,\n config.classNames.noTransition,\n false,\n );\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(\n () => ui.toggleControls.call(player, false),\n delay,\n );\n }\n });\n\n // Mouse wheel for volume\n this.bind(\n player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n\n // Get delta from event. Invert if `inverted` is true\n const [x, y] = [event.deltaX, -event.deltaY].map(\n value => (inverted ? -value : value),\n );\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 (\n (direction === 1 && volume < 1) ||\n (direction === -1 && volume > 0)\n ) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n}\n\nexport default Listeners;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Load an external script\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nexport default function loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n}\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from '../captions';\nimport controls from '../controls';\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { format, stripHTML } from '../utils/strings';\nimport { buildUrlParams } from '../utils/urls';\n\n// Parse Vimeo ID from URL\nfunction parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n\n if (is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n}\n\n// Get aspect ratio for dimensions\nfunction getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!is.object(window.Vimeo)) {\n loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const [x, y] = (is.string(input) ? input : this.config.ratio).split(':');\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 controls from '../controls';\nimport ui from '../ui';\nimport { dedupe } from '../utils/arrays';\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// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n const qualities = {\n hd2160: 2160,\n hd1440: 1440,\n hd1080: 1080,\n hd720: 720,\n large: 480,\n medium: 360,\n small: 240,\n tiny: 144,\n };\n\n const entry = Object.entries(qualities).find(entry => entry.includes(input));\n\n if (entry) {\n // Get the match corresponding to the input\n return entry.find(value => value !== input);\n }\n\n return 'default';\n}\n\nfunction mapQualityUnits(levels) {\n if (is.empty(levels)) {\n return levels;\n }\n\n return dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n 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 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 onPlaybackQualityChange() {\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n triggerEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // If paused 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 // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n instance.setPlaybackQuality(mapQualityUnit(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 // Get quality\n controls.setQualityMenu.call(\n player,\n mapQualityUnits(instance.getAvailableQualityLevels()),\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 i18n from '../i18n';\nimport { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\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 // 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 // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n 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.3.22\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 (\n (window.jQuery && this.media instanceof jQuery) ||\n is.nodeList(this.media) ||\n is.array(this.media)\n ) {\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(\n this.media.getAttribute('data-plyr-config'),\n );\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.searchParams.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(\n url.searchParams.get('playsinline'),\n );\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(\n this.config.attributes.embed.provider,\n );\n\n // Remove attribute\n this.media.removeAttribute(\n this.config.attributes.embed.provider,\n );\n }\n\n // Unsupported or missing provider\n if (\n is.empty(this.provider) ||\n !Object.keys(providers).includes(this.provider)\n ) {\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 (\n this.media.hasAttribute('playsinline') ||\n this.media.hasAttribute('webkit-playsinline')\n ) {\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(\n this.type,\n this.provider,\n this.config.playsinline,\n );\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(\n this,\n this.elements.container,\n this.config.events.join(' '),\n event => {\n this.debug.log(`event: ${event.type}`);\n },\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 =\n this.currentTime -\n (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 =\n this.currentTime +\n (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\n ? Math.min(input, this.duration)\n : 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 =\n !is.number(realDuration) || realDuration === Infinity\n ? 0\n : 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(\n `Unsupported quality option: ${quality}, using ${value} instead`,\n );\n quality = value;\n }\n\n // Trigger request event\n triggerEvent.call(this, this.media, 'qualityrequested', false, {\n quality,\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(\n toggle ? states.pip : states.inline,\n );\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n 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(\n this.elements.container,\n this.config.classNames.hideControls,\n );\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(\n this.elements.container,\n this.config.classNames.hideControls,\n force,\n );\n\n // Close menu\n if (\n hiding &&\n this.config.controls.includes('settings') &&\n !is.empty(this.config.settings)\n ) {\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(\n this,\n this.elements.original,\n 'destroyed',\n true,\n );\n\n // Callback\n if (is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Provider specific stuff\n if (this.isHTML5) {\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n } else if (this.isYouTube) {\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n } else if (this.isVimeo) {\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (is.array(selector)) {\n targets = selector.filter(is.element);\n }\n\n if (is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = cloneDeep(defaults);\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/dist/plyr.polyfilled.js b/dist/plyr.polyfilled.js
index ec68e07c..a198196e 100644
--- a/dist/plyr.polyfilled.js
+++ b/dist/plyr.polyfilled.js
@@ -6057,9 +6057,13 @@ typeof navigator === "object" && (function (global, factory) {
// Force repaint of element
function repaint(element) {
setTimeout(function () {
- toggleHidden(element, true);
- element.offsetHeight; // eslint-disable-line
- toggleHidden(element, false);
+ try {
+ toggleHidden(element, true);
+ element.offsetHeight; // eslint-disable-line
+ toggleHidden(element, false);
+ } catch (e) {
+ // Do nothing
+ }
}, 0);
}
@@ -7083,7 +7087,7 @@ typeof navigator === "object" && (function (global, factory) {
// Show the respective menu
if (!isRadioButton && [32, 39].includes(event.which)) {
- controls.showMenuPanel.call(_this, type);
+ controls.showMenuPanel.call(_this, type, true);
} else {
var target = void 0;
@@ -7190,7 +7194,7 @@ typeof navigator === "object" && (function (global, factory) {
break;
}
- controls.showMenuPanel.call(_this2, 'home');
+ controls.showMenuPanel.call(_this2, 'home', event.type === 'keydown');
}, type, false);
controls.bindMenuItemShortcuts.call(this, menuItem, type);
@@ -7859,6 +7863,7 @@ typeof navigator === "object" && (function (global, factory) {
var _this8 = this;
var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
+ var tabFocus = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var target = document.getElementById('plyr-settings-' + this.id + '-' + type);
@@ -7913,7 +7918,7 @@ typeof navigator === "object" && (function (global, factory) {
// Focus the first item
var firstItem = target.querySelector('[role^="menuitem"]');
- setFocus.call(this, firstItem, true);
+ setFocus.call(this, firstItem, tabFocus);
},
@@ -8073,7 +8078,7 @@ typeof navigator === "object" && (function (global, factory) {
// Show menu on click
on(menuItem, 'click', function () {
- controls.showMenuPanel.call(_this9, type);
+ controls.showMenuPanel.call(_this9, type, false);
});
var flex = createElement('span', null, i18n.get(type, _this9.config));
@@ -8123,12 +8128,12 @@ typeof navigator === "object" && (function (global, factory) {
event.stopPropagation();
// Show the respective menu
- controls.showMenuPanel.call(_this9, 'home');
+ controls.showMenuPanel.call(_this9, 'home', true);
}, false);
// Go back via button click
on(backButton, 'click', function () {
- controls.showMenuPanel.call(_this9, 'home');
+ controls.showMenuPanel.call(_this9, 'home', false);
});
// Add to pane
@@ -9705,7 +9710,7 @@ typeof navigator === "object" && (function (global, factory) {
createClass(Listeners, [{
key: 'handleKey',
value: function handleKey(event) {
- var _this = this;
+ var player = this.player;
var code = event.keyCode ? event.keyCode : event.which;
var pressed = event.type === 'keydown';
@@ -9725,7 +9730,7 @@ typeof navigator === "object" && (function (global, factory) {
// Seek by the number keys
var seekByKey = function seekByKey() {
// Divide the max duration into 10th's and times by the number value
- _this.player.currentTime = _this.player.duration / 10 * (code - 48);
+ player.currentTime = player.duration / 10 * (code - 48);
};
// Handle the key on keydown
@@ -9736,8 +9741,8 @@ typeof navigator === "object" && (function (global, factory) {
// and any that accept key input http://webaim.org/techniques/keyboard/
var focused = document.activeElement;
if (is$1.element(focused)) {
- var editable = this.player.config.selectors.editable;
- var seek = this.player.elements.inputs.seek;
+ var editable = player.config.selectors.editable;
+ var seek = player.elements.inputs.seek;
if (focused !== seek && matches(focused, editable)) {
@@ -9779,52 +9784,52 @@ typeof navigator === "object" && (function (global, factory) {
case 75:
// Space and K key
if (!repeat) {
- this.player.togglePlay();
+ player.togglePlay();
}
break;
case 38:
// Arrow up
- this.player.increaseVolume(0.1);
+ player.increaseVolume(0.1);
break;
case 40:
// Arrow down
- this.player.decreaseVolume(0.1);
+ player.decreaseVolume(0.1);
break;
case 77:
// M key
if (!repeat) {
- this.player.muted = !this.player.muted;
+ player.muted = !player.muted;
}
break;
case 39:
// Arrow forward
- this.player.forward();
+ player.forward();
break;
case 37:
// Arrow back
- this.player.rewind();
+ player.rewind();
break;
case 70:
// F key
- this.player.fullscreen.toggle();
+ player.fullscreen.toggle();
break;
case 67:
// C key
if (!repeat) {
- this.player.toggleCaptions();
+ player.toggleCaptions();
}
break;
case 76:
// L key
- this.player.loop = !this.player.loop;
+ player.loop = !player.loop;
break;
/* case 73:
@@ -9843,8 +9848,8 @@ typeof navigator === "object" && (function (global, factory) {
// Escape is handle natively when in full screen
// So we only need to worry about non native
- if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {
- this.player.fullscreen.toggle();
+ if (!player.fullscreen.enabled && player.fullscreen.active && code === 27) {
+ player.fullscreen.toggle();
}
// Store last code for next cycle
@@ -9867,15 +9872,19 @@ typeof navigator === "object" && (function (global, factory) {
}, {
key: 'firstTouch',
value: function firstTouch() {
- this.player.touch = true;
+ var player = this.player;
+
+
+ player.touch = true;
// Add touch class
- toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);
+ toggleClass(player.elements.container, player.config.classNames.isTouch, true);
}
}, {
key: 'setTabFocus',
value: function setTabFocus(event) {
- var _this2 = this;
+ var player = this.player;
+
clearTimeout(this.focusTimer);
@@ -9891,8 +9900,8 @@ typeof navigator === "object" && (function (global, factory) {
// Remove current classes
var removeCurrent = function removeCurrent() {
- var className = _this2.player.config.classNames.tabFocus;
- var current = getElements.call(_this2.player, '.' + className);
+ var className = player.config.classNames.tabFocus;
+ var current = getElements.call(player, '.' + className);
toggleClass(current, className, false);
};
@@ -9909,16 +9918,15 @@ typeof navigator === "object" && (function (global, factory) {
// Delay the adding of classname until the focus has changed
// This event fires before the focusin event
-
this.focusTimer = setTimeout(function () {
var focused = document.activeElement;
// Ignore if current focus element isn't inside the player
- if (!_this2.player.elements.container.contains(focused)) {
+ if (!player.elements.container.contains(focused)) {
return;
}
- toggleClass(document.activeElement, _this2.player.config.classNames.tabFocus, true);
+ toggleClass(document.activeElement, player.config.classNames.tabFocus, true);
}, 10);
}
@@ -9928,20 +9936,22 @@ typeof navigator === "object" && (function (global, factory) {
key: 'global',
value: function global() {
var toggle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
+ var player = this.player;
// Keyboard shortcuts
- if (this.player.config.keyboard.global) {
- toggleListener.call(this.player, window, 'keydown keyup', this.handleKey, toggle, false);
+
+ if (player.config.keyboard.global) {
+ toggleListener.call(player, window, 'keydown keyup', this.handleKey, toggle, false);
}
// Click anywhere closes menu
- toggleListener.call(this.player, document.body, 'click', this.toggleMenu, toggle);
+ toggleListener.call(player, document.body, 'click', this.toggleMenu, toggle);
// Detect touch by events
- once.call(this.player, document.body, 'touchstart', this.firstTouch);
+ once.call(player, document.body, 'touchstart', this.firstTouch);
// Tab focus detection
- toggleListener.call(this.player, document.body, 'keydown focus blur', this.setTabFocus, toggle, false, true);
+ toggleListener.call(player, document.body, 'keydown focus blur', this.setTabFocus, toggle, false, true);
}
// Container listeners
@@ -9949,16 +9959,17 @@ typeof navigator === "object" && (function (global, factory) {
}, {
key: 'container',
value: function container() {
- var _this3 = this;
+ var player = this.player;
// Keyboard shortcuts
- if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {
- on.call(this.player, this.player.elements.container, 'keydown keyup', this.handleKey, false);
+
+ if (!player.config.keyboard.global && player.config.keyboard.focused) {
+ on.call(player, player.elements.container, 'keydown keyup', this.handleKey, false);
}
// Toggle controls on mouse events and entering fullscreen
- on.call(this.player, this.player.elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', function (event) {
- var controls$$1 = _this3.player.elements.controls;
+ on.call(player, player.elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', function (event) {
+ var controls$$1 = player.elements.controls;
// Remove button states for fullscreen
@@ -9973,17 +9984,17 @@ typeof navigator === "object" && (function (global, factory) {
var delay = 0;
if (show) {
- ui.toggleControls.call(_this3.player, true);
+ ui.toggleControls.call(player, true);
// Use longer timeout for touch devices
- delay = _this3.player.touch ? 3000 : 2000;
+ delay = player.touch ? 3000 : 2000;
}
// Clear timer
- clearTimeout(_this3.player.timers.controls);
+ clearTimeout(player.timers.controls);
// Set new timer to prevent flicker when seeking
- _this3.player.timers.controls = setTimeout(function () {
- return ui.toggleControls.call(_this3.player, false);
+ player.timers.controls = setTimeout(function () {
+ return ui.toggleControls.call(player, false);
}, delay);
});
}
@@ -9993,76 +10004,79 @@ typeof navigator === "object" && (function (global, factory) {
}, {
key: 'media',
value: function media() {
- var _this4 = this;
+ var _this = this;
+
+ var player = this.player;
// Time change on media
- on.call(this.player, this.player.media, 'timeupdate seeking seeked', function (event) {
- return controls.timeUpdate.call(_this4.player, event);
+
+ on.call(player, player.media, 'timeupdate seeking seeked', function (event) {
+ return controls.timeUpdate.call(player, event);
});
// Display duration
- on.call(this.player, this.player.media, 'durationchange loadeddata loadedmetadata', function (event) {
- return controls.durationUpdate.call(_this4.player, event);
+ on.call(player, player.media, 'durationchange loadeddata loadedmetadata', function (event) {
+ return controls.durationUpdate.call(player, event);
});
// Check for audio tracks on load
// We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point
- on.call(this.player, this.player.media, 'canplay', function () {
- toggleHidden(_this4.player.elements.volume, !_this4.player.hasAudio);
- toggleHidden(_this4.player.elements.buttons.mute, !_this4.player.hasAudio);
+ on.call(player, player.media, 'canplay', function () {
+ toggleHidden(player.elements.volume, !player.hasAudio);
+ toggleHidden(player.elements.buttons.mute, !player.hasAudio);
});
// Handle the media finishing
- on.call(this.player, this.player.media, 'ended', function () {
+ on.call(player, player.media, 'ended', function () {
// Show poster on end
- if (_this4.player.isHTML5 && _this4.player.isVideo && _this4.player.config.resetOnEnd) {
+ if (player.isHTML5 && player.isVideo && player.config.resetOnEnd) {
// Restart
- _this4.player.restart();
+ player.restart();
}
});
// Check for buffer progress
- on.call(this.player, this.player.media, 'progress playing seeking seeked', function (event) {
- return controls.updateProgress.call(_this4.player, event);
+ on.call(player, player.media, 'progress playing seeking seeked', function (event) {
+ return controls.updateProgress.call(player, event);
});
// Handle volume changes
- on.call(this.player, this.player.media, 'volumechange', function (event) {
- return controls.updateVolume.call(_this4.player, event);
+ on.call(player, player.media, 'volumechange', function (event) {
+ return controls.updateVolume.call(player, event);
});
// Handle play/pause
- on.call(this.player, this.player.media, 'playing play pause ended emptied timeupdate', function (event) {
- return ui.checkPlaying.call(_this4.player, event);
+ on.call(player, player.media, 'playing play pause ended emptied timeupdate', function (event) {
+ return ui.checkPlaying.call(player, event);
});
// Loading state
- on.call(this.player, this.player.media, 'waiting canplay seeked playing', function (event) {
- return ui.checkLoading.call(_this4.player, event);
+ on.call(player, player.media, 'waiting canplay seeked playing', function (event) {
+ return ui.checkLoading.call(player, event);
});
// If autoplay, then load advertisement if required
// TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows
- on.call(this.player, this.player.media, 'playing', function () {
- if (!_this4.player.ads) {
+ on.call(player, player.media, 'playing', function () {
+ if (!player.ads) {
return;
}
// If ads are enabled, wait for them first
- if (_this4.player.ads.enabled && !_this4.player.ads.initialized) {
+ if (player.ads.enabled && !player.ads.initialized) {
// Wait for manager response
- _this4.player.ads.managerPromise.then(function () {
- return _this4.player.ads.play();
+ player.ads.managerPromise.then(function () {
+ return player.ads.play();
}).catch(function () {
- return _this4.player.play();
+ return player.play();
});
}
});
// Click video
- if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {
+ if (player.supported.ui && player.config.clickToPlay && !player.isAudio) {
// Re-fetch the wrapper
- var wrapper = getElement.call(this.player, '.' + this.player.config.classNames.video);
+ var wrapper = getElement.call(player, '.' + player.config.classNames.video);
// Bail if there's no wrapper (this should never happen)
if (!is$1.element(wrapper)) {
@@ -10070,75 +10084,77 @@ typeof navigator === "object" && (function (global, factory) {
}
// On click play, pause ore restart
- on.call(this.player, wrapper, 'click', function () {
+ on.call(player, wrapper, 'click', function () {
+ var controlsHidden = hasClass(player.elements.container, _this.config.classNames.hideControls);
+
+ console.warn('click');
+
// Touch devices will just show controls (if we're hiding controls)
- if (_this4.player.config.hideControls && _this4.player.touch && !_this4.player.paused) {
+ if (player.config.hideControls && player.touch && controlsHidden) {
return;
}
- if (_this4.player.paused) {
- _this4.player.play();
- } else if (_this4.player.ended) {
- _this4.player.restart();
- _this4.player.play();
+ if (player.ended) {
+ player.restart();
+ player.play();
} else {
- _this4.player.pause();
+ _this.togglePlay();
}
});
}
// Disable right click
- if (this.player.supported.ui && this.player.config.disableContextMenu) {
- on.call(this.player, this.player.elements.wrapper, 'contextmenu', function (event) {
+ if (player.supported.ui && player.config.disableContextMenu) {
+ on.call(player, player.elements.wrapper, 'contextmenu', function (event) {
event.preventDefault();
}, false);
}
// Volume change
- on.call(this.player, this.player.media, 'volumechange', function () {
+ on.call(player, player.media, 'volumechange', function () {
// Save to storage
- _this4.player.storage.set({
- volume: _this4.player.volume,
- muted: _this4.player.muted
+ player.storage.set({
+ volume: player.volume,
+ muted: player.muted
});
});
// Speed change
- on.call(this.player, this.player.media, 'ratechange', function () {
+ on.call(player, player.media, 'ratechange', function () {
// Update UI
- controls.updateSetting.call(_this4.player, 'speed');
+ controls.updateSetting.call(player, 'speed');
// Save to storage
- _this4.player.storage.set({ speed: _this4.player.speed });
+ player.storage.set({ speed: player.speed });
});
// Quality request
- on.call(this.player, this.player.media, 'qualityrequested', function (event) {
+ on.call(player, player.media, 'qualityrequested', function (event) {
// Save to storage
- _this4.player.storage.set({ quality: event.detail.quality });
+ player.storage.set({ quality: event.detail.quality });
});
// Quality change
- on.call(this.player, this.player.media, 'qualitychange', function (event) {
+ on.call(player, player.media, 'qualitychange', function (event) {
// Update UI
- controls.updateSetting.call(_this4.player, 'quality', null, event.detail.quality);
+ controls.updateSetting.call(player, 'quality', null, event.detail.quality);
});
// Proxy events to container
// Bubble up key events for Edge
- var proxyEvents = this.player.config.events.concat(['keyup', 'keydown']).join(' ');
+ var proxyEvents = player.config.events.concat(['keyup', 'keydown']).join(' ');
- on.call(this.player, this.player.media, proxyEvents, function (event) {
+ on.call(player, player.media, proxyEvents, function (event) {
var _event$detail = event.detail,
detail = _event$detail === undefined ? {} : _event$detail;
// Get error details from media
if (event.type === 'error') {
- detail = _this4.player.media.error;
+ detail = player.media.error;
}
- triggerEvent.call(_this4.player, _this4.player.elements.container, event.type, true, detail);
+ triggerEvent.call(player, player.elements.container, event.type, true, detail);
});
}
@@ -10147,18 +10163,20 @@ typeof navigator === "object" && (function (global, factory) {
}, {
key: 'proxy',
value: function proxy(event, defaultHandler, customHandlerKey) {
- var customHandler = this.player.config.listeners[customHandlerKey];
+ var player = this.player;
+
+ var customHandler = player.config.listeners[customHandlerKey];
var hasCustomHandler = is$1.function(customHandler);
var returned = true;
// Execute custom handler
if (hasCustomHandler) {
- returned = customHandler.call(this.player, event);
+ returned = customHandler.call(player, event);
}
// Only call default handler if not prevented in custom handler
if (returned && is$1.function(defaultHandler)) {
- defaultHandler.call(this.player, event);
+ defaultHandler.call(player, event);
}
}
@@ -10167,15 +10185,16 @@ typeof navigator === "object" && (function (global, factory) {
}, {
key: 'bind',
value: function bind(element, type, defaultHandler, customHandlerKey) {
- var _this5 = this;
+ var _this2 = this;
var passive = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;
+ var player = this.player;
- var customHandler = this.player.config.listeners[customHandlerKey];
+ var customHandler = player.config.listeners[customHandlerKey];
var hasCustomHandler = is$1.function(customHandler);
- on.call(this.player, element, type, function (event) {
- return _this5.proxy(event, defaultHandler, customHandlerKey);
+ on.call(player, element, type, function (event) {
+ return _this2.proxy(event, defaultHandler, customHandlerKey);
}, passive && !hasCustomHandler);
}
@@ -10184,57 +10203,60 @@ typeof navigator === "object" && (function (global, factory) {
}, {
key: 'controls',
value: function controls$$1() {
- var _this6 = this;
+ var _this3 = this;
+
+ var player = this.player;
// IE doesn't support input event, so we fallback to change
+
var inputEvent = browser.isIE ? 'change' : 'input';
// Play/pause toggle
- if (this.player.elements.buttons.play) {
- Array.from(this.player.elements.buttons.play).forEach(function (button) {
- _this6.bind(button, 'click', _this6.player.togglePlay, 'play');
+ if (player.elements.buttons.play) {
+ Array.from(player.elements.buttons.play).forEach(function (button) {
+ _this3.bind(button, 'click', player.togglePlay, 'play');
});
}
// Pause
- this.bind(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');
+ this.bind(player.elements.buttons.restart, 'click', player.restart, 'restart');
// Rewind
- this.bind(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');
+ this.bind(player.elements.buttons.rewind, 'click', player.rewind, 'rewind');
// Rewind
- this.bind(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');
+ this.bind(player.elements.buttons.fastForward, 'click', player.forward, 'fastForward');
// Mute toggle
- this.bind(this.player.elements.buttons.mute, 'click', function () {
- _this6.player.muted = !_this6.player.muted;
+ this.bind(player.elements.buttons.mute, 'click', function () {
+ player.muted = !player.muted;
}, 'mute');
// Captions toggle
- this.bind(this.player.elements.buttons.captions, 'click', function () {
- return _this6.player.toggleCaptions();
+ this.bind(player.elements.buttons.captions, 'click', function () {
+ return player.toggleCaptions();
});
// Fullscreen toggle
- this.bind(this.player.elements.buttons.fullscreen, 'click', function () {
- _this6.player.fullscreen.toggle();
+ this.bind(player.elements.buttons.fullscreen, 'click', function () {
+ player.fullscreen.toggle();
}, 'fullscreen');
// Picture-in-Picture
- this.bind(this.player.elements.buttons.pip, 'click', function () {
- _this6.player.pip = 'toggle';
+ this.bind(player.elements.buttons.pip, 'click', function () {
+ player.pip = 'toggle';
}, 'pip');
// Airplay
- this.bind(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');
+ this.bind(player.elements.buttons.airplay, 'click', player.airplay, 'airplay');
// Settings menu - click toggle
- this.bind(this.player.elements.buttons.settings, 'click', function (event) {
- controls.toggleMenu.call(_this6.player, event);
+ this.bind(player.elements.buttons.settings, 'click', function (event) {
+ controls.toggleMenu.call(player, event);
});
// Settings menu - keyboard toggle
- this.bind(this.player.elements.buttons.settings, 'keydown', function (event) {
+ this.bind(player.elements.buttons.settings, 'keydown', function (event) {
// We only care about space
if (event.which !== 32) {
return;
@@ -10247,44 +10269,44 @@ typeof navigator === "object" && (function (global, factory) {
event.stopPropagation();
// Toggle menu
- controls.toggleMenu.call(_this6.player, event);
+ controls.toggleMenu.call(player, event);
}, null, false);
// Set range input alternative "value", which matches the tooltip time (#954)
- this.bind(this.player.elements.inputs.seek, 'mousedown mousemove', function (event) {
- var clientRect = _this6.player.elements.progress.getBoundingClientRect();
+ this.bind(player.elements.inputs.seek, 'mousedown mousemove', function (event) {
+ var clientRect = player.elements.progress.getBoundingClientRect();
var percent = 100 / clientRect.width * (event.pageX - clientRect.left);
event.currentTarget.setAttribute('seek-value', percent);
});
// Pause while seeking
- this.bind(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', function (event) {
+ this.bind(player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', function (event) {
var seek = event.currentTarget;
-
var code = event.keyCode ? event.keyCode : event.which;
var eventType = event.type;
+ var attribute = 'play-on-seeked';
if ((eventType === 'keydown' || eventType === 'keyup') && code !== 39 && code !== 37) {
return;
}
// Was playing before?
- var play = seek.hasAttribute('play-on-seeked');
+ var play = seek.hasAttribute(attribute);
// Done seeking
var done = ['mouseup', 'touchend', 'keyup'].includes(event.type);
// If we're done seeking and it was playing, resume playback
if (play && done) {
- seek.removeAttribute('play-on-seeked');
- _this6.player.play();
- } else if (!done && _this6.player.playing) {
- seek.setAttribute('play-on-seeked', '');
- _this6.player.pause();
+ seek.removeAttribute(attribute);
+ player.play();
+ } else if (!done && player.playing) {
+ seek.setAttribute(attribute, '');
+ player.pause();
}
});
// Seek
- this.bind(this.player.elements.inputs.seek, inputEvent, function (event) {
+ this.bind(player.elements.inputs.seek, inputEvent, function (event) {
var seek = event.currentTarget;
// If it exists, use seek-value instead of "value" for consistency with tooltip time (#954)
@@ -10296,89 +10318,95 @@ typeof navigator === "object" && (function (global, factory) {
seek.removeAttribute('seek-value');
- _this6.player.currentTime = seekTo / seek.max * _this6.player.duration;
+ // Super weird iOS bug where after you interact with an <input type="range">,
+ // it takes over further interactions on the page. This is a hack
+ if (browser.isIos) {
+ repaint(seek);
+ }
+
+ player.currentTime = seekTo / seek.max * player.duration;
}, 'seek');
// Current time invert
// Only if one time element is used for both currentTime and duration
- if (this.player.config.toggleInvert && !is$1.element(this.player.elements.display.duration)) {
- this.bind(this.player.elements.display.currentTime, 'click', function () {
+ if (player.config.toggleInvert && !is$1.element(player.elements.display.duration)) {
+ this.bind(player.elements.display.currentTime, 'click', function () {
// Do nothing if we're at the start
- if (_this6.player.currentTime === 0) {
+ if (player.currentTime === 0) {
return;
}
- _this6.player.config.invertTime = !_this6.player.config.invertTime;
+ player.config.invertTime = !player.config.invertTime;
- controls.timeUpdate.call(_this6.player);
+ controls.timeUpdate.call(player);
});
}
// Volume
- this.bind(this.player.elements.inputs.volume, inputEvent, function (event) {
- _this6.player.volume = event.target.value;
+ this.bind(player.elements.inputs.volume, inputEvent, function (event) {
+ player.volume = event.target.value;
}, 'volume');
// Polyfill for lower fill in <input type="range"> for webkit
if (browser.isWebkit) {
- Array.from(getElements.call(this.player, 'input[type="range"]')).forEach(function (element) {
- _this6.bind(element, 'input', function (event) {
- return controls.updateRangeFill.call(_this6.player, event.target);
+ Array.from(getElements.call(player, 'input[type="range"]')).forEach(function (element) {
+ _this3.bind(element, 'input', function (event) {
+ return controls.updateRangeFill.call(player, event.target);
});
});
}
// Seek tooltip
- this.bind(this.player.elements.progress, 'mouseenter mouseleave mousemove', function (event) {
- return controls.updateSeekTooltip.call(_this6.player, event);
+ this.bind(player.elements.progress, 'mouseenter mouseleave mousemove', function (event) {
+ return controls.updateSeekTooltip.call(player, event);
});
// Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)
- this.bind(this.player.elements.controls, 'mouseenter mouseleave', function (event) {
- _this6.player.elements.controls.hover = !_this6.player.touch && event.type === 'mouseenter';
+ this.bind(player.elements.controls, 'mouseenter mouseleave', function (event) {
+ player.elements.controls.hover = !player.touch && event.type === 'mouseenter';
});
// Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)
- this.bind(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', function (event) {
- _this6.player.elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);
+ this.bind(player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', function (event) {
+ player.elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);
});
// Focus in/out on controls
- this.bind(this.player.elements.controls, 'focusin focusout', function (event) {
- var _player = _this6.player,
- config = _player.config,
- elements = _player.elements,
- timers = _player.timers;
+ this.bind(player.elements.controls, 'focusin focusout', function (event) {
+ var config = player.config,
+ elements = player.elements,
+ timers = player.timers;
- // Skip transition to prevent focus from scrolling the parent element
+ var isFocusIn = event.type === 'focusin';
- toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');
+ // Skip transition to prevent focus from scrolling the parent element
+ toggleClass(elements.controls, config.classNames.noTransition, isFocusIn);
// Toggle
- ui.toggleControls.call(_this6.player, event.type === 'focusin');
+ ui.toggleControls.call(player, isFocusIn);
// If focusin, hide again after delay
- if (event.type === 'focusin') {
+ if (isFocusIn) {
// Restore transition
setTimeout(function () {
toggleClass(elements.controls, config.classNames.noTransition, false);
}, 0);
// Delay a little more for keyboard users
- var delay = _this6.touch ? 3000 : 4000;
+ var delay = _this3.touch ? 3000 : 4000;
// Clear timer
clearTimeout(timers.controls);
// Hide
timers.controls = setTimeout(function () {
- return ui.toggleControls.call(_this6.player, false);
+ return ui.toggleControls.call(player, false);
}, delay);
}
});
// Mouse wheel for volume
- this.bind(this.player.elements.inputs.volume, 'wheel', function (event) {
+ this.bind(player.elements.inputs.volume, 'wheel', function (event) {
// Detect "natural" scroll - suppored on OS X Safari only
// Other browsers on OS X will be inverted until support improves
var inverted = event.webkitDirectionInvertedFromDevice;
@@ -10398,10 +10426,10 @@ typeof navigator === "object" && (function (global, factory) {
var direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y);
// Change the volume by 2%
- _this6.player.increaseVolume(direction / 50);
+ player.increaseVolume(direction / 50);
// Don't break page scrolling at max and min
- var volume = _this6.player.media.volume;
+ var volume = player.media.volume;
if (direction === 1 && volume < 1 || direction === -1 && volume > 0) {
event.preventDefault();
@@ -12690,7 +12718,7 @@ typeof navigator === "object" && (function (global, factory) {
if (this.media.hasAttribute('autoplay')) {
this.config.autoplay = true;
}
- if (this.media.hasAttribute('playsinline')) {
+ if (this.media.hasAttribute('playsinline') || this.media.hasAttribute('webkit-playsinline')) {
this.config.playsinline = true;
}
if (this.media.hasAttribute('muted')) {
@@ -12762,7 +12790,9 @@ typeof navigator === "object" && (function (global, factory) {
this.fullscreen = new Fullscreen(this);
// Setup ads if provided
- this.ads = new Ads(this);
+ if (this.config.ads.enabled) {
+ this.ads = new Ads(this);
+ }
// Autoplay if required
if (this.config.autoplay) {
@@ -12968,13 +12998,16 @@ typeof navigator === "object" && (function (global, factory) {
if (hiding && this.config.controls.includes('settings') && !is$1.empty(this.config.settings)) {
controls.toggleMenu.call(this, false);
}
+
// Trigger event on change
if (hiding !== isHidden) {
var eventName = hiding ? 'controlshidden' : 'controlsshown';
triggerEvent.call(this, this.media, eventName);
}
+
return !hiding;
}
+
return false;
}
@@ -13464,7 +13497,9 @@ typeof navigator === "object" && (function (global, factory) {
}
// Trigger request event
- triggerEvent.call(this, this.media, 'qualityrequested', false, { quality: quality });
+ triggerEvent.call(this, this.media, 'qualityrequested', false, {
+ quality: quality
+ });
// Update config
config.selected = quality;
diff --git a/dist/plyr.polyfilled.js.map b/dist/plyr.polyfilled.js.map
index 26b63dda..536e06bd 100644
--- a/dist/plyr.polyfilled.js.map
+++ b/dist/plyr.polyfilled.js.map
@@ -1 +1 @@
-{"version":3,"sources":["node_modules/core-js/modules/_global.js","node_modules/core-js/modules/_core.js","node_modules/core-js/modules/_is-object.js","node_modules/core-js/modules/_an-object.js","node_modules/core-js/modules/_fails.js","node_modules/core-js/modules/_descriptors.js","node_modules/core-js/modules/_dom-create.js","node_modules/core-js/modules/_ie8-dom-define.js","node_modules/core-js/modules/_to-primitive.js","node_modules/core-js/modules/_object-dp.js","node_modules/core-js/modules/_property-desc.js","node_modules/core-js/modules/_hide.js","node_modules/core-js/modules/_has.js","node_modules/core-js/modules/_uid.js","node_modules/core-js/modules/_redefine.js","node_modules/core-js/modules/_a-function.js","node_modules/core-js/modules/_ctx.js","node_modules/core-js/modules/_export.js","node_modules/core-js/modules/_typed.js","node_modules/core-js/modules/_library.js","node_modules/core-js/modules/_redefine-all.js","node_modules/core-js/modules/_an-instance.js","node_modules/core-js/modules/_to-integer.js","node_modules/core-js/modules/_to-length.js","node_modules/core-js/modules/_to-index.js","node_modules/core-js/modules/_cof.js","node_modules/core-js/modules/_iobject.js","node_modules/core-js/modules/_defined.js","node_modules/core-js/modules/_to-iobject.js","node_modules/core-js/modules/_to-absolute-index.js","node_modules/core-js/modules/_array-includes.js","node_modules/core-js/modules/_shared.js","node_modules/core-js/modules/_shared-key.js","node_modules/core-js/modules/_object-keys-internal.js","node_modules/core-js/modules/_enum-bug-keys.js","node_modules/core-js/modules/_object-gopn.js","node_modules/core-js/modules/_to-object.js","node_modules/core-js/modules/_array-fill.js","node_modules/core-js/modules/_wks.js","node_modules/core-js/modules/_set-to-string-tag.js","node_modules/core-js/modules/_typed-buffer.js","node_modules/core-js/modules/_species-constructor.js","node_modules/core-js/modules/_set-species.js","node_modules/core-js/modules/es6.typed.array-buffer.js","node_modules/core-js/modules/_classof.js","node_modules/core-js/modules/_iterators.js","node_modules/core-js/modules/_is-array-iter.js","node_modules/core-js/modules/_object-keys.js","node_modules/core-js/modules/_object-dps.js","node_modules/core-js/modules/_html.js","node_modules/core-js/modules/_object-create.js","node_modules/core-js/modules/_object-gpo.js","node_modules/core-js/modules/core.get-iterator-method.js","node_modules/core-js/modules/_is-array.js","node_modules/core-js/modules/_array-species-constructor.js","node_modules/core-js/modules/_array-species-create.js","node_modules/core-js/modules/_array-methods.js","node_modules/core-js/modules/_add-to-unscopables.js","node_modules/core-js/modules/_iter-step.js","node_modules/core-js/modules/_iter-create.js","node_modules/core-js/modules/_iter-define.js","node_modules/core-js/modules/es6.array.iterator.js","node_modules/core-js/modules/_iter-detect.js","node_modules/core-js/modules/_array-copy-within.js","node_modules/core-js/modules/_object-pie.js","node_modules/core-js/modules/_object-gopd.js","node_modules/core-js/modules/_typed-array.js","node_modules/core-js/modules/es6.typed.int8-array.js","node_modules/core-js/modules/es6.typed.uint8-array.js","node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","node_modules/core-js/modules/es6.typed.int16-array.js","node_modules/core-js/modules/es6.typed.uint16-array.js","node_modules/core-js/modules/es6.typed.int32-array.js","node_modules/core-js/modules/es6.typed.uint32-array.js","node_modules/core-js/modules/es6.typed.float32-array.js","node_modules/core-js/modules/es6.typed.float64-array.js","node_modules/core-js/modules/_iter-call.js","node_modules/core-js/modules/_for-of.js","node_modules/core-js/modules/_meta.js","node_modules/core-js/modules/_validate-collection.js","node_modules/core-js/modules/_collection-strong.js","node_modules/core-js/modules/_set-proto.js","node_modules/core-js/modules/_inherit-if-required.js","node_modules/core-js/modules/_collection.js","node_modules/core-js/modules/es6.map.js","node_modules/core-js/modules/es6.set.js","node_modules/core-js/modules/_object-gops.js","node_modules/core-js/modules/_object-assign.js","node_modules/core-js/modules/_collection-weak.js","node_modules/core-js/modules/es6.weak-map.js","node_modules/core-js/modules/es6.weak-set.js","node_modules/core-js/modules/es6.reflect.apply.js","node_modules/core-js/modules/_invoke.js","node_modules/core-js/modules/_bind.js","node_modules/core-js/modules/es6.reflect.construct.js","node_modules/core-js/modules/es6.reflect.define-property.js","node_modules/core-js/modules/es6.reflect.delete-property.js","node_modules/core-js/modules/es6.reflect.get.js","node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","node_modules/core-js/modules/es6.reflect.get-prototype-of.js","node_modules/core-js/modules/es6.reflect.has.js","node_modules/core-js/modules/es6.reflect.is-extensible.js","node_modules/core-js/modules/_own-keys.js","node_modules/core-js/modules/es6.reflect.own-keys.js","node_modules/core-js/modules/es6.reflect.prevent-extensions.js","node_modules/core-js/modules/es6.reflect.set.js","node_modules/core-js/modules/es6.reflect.set-prototype-of.js","node_modules/core-js/modules/_task.js","node_modules/core-js/modules/_microtask.js","node_modules/core-js/modules/_new-promise-capability.js","node_modules/core-js/modules/_perform.js","node_modules/core-js/modules/_promise-resolve.js","node_modules/core-js/modules/es6.promise.js","node_modules/core-js/modules/_wks-ext.js","node_modules/core-js/modules/_wks-define.js","node_modules/core-js/modules/_enum-keys.js","node_modules/core-js/modules/_object-gopn-ext.js","node_modules/core-js/modules/es6.symbol.js","node_modules/core-js/modules/_object-sap.js","node_modules/core-js/modules/es6.object.freeze.js","node_modules/core-js/modules/es6.object.seal.js","node_modules/core-js/modules/es6.object.prevent-extensions.js","node_modules/core-js/modules/es6.object.is-frozen.js","node_modules/core-js/modules/es6.object.is-sealed.js","node_modules/core-js/modules/es6.object.is-extensible.js","node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","node_modules/core-js/modules/es6.object.get-prototype-of.js","node_modules/core-js/modules/es6.object.keys.js","node_modules/core-js/modules/es6.object.get-own-property-names.js","node_modules/core-js/modules/es6.object.assign.js","node_modules/core-js/modules/_same-value.js","node_modules/core-js/modules/es6.object.is.js","node_modules/core-js/modules/es6.function.name.js","node_modules/core-js/modules/es6.string.raw.js","node_modules/core-js/modules/es6.string.from-code-point.js","node_modules/core-js/modules/_string-at.js","node_modules/core-js/modules/es6.string.code-point-at.js","node_modules/core-js/modules/_string-repeat.js","node_modules/core-js/modules/es6.string.repeat.js","node_modules/core-js/modules/_is-regexp.js","node_modules/core-js/modules/_string-context.js","node_modules/core-js/modules/_fails-is-regexp.js","node_modules/core-js/modules/es6.string.starts-with.js","node_modules/core-js/modules/es6.string.ends-with.js","node_modules/core-js/modules/es6.string.includes.js","node_modules/core-js/modules/_flags.js","node_modules/core-js/modules/es6.regexp.flags.js","node_modules/core-js/modules/_fix-re-wks.js","node_modules/core-js/modules/es6.regexp.match.js","node_modules/core-js/modules/es6.regexp.replace.js","node_modules/core-js/modules/es6.regexp.split.js","node_modules/core-js/modules/es6.regexp.search.js","node_modules/core-js/modules/_create-property.js","node_modules/core-js/modules/es6.array.from.js","node_modules/core-js/modules/es6.array.of.js","node_modules/core-js/modules/es6.array.copy-within.js","node_modules/core-js/modules/es6.array.find.js","node_modules/core-js/modules/es6.array.find-index.js","node_modules/core-js/modules/es6.array.fill.js","node_modules/core-js/modules/es6.number.is-finite.js","node_modules/core-js/modules/_is-integer.js","node_modules/core-js/modules/es6.number.is-integer.js","node_modules/core-js/modules/es6.number.is-safe-integer.js","node_modules/core-js/modules/es6.number.is-nan.js","node_modules/core-js/modules/es6.number.epsilon.js","node_modules/core-js/modules/es6.number.min-safe-integer.js","node_modules/core-js/modules/es6.number.max-safe-integer.js","node_modules/core-js/modules/_math-log1p.js","node_modules/core-js/modules/es6.math.acosh.js","node_modules/core-js/modules/es6.math.asinh.js","node_modules/core-js/modules/es6.math.atanh.js","node_modules/core-js/modules/_math-sign.js","node_modules/core-js/modules/es6.math.cbrt.js","node_modules/core-js/modules/es6.math.clz32.js","node_modules/core-js/modules/es6.math.cosh.js","node_modules/core-js/modules/_math-expm1.js","node_modules/core-js/modules/es6.math.expm1.js","node_modules/core-js/modules/_math-fround.js","node_modules/core-js/modules/es6.math.fround.js","node_modules/core-js/modules/es6.math.hypot.js","node_modules/core-js/modules/es6.math.imul.js","node_modules/core-js/modules/es6.math.log1p.js","node_modules/core-js/modules/es6.math.log10.js","node_modules/core-js/modules/es6.math.log2.js","node_modules/core-js/modules/es6.math.sign.js","node_modules/core-js/modules/es6.math.sinh.js","node_modules/core-js/modules/es6.math.tanh.js","node_modules/core-js/modules/es6.math.trunc.js","node_modules/core-js/modules/es7.array.includes.js","node_modules/core-js/modules/_object-to-array.js","node_modules/core-js/modules/es7.object.values.js","node_modules/core-js/modules/es7.object.entries.js","node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","node_modules/core-js/modules/_string-pad.js","node_modules/core-js/modules/_user-agent.js","node_modules/core-js/modules/es7.string.pad-start.js","node_modules/core-js/modules/es7.string.pad-end.js","node_modules/core-js/modules/web.timers.js","node_modules/core-js/modules/web.immediate.js","node_modules/core-js/modules/web.dom.iterable.js","node_modules/regenerator-runtime/runtime.js","node_modules/custom-event-polyfill/custom-event-polyfill.js","node_modules/url-polyfill/url-polyfill.js","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/objects.js","src/js/utils/strings.js","src/js/i18n.js","src/js/utils/arrays.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","src/js/utils/loadImage.js","src/js/ui.js","src/js/listeners.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils/loadScript.js","src/js/plugins/vimeo.js","src/js/plugins/youtube.js","src/js/media.js","src/js/plugins/ads.js","src/js/source.js","src/js/plyr.js","src/js/plyr.polyfilled.js"],"names":["isObject","require$$0","document","require$$1","require$$2","anObject","toPrimitive","IE8_DOM_DEFINE","dP","createDesc","has","hide","global","aFunction","core","ctx","redefine","uid","toInteger","toLength","cof","IObject","defined","min","toIObject","toAbsoluteIndex","$keys","toObject","DESCRIPTORS","toIndex","$typed","anInstance","arrayFill","redefineAll","fails","setToStringTag","SPECIES","buffer","VIEW","$export","speciesConstructor","TAG","Iterators","enumBugKeys","getKeys","IE_PROTO","PROTOTYPE","dPs","ITERATOR","classof","isArray","asc","ArrayProto","create","descriptor","$iterCreate","getPrototypeOf","step","addToUnscopables","pIE","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","require$$27","require$$28","require$$29","require$$30","require$$31","require$$32","require$$33","require$$34","require$$35","require$$36","require$$37","require$$38","getIterFn","isArrayIter","call","forOf","validate","$iterDefine","setSpecies","meta","$iterDetect","inheritIfRequired","strong","gOPS","createArrayMethod","id","$has","weak","assign","invoke","bind","gOPD","getProto","Reflect","gOPN","setProto","cel","html","process","Promise","newPromiseCapability","TypeError","isNode","newPromiseCapabilityModule","perform","promiseResolve","LIBRARY","wksExt","toString","$GOPD","$DP","gOPNExt","wks","shared","ObjectProto","USE_NATIVE","$fails","_create","enumKeys","wksDefine","$getOwnPropertyDescriptor","$getPrototypeOf","isRegExp","MATCH","context","$defineProperty","createProperty","$find","KEY","forced","floor","isInteger","log1p","sign","$expm1","abs","exp","expm1","isEnum","ownKeys","repeat","navigator","userAgent","$pad","wrap","$task","i","NAME","$iterators","this","CustomEvent","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","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","cue","track","url","empty","supportsPassiveListeners","supported","options","defineProperty","get","addEventListener","removeEventListener","toggleListener","callback","toggle","passive","capture","is","events","split","forEach","eventListeners","push","type","on","off","once","onceCallback","args","apply","triggerEvent","bubbles","detail","plyr","dispatchEvent","unbindListeners","item","ready","setTimeout","resolve","elements","container","then","wrapper","targets","from","reverse","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","insertBefore","setAttributes","attributes","entries","filter","value","key","setAttribute","createElement","text","innerText","insertAfter","target","insertElement","removeElement","removeChild","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","selector","s","trim","className","replace","stripped","parts","start","charAt","class","toggleHidden","hidden","hasAttribute","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","cancelRequests","blankVideo","debug","log","cloneDeep","JSON","parse","stringify","getDeep","path","reduce","obj","shift","generateId","prefix","Math","random","format","getPercentage","current","max","toFixed","replaceAll","RegExp","toTitleCase","toUpperCase","substr","toLowerCase","toPascalCase","toCamelCase","slice","stripHTML","fragment","createDocumentFragment","innerHTML","firstChild","getHTML","i18n","seekTime","title","dedupe","indexOf","closest","prev","curr","Storage","enabled","storage","store","localStorage","getItem","json","setItem","removeItem","fetch","responseType","reject","request","XMLHttpRequest","responseText","response","Error","status","open","send","loadSprite","hasId","isCached","exists","getElementById","update","data","body","insertAdjacentElement","useStorage","cached","content","result","catch","getHours","parseInt","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","iconUrl","location","cors","host","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","display","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","controlPressed","enumerable","pressed","createRange","autocomplete","updateRangeFill","createProgress","suffixKey","played","suffix","createTime","bindMenuItemShortcuts","menuItem","which","stopPropagation","isRadioButton","showMenuPanel","nextElementSibling","firstElementChild","previousElementSibling","lastElementChild","createMenuItem","list","checked","flex","children","node","listeners","currentTrack","speed","parseFloat","forceHours","updateTimeDisplay","updateVolume","setRange","muted","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","toggleMenu","popup","show","isMenuItem","isButton","firstItem","getMenuSize","tab","clone","position","opacity","scrollWidth","height","scrollHeight","size","restore","propertyName","inner","home","backButton","inject","props","seektime","insertAdjacentHTML","labels","parseUrl","safe","parser","href","buildUrlParams","params","URLSearchParams","setup","isVideo","isYouTube","protocol","createObjectURL","blob","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","Fullscreen","property","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","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","currentTarget","eventType","done","seekTo","webkitDirectionInvertedFromDevice","deltaX","deltaY","direction","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","mapQualityUnit","qualities","hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","entry","mapQualityUnits","levels","level","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","items","snippet","currentId","posterSrc","playerVars","rel","showinfo","iv_load_policy","modestbranding","disablekb","widget_referrer","cc_load_policy","cc_lang_pref","onError","message","onPlaybackQualityChange","onPlaybackRateChange","instance","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","onStateChange","seeked","getAvailableQualityLevels","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","attribute","change","tagName","crossorigin","Plyr","failed","jQuery","original","searchParams","truthy","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":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","module.exports = false;\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","(function(global) {\r\n /**\r\n * Polyfill URLSearchParams\r\n *\r\n * Inspired from : https://github.com/WebReflection/url-search-params/blob/master/src/url-search-params.js\r\n */\r\n\r\n var checkIfIteratorIsSupported = function() {\r\n try {\r\n return !!Symbol.iterator;\r\n } catch(error) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var iteratorSupported = checkIfIteratorIsSupported();\r\n\r\n var createIterator = function(items) {\r\n var iterator = {\r\n next: function() {\r\n var value = items.shift();\r\n return { done: value === void 0, value: value };\r\n }\r\n };\r\n\r\n if(iteratorSupported) {\r\n iterator[Symbol.iterator] = function() {\r\n return iterator;\r\n };\r\n }\r\n\r\n return iterator;\r\n };\r\n\r\n /**\r\n * Search param name and values should be encoded according to https://url.spec.whatwg.org/#urlencoded-serializing\r\n * encodeURIComponent() produces the same result except encoding spaces as `%20` instead of `+`.\r\n */\r\n var serializeParam = function(value) {\r\n return encodeURIComponent(value).replace(/%20/g, '+');\r\n };\r\n\r\n var deserializeParam = function(value) {\r\n return decodeURIComponent(value).replace(/\\+/g, ' ');\r\n };\r\n\r\n var polyfillURLSearchParams= function() {\r\n\r\n var URLSearchParams = function(searchString) {\r\n Object.defineProperty(this, '_entries', { value: {} });\r\n\r\n if(typeof searchString === 'string') {\r\n if(searchString !== '') {\r\n searchString = searchString.replace(/^\\?/, '');\r\n var attributes = searchString.split('&');\r\n var attribute;\r\n for(var i = 0; i < attributes.length; i++) {\r\n attribute = attributes[i].split('=');\r\n this.append(\r\n deserializeParam(attribute[0]),\r\n (attribute.length > 1) ? deserializeParam(attribute[1]) : ''\r\n );\r\n }\r\n }\r\n } else if(searchString instanceof URLSearchParams) {\r\n var _this = this;\r\n searchString.forEach(function(value, name) {\r\n _this.append(value, name);\r\n });\r\n }\r\n };\r\n\r\n var proto = URLSearchParams.prototype;\r\n\r\n proto.append = function(name, value) {\r\n if(name in this._entries) {\r\n this._entries[name].push(value.toString());\r\n } else {\r\n this._entries[name] = [value.toString()];\r\n }\r\n };\r\n\r\n proto.delete = function(name) {\r\n delete this._entries[name];\r\n };\r\n\r\n proto.get = function(name) {\r\n return (name in this._entries) ? this._entries[name][0] : null;\r\n };\r\n\r\n proto.getAll = function(name) {\r\n return (name in this._entries) ? this._entries[name].slice(0) : [];\r\n };\r\n\r\n proto.has = function(name) {\r\n return (name in this._entries);\r\n };\r\n\r\n proto.set = function(name, value) {\r\n this._entries[name] = [value.toString()];\r\n };\r\n\r\n proto.forEach = function(callback, thisArg) {\r\n var entries;\r\n for(var name in this._entries) {\r\n if(this._entries.hasOwnProperty(name)) {\r\n entries = this._entries[name];\r\n for(var i = 0; i < entries.length; i++) {\r\n callback.call(thisArg, entries[i], name, this);\r\n }\r\n }\r\n }\r\n };\r\n\r\n proto.keys = function() {\r\n var items = [];\r\n this.forEach(function(value, name) { items.push(name); });\r\n return createIterator(items);\r\n };\r\n\r\n proto.values = function() {\r\n var items = [];\r\n this.forEach(function(value) { items.push(value); });\r\n return createIterator(items);\r\n };\r\n\r\n proto.entries = function() {\r\n var items = [];\r\n this.forEach(function(value, name) { items.push([name, value]); });\r\n return createIterator(items);\r\n };\r\n\r\n if(iteratorSupported) {\r\n proto[Symbol.iterator] = proto.entries;\r\n }\r\n\r\n proto.toString = function() {\r\n var searchString = '';\r\n this.forEach(function(value, name) {\r\n if(searchString.length > 0) searchString+= '&';\r\n searchString += serializeParam(name) + '=' + serializeParam(value);\r\n });\r\n return searchString;\r\n };\r\n\r\n global.URLSearchParams = URLSearchParams;\r\n };\r\n\r\n if(!('URLSearchParams' in global) || (new URLSearchParams('?a=1').toString() !== 'a=1')) {\r\n polyfillURLSearchParams();\r\n }\r\n\r\n // HTMLAnchorElement\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n\r\n(function(global) {\r\n /**\r\n * Polyfill URL\r\n *\r\n * Inspired from : https://github.com/arv/DOM-URL-Polyfill/blob/master/src/url.js\r\n */\r\n\r\n var checkIfURLIsSupported = function() {\r\n try {\r\n var u = new URL('b', 'http://a');\r\n u.pathname = 'c%20d';\r\n return (u.href === 'http://a/c%20d') && u.searchParams;\r\n } catch(e) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var polyfillURL = function() {\r\n var _URL = global.URL;\r\n\r\n var URL = function(url, base) {\r\n if(typeof url !== 'string') url = String(url);\r\n\r\n var doc = document.implementation.createHTMLDocument('');\r\n window.doc = doc;\r\n if(base) {\r\n var baseElement = doc.createElement('base');\r\n baseElement.href = base;\r\n doc.head.appendChild(baseElement);\r\n }\r\n\r\n var anchorElement = doc.createElement('a');\r\n anchorElement.href = url;\r\n doc.body.appendChild(anchorElement);\r\n anchorElement.href = anchorElement.href; // force href to refresh\r\n\r\n if(anchorElement.protocol === ':' || !/:/.test(anchorElement.href)) {\r\n throw new TypeError('Invalid URL');\r\n }\r\n\r\n Object.defineProperty(this, '_anchorElement', {\r\n value: anchorElement\r\n });\r\n };\r\n\r\n var proto = URL.prototype;\r\n\r\n var linkURLWithAnchorAttribute = function(attributeName) {\r\n Object.defineProperty(proto, attributeName, {\r\n get: function() {\r\n return this._anchorElement[attributeName];\r\n },\r\n set: function(value) {\r\n this._anchorElement[attributeName] = value;\r\n },\r\n enumerable: true\r\n });\r\n };\r\n\r\n ['hash', 'host', 'hostname', 'port', 'protocol', 'search']\r\n .forEach(function(attributeName) {\r\n linkURLWithAnchorAttribute(attributeName);\r\n });\r\n\r\n Object.defineProperties(proto, {\r\n\r\n 'toString': {\r\n get: function() {\r\n var _this = this;\r\n return function() {\r\n return _this.href;\r\n };\r\n }\r\n },\r\n\r\n 'href' : {\r\n get: function() {\r\n return this._anchorElement.href.replace(/\\?$/,'');\r\n },\r\n set: function(value) {\r\n this._anchorElement.href = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'pathname' : {\r\n get: function() {\r\n return this._anchorElement.pathname.replace(/(^\\/?)/,'/');\r\n },\r\n set: function(value) {\r\n this._anchorElement.pathname = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'origin': {\r\n get: function() {\r\n // get expected port from protocol\r\n var expectedPort = {'http:': 80, 'https:': 443, 'ftp:': 21}[this._anchorElement.protocol];\r\n // add port to origin if, expected port is different than actual port\r\n // and it is not empty f.e http://foo:8080\r\n // 8080 != 80 && 8080 != ''\r\n var addPortToOrigin = this._anchorElement.port != expectedPort &&\r\n this._anchorElement.port !== ''\r\n\r\n return this._anchorElement.protocol +\r\n '//' +\r\n this._anchorElement.hostname +\r\n (addPortToOrigin ? (':' + this._anchorElement.port) : '');\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'password': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'username': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'searchParams': {\r\n get: function() {\r\n var searchParams = new URLSearchParams(this.search);\r\n var _this = this;\r\n ['append', 'delete', 'set'].forEach(function(methodName) {\r\n var method = searchParams[methodName];\r\n searchParams[methodName] = function() {\r\n method.apply(searchParams, arguments);\r\n _this.search = searchParams.toString();\r\n };\r\n });\r\n return searchParams;\r\n },\r\n enumerable: true\r\n }\r\n });\r\n\r\n URL.createObjectURL = function(blob) {\r\n return _URL.createObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n URL.revokeObjectURL = function(url) {\r\n return _URL.revokeObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n global.URL = URL;\r\n\r\n };\r\n\r\n if(!checkIfURLIsSupported()) {\r\n polyfillURL();\r\n }\r\n\r\n if((global.location !== void 0) && !('origin' in global.location)) {\r\n var getOrigin = function() {\r\n return global.location.protocol + '//' + global.location.hostname + (global.location.port ? (':' + global.location.port) : '');\r\n };\r\n\r\n try {\r\n Object.defineProperty(global.location, 'origin', {\r\n get: getOrigin,\r\n enumerable: true\r\n });\r\n } catch(e) {\r\n setInterval(function() {\r\n global.location.origin = getOrigin();\r\n }, 100);\r\n }\r\n }\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n","// ==========================================================================\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 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 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(\n element,\n event,\n callback,\n toggle = false,\n passive = true,\n capture = false,\n) {\n // Bail if no element, event, or callback\n if (\n !element ||\n !('addEventListener' in element) ||\n is.empty(event) ||\n !is.function(callback)\n ) {\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (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'](\n type,\n callback,\n options,\n );\n });\n}\n\n// Bind event handler\nexport function on(\n element,\n events = '',\n callback,\n passive = true,\n capture = false,\n) {\n toggleListener.call(\n this,\n element,\n events,\n callback,\n true,\n passive,\n capture,\n );\n}\n\n// Unbind event handler\nexport function off(\n element,\n events = '',\n callback,\n passive = true,\n capture = false,\n) {\n toggleListener.call(\n this,\n element,\n events,\n callback,\n false,\n passive,\n capture,\n );\n}\n\n// Bind once-only event handler\nexport function once(\n element,\n events = '',\n callback,\n passive = true,\n capture = false,\n) {\n function onceCallback(...args) {\n off(element, events, onceCallback, passive, capture);\n callback.apply(this, args);\n }\n\n toggleListener.call(\n this,\n element,\n events,\n onceCallback,\n true,\n passive,\n capture,\n );\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 =>\n this.ready\n ? setTimeout(resolve, 0)\n : 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 (\n !is.element(oldChild) ||\n !is.element(oldChild.parentNode) ||\n !is.element(newChild)\n ) {\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.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n}\n\n// Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\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(\n this,\n 'button:not(:disabled), input:not(:disabled), [tabindex]',\n );\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(\n this,\n this.elements.container,\n 'keydown',\n trap,\n toggle,\n false,\n );\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 toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n toggleHidden(element, false);\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 });\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// Object utils\n// ==========================================================================\n\nimport is from './is';\n\n// Clone nested objects\nexport function cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n}\n\n// Get a nested value in an object\nexport function getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n}\n\n// Deep extend destination object with N more objects\nexport function extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return extend(target, ...sources);\n}\n","// ==========================================================================\n// String utils\n// ==========================================================================\n\nimport is from './is';\n\n// Generate a random ID\nexport function generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n}\n\n// Format string\nexport function format(input, ...args) {\n if (is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => args[i].toString());\n}\n\n// Get percentage\nexport function getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n}\n\n// Replace all occurances of a string in a string\nexport function replaceAll(input = '', find = '', replace = '') {\n return input.replace(\n new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'),\n replace.toString(),\n );\n}\n\n// Convert to title case\nexport function toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n}\n\n// Convert string to pascalCase\nexport function toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = toTitleCase(string);\n\n // Convert to pascal case\n return replaceAll(string, ' ', '');\n}\n\n// Convert string to pascalCase\nexport function toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n// Remove HTML from a string\nexport function stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n}\n\n// Like outerHTML, but also works for DocumentFragment\nexport function getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n}\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport is from './utils/is';\nimport { getDeep } from './utils/objects';\nimport { replaceAll } from './utils/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// 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// 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 i18n from './i18n';\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 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(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n } 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 // Toggle classname when pressed property is set\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 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 bindMenuItemShortcuts(menuItem, type) {\n // Handle space or -> to open menu\n on(menuItem, 'keydown', 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 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);\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 }, false);\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 keydown',\n event => {\n if (event.type === 'keydown' && 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');\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}%`);\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 // 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 const show = is.boolean(input) ? input : is.element(popup) && popup.hasAttribute('hidden');\n\n if (is.event(input)) {\n const isMenuItem = is.element(popup) && popup.contains(input.target);\n const isButton = input.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n input.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n // Show the actual popup\n if (is.element(popup)) {\n toggleHidden(popup, !show);\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n // Focus the first item if key interaction\n if (show && is.event(input) && input.type === 'keydown') {\n const pane = Object.values(this.elements.settings.panels).find(pane => !pane.hidden);\n const firstItem = pane.querySelector('[role^=\"menuitem\"]');\n setFocus.call(this, firstItem, true);\n }\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 = '') {\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 const firstItem = target.querySelector('[role^=\"menuitem\"]');\n setFocus.call(this, firstItem, true);\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (is.empty(this.config.controls)) {\n return null;\n }\n\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 // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n 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 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 id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const popup = createElement('div', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\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);\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(pane, 'keydown', 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');\n }, false);\n\n // Go back via button click\n on(backButton, 'click', () => {\n controls.showMenuPanel.call(this, 'home');\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 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 (is.string(this.config.controls) || is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([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\n if (is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n 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 i18n from './i18n';\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 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 languages = dedupe(\n Array.from(navigator.languages || navigator.language || navigator.userLanguage).map(language => language.split('-')[0]),\n );\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: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [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 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress__buffer',\n loop: '.plyr__progress__loop', // Used later\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n caption: '.plyr__caption',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n 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// ==========================================================================\n\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 // 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 if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Load image avoiding xhr/fetch CORS issues\n// Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded\n// By default it checks if it is at least 1px, but you can add a second argument to change this\n// ==========================================================================\n\nexport default function loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n\n Object.assign(image, { onload: handler, onerror: handler, src });\n });\n}\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\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 browser from './utils/browser';\nimport {\n getElement,\n getElements,\n matches,\n toggleClass,\n toggleHidden,\n} 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 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 this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // 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 } = this.player.config.selectors;\n const { seek } = this.player.elements.inputs;\n\n if (focused !== seek && matches(focused, editable)) {\n return;\n }\n\n if (\n event.which === 32 &&\n matches(focused, 'button, [role^=\"menuitem\"]')\n ) {\n return;\n }\n }\n\n // Which keycodes should we prevent default\n const preventDefault = [\n 32,\n 37,\n 38,\n 39,\n 40,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 67,\n 70,\n 73,\n 75,\n 76,\n 77,\n 79,\n ];\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (\n !this.player.fullscreen.enabled &&\n this.player.fullscreen.active &&\n code === 27\n ) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n toggleClass(\n this.player.elements.container,\n this.player.config.classNames.isTouch,\n true,\n );\n }\n\n setTabFocus(event) {\n clearTimeout(this.focusTimer);\n\n // Ignore any key other than tab\n if (event.type === 'keydown' && event.code !== 'Tab') {\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 = this.player.config.classNames.tabFocus;\n const current = getElements.call(this.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\n this.focusTimer = setTimeout(() => {\n const focused = document.activeElement;\n\n // Ignore if current focus element isn't inside the player\n if (!this.player.elements.container.contains(focused)) {\n return;\n }\n\n toggleClass(\n document.activeElement,\n this.player.config.classNames.tabFocus,\n true,\n );\n }, 10);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n toggleListener.call(\n this.player,\n window,\n 'keydown keyup',\n this.handleKey,\n toggle,\n false,\n );\n }\n\n // Click anywhere closes menu\n toggleListener.call(\n this.player,\n document.body,\n 'click',\n this.toggleMenu,\n toggle,\n );\n\n // Detect touch by events\n once.call(this.player, document.body, 'touchstart', this.firstTouch);\n\n // Tab focus detection\n toggleListener.call(\n this.player,\n document.body,\n 'keydown focus blur',\n this.setTabFocus,\n toggle,\n false,\n true,\n );\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (\n !this.player.config.keyboard.global &&\n this.player.config.keyboard.focused\n ) {\n on.call(\n this.player,\n this.player.elements.container,\n 'keydown keyup',\n this.handleKey,\n false,\n );\n }\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n this.player,\n this.player.elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = ['touchstart', 'touchmove', 'mousemove'].includes(\n event.type,\n );\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n\n // Set new timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(\n () => ui.toggleControls.call(this.player, false),\n delay,\n );\n },\n );\n }\n\n // Listen for media events\n media() {\n // Time change on media\n on.call(\n this.player,\n this.player.media,\n 'timeupdate seeking seeked',\n event => controls.timeUpdate.call(this.player, event),\n );\n\n // Display duration\n on.call(\n this.player,\n this.player.media,\n 'durationchange loadeddata loadedmetadata',\n event => controls.durationUpdate.call(this.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(this.player, this.player.media, 'canplay', () => {\n toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n toggleHidden(\n this.player.elements.buttons.mute,\n !this.player.hasAudio,\n );\n });\n\n // Handle the media finishing\n on.call(this.player, this.player.media, 'ended', () => {\n // Show poster on end\n if (\n this.player.isHTML5 &&\n this.player.isVideo &&\n this.player.config.resetOnEnd\n ) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n on.call(\n this.player,\n this.player.media,\n 'progress playing seeking seeked',\n event => controls.updateProgress.call(this.player, event),\n );\n\n // Handle volume changes\n on.call(this.player, this.player.media, 'volumechange', event =>\n controls.updateVolume.call(this.player, event),\n );\n\n // Handle play/pause\n on.call(\n this.player,\n this.player.media,\n 'playing play pause ended emptied timeupdate',\n event => ui.checkPlaying.call(this.player, event),\n );\n\n // Loading state\n on.call(\n this.player,\n this.player.media,\n 'waiting canplay seeked playing',\n event => ui.checkLoading.call(this.player, event),\n );\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(this.player, this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise\n .then(() => this.player.ads.play())\n .catch(() => this.player.play());\n }\n });\n\n // Click video\n if (\n this.player.supported.ui &&\n this.player.config.clickToPlay &&\n !this.player.isAudio\n ) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(\n this.player,\n `.${this.player.config.classNames.video}`,\n );\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(this.player, wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (\n this.player.config.hideControls &&\n this.player.touch &&\n !this.player.paused\n ) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n on.call(\n this.player,\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n on.call(this.player, this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({\n volume: this.player.volume,\n muted: this.player.muted,\n });\n });\n\n // Speed change\n on.call(this.player, this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n on.call(this.player, this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n on.call(this.player, this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(\n this.player,\n 'quality',\n null,\n event.detail.quality,\n );\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = this.player.config.events\n .concat(['keyup', 'keydown'])\n .join(' ');\n\n on.call(this.player, this.player.media, proxyEvents, event => {\n let { detail = {} } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n triggerEvent.call(\n this.player,\n this.player.elements.container,\n event.type,\n true,\n detail,\n );\n });\n }\n\n // Run default and custom handlers\n proxy(event, defaultHandler, customHandlerKey) {\n const customHandler = this.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(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n }\n\n // Trigger custom and default handlers\n bind(element, type, defaultHandler, customHandlerKey, passive = true) {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n\n on.call(\n this.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 // 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 (this.player.elements.buttons.play) {\n Array.from(this.player.elements.buttons.play).forEach(button => {\n this.bind(button, 'click', this.player.togglePlay, 'play');\n });\n }\n\n // Pause\n this.bind(\n this.player.elements.buttons.restart,\n 'click',\n this.player.restart,\n 'restart',\n );\n\n // Rewind\n this.bind(\n this.player.elements.buttons.rewind,\n 'click',\n this.player.rewind,\n 'rewind',\n );\n\n // Rewind\n this.bind(\n this.player.elements.buttons.fastForward,\n 'click',\n this.player.forward,\n 'fastForward',\n );\n\n // Mute toggle\n this.bind(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n this.bind(this.player.elements.buttons.captions, 'click', () =>\n this.player.toggleCaptions(),\n );\n\n // Fullscreen toggle\n this.bind(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n this.bind(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n this.bind(\n this.player.elements.buttons.airplay,\n 'click',\n this.player.airplay,\n 'airplay',\n );\n\n // Settings menu - click toggle\n this.bind(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu - keyboard toggle\n this.bind(\n this.player.elements.buttons.settings,\n 'keydown',\n event => {\n // We only care about space\n if (event.which !== 32) {\n return;\n }\n\n // Prevent scroll\n event.preventDefault();\n\n // Prevent playing video\n event.stopPropagation();\n\n // Toggle menu\n controls.toggleMenu.call(this.player, event);\n },\n null,\n false,\n );\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n this.bind(\n this.player.elements.inputs.seek,\n 'mousedown mousemove',\n event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent =\n 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n },\n );\n\n // Pause while seeking\n this.bind(\n this.player.elements.inputs.seek,\n 'mousedown mouseup keydown keyup touchstart touchend',\n event => {\n const seek = event.currentTarget;\n\n const code = event.keyCode ? event.keyCode : event.which;\n const eventType = event.type;\n\n if (\n (eventType === 'keydown' || eventType === 'keyup') &&\n (code !== 39 && code !== 37)\n ) {\n return;\n }\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\n\n // Done seeking\n const done = ['mouseup', 'touchend', 'keyup'].includes(\n event.type,\n );\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n },\n );\n\n // Seek\n this.bind(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n this.player.currentTime =\n seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (\n this.player.config.toggleInvert &&\n !is.element(this.player.elements.display.duration)\n ) {\n this.bind(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n this.bind(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n Array.from(\n getElements.call(this.player, 'input[type=\"range\"]'),\n ).forEach(element => {\n this.bind(element, 'input', event =>\n controls.updateRangeFill.call(this.player, event.target),\n );\n });\n }\n\n // Seek tooltip\n this.bind(\n this.player.elements.progress,\n 'mouseenter mouseleave mousemove',\n event => controls.updateSeekTooltip.call(this.player, event),\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(\n this.player.elements.controls,\n 'mouseenter mouseleave',\n event => {\n this.player.elements.controls.hover =\n !this.player.touch && event.type === 'mouseenter';\n },\n );\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(\n this.player.elements.controls,\n 'mousedown mouseup touchstart touchend touchcancel',\n event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n },\n );\n\n // Focus in/out on controls\n this.bind(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(\n elements.controls,\n config.classNames.noTransition,\n event.type === 'focusin',\n );\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\n // Restore transition\n setTimeout(() => {\n toggleClass(\n elements.controls,\n config.classNames.noTransition,\n false,\n );\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(\n () => ui.toggleControls.call(this.player, false),\n delay,\n );\n }\n });\n\n // Mouse wheel for volume\n this.bind(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n\n // Get delta from event. Invert if `inverted` is true\n const [x, y] = [event.deltaX, -event.deltaY].map(\n value => (inverted ? -value : value),\n );\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 this.player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const { volume } = this.player.media;\n if (\n (direction === 1 && volume < 1) ||\n (direction === -1 && volume > 0)\n ) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n}\n\nexport default Listeners;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Load an external script\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nexport default function loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n}\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from '../captions';\nimport controls from '../controls';\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { format, stripHTML } from '../utils/strings';\nimport { buildUrlParams } from '../utils/urls';\n\n// Parse Vimeo ID from URL\nfunction parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n\n if (is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n}\n\n// Get aspect ratio for dimensions\nfunction getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!is.object(window.Vimeo)) {\n loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const [x, y] = (is.string(input) ? input : this.config.ratio).split(':');\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 controls from '../controls';\nimport ui from '../ui';\nimport { dedupe } from '../utils/arrays';\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// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n const qualities = {\n hd2160: 2160,\n hd1440: 1440,\n hd1080: 1080,\n hd720: 720,\n large: 480,\n medium: 360,\n small: 240,\n tiny: 144,\n };\n\n const entry = Object.entries(qualities).find(entry => entry.includes(input));\n\n if (entry) {\n // Get the match corresponding to the input\n return entry.find(value => value !== input);\n }\n\n return 'default';\n}\n\nfunction mapQualityUnits(levels) {\n if (is.empty(levels)) {\n return levels;\n }\n\n return dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n 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 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 onPlaybackQualityChange() {\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n triggerEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // If paused 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 // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n instance.setPlaybackQuality(mapQualityUnit(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 // Get quality\n controls.setQualityMenu.call(\n player,\n mapQualityUnits(instance.getAvailableQualityLevels()),\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 i18n from '../i18n';\nimport { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\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 // 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 // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n 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.3.22\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.searchParams.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 } 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')) {\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 this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n\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 // Trigger request event\n triggerEvent.call(this, this.media, 'qualityrequested', false, { quality });\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 // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n triggerEvent.call(this, this.media, eventName);\n }\n return !hiding;\n }\n return false;\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n 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.3.22\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport 'babel-polyfill';\nimport 'custom-event-polyfill';\nimport 'url-polyfill';\nimport Plyr from './plyr';\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["node_modules/core-js/modules/_global.js","node_modules/core-js/modules/_core.js","node_modules/core-js/modules/_is-object.js","node_modules/core-js/modules/_an-object.js","node_modules/core-js/modules/_fails.js","node_modules/core-js/modules/_descriptors.js","node_modules/core-js/modules/_dom-create.js","node_modules/core-js/modules/_ie8-dom-define.js","node_modules/core-js/modules/_to-primitive.js","node_modules/core-js/modules/_object-dp.js","node_modules/core-js/modules/_property-desc.js","node_modules/core-js/modules/_hide.js","node_modules/core-js/modules/_has.js","node_modules/core-js/modules/_uid.js","node_modules/core-js/modules/_redefine.js","node_modules/core-js/modules/_a-function.js","node_modules/core-js/modules/_ctx.js","node_modules/core-js/modules/_export.js","node_modules/core-js/modules/_typed.js","node_modules/core-js/modules/_library.js","node_modules/core-js/modules/_redefine-all.js","node_modules/core-js/modules/_an-instance.js","node_modules/core-js/modules/_to-integer.js","node_modules/core-js/modules/_to-length.js","node_modules/core-js/modules/_to-index.js","node_modules/core-js/modules/_cof.js","node_modules/core-js/modules/_iobject.js","node_modules/core-js/modules/_defined.js","node_modules/core-js/modules/_to-iobject.js","node_modules/core-js/modules/_to-absolute-index.js","node_modules/core-js/modules/_array-includes.js","node_modules/core-js/modules/_shared.js","node_modules/core-js/modules/_shared-key.js","node_modules/core-js/modules/_object-keys-internal.js","node_modules/core-js/modules/_enum-bug-keys.js","node_modules/core-js/modules/_object-gopn.js","node_modules/core-js/modules/_to-object.js","node_modules/core-js/modules/_array-fill.js","node_modules/core-js/modules/_wks.js","node_modules/core-js/modules/_set-to-string-tag.js","node_modules/core-js/modules/_typed-buffer.js","node_modules/core-js/modules/_species-constructor.js","node_modules/core-js/modules/_set-species.js","node_modules/core-js/modules/es6.typed.array-buffer.js","node_modules/core-js/modules/_classof.js","node_modules/core-js/modules/_iterators.js","node_modules/core-js/modules/_is-array-iter.js","node_modules/core-js/modules/_object-keys.js","node_modules/core-js/modules/_object-dps.js","node_modules/core-js/modules/_html.js","node_modules/core-js/modules/_object-create.js","node_modules/core-js/modules/_object-gpo.js","node_modules/core-js/modules/core.get-iterator-method.js","node_modules/core-js/modules/_is-array.js","node_modules/core-js/modules/_array-species-constructor.js","node_modules/core-js/modules/_array-species-create.js","node_modules/core-js/modules/_array-methods.js","node_modules/core-js/modules/_add-to-unscopables.js","node_modules/core-js/modules/_iter-step.js","node_modules/core-js/modules/_iter-create.js","node_modules/core-js/modules/_iter-define.js","node_modules/core-js/modules/es6.array.iterator.js","node_modules/core-js/modules/_iter-detect.js","node_modules/core-js/modules/_array-copy-within.js","node_modules/core-js/modules/_object-pie.js","node_modules/core-js/modules/_object-gopd.js","node_modules/core-js/modules/_typed-array.js","node_modules/core-js/modules/es6.typed.int8-array.js","node_modules/core-js/modules/es6.typed.uint8-array.js","node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","node_modules/core-js/modules/es6.typed.int16-array.js","node_modules/core-js/modules/es6.typed.uint16-array.js","node_modules/core-js/modules/es6.typed.int32-array.js","node_modules/core-js/modules/es6.typed.uint32-array.js","node_modules/core-js/modules/es6.typed.float32-array.js","node_modules/core-js/modules/es6.typed.float64-array.js","node_modules/core-js/modules/_iter-call.js","node_modules/core-js/modules/_for-of.js","node_modules/core-js/modules/_meta.js","node_modules/core-js/modules/_validate-collection.js","node_modules/core-js/modules/_collection-strong.js","node_modules/core-js/modules/_set-proto.js","node_modules/core-js/modules/_inherit-if-required.js","node_modules/core-js/modules/_collection.js","node_modules/core-js/modules/es6.map.js","node_modules/core-js/modules/es6.set.js","node_modules/core-js/modules/_object-gops.js","node_modules/core-js/modules/_object-assign.js","node_modules/core-js/modules/_collection-weak.js","node_modules/core-js/modules/es6.weak-map.js","node_modules/core-js/modules/es6.weak-set.js","node_modules/core-js/modules/es6.reflect.apply.js","node_modules/core-js/modules/_invoke.js","node_modules/core-js/modules/_bind.js","node_modules/core-js/modules/es6.reflect.construct.js","node_modules/core-js/modules/es6.reflect.define-property.js","node_modules/core-js/modules/es6.reflect.delete-property.js","node_modules/core-js/modules/es6.reflect.get.js","node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","node_modules/core-js/modules/es6.reflect.get-prototype-of.js","node_modules/core-js/modules/es6.reflect.has.js","node_modules/core-js/modules/es6.reflect.is-extensible.js","node_modules/core-js/modules/_own-keys.js","node_modules/core-js/modules/es6.reflect.own-keys.js","node_modules/core-js/modules/es6.reflect.prevent-extensions.js","node_modules/core-js/modules/es6.reflect.set.js","node_modules/core-js/modules/es6.reflect.set-prototype-of.js","node_modules/core-js/modules/_task.js","node_modules/core-js/modules/_microtask.js","node_modules/core-js/modules/_new-promise-capability.js","node_modules/core-js/modules/_perform.js","node_modules/core-js/modules/_promise-resolve.js","node_modules/core-js/modules/es6.promise.js","node_modules/core-js/modules/_wks-ext.js","node_modules/core-js/modules/_wks-define.js","node_modules/core-js/modules/_enum-keys.js","node_modules/core-js/modules/_object-gopn-ext.js","node_modules/core-js/modules/es6.symbol.js","node_modules/core-js/modules/_object-sap.js","node_modules/core-js/modules/es6.object.freeze.js","node_modules/core-js/modules/es6.object.seal.js","node_modules/core-js/modules/es6.object.prevent-extensions.js","node_modules/core-js/modules/es6.object.is-frozen.js","node_modules/core-js/modules/es6.object.is-sealed.js","node_modules/core-js/modules/es6.object.is-extensible.js","node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","node_modules/core-js/modules/es6.object.get-prototype-of.js","node_modules/core-js/modules/es6.object.keys.js","node_modules/core-js/modules/es6.object.get-own-property-names.js","node_modules/core-js/modules/es6.object.assign.js","node_modules/core-js/modules/_same-value.js","node_modules/core-js/modules/es6.object.is.js","node_modules/core-js/modules/es6.function.name.js","node_modules/core-js/modules/es6.string.raw.js","node_modules/core-js/modules/es6.string.from-code-point.js","node_modules/core-js/modules/_string-at.js","node_modules/core-js/modules/es6.string.code-point-at.js","node_modules/core-js/modules/_string-repeat.js","node_modules/core-js/modules/es6.string.repeat.js","node_modules/core-js/modules/_is-regexp.js","node_modules/core-js/modules/_string-context.js","node_modules/core-js/modules/_fails-is-regexp.js","node_modules/core-js/modules/es6.string.starts-with.js","node_modules/core-js/modules/es6.string.ends-with.js","node_modules/core-js/modules/es6.string.includes.js","node_modules/core-js/modules/_flags.js","node_modules/core-js/modules/es6.regexp.flags.js","node_modules/core-js/modules/_fix-re-wks.js","node_modules/core-js/modules/es6.regexp.match.js","node_modules/core-js/modules/es6.regexp.replace.js","node_modules/core-js/modules/es6.regexp.split.js","node_modules/core-js/modules/es6.regexp.search.js","node_modules/core-js/modules/_create-property.js","node_modules/core-js/modules/es6.array.from.js","node_modules/core-js/modules/es6.array.of.js","node_modules/core-js/modules/es6.array.copy-within.js","node_modules/core-js/modules/es6.array.find.js","node_modules/core-js/modules/es6.array.find-index.js","node_modules/core-js/modules/es6.array.fill.js","node_modules/core-js/modules/es6.number.is-finite.js","node_modules/core-js/modules/_is-integer.js","node_modules/core-js/modules/es6.number.is-integer.js","node_modules/core-js/modules/es6.number.is-safe-integer.js","node_modules/core-js/modules/es6.number.is-nan.js","node_modules/core-js/modules/es6.number.epsilon.js","node_modules/core-js/modules/es6.number.min-safe-integer.js","node_modules/core-js/modules/es6.number.max-safe-integer.js","node_modules/core-js/modules/_math-log1p.js","node_modules/core-js/modules/es6.math.acosh.js","node_modules/core-js/modules/es6.math.asinh.js","node_modules/core-js/modules/es6.math.atanh.js","node_modules/core-js/modules/_math-sign.js","node_modules/core-js/modules/es6.math.cbrt.js","node_modules/core-js/modules/es6.math.clz32.js","node_modules/core-js/modules/es6.math.cosh.js","node_modules/core-js/modules/_math-expm1.js","node_modules/core-js/modules/es6.math.expm1.js","node_modules/core-js/modules/_math-fround.js","node_modules/core-js/modules/es6.math.fround.js","node_modules/core-js/modules/es6.math.hypot.js","node_modules/core-js/modules/es6.math.imul.js","node_modules/core-js/modules/es6.math.log1p.js","node_modules/core-js/modules/es6.math.log10.js","node_modules/core-js/modules/es6.math.log2.js","node_modules/core-js/modules/es6.math.sign.js","node_modules/core-js/modules/es6.math.sinh.js","node_modules/core-js/modules/es6.math.tanh.js","node_modules/core-js/modules/es6.math.trunc.js","node_modules/core-js/modules/es7.array.includes.js","node_modules/core-js/modules/_object-to-array.js","node_modules/core-js/modules/es7.object.values.js","node_modules/core-js/modules/es7.object.entries.js","node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","node_modules/core-js/modules/_string-pad.js","node_modules/core-js/modules/_user-agent.js","node_modules/core-js/modules/es7.string.pad-start.js","node_modules/core-js/modules/es7.string.pad-end.js","node_modules/core-js/modules/web.timers.js","node_modules/core-js/modules/web.immediate.js","node_modules/core-js/modules/web.dom.iterable.js","node_modules/regenerator-runtime/runtime.js","node_modules/custom-event-polyfill/custom-event-polyfill.js","node_modules/url-polyfill/url-polyfill.js","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/objects.js","src/js/utils/strings.js","src/js/i18n.js","src/js/utils/arrays.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","src/js/utils/loadImage.js","src/js/ui.js","src/js/listeners.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils/loadScript.js","src/js/plugins/vimeo.js","src/js/plugins/youtube.js","src/js/media.js","src/js/plugins/ads.js","src/js/source.js","src/js/plyr.js","src/js/plyr.polyfilled.js"],"names":["isObject","require$$0","document","require$$1","require$$2","anObject","toPrimitive","IE8_DOM_DEFINE","dP","createDesc","has","hide","global","aFunction","core","ctx","redefine","uid","toInteger","toLength","cof","IObject","defined","min","toIObject","toAbsoluteIndex","$keys","toObject","DESCRIPTORS","toIndex","$typed","anInstance","arrayFill","redefineAll","fails","setToStringTag","SPECIES","buffer","VIEW","$export","speciesConstructor","TAG","Iterators","enumBugKeys","getKeys","IE_PROTO","PROTOTYPE","dPs","ITERATOR","classof","isArray","asc","ArrayProto","create","descriptor","$iterCreate","getPrototypeOf","step","addToUnscopables","pIE","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","require$$27","require$$28","require$$29","require$$30","require$$31","require$$32","require$$33","require$$34","require$$35","require$$36","require$$37","require$$38","getIterFn","isArrayIter","call","forOf","validate","$iterDefine","setSpecies","meta","$iterDetect","inheritIfRequired","strong","gOPS","createArrayMethod","id","$has","weak","assign","invoke","bind","gOPD","getProto","Reflect","gOPN","setProto","cel","html","process","Promise","newPromiseCapability","TypeError","isNode","newPromiseCapabilityModule","perform","promiseResolve","LIBRARY","wksExt","toString","$GOPD","$DP","gOPNExt","wks","shared","ObjectProto","USE_NATIVE","$fails","_create","enumKeys","wksDefine","$getOwnPropertyDescriptor","$getPrototypeOf","isRegExp","MATCH","context","$defineProperty","createProperty","$find","KEY","forced","floor","isInteger","log1p","sign","$expm1","abs","exp","expm1","isEnum","ownKeys","repeat","navigator","userAgent","$pad","wrap","$task","i","NAME","$iterators","this","CustomEvent","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","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","cue","track","url","empty","supportsPassiveListeners","supported","options","defineProperty","get","addEventListener","removeEventListener","toggleListener","callback","toggle","passive","capture","is","events","split","forEach","eventListeners","push","type","on","off","once","onceCallback","args","apply","triggerEvent","bubbles","detail","plyr","dispatchEvent","unbindListeners","item","ready","setTimeout","resolve","elements","container","then","wrapper","targets","from","reverse","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","insertBefore","setAttributes","attributes","entries","filter","value","key","setAttribute","createElement","text","innerText","insertAfter","target","insertElement","removeElement","removeChild","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","selector","s","trim","className","replace","stripped","parts","start","charAt","class","toggleHidden","hidden","hasAttribute","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","cancelRequests","blankVideo","debug","log","cloneDeep","JSON","parse","stringify","getDeep","path","reduce","obj","shift","generateId","prefix","Math","random","format","getPercentage","current","max","toFixed","replaceAll","RegExp","toTitleCase","toUpperCase","substr","toLowerCase","toPascalCase","toCamelCase","slice","stripHTML","fragment","createDocumentFragment","innerHTML","firstChild","getHTML","i18n","seekTime","title","dedupe","indexOf","closest","prev","curr","Storage","enabled","storage","store","localStorage","getItem","json","setItem","removeItem","fetch","responseType","reject","request","XMLHttpRequest","responseText","response","Error","status","open","send","loadSprite","hasId","isCached","exists","getElementById","update","data","body","insertAdjacentElement","useStorage","cached","content","result","catch","getHours","parseInt","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","iconUrl","location","cors","host","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","display","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","controlPressed","enumerable","pressed","createRange","autocomplete","updateRangeFill","createProgress","suffixKey","played","suffix","createTime","bindMenuItemShortcuts","menuItem","which","stopPropagation","isRadioButton","showMenuPanel","nextElementSibling","firstElementChild","previousElementSibling","lastElementChild","createMenuItem","list","checked","flex","children","node","listeners","currentTrack","speed","parseFloat","forceHours","updateTimeDisplay","updateVolume","setRange","muted","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","toggleMenu","popup","show","isMenuItem","isButton","firstItem","getMenuSize","tab","clone","position","opacity","scrollWidth","height","scrollHeight","size","restore","propertyName","inner","home","backButton","inject","props","seektime","insertAdjacentHTML","labels","parseUrl","safe","parser","href","buildUrlParams","params","URLSearchParams","setup","isVideo","isYouTube","protocol","createObjectURL","blob","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","Fullscreen","property","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","altKey","ctrlKey","metaKey","seekByKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","timeStamp","removeCurrent","wasKeyDown","delay","hasAudio","initialized","managerPromise","isAudio","controlsHidden","ended","proxyEvents","concat","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","proxy","inputEvent","currentTarget","eventType","attribute","done","seekTo","isFocusIn","webkitDirectionInvertedFromDevice","deltaX","deltaY","direction","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","mapQualityUnit","qualities","hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","entry","mapQualityUnits","levels","level","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","items","snippet","currentId","posterSrc","playerVars","rel","showinfo","iv_load_policy","modestbranding","disablekb","widget_referrer","cc_load_policy","cc_lang_pref","onError","message","onPlaybackQualityChange","onPlaybackRateChange","instance","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","onStateChange","seeked","getAvailableQualityLevels","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","searchParams","truthy","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":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","module.exports = false;\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","(function(global) {\r\n /**\r\n * Polyfill URLSearchParams\r\n *\r\n * Inspired from : https://github.com/WebReflection/url-search-params/blob/master/src/url-search-params.js\r\n */\r\n\r\n var checkIfIteratorIsSupported = function() {\r\n try {\r\n return !!Symbol.iterator;\r\n } catch(error) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var iteratorSupported = checkIfIteratorIsSupported();\r\n\r\n var createIterator = function(items) {\r\n var iterator = {\r\n next: function() {\r\n var value = items.shift();\r\n return { done: value === void 0, value: value };\r\n }\r\n };\r\n\r\n if(iteratorSupported) {\r\n iterator[Symbol.iterator] = function() {\r\n return iterator;\r\n };\r\n }\r\n\r\n return iterator;\r\n };\r\n\r\n /**\r\n * Search param name and values should be encoded according to https://url.spec.whatwg.org/#urlencoded-serializing\r\n * encodeURIComponent() produces the same result except encoding spaces as `%20` instead of `+`.\r\n */\r\n var serializeParam = function(value) {\r\n return encodeURIComponent(value).replace(/%20/g, '+');\r\n };\r\n\r\n var deserializeParam = function(value) {\r\n return decodeURIComponent(value).replace(/\\+/g, ' ');\r\n };\r\n\r\n var polyfillURLSearchParams= function() {\r\n\r\n var URLSearchParams = function(searchString) {\r\n Object.defineProperty(this, '_entries', { value: {} });\r\n\r\n if(typeof searchString === 'string') {\r\n if(searchString !== '') {\r\n searchString = searchString.replace(/^\\?/, '');\r\n var attributes = searchString.split('&');\r\n var attribute;\r\n for(var i = 0; i < attributes.length; i++) {\r\n attribute = attributes[i].split('=');\r\n this.append(\r\n deserializeParam(attribute[0]),\r\n (attribute.length > 1) ? deserializeParam(attribute[1]) : ''\r\n );\r\n }\r\n }\r\n } else if(searchString instanceof URLSearchParams) {\r\n var _this = this;\r\n searchString.forEach(function(value, name) {\r\n _this.append(value, name);\r\n });\r\n }\r\n };\r\n\r\n var proto = URLSearchParams.prototype;\r\n\r\n proto.append = function(name, value) {\r\n if(name in this._entries) {\r\n this._entries[name].push(value.toString());\r\n } else {\r\n this._entries[name] = [value.toString()];\r\n }\r\n };\r\n\r\n proto.delete = function(name) {\r\n delete this._entries[name];\r\n };\r\n\r\n proto.get = function(name) {\r\n return (name in this._entries) ? this._entries[name][0] : null;\r\n };\r\n\r\n proto.getAll = function(name) {\r\n return (name in this._entries) ? this._entries[name].slice(0) : [];\r\n };\r\n\r\n proto.has = function(name) {\r\n return (name in this._entries);\r\n };\r\n\r\n proto.set = function(name, value) {\r\n this._entries[name] = [value.toString()];\r\n };\r\n\r\n proto.forEach = function(callback, thisArg) {\r\n var entries;\r\n for(var name in this._entries) {\r\n if(this._entries.hasOwnProperty(name)) {\r\n entries = this._entries[name];\r\n for(var i = 0; i < entries.length; i++) {\r\n callback.call(thisArg, entries[i], name, this);\r\n }\r\n }\r\n }\r\n };\r\n\r\n proto.keys = function() {\r\n var items = [];\r\n this.forEach(function(value, name) { items.push(name); });\r\n return createIterator(items);\r\n };\r\n\r\n proto.values = function() {\r\n var items = [];\r\n this.forEach(function(value) { items.push(value); });\r\n return createIterator(items);\r\n };\r\n\r\n proto.entries = function() {\r\n var items = [];\r\n this.forEach(function(value, name) { items.push([name, value]); });\r\n return createIterator(items);\r\n };\r\n\r\n if(iteratorSupported) {\r\n proto[Symbol.iterator] = proto.entries;\r\n }\r\n\r\n proto.toString = function() {\r\n var searchString = '';\r\n this.forEach(function(value, name) {\r\n if(searchString.length > 0) searchString+= '&';\r\n searchString += serializeParam(name) + '=' + serializeParam(value);\r\n });\r\n return searchString;\r\n };\r\n\r\n global.URLSearchParams = URLSearchParams;\r\n };\r\n\r\n if(!('URLSearchParams' in global) || (new URLSearchParams('?a=1').toString() !== 'a=1')) {\r\n polyfillURLSearchParams();\r\n }\r\n\r\n // HTMLAnchorElement\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n\r\n(function(global) {\r\n /**\r\n * Polyfill URL\r\n *\r\n * Inspired from : https://github.com/arv/DOM-URL-Polyfill/blob/master/src/url.js\r\n */\r\n\r\n var checkIfURLIsSupported = function() {\r\n try {\r\n var u = new URL('b', 'http://a');\r\n u.pathname = 'c%20d';\r\n return (u.href === 'http://a/c%20d') && u.searchParams;\r\n } catch(e) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var polyfillURL = function() {\r\n var _URL = global.URL;\r\n\r\n var URL = function(url, base) {\r\n if(typeof url !== 'string') url = String(url);\r\n\r\n var doc = document.implementation.createHTMLDocument('');\r\n window.doc = doc;\r\n if(base) {\r\n var baseElement = doc.createElement('base');\r\n baseElement.href = base;\r\n doc.head.appendChild(baseElement);\r\n }\r\n\r\n var anchorElement = doc.createElement('a');\r\n anchorElement.href = url;\r\n doc.body.appendChild(anchorElement);\r\n anchorElement.href = anchorElement.href; // force href to refresh\r\n\r\n if(anchorElement.protocol === ':' || !/:/.test(anchorElement.href)) {\r\n throw new TypeError('Invalid URL');\r\n }\r\n\r\n Object.defineProperty(this, '_anchorElement', {\r\n value: anchorElement\r\n });\r\n };\r\n\r\n var proto = URL.prototype;\r\n\r\n var linkURLWithAnchorAttribute = function(attributeName) {\r\n Object.defineProperty(proto, attributeName, {\r\n get: function() {\r\n return this._anchorElement[attributeName];\r\n },\r\n set: function(value) {\r\n this._anchorElement[attributeName] = value;\r\n },\r\n enumerable: true\r\n });\r\n };\r\n\r\n ['hash', 'host', 'hostname', 'port', 'protocol', 'search']\r\n .forEach(function(attributeName) {\r\n linkURLWithAnchorAttribute(attributeName);\r\n });\r\n\r\n Object.defineProperties(proto, {\r\n\r\n 'toString': {\r\n get: function() {\r\n var _this = this;\r\n return function() {\r\n return _this.href;\r\n };\r\n }\r\n },\r\n\r\n 'href' : {\r\n get: function() {\r\n return this._anchorElement.href.replace(/\\?$/,'');\r\n },\r\n set: function(value) {\r\n this._anchorElement.href = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'pathname' : {\r\n get: function() {\r\n return this._anchorElement.pathname.replace(/(^\\/?)/,'/');\r\n },\r\n set: function(value) {\r\n this._anchorElement.pathname = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'origin': {\r\n get: function() {\r\n // get expected port from protocol\r\n var expectedPort = {'http:': 80, 'https:': 443, 'ftp:': 21}[this._anchorElement.protocol];\r\n // add port to origin if, expected port is different than actual port\r\n // and it is not empty f.e http://foo:8080\r\n // 8080 != 80 && 8080 != ''\r\n var addPortToOrigin = this._anchorElement.port != expectedPort &&\r\n this._anchorElement.port !== ''\r\n\r\n return this._anchorElement.protocol +\r\n '//' +\r\n this._anchorElement.hostname +\r\n (addPortToOrigin ? (':' + this._anchorElement.port) : '');\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'password': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'username': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'searchParams': {\r\n get: function() {\r\n var searchParams = new URLSearchParams(this.search);\r\n var _this = this;\r\n ['append', 'delete', 'set'].forEach(function(methodName) {\r\n var method = searchParams[methodName];\r\n searchParams[methodName] = function() {\r\n method.apply(searchParams, arguments);\r\n _this.search = searchParams.toString();\r\n };\r\n });\r\n return searchParams;\r\n },\r\n enumerable: true\r\n }\r\n });\r\n\r\n URL.createObjectURL = function(blob) {\r\n return _URL.createObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n URL.revokeObjectURL = function(url) {\r\n return _URL.revokeObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n global.URL = URL;\r\n\r\n };\r\n\r\n if(!checkIfURLIsSupported()) {\r\n polyfillURL();\r\n }\r\n\r\n if((global.location !== void 0) && !('origin' in global.location)) {\r\n var getOrigin = function() {\r\n return global.location.protocol + '//' + global.location.hostname + (global.location.port ? (':' + global.location.port) : '');\r\n };\r\n\r\n try {\r\n Object.defineProperty(global.location, 'origin', {\r\n get: getOrigin,\r\n enumerable: true\r\n });\r\n } catch(e) {\r\n setInterval(function() {\r\n global.location.origin = getOrigin();\r\n }, 100);\r\n }\r\n }\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n","// ==========================================================================\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 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 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(\n element,\n event,\n callback,\n toggle = false,\n passive = true,\n capture = false,\n) {\n // Bail if no element, event, or callback\n if (\n !element ||\n !('addEventListener' in element) ||\n is.empty(event) ||\n !is.function(callback)\n ) {\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (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'](\n type,\n callback,\n options,\n );\n });\n}\n\n// Bind event handler\nexport function on(\n element,\n events = '',\n callback,\n passive = true,\n capture = false,\n) {\n toggleListener.call(\n this,\n element,\n events,\n callback,\n true,\n passive,\n capture,\n );\n}\n\n// Unbind event handler\nexport function off(\n element,\n events = '',\n callback,\n passive = true,\n capture = false,\n) {\n toggleListener.call(\n this,\n element,\n events,\n callback,\n false,\n passive,\n capture,\n );\n}\n\n// Bind once-only event handler\nexport function once(\n element,\n events = '',\n callback,\n passive = true,\n capture = false,\n) {\n function onceCallback(...args) {\n off(element, events, onceCallback, passive, capture);\n callback.apply(this, args);\n }\n\n toggleListener.call(\n this,\n element,\n events,\n onceCallback,\n true,\n passive,\n capture,\n );\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 =>\n this.ready\n ? setTimeout(resolve, 0)\n : 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 (\n !is.element(oldChild) ||\n !is.element(oldChild.parentNode) ||\n !is.element(newChild)\n ) {\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.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n}\n\n// Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\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(\n this,\n 'button:not(:disabled), input:not(:disabled), [tabindex]',\n );\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(\n this,\n this.elements.container,\n 'keydown',\n trap,\n toggle,\n false,\n );\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(\n event => element.style[event] !== undefined,\n );\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 =\n browser.isIPhone && playsinline && support.playsinline;\n const api = support[type] || provider !== 'html5';\n const ui =\n api &&\n support.rangeInput &&\n (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: (() =>\n !browser.isIPhone &&\n 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(\n type && this.media.canPlayType(type).replace(/no/, ''),\n );\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:\n 'matchMedia' in window &&\n 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 });\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// Object utils\n// ==========================================================================\n\nimport is from './is';\n\n// Clone nested objects\nexport function cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n}\n\n// Get a nested value in an object\nexport function getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n}\n\n// Deep extend destination object with N more objects\nexport function extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return extend(target, ...sources);\n}\n","// ==========================================================================\n// String utils\n// ==========================================================================\n\nimport is from './is';\n\n// Generate a random ID\nexport function generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n}\n\n// Format string\nexport function format(input, ...args) {\n if (is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => args[i].toString());\n}\n\n// Get percentage\nexport function getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n}\n\n// Replace all occurances of a string in a string\nexport function replaceAll(input = '', find = '', replace = '') {\n return input.replace(\n new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'),\n replace.toString(),\n );\n}\n\n// Convert to title case\nexport function toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n}\n\n// Convert string to pascalCase\nexport function toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = toTitleCase(string);\n\n // Convert to pascal case\n return replaceAll(string, ' ', '');\n}\n\n// Convert string to pascalCase\nexport function toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n// Remove HTML from a string\nexport function stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n}\n\n// Like outerHTML, but also works for DocumentFragment\nexport function getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n}\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport is from './utils/is';\nimport { getDeep } from './utils/objects';\nimport { replaceAll } from './utils/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// 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// 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 i18n from './i18n';\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 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(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n } 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 // Toggle classname when pressed property is set\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 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 bindMenuItemShortcuts(menuItem, type) {\n // Handle space or -> to open menu\n on(menuItem, 'keydown', 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 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 }, false);\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 keydown',\n event => {\n if (event.type === 'keydown' && 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', event.type === 'keydown');\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}%`);\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 // 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 const show = is.boolean(input) ? input : is.element(popup) && popup.hasAttribute('hidden');\n\n if (is.event(input)) {\n const isMenuItem = is.element(popup) && popup.contains(input.target);\n const isButton = input.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n input.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n // Show the actual popup\n if (is.element(popup)) {\n toggleHidden(popup, !show);\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n // Focus the first item if key interaction\n if (show && is.event(input) && input.type === 'keydown') {\n const pane = Object.values(this.elements.settings.panels).find(pane => !pane.hidden);\n const firstItem = pane.querySelector('[role^=\"menuitem\"]');\n setFocus.call(this, firstItem, true);\n }\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 const firstItem = target.querySelector('[role^=\"menuitem\"]');\n setFocus.call(this, firstItem, tabFocus);\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (is.empty(this.config.controls)) {\n return null;\n }\n\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 // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n 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 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 id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const popup = createElement('div', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\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(pane, 'keydown', 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 }, false);\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 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 (is.string(this.config.controls) || is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([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\n if (is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n 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 i18n from './i18n';\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 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 languages = dedupe(\n Array.from(navigator.languages || navigator.language || navigator.userLanguage).map(language => language.split('-')[0]),\n );\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: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [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 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress__buffer',\n loop: '.plyr__progress__loop', // Used later\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n caption: '.plyr__caption',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n 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// ==========================================================================\n\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 // 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 if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Load image avoiding xhr/fetch CORS issues\n// Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded\n// By default it checks if it is at least 1px, but you can add a second argument to change this\n// ==========================================================================\n\nexport default function loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n\n Object.assign(image, { onload: handler, onerror: handler, src });\n });\n}\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\nimport is from './utils/is';\nimport loadImage from './utils/loadImage';\n\nconst ui = {\n addStyleHook() {\n toggleClass(\n this.elements.container,\n this.config.selectors.container.replace('.', ''),\n true,\n );\n toggleClass(\n this.elements.container,\n this.config.classNames.uiSupported,\n this.supported.ui,\n );\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(\n `Basic support only for ${this.provider} ${this.type}`,\n );\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(\n this.elements.container,\n this.config.classNames.airplay.supported,\n support.airplay && this.isHTML5,\n );\n\n // Add iOS class\n toggleClass(\n this.elements.container,\n this.config.classNames.isIos,\n browser.isIos,\n );\n\n // Add touch class\n toggleClass(\n this.elements.container,\n this.config.classNames.isTouch,\n this.touch,\n );\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)\n ? this.config.title\n : '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(\n this.elements.container,\n this.config.classNames.posterEnabled,\n enable,\n );\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(\n 'setPoster cancelled by later call to setPoster',\n );\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(\n this.elements.container,\n this.config.classNames.playing,\n this.playing,\n );\n toggleClass(\n this.elements.container,\n this.config.classNames.paused,\n this.paused,\n );\n toggleClass(\n this.elements.container,\n this.config.classNames.stopped,\n this.stopped,\n );\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(\n this.elements.container,\n this.config.classNames.loading,\n this.loading,\n );\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(\n Boolean(\n force ||\n this.loading ||\n this.paused ||\n controls.pressed ||\n controls.hover,\n ),\n );\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 {\n getElement,\n getElements,\n hasClass,\n matches,\n toggleClass,\n toggleHidden,\n} 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 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 } = player.elements.inputs;\n\n if (focused !== seek && matches(focused, editable)) {\n return;\n }\n\n if (\n event.which === 32 &&\n matches(focused, 'button, [role^=\"menuitem\"]')\n ) {\n return;\n }\n }\n\n // Which keycodes should we prevent default\n const preventDefault = [\n 32,\n 37,\n 38,\n 39,\n 40,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 67,\n 70,\n 73,\n 75,\n 76,\n 77,\n 79,\n ];\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n 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 (\n !player.fullscreen.enabled &&\n player.fullscreen.active &&\n code === 27\n ) {\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\n player.touch = true;\n\n // Add touch class\n toggleClass(\n player.elements.container,\n player.config.classNames.isTouch,\n true,\n );\n }\n\n setTabFocus(event) {\n const { player } = this;\n\n clearTimeout(this.focusTimer);\n\n // Ignore any key other than tab\n if (event.type === 'keydown' && event.code !== 'Tab') {\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 (!player.elements.container.contains(focused)) {\n return;\n }\n\n toggleClass(\n document.activeElement,\n player.config.classNames.tabFocus,\n true,\n );\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(\n player,\n window,\n 'keydown keyup',\n this.handleKey,\n toggle,\n false,\n );\n }\n\n // Click anywhere closes menu\n toggleListener.call(\n player,\n document.body,\n 'click',\n this.toggleMenu,\n toggle,\n );\n\n // Detect touch by events\n once.call(player, document.body, 'touchstart', this.firstTouch);\n\n // Tab focus detection\n toggleListener.call(\n player,\n document.body,\n 'keydown focus blur',\n this.setTabFocus,\n toggle,\n false,\n true,\n );\n }\n\n // Container listeners\n container() {\n const { player } = this;\n\n // Keyboard shortcuts\n if (!player.config.keyboard.global && player.config.keyboard.focused) {\n on.call(\n player,\n player.elements.container,\n 'keydown keyup',\n this.handleKey,\n false,\n );\n }\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n player,\n player.elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = player.elements;\n\n // Remove button states for fullscreen\n if (event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = ['touchstart', 'touchmove', 'mousemove'].includes(\n event.type,\n );\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(\n () => ui.toggleControls.call(player, false),\n delay,\n );\n },\n );\n }\n\n // Listen for media events\n media() {\n const { player } = this;\n\n // Time change on media\n on.call(player, player.media, 'timeupdate seeking seeked', event =>\n controls.timeUpdate.call(player, event),\n );\n\n // Display duration\n on.call(\n player,\n player.media,\n 'durationchange loadeddata loadedmetadata',\n event => 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(player.elements.volume, !player.hasAudio);\n toggleHidden(player.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(\n player,\n player.media,\n 'progress playing seeking seeked',\n event => controls.updateProgress.call(player, event),\n );\n\n // Handle volume changes\n on.call(player, player.media, 'volumechange', event =>\n controls.updateVolume.call(player, event),\n );\n\n // Handle play/pause\n on.call(\n player,\n player.media,\n 'playing play pause ended emptied timeupdate',\n event => ui.checkPlaying.call(player, event),\n );\n\n // Loading state\n on.call(player, player.media, 'waiting canplay seeked playing', event =>\n ui.checkLoading.call(player, event),\n );\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\n .then(() => player.ads.play())\n .catch(() => player.play());\n }\n });\n\n // Click video\n if (\n player.supported.ui &&\n player.config.clickToPlay &&\n !player.isAudio\n ) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(\n player,\n `.${player.config.classNames.video}`,\n );\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, wrapper, 'click', () => {\n const controlsHidden = hasClass(\n player.elements.container,\n this.config.classNames.hideControls,\n );\n\n console.warn('click');\n\n // Touch devices will just show controls (if we're hiding controls)\n if (\n player.config.hideControls &&\n player.touch &&\n controlsHidden\n ) {\n return;\n }\n\n if (player.ended) {\n player.restart();\n player.play();\n } else {\n this.togglePlay();\n }\n });\n }\n\n // Disable right click\n if (player.supported.ui && player.config.disableContextMenu) {\n on.call(\n player,\n player.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 request\n on.call(player, player.media, 'qualityrequested', event => {\n // Save to storage\n player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n on.call(player, player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(\n player,\n 'quality',\n null,\n event.detail.quality,\n );\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = player.config.events\n .concat(['keyup', 'keydown'])\n .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(\n player,\n player.elements.container,\n event.type,\n true,\n detail,\n );\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\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 (player.elements.buttons.play) {\n Array.from(player.elements.buttons.play).forEach(button => {\n this.bind(button, 'click', player.togglePlay, 'play');\n });\n }\n\n // Pause\n this.bind(\n player.elements.buttons.restart,\n 'click',\n player.restart,\n 'restart',\n );\n\n // Rewind\n this.bind(\n player.elements.buttons.rewind,\n 'click',\n player.rewind,\n 'rewind',\n );\n\n // Rewind\n this.bind(\n player.elements.buttons.fastForward,\n 'click',\n player.forward,\n 'fastForward',\n );\n\n // Mute toggle\n this.bind(\n player.elements.buttons.mute,\n 'click',\n () => {\n player.muted = !player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n this.bind(player.elements.buttons.captions, 'click', () =>\n player.toggleCaptions(),\n );\n\n // Fullscreen toggle\n this.bind(\n player.elements.buttons.fullscreen,\n 'click',\n () => {\n player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n this.bind(\n player.elements.buttons.pip,\n 'click',\n () => {\n player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n this.bind(\n player.elements.buttons.airplay,\n 'click',\n player.airplay,\n 'airplay',\n );\n\n // Settings menu - click toggle\n this.bind(player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(player, event);\n });\n\n // Settings menu - keyboard toggle\n this.bind(\n player.elements.buttons.settings,\n 'keydown',\n event => {\n // We only care about space\n if (event.which !== 32) {\n return;\n }\n\n // Prevent scroll\n event.preventDefault();\n\n // Prevent playing video\n event.stopPropagation();\n\n // Toggle menu\n controls.toggleMenu.call(player, event);\n },\n null,\n false,\n );\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n this.bind(player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = player.elements.progress.getBoundingClientRect();\n const percent =\n 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n this.bind(\n player.elements.inputs.seek,\n 'mousedown mouseup keydown keyup touchstart touchend',\n event => {\n const seek = event.currentTarget;\n const code = event.keyCode ? event.keyCode : event.which;\n const eventType = event.type;\n const attribute = 'play-on-seeked';\n\n if (\n (eventType === 'keydown' || eventType === 'keyup') &&\n (code !== 39 && code !== 37)\n ) {\n return;\n }\n // Was playing before?\n const play = seek.hasAttribute(attribute);\n\n // Done seeking\n const done = ['mouseup', 'touchend', 'keyup'].includes(\n event.type,\n );\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\n // Seek\n this.bind(\n player.elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\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 repaint(seek);\n }\n\n player.currentTime = seekTo / seek.max * player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (\n player.config.toggleInvert &&\n !is.element(player.elements.display.duration)\n ) {\n this.bind(player.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 player.elements.inputs.volume,\n inputEvent,\n event => {\n player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n Array.from(getElements.call(player, 'input[type=\"range\"]')).forEach(\n element => {\n this.bind(element, 'input', event =>\n controls.updateRangeFill.call(player, event.target),\n );\n },\n );\n }\n\n // Seek tooltip\n this.bind(\n player.elements.progress,\n 'mouseenter mouseleave mousemove',\n event => controls.updateSeekTooltip.call(player, event),\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(player.elements.controls, 'mouseenter mouseleave', event => {\n player.elements.controls.hover =\n !player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(\n player.elements.controls,\n 'mousedown mouseup touchstart touchend touchcancel',\n event => {\n player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n },\n );\n\n // Focus in/out on controls\n this.bind(player.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(\n elements.controls,\n config.classNames.noTransition,\n isFocusIn,\n );\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(\n elements.controls,\n config.classNames.noTransition,\n false,\n );\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(\n () => ui.toggleControls.call(player, false),\n delay,\n );\n }\n });\n\n // Mouse wheel for volume\n this.bind(\n player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n\n // Get delta from event. Invert if `inverted` is true\n const [x, y] = [event.deltaX, -event.deltaY].map(\n value => (inverted ? -value : value),\n );\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 (\n (direction === 1 && volume < 1) ||\n (direction === -1 && volume > 0)\n ) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n}\n\nexport default Listeners;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Load an external script\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nexport default function loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n}\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from '../captions';\nimport controls from '../controls';\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { format, stripHTML } from '../utils/strings';\nimport { buildUrlParams } from '../utils/urls';\n\n// Parse Vimeo ID from URL\nfunction parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n\n if (is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n}\n\n// Get aspect ratio for dimensions\nfunction getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!is.object(window.Vimeo)) {\n loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const [x, y] = (is.string(input) ? input : this.config.ratio).split(':');\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 controls from '../controls';\nimport ui from '../ui';\nimport { dedupe } from '../utils/arrays';\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// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n const qualities = {\n hd2160: 2160,\n hd1440: 1440,\n hd1080: 1080,\n hd720: 720,\n large: 480,\n medium: 360,\n small: 240,\n tiny: 144,\n };\n\n const entry = Object.entries(qualities).find(entry => entry.includes(input));\n\n if (entry) {\n // Get the match corresponding to the input\n return entry.find(value => value !== input);\n }\n\n return 'default';\n}\n\nfunction mapQualityUnits(levels) {\n if (is.empty(levels)) {\n return levels;\n }\n\n return dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n 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 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 onPlaybackQualityChange() {\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n triggerEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // If paused 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 // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n instance.setPlaybackQuality(mapQualityUnit(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 // Get quality\n controls.setQualityMenu.call(\n player,\n mapQualityUnits(instance.getAvailableQualityLevels()),\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 i18n from '../i18n';\nimport { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\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 // 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 // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n 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.3.22\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 (\n (window.jQuery && this.media instanceof jQuery) ||\n is.nodeList(this.media) ||\n is.array(this.media)\n ) {\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(\n this.media.getAttribute('data-plyr-config'),\n );\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.searchParams.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(\n url.searchParams.get('playsinline'),\n );\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(\n this.config.attributes.embed.provider,\n );\n\n // Remove attribute\n this.media.removeAttribute(\n this.config.attributes.embed.provider,\n );\n }\n\n // Unsupported or missing provider\n if (\n is.empty(this.provider) ||\n !Object.keys(providers).includes(this.provider)\n ) {\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 (\n this.media.hasAttribute('playsinline') ||\n this.media.hasAttribute('webkit-playsinline')\n ) {\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(\n this.type,\n this.provider,\n this.config.playsinline,\n );\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(\n this,\n this.elements.container,\n this.config.events.join(' '),\n event => {\n this.debug.log(`event: ${event.type}`);\n },\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 =\n this.currentTime -\n (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 =\n this.currentTime +\n (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\n ? Math.min(input, this.duration)\n : 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 =\n !is.number(realDuration) || realDuration === Infinity\n ? 0\n : 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(\n `Unsupported quality option: ${quality}, using ${value} instead`,\n );\n quality = value;\n }\n\n // Trigger request event\n triggerEvent.call(this, this.media, 'qualityrequested', false, {\n quality,\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(\n toggle ? states.pip : states.inline,\n );\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n 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(\n this.elements.container,\n this.config.classNames.hideControls,\n );\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(\n this.elements.container,\n this.config.classNames.hideControls,\n force,\n );\n\n // Close menu\n if (\n hiding &&\n this.config.controls.includes('settings') &&\n !is.empty(this.config.settings)\n ) {\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(\n this,\n this.elements.original,\n 'destroyed',\n true,\n );\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.3.22\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport 'babel-polyfill';\nimport 'custom-event-polyfill';\nimport 'url-polyfill';\nimport Plyr from './plyr';\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/dist/plyr.polyfilled.min.js b/dist/plyr.polyfilled.min.js
index 14342afc..c1e82124 100644
--- a/dist/plyr.polyfilled.min.js
+++ b/dist/plyr.polyfilled.min.js
@@ -1,2 +1,2 @@
-"object"==typeof navigator&&function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),i=t(function(e){var t=e.exports={version:"2.5.3"};"number"==typeof __e&&(__e=t)}),r=(i.version,function(e){return"object"==typeof e?null!==e:"function"==typeof e}),o=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e},a=function(e){try{return!!e()}catch(e){return!0}},s=!a(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),l=n.document,c=r(l)&&r(l.createElement),u=function(e){return c?l.createElement(e):{}},h=!s&&!a(function(){return 7!=Object.defineProperty(u("div"),"a",{get:function(){return 7}}).a}),f=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")},d=Object.defineProperty,p={f:s?Object.defineProperty:function(e,t,n){if(o(e),t=f(t,!0),o(n),h)try{return d(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},m=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},g=s?function(e,t,n){return p.f(e,t,m(1,n))}:function(e,t,n){return e[t]=n,e},y={}.hasOwnProperty,v=function(e,t){return y.call(e,t)},b=0,w=Math.random(),k=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++b+w).toString(36))},T=t(function(e){var t=k("src"),r=Function.toString,o=(""+r).split("toString");i.inspectSource=function(e){return r.call(e)},(e.exports=function(e,i,r,a){var s="function"==typeof r;s&&(v(r,"name")||g(r,"name",i)),e[i]!==r&&(s&&(v(r,t)||g(r,t,e[i]?""+e[i]:o.join(String(i)))),e===n?e[i]=r:a?e[i]?e[i]=r:g(e,i,r):(delete e[i],g(e,i,r)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[t]||r.call(this)})}),S=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},E=function(e,t,n){if(S(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,r){return e.call(t,n,i,r)}}return function(){return e.apply(t,arguments)}},_=function(e,t,r){var o,a,s,l,c=e&_.F,u=e&_.G,h=e&_.S,f=e&_.P,d=e&_.B,p=u?n:h?n[t]||(n[t]={}):(n[t]||{}).prototype,m=u?i:i[t]||(i[t]={}),y=m.prototype||(m.prototype={});for(o in u&&(r=t),r)s=((a=!c&&p&&void 0!==p[o])?p:r)[o],l=d&&a?E(s,n):f&&"function"==typeof s?E(Function.call,s):s,p&&T(p,o,s,e&_.U),m[o]!=s&&g(m,o,l),f&&y[o]!=s&&(y[o]=s)};n.core=i,_.F=1,_.G=2,_.S=4,_.P=8,_.B=16,_.W=32,_.U=64,_.R=128;for(var A,P=_,M=k("typed_array"),L=k("view"),C=!(!n.ArrayBuffer||!n.DataView),x=C,O=0,N="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");O<9;)(A=n[N[O++]])?(g(A.prototype,M,!0),g(A.prototype,L,!0)):x=!1;var j={ABV:C,CONSTR:x,TYPED:M,VIEW:L},I=function(e,t,n){for(var i in t)T(e,i,t[i],n);return e},F=function(e,t,n,i){if(!(e instanceof t)||void 0!==i&&i in e)throw TypeError(n+": incorrect invocation!");return e},R=Math.ceil,q=Math.floor,B=function(e){return isNaN(e=+e)?0:(e>0?q:R)(e)},D=Math.min,V=function(e){return e>0?D(B(e),9007199254740991):0},U=function(e){if(void 0===e)return 0;var t=B(e),n=V(t);if(t!==n)throw RangeError("Wrong length!");return n},H={}.toString,W=function(e){return H.call(e).slice(8,-1)},z=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==W(e)?e.split(""):Object(e)},G=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e},K=function(e){return z(G(e))},Y=Math.max,Q=Math.min,J=function(e,t){return(e=B(e))<0?Y(e+t,0):Q(e,t)},$=function(e){return function(t,n,i){var r,o=K(t),a=V(o.length),s=J(i,a);if(e&&n!=n){for(;a>s;)if((r=o[s++])!=r)return!0}else for(;a>s;s++)if((e||s in o)&&o[s]===n)return e||s||0;return!e&&-1}},X=n["__core-js_shared__"]||(n["__core-js_shared__"]={}),Z=function(e){return X[e]||(X[e]={})},ee=Z("keys"),te=function(e){return ee[e]||(ee[e]=k(e))},ne=$(!1),ie=te("IE_PROTO"),re=function(e,t){var n,i=K(e),r=0,o=[];for(n in i)n!=ie&&v(i,n)&&o.push(n);for(;t.length>r;)v(i,n=t[r++])&&(~ne(o,n)||o.push(n));return o},oe="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),ae=oe.concat("length","prototype"),se={f:Object.getOwnPropertyNames||function(e){return re(e,ae)}},le=function(e){return Object(G(e))},ce=function(e){for(var t=le(this),n=V(t.length),i=arguments.length,r=J(i>1?arguments[1]:void 0,n),o=i>2?arguments[2]:void 0,a=void 0===o?n:J(o,n);a>r;)t[r++]=e;return t},ue=t(function(e){var t=Z("wks"),i=n.Symbol,r="function"==typeof i;(e.exports=function(e){return t[e]||(t[e]=r&&i[e]||(r?i:k)("Symbol."+e))}).store=t}),he=p.f,fe=ue("toStringTag"),de=function(e,t,n){e&&!v(e=n?e:e.prototype,fe)&&he(e,fe,{configurable:!0,value:t})},pe=t(function(e,t){var i=se.f,r=p.f,o="prototype",l="Wrong index!",c=n.ArrayBuffer,u=n.DataView,h=n.Math,f=n.RangeError,d=n.Infinity,m=c,y=h.abs,v=h.pow,b=h.floor,w=h.log,k=h.LN2,T=s?"_b":"buffer",S=s?"_l":"byteLength",E=s?"_o":"byteOffset";function _(e,t,n){var i,r,o,a=new Array(n),s=8*n-t-1,l=(1<<s)-1,c=l>>1,u=23===t?v(2,-24)-v(2,-77):0,h=0,f=e<0||0===e&&1/e<0?1:0;for((e=y(e))!=e||e===d?(r=e!=e?1:0,i=l):(i=b(w(e)/k),e*(o=v(2,-i))<1&&(i--,o*=2),(e+=i+c>=1?u/o:u*v(2,1-c))*o>=2&&(i++,o/=2),i+c>=l?(r=0,i=l):i+c>=1?(r=(e*o-1)*v(2,t),i+=c):(r=e*v(2,c-1)*v(2,t),i=0));t>=8;a[h++]=255&r,r/=256,t-=8);for(i=i<<t|r,s+=t;s>0;a[h++]=255&i,i/=256,s-=8);return a[--h]|=128*f,a}function A(e,t,n){var i,r=8*n-t-1,o=(1<<r)-1,a=o>>1,s=r-7,l=n-1,c=e[l--],u=127&c;for(c>>=7;s>0;u=256*u+e[l],l--,s-=8);for(i=u&(1<<-s)-1,u>>=-s,s+=t;s>0;i=256*i+e[l],l--,s-=8);if(0===u)u=1-a;else{if(u===o)return i?NaN:c?-d:d;i+=v(2,t),u-=a}return(c?-1:1)*i*v(2,u-t)}function P(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]}function M(e){return[255&e]}function L(e){return[255&e,e>>8&255]}function C(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}function x(e){return _(e,52,8)}function O(e){return _(e,23,4)}function N(e,t,n){r(e[o],t,{get:function(){return this[n]}})}function R(e,t,n,i){var r=U(+n);if(r+t>e[S])throw f(l);var o=e[T]._b,a=r+e[E],s=o.slice(a,a+t);return i?s:s.reverse()}function q(e,t,n,i,r,o){var a=U(+n);if(a+t>e[S])throw f(l);for(var s=e[T]._b,c=a+e[E],u=i(+r),h=0;h<t;h++)s[c+h]=u[o?h:t-h-1]}if(j.ABV){if(!a(function(){c(1)})||!a(function(){new c(-1)})||a(function(){return new c,new c(1.5),new c(NaN),"ArrayBuffer"!=c.name})){for(var D,H=(c=function(e){return F(this,c),new m(U(e))})[o]=m[o],W=i(m),z=0;W.length>z;)(D=W[z++])in c||g(c,D,m[D]);H.constructor=c}var G=new u(new c(2)),K=u[o].setInt8;G.setInt8(0,2147483648),G.setInt8(1,2147483649),!G.getInt8(0)&&G.getInt8(1)||I(u[o],{setInt8:function(e,t){K.call(this,e,t<<24>>24)},setUint8:function(e,t){K.call(this,e,t<<24>>24)}},!0)}else c=function(e){F(this,c,"ArrayBuffer");var t=U(e);this._b=ce.call(new Array(t),0),this[S]=t},u=function(e,t,n){F(this,u,"DataView"),F(e,c,"DataView");var i=e[S],r=B(t);if(r<0||r>i)throw f("Wrong offset!");if(r+(n=void 0===n?i-r:V(n))>i)throw f("Wrong length!");this[T]=e,this[E]=r,this[S]=n},s&&(N(c,"byteLength","_l"),N(u,"buffer","_b"),N(u,"byteLength","_l"),N(u,"byteOffset","_o")),I(u[o],{getInt8:function(e){return R(this,1,e)[0]<<24>>24},getUint8:function(e){return R(this,1,e)[0]},getInt16:function(e){var t=R(this,2,e,arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=R(this,2,e,arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return P(R(this,4,e,arguments[1]))},getUint32:function(e){return P(R(this,4,e,arguments[1]))>>>0},getFloat32:function(e){return A(R(this,4,e,arguments[1]),23,4)},getFloat64:function(e){return A(R(this,8,e,arguments[1]),52,8)},setInt8:function(e,t){q(this,1,e,M,t)},setUint8:function(e,t){q(this,1,e,M,t)},setInt16:function(e,t){q(this,2,e,L,t,arguments[2])},setUint16:function(e,t){q(this,2,e,L,t,arguments[2])},setInt32:function(e,t){q(this,4,e,C,t,arguments[2])},setUint32:function(e,t){q(this,4,e,C,t,arguments[2])},setFloat32:function(e,t){q(this,4,e,O,t,arguments[2])},setFloat64:function(e,t){q(this,8,e,x,t,arguments[2])}});de(c,"ArrayBuffer"),de(u,"DataView"),g(u[o],j.VIEW,!0),t.ArrayBuffer=c,t.DataView=u}),me=ue("species"),ge=function(e,t){var n,i=o(e).constructor;return void 0===i||null==(n=o(i)[me])?t:S(n)},ye=ue("species"),ve=function(e){var t=n[e];s&&t&&!t[ye]&&p.f(t,ye,{configurable:!0,get:function(){return this}})},be=n.ArrayBuffer,we=pe.ArrayBuffer,ke=pe.DataView,Te=j.ABV&&be.isView,Se=we.prototype.slice,Ee=j.VIEW;P(P.G+P.W+P.F*(be!==we),{ArrayBuffer:we}),P(P.S+P.F*!j.CONSTR,"ArrayBuffer",{isView:function(e){return Te&&Te(e)||r(e)&&Ee in e}}),P(P.P+P.U+P.F*a(function(){return!new we(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function(e,t){if(void 0!==Se&&void 0===t)return Se.call(o(this),e);for(var n=o(this).byteLength,i=J(e,n),r=J(void 0===t?n:t,n),a=new(ge(this,we))(V(r-i)),s=new ke(this),l=new ke(a),c=0;i<r;)l.setUint8(c++,s.getUint8(i++));return a}}),ve("ArrayBuffer");var _e=ue("toStringTag"),Ae="Arguments"==W(function(){return arguments}()),Pe=function(e){var t,n,i;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),_e))?n:Ae?W(t):"Object"==(i=W(t))&&"function"==typeof t.callee?"Arguments":i},Me={},Le=ue("iterator"),Ce=Array.prototype,xe=function(e){return void 0!==e&&(Me.Array===e||Ce[Le]===e)},Oe=Object.keys||function(e){return re(e,oe)},Ne=s?Object.defineProperties:function(e,t){o(e);for(var n,i=Oe(t),r=i.length,a=0;r>a;)p.f(e,n=i[a++],t[n]);return e},je=n.document,Ie=je&&je.documentElement,Fe=te("IE_PROTO"),Re=function(){},qe=function(){var e,t=u("iframe"),n=oe.length;for(t.style.display="none",Ie.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),qe=e.F;n--;)delete qe.prototype[oe[n]];return qe()},Be=Object.create||function(e,t){var n;return null!==e?(Re.prototype=o(e),n=new Re,Re.prototype=null,n[Fe]=e):n=qe(),void 0===t?n:Ne(n,t)},De=te("IE_PROTO"),Ve=Object.prototype,Ue=Object.getPrototypeOf||function(e){return e=le(e),v(e,De)?e[De]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?Ve:null},He=ue("iterator"),We=i.getIteratorMethod=function(e){if(null!=e)return e[He]||e["@@iterator"]||Me[Pe(e)]},ze=Array.isArray||function(e){return"Array"==W(e)},Ge=ue("species"),Ke=function(e,t){return new(function(e){var t;return ze(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!ze(t.prototype)||(t=void 0),r(t)&&null===(t=t[Ge])&&(t=void 0)),void 0===t?Array:t}(e))(t)},Ye=function(e,t){var n=1==e,i=2==e,r=3==e,o=4==e,a=6==e,s=5==e||a,l=t||Ke;return function(t,c,u){for(var h,f,d=le(t),p=z(d),m=E(c,u,3),g=V(p.length),y=0,v=n?l(t,g):i?l(t,0):void 0;g>y;y++)if((s||y in p)&&(f=m(h=p[y],y,d),e))if(n)v[y]=f;else if(f)switch(e){case 3:return!0;case 5:return h;case 6:return y;case 2:v.push(h)}else if(o)return!1;return a?-1:r||o?o:v}},Qe=ue("unscopables"),Je=Array.prototype;null==Je[Qe]&&g(Je,Qe,{});var $e=function(e){Je[Qe][e]=!0},Xe=function(e,t){return{value:t,done:!!e}},Ze={};g(Ze,ue("iterator"),function(){return this});var et=function(e,t,n){e.prototype=Be(Ze,{next:m(1,n)}),de(e,t+" Iterator")},tt=ue("iterator"),nt=!([].keys&&"next"in[].keys()),it=function(){return this},rt=function(e,t,n,i,r,o,a){et(n,t,i);var s,l,c,u=function(e){if(!nt&&e in p)return p[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},h=t+" Iterator",f="values"==r,d=!1,p=e.prototype,m=p[tt]||p["@@iterator"]||r&&p[r],y=!nt&&m||u(r),b=r?f?u("entries"):y:void 0,w="Array"==t&&p.entries||m;if(w&&(c=Ue(w.call(new e)))!==Object.prototype&&c.next&&(de(c,h,!0),v(c,tt)||g(c,tt,it)),f&&m&&"values"!==m.name&&(d=!0,y=function(){return m.call(this)}),(nt||d||!p[tt])&&g(p,tt,y),Me[t]=y,Me[h]=it,r)if(s={values:f?y:u("values"),keys:o?y:u("keys"),entries:b},a)for(l in s)l in p||T(p,l,s[l]);else P(P.P+P.F*(nt||d),t,s);return s},ot=rt(Array,"Array",function(e,t){this._t=K(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,Xe(1)):Xe(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values");Me.Arguments=Me.Array,$e("keys"),$e("values"),$e("entries");var at=ue("iterator"),st=!1;try{[7][at]().return=function(){st=!0}}catch(e){}var lt=function(e,t){if(!t&&!st)return!1;var n=!1;try{var i=[7],r=i[at]();r.next=function(){return{done:n=!0}},i[at]=function(){return r},e(i)}catch(e){}return n},ct=[].copyWithin||function(e,t){var n=le(this),i=V(n.length),r=J(e,i),o=J(t,i),a=arguments.length>2?arguments[2]:void 0,s=Math.min((void 0===a?i:J(a,i))-o,i-r),l=1;for(o<r&&r<o+s&&(l=-1,o+=s-1,r+=s-1);s-- >0;)o in n?n[r]=n[o]:delete n[r],r+=l,o+=l;return n},ut={f:{}.propertyIsEnumerable},ht=Object.getOwnPropertyDescriptor,ft={f:s?ht:function(e,t){if(e=K(e),t=f(t,!0),h)try{return ht(e,t)}catch(e){}if(v(e,t))return m(!ut.f.call(e,t),e[t])}},dt=t(function(e){if(s){var t=n,i=a,o=P,l=j,c=pe,u=E,h=F,d=m,y=g,b=I,w=B,T=V,S=U,_=J,A=f,M=v,L=Pe,C=r,x=le,O=xe,N=Be,R=Ue,q=se.f,D=We,H=k,W=ue,z=Ye,G=$,K=ge,Y=ot,Q=Me,X=lt,Z=ve,ee=ce,te=ct,ne=p,ie=ft,re=ne.f,oe=ie.f,ae=t.RangeError,he=t.TypeError,fe=t.Uint8Array,de=Array.prototype,me=c.ArrayBuffer,ye=c.DataView,be=z(0),we=z(2),ke=z(3),Te=z(4),Se=z(5),Ee=z(6),_e=G(!0),Ae=G(!1),Le=Y.values,Ce=Y.keys,Oe=Y.entries,Ne=de.lastIndexOf,je=de.reduce,Ie=de.reduceRight,Fe=de.join,Re=de.sort,qe=de.slice,De=de.toString,Ve=de.toLocaleString,He=W("iterator"),ze=W("toStringTag"),Ge=H("typed_constructor"),Ke=H("def_constructor"),Qe=l.CONSTR,Je=l.TYPED,$e=l.VIEW,Xe=z(1,function(e,t){return it(K(e,e[Ke]),t)}),Ze=i(function(){return 1===new fe(new Uint16Array([1]).buffer)[0]}),et=!!fe&&!!fe.prototype.set&&i(function(){new fe(1).set({})}),tt=function(e,t){var n=w(e);if(n<0||n%t)throw ae("Wrong offset!");return n},nt=function(e){if(C(e)&&Je in e)return e;throw he(e+" is not a typed array!")},it=function(e,t){if(!(C(e)&&Ge in e))throw he("It is not a typed array constructor!");return new e(t)},rt=function(e,t){return at(K(e,e[Ke]),t)},at=function(e,t){for(var n=0,i=t.length,r=it(e,i);i>n;)r[n]=t[n++];return r},st=function(e,t,n){re(e,t,{get:function(){return this._d[n]}})},ut=function(e){var t,n,i,r,o,a,s=x(e),l=arguments.length,c=l>1?arguments[1]:void 0,h=void 0!==c,f=D(s);if(null!=f&&!O(f)){for(a=f.call(s),i=[],t=0;!(o=a.next()).done;t++)i.push(o.value);s=i}for(h&&l>2&&(c=u(c,arguments[2],2)),t=0,n=T(s.length),r=it(this,n);n>t;t++)r[t]=h?c(s[t],t):s[t];return r},ht=function(){for(var e=0,t=arguments.length,n=it(this,t);t>e;)n[e]=arguments[e++];return n},dt=!!fe&&i(function(){Ve.call(new fe(1))}),pt=function(){return Ve.apply(dt?qe.call(nt(this)):nt(this),arguments)},mt={copyWithin:function(e,t){return te.call(nt(this),e,t,arguments.length>2?arguments[2]:void 0)},every:function(e){return Te(nt(this),e,arguments.length>1?arguments[1]:void 0)},fill:function(e){return ee.apply(nt(this),arguments)},filter:function(e){return rt(this,we(nt(this),e,arguments.length>1?arguments[1]:void 0))},find:function(e){return Se(nt(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function(e){return Ee(nt(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function(e){be(nt(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function(e){return Ae(nt(this),e,arguments.length>1?arguments[1]:void 0)},includes:function(e){return _e(nt(this),e,arguments.length>1?arguments[1]:void 0)},join:function(e){return Fe.apply(nt(this),arguments)},lastIndexOf:function(e){return Ne.apply(nt(this),arguments)},map:function(e){return Xe(nt(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function(e){return je.apply(nt(this),arguments)},reduceRight:function(e){return Ie.apply(nt(this),arguments)},reverse:function(){for(var e,t=nt(this).length,n=Math.floor(t/2),i=0;i<n;)e=this[i],this[i++]=this[--t],this[t]=e;return this},some:function(e){return ke(nt(this),e,arguments.length>1?arguments[1]:void 0)},sort:function(e){return Re.call(nt(this),e)},subarray:function(e,t){var n=nt(this),i=n.length,r=_(e,i);return new(K(n,n[Ke]))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,T((void 0===t?i:_(t,i))-r))}},gt=function(e,t){return rt(this,qe.call(nt(this),e,t))},yt=function(e){nt(this);var t=tt(arguments[1],1),n=this.length,i=x(e),r=T(i.length),o=0;if(r+t>n)throw ae("Wrong length!");for(;o<r;)this[t+o]=i[o++]},vt={entries:function(){return Oe.call(nt(this))},keys:function(){return Ce.call(nt(this))},values:function(){return Le.call(nt(this))}},bt=function(e,t){return C(e)&&e[Je]&&"symbol"!=typeof t&&t in e&&String(+t)==String(t)},wt=function(e,t){return bt(e,t=A(t,!0))?d(2,e[t]):oe(e,t)},kt=function(e,t,n){return!(bt(e,t=A(t,!0))&&C(n)&&M(n,"value"))||M(n,"get")||M(n,"set")||n.configurable||M(n,"writable")&&!n.writable||M(n,"enumerable")&&!n.enumerable?re(e,t,n):(e[t]=n.value,e)};Qe||(ie.f=wt,ne.f=kt),o(o.S+o.F*!Qe,"Object",{getOwnPropertyDescriptor:wt,defineProperty:kt}),i(function(){De.call({})})&&(De=Ve=function(){return Fe.call(this)});var Tt=b({},mt);b(Tt,vt),y(Tt,He,vt.values),b(Tt,{slice:gt,set:yt,constructor:function(){},toString:De,toLocaleString:pt}),st(Tt,"buffer","b"),st(Tt,"byteOffset","o"),st(Tt,"byteLength","l"),st(Tt,"length","e"),re(Tt,ze,{get:function(){return this[Je]}}),e.exports=function(e,n,r,a){var s=e+((a=!!a)?"Clamped":"")+"Array",c="get"+e,u="set"+e,f=t[s],d=f||{},p=f&&R(f),m=!f||!l.ABV,g={},v=f&&f.prototype,b=function(e,t){re(e,t,{get:function(){return function(e,t){var i=e._d;return i.v[c](t*n+i.o,Ze)}(this,t)},set:function(e){return function(e,t,i){var r=e._d;a&&(i=(i=Math.round(i))<0?0:i>255?255:255&i),r.v[u](t*n+r.o,i,Ze)}(this,t,e)},enumerable:!0})};m?(f=r(function(e,t,i,r){h(e,f,s,"_d");var o,a,l,c,u=0,d=0;if(C(t)){if(!(t instanceof me||"ArrayBuffer"==(c=L(t))||"SharedArrayBuffer"==c))return Je in t?at(f,t):ut.call(f,t);o=t,d=tt(i,n);var p=t.byteLength;if(void 0===r){if(p%n)throw ae("Wrong length!");if((a=p-d)<0)throw ae("Wrong length!")}else if((a=T(r)*n)+d>p)throw ae("Wrong length!");l=a/n}else l=S(t),o=new me(a=l*n);for(y(e,"_d",{b:o,o:d,l:a,e:l,v:new ye(o)});u<l;)b(e,u++)}),v=f.prototype=N(Tt),y(v,"constructor",f)):i(function(){f(1)})&&i(function(){new f(-1)})&&X(function(e){new f,new f(null),new f(1.5),new f(e)},!0)||(f=r(function(e,t,i,r){var o;return h(e,f,s),C(t)?t instanceof me||"ArrayBuffer"==(o=L(t))||"SharedArrayBuffer"==o?void 0!==r?new d(t,tt(i,n),r):void 0!==i?new d(t,tt(i,n)):new d(t):Je in t?at(f,t):ut.call(f,t):new d(S(t))}),be(p!==Function.prototype?q(d).concat(q(p)):q(d),function(e){e in f||y(f,e,d[e])}),f.prototype=v,v.constructor=f);var w=v[He],k=!!w&&("values"==w.name||null==w.name),E=vt.values;y(f,Ge,!0),y(v,Je,s),y(v,$e,!0),y(v,Ke,f),(a?new f(1)[ze]==s:ze in v)||re(v,ze,{get:function(){return s}}),g[s]=f,o(o.G+o.W+o.F*(f!=d),g),o(o.S,s,{BYTES_PER_ELEMENT:n}),o(o.S+o.F*i(function(){d.of.call(f,1)}),s,{from:ut,of:ht}),"BYTES_PER_ELEMENT"in v||y(v,"BYTES_PER_ELEMENT",n),o(o.P,s,mt),Z(s),o(o.P+o.F*et,s,{set:yt}),o(o.P+o.F*!k,s,vt),v.toString!=De&&(v.toString=De),o(o.P+o.F*i(function(){new f(1).slice()}),s,{slice:gt}),o(o.P+o.F*(i(function(){return[1,2].toLocaleString()!=new f([1,2]).toLocaleString()})||!i(function(){v.toLocaleString.call([1,2])})),s,{toLocaleString:pt}),Q[s]=k?w:E,k||y(v,He,E)}}else e.exports=function(){}});dt("Int8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),dt("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),dt("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}},!0),dt("Int16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),dt("Uint16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),dt("Int32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),dt("Uint32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),dt("Float32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),dt("Float64",8,function(e){return function(t,n,i){return e(this,t,n,i)}});var pt=function(e,t,n,i){try{return i?t(o(n)[0],n[1]):t(n)}catch(t){var r=e.return;throw void 0!==r&&o(r.call(e)),t}},mt=t(function(e){var t={},n={},i=e.exports=function(e,i,r,a,s){var l,c,u,h,f=s?function(){return e}:We(e),d=E(r,a,i?2:1),p=0;if("function"!=typeof f)throw TypeError(e+" is not iterable!");if(xe(f)){for(l=V(e.length);l>p;p++)if((h=i?d(o(c=e[p])[0],c[1]):d(e[p]))===t||h===n)return h}else for(u=f.call(e);!(c=u.next()).done;)if((h=pt(u,d,c.value,i))===t||h===n)return h};i.BREAK=t,i.RETURN=n}),gt=t(function(e){var t=k("meta"),n=p.f,i=0,o=Object.isExtensible||function(){return!0},s=!a(function(){return o(Object.preventExtensions({}))}),l=function(e){n(e,t,{value:{i:"O"+ ++i,w:{}}})},c=e.exports={KEY:t,NEED:!1,fastKey:function(e,n){if(!r(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!v(e,t)){if(!o(e))return"F";if(!n)return"E";l(e)}return e[t].i},getWeak:function(e,n){if(!v(e,t)){if(!o(e))return!0;if(!n)return!1;l(e)}return e[t].w},onFreeze:function(e){return s&&c.NEED&&o(e)&&!v(e,t)&&l(e),e}}}),yt=(gt.KEY,gt.NEED,gt.fastKey,gt.getWeak,gt.onFreeze,function(e,t){if(!r(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e}),vt=p.f,bt=gt.fastKey,wt=s?"_s":"size",kt=function(e,t){var n,i=bt(t);if("F"!==i)return e._i[i];for(n=e._f;n;n=n.n)if(n.k==t)return n},Tt={getConstructor:function(e,t,n,i){var r=e(function(e,o){F(e,r,t,"_i"),e._t=t,e._i=Be(null),e._f=void 0,e._l=void 0,e[wt]=0,null!=o&&mt(o,n,e[i],e)});return I(r.prototype,{clear:function(){for(var e=yt(this,t),n=e._i,i=e._f;i;i=i.n)i.r=!0,i.p&&(i.p=i.p.n=void 0),delete n[i.i];e._f=e._l=void 0,e[wt]=0},delete:function(e){var n=yt(this,t),i=kt(n,e);if(i){var r=i.n,o=i.p;delete n._i[i.i],i.r=!0,o&&(o.n=r),r&&(r.p=o),n._f==i&&(n._f=r),n._l==i&&(n._l=o),n[wt]--}return!!i},forEach:function(e){yt(this,t);for(var n,i=E(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(i(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!kt(yt(this,t),e)}}),s&&vt(r.prototype,"size",{get:function(){return yt(this,t)[wt]}}),r},def:function(e,t,n){var i,r,o=kt(e,t);return o?o.v=n:(e._l=o={i:r=bt(t,!0),k:t,v:n,p:i=e._l,n:void 0,r:!1},e._f||(e._f=o),i&&(i.n=o),e[wt]++,"F"!==r&&(e._i[r]=o)),e},getEntry:kt,setStrong:function(e,t,n){rt(e,t,function(e,n){this._t=yt(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?Xe(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,Xe(1))},n?"entries":"values",!n,!0),ve(t)}},St=function(e,t){if(o(e),!r(t)&&null!==t)throw TypeError(t+": can't set as prototype!")},Et={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,n){try{(n=E(Function.call,ft.f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,i){return St(e,i),t?e.__proto__=i:n(e,i),e}}({},!1):void 0),check:St},_t=Et.set,At=function(e,t,i,o,s,l){var c=n[e],u=c,h=s?"set":"add",f=u&&u.prototype,d={},p=function(e){var t=f[e];T(f,e,"delete"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return l&&!r(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof u&&(l||f.forEach&&!a(function(){(new u).entries().next()}))){var m=new u,g=m[h](l?{}:-0,1)!=m,y=a(function(){m.has(1)}),v=lt(function(e){new u(e)}),b=!l&&a(function(){for(var e=new u,t=5;t--;)e[h](t,t);return!e.has(-0)});v||((u=t(function(t,n){F(t,u,e);var i=function(e,t,n){var i,o=t.constructor;return o!==n&&"function"==typeof o&&(i=o.prototype)!==n.prototype&&r(i)&&_t&&_t(e,i),e}(new c,t,u);return null!=n&&mt(n,s,i[h],i),i})).prototype=f,f.constructor=u),(y||b)&&(p("delete"),p("has"),s&&p("get")),(b||g)&&p(h),l&&f.clear&&delete f.clear}else u=o.getConstructor(t,e,s,h),I(u.prototype,i),gt.NEED=!0;return de(u,e),d[e]=u,P(P.G+P.W+P.F*(u!=c),d),l||o.setStrong(u,e,s),u},Pt=(At("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=Tt.getEntry(yt(this,"Map"),e);return t&&t.v},set:function(e,t){return Tt.def(yt(this,"Map"),0===e?0:e,t)}},Tt,!0),At("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return Tt.def(yt(this,"Set"),e=0===e?0:e,e)}},Tt),{f:Object.getOwnPropertySymbols}),Mt=Object.assign,Lt=!Mt||a(function(){var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach(function(e){t[e]=e}),7!=Mt({},e)[n]||Object.keys(Mt({},t)).join("")!=i})?function(e,t){for(var n=le(e),i=arguments.length,r=1,o=Pt.f,a=ut.f;i>r;)for(var s,l=z(arguments[r++]),c=o?Oe(l).concat(o(l)):Oe(l),u=c.length,h=0;u>h;)a.call(l,s=c[h++])&&(n[s]=l[s]);return n}:Mt,Ct=gt.getWeak,xt=Ye(5),Ot=Ye(6),Nt=0,jt=function(e){return e._l||(e._l=new It)},It=function(){this.a=[]},Ft=function(e,t){return xt(e.a,function(e){return e[0]===t})};It.prototype={get:function(e){var t=Ft(this,e);if(t)return t[1]},has:function(e){return!!Ft(this,e)},set:function(e,t){var n=Ft(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=Ot(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}};var Rt={getConstructor:function(e,t,n,i){var o=e(function(e,r){F(e,o,t,"_i"),e._t=t,e._i=Nt++,e._l=void 0,null!=r&&mt(r,n,e[i],e)});return I(o.prototype,{delete:function(e){if(!r(e))return!1;var n=Ct(e);return!0===n?jt(yt(this,t)).delete(e):n&&v(n,this._i)&&delete n[this._i]},has:function(e){if(!r(e))return!1;var n=Ct(e);return!0===n?jt(yt(this,t)).has(e):n&&v(n,this._i)}}),o},def:function(e,t,n){var i=Ct(o(t),!0);return!0===i?jt(e).set(t,n):i[e._i]=n,e},ufstore:jt};t(function(e){var t,n=Ye(0),i=gt.getWeak,o=Object.isExtensible,s=Rt.ufstore,l={},c=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},u={get:function(e){if(r(e)){var t=i(e);return!0===t?s(yt(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return Rt.def(yt(this,"WeakMap"),e,t)}},h=e.exports=At("WeakMap",c,u,Rt,!0,!0);a(function(){return 7!=(new h).set((Object.freeze||Object)(l),7).get(l)})&&(t=Rt.getConstructor(c,"WeakMap"),Lt(t.prototype,u),gt.NEED=!0,n(["delete","has","get","set"],function(e){var n=h.prototype,i=n[e];T(n,e,function(n,a){if(r(n)&&!o(n)){this._f||(this._f=new t);var s=this._f[e](n,a);return"set"==e?this:s}return i.call(this,n,a)})}))});At("WeakSet",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return Rt.def(yt(this,"WeakSet"),e,!0)}},Rt,!1,!0);var qt=(n.Reflect||{}).apply,Bt=Function.apply;P(P.S+P.F*!a(function(){qt(function(){})}),"Reflect",{apply:function(e,t,n){var i=S(e),r=o(n);return qt?qt(i,t,r):Bt.call(i,t,r)}});var Dt=function(e,t,n){var i=void 0===n;switch(t.length){case 0:return i?e():e.call(n);case 1:return i?e(t[0]):e.call(n,t[0]);case 2:return i?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return i?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return i?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)},Vt=[].slice,Ut={},Ht=Function.bind||function(e){var t=S(this),n=Vt.call(arguments,1),i=function(){var r=n.concat(Vt.call(arguments));return this instanceof i?function(e,t,n){if(!(t in Ut)){for(var i=[],r=0;r<t;r++)i[r]="a["+r+"]";Ut[t]=Function("F,a","return new F("+i.join(",")+")")}return Ut[t](e,n)}(t,r.length,r):Dt(t,r,e)};return r(t.prototype)&&(i.prototype=t.prototype),i},Wt=(n.Reflect||{}).construct,zt=a(function(){function e(){}return!(Wt(function(){},[],e)instanceof e)}),Gt=!a(function(){Wt(function(){})});P(P.S+P.F*(zt||Gt),"Reflect",{construct:function(e,t){S(e),o(t);var n=arguments.length<3?e:S(arguments[2]);if(Gt&&!zt)return Wt(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var i=[null];return i.push.apply(i,t),new(Ht.apply(e,i))}var a=n.prototype,s=Be(r(a)?a:Object.prototype),l=Function.apply.call(e,s,t);return r(l)?l:s}}),P(P.S+P.F*a(function(){Reflect.defineProperty(p.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(e,t,n){o(e),t=f(t,!0),o(n);try{return p.f(e,t,n),!0}catch(e){return!1}}});var Kt=ft.f;P(P.S,"Reflect",{deleteProperty:function(e,t){var n=Kt(o(e),t);return!(n&&!n.configurable)&&delete e[t]}}),P(P.S,"Reflect",{get:function e(t,n){var i,a,s=arguments.length<3?t:arguments[2];return o(t)===s?t[n]:(i=ft.f(t,n))?v(i,"value")?i.value:void 0!==i.get?i.get.call(s):void 0:r(a=Ue(t))?e(a,n,s):void 0}}),P(P.S,"Reflect",{getOwnPropertyDescriptor:function(e,t){return ft.f(o(e),t)}}),P(P.S,"Reflect",{getPrototypeOf:function(e){return Ue(o(e))}}),P(P.S,"Reflect",{has:function(e,t){return t in e}});var Yt=Object.isExtensible;P(P.S,"Reflect",{isExtensible:function(e){return o(e),!Yt||Yt(e)}});var Qt=n.Reflect,Jt=Qt&&Qt.ownKeys||function(e){var t=se.f(o(e)),n=Pt.f;return n?t.concat(n(e)):t};P(P.S,"Reflect",{ownKeys:Jt});var $t=Object.preventExtensions;P(P.S,"Reflect",{preventExtensions:function(e){o(e);try{return $t&&$t(e),!0}catch(e){return!1}}}),P(P.S,"Reflect",{set:function e(t,n,i){var a,s,l=arguments.length<4?t:arguments[3],c=ft.f(o(t),n);if(!c){if(r(s=Ue(t)))return e(s,n,i,l);c=m(0)}return v(c,"value")?!(!1===c.writable||!r(l)||((a=ft.f(l,n)||m(0)).value=i,p.f(l,n,a),0)):void 0!==c.set&&(c.set.call(l,i),!0)}}),Et&&P(P.S,"Reflect",{setPrototypeOf:function(e,t){Et.check(e,t);try{return Et.set(e,t),!0}catch(e){return!1}}});var Xt,Zt,en,tn=n.process,nn=n.setImmediate,rn=n.clearImmediate,on=n.MessageChannel,an=n.Dispatch,sn=0,ln={},cn=function(){var e=+this;if(ln.hasOwnProperty(e)){var t=ln[e];delete ln[e],t()}},un=function(e){cn.call(e.data)};nn&&rn||(nn=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return ln[++sn]=function(){Dt("function"==typeof e?e:Function(e),t)},Xt(sn),sn},rn=function(e){delete ln[e]},"process"==W(tn)?Xt=function(e){tn.nextTick(E(cn,e,1))}:an&&an.now?Xt=function(e){an.now(E(cn,e,1))}:on?(en=(Zt=new on).port2,Zt.port1.onmessage=un,Xt=E(en.postMessage,en,1)):n.addEventListener&&"function"==typeof postMessage&&!n.importScripts?(Xt=function(e){n.postMessage(e+"","*")},n.addEventListener("message",un,!1)):Xt="onreadystatechange"in u("script")?function(e){Ie.appendChild(u("script")).onreadystatechange=function(){Ie.removeChild(this),cn.call(e)}}:function(e){setTimeout(E(cn,e,1),0)});var hn={set:nn,clear:rn},fn=hn.set,dn=n.MutationObserver||n.WebKitMutationObserver,pn=n.process,mn=n.Promise,gn="process"==W(pn);function yn(e){var t,n;this.promise=new e(function(e,i){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=i}),this.resolve=S(t),this.reject=S(n)}var vn,bn,wn,kn,Tn={f:function(e){return new yn(e)}},Sn=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},En=hn.set,_n=function(){var e,t,i,r=function(){var n,r;for(gn&&(n=pn.domain)&&n.exit();e;){r=e.fn,e=e.next;try{r()}catch(n){throw e?i():t=void 0,n}}t=void 0,n&&n.enter()};if(gn)i=function(){pn.nextTick(r)};else if(!dn||n.navigator&&n.navigator.standalone)if(mn&&mn.resolve){var o=mn.resolve();i=function(){o.then(r)}}else i=function(){fn.call(n,r)};else{var a=!0,s=document.createTextNode("");new dn(r).observe(s,{characterData:!0}),i=function(){s.data=a=!a}}return function(n){var r={fn:n,next:void 0};t&&(t.next=r),e||(e=r,i()),t=r}}(),An=n.TypeError,Pn=n.process,Mn=n.Promise,Ln="process"==Pe(Pn),Cn=function(){},xn=bn=Tn.f,On=!!function(){try{var e=Mn.resolve(1),t=(e.constructor={})[ue("species")]=function(e){e(Cn,Cn)};return(Ln||"function"==typeof PromiseRejectionEvent)&&e.then(Cn)instanceof t}catch(e){}}(),Nn=function(e){var t;return!(!r(e)||"function"!=typeof(t=e.then))&&t},jn=function(e,t){if(!e._n){e._n=!0;var n=e._c;_n(function(){for(var i=e._v,r=1==e._s,o=0,a=function(t){var n,o,a=r?t.ok:t.fail,s=t.resolve,l=t.reject,c=t.domain;try{a?(r||(2==e._h&&Rn(e),e._h=1),!0===a?n=i:(c&&c.enter(),n=a(i),c&&c.exit()),n===t.promise?l(An("Promise-chain cycle")):(o=Nn(n))?o.call(n,s,l):s(n)):l(i)}catch(e){l(e)}};n.length>o;)a(n[o++]);e._c=[],e._n=!1,t&&!e._h&&In(e)})}},In=function(e){En.call(n,function(){var t,i,r,o=e._v,a=Fn(e);if(a&&(t=Sn(function(){Ln?Pn.emit("unhandledRejection",o,e):(i=n.onunhandledrejection)?i({promise:e,reason:o}):(r=n.console)&&r.error&&r.error("Unhandled promise rejection",o)}),e._h=Ln||Fn(e)?2:1),e._a=void 0,a&&t.e)throw t.v})},Fn=function(e){return 1!==e._h&&0===(e._a||e._c).length},Rn=function(e){En.call(n,function(){var t;Ln?Pn.emit("rejectionHandled",e):(t=n.onrejectionhandled)&&t({promise:e,reason:e._v})})},qn=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),jn(t,!0))},Bn=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw An("Promise can't be resolved itself");(t=Nn(e))?_n(function(){var i={_w:n,_d:!1};try{t.call(e,E(Bn,i,1),E(qn,i,1))}catch(e){qn.call(i,e)}}):(n._v=e,n._s=1,jn(n,!1))}catch(e){qn.call({_w:n,_d:!1},e)}}};On||(Mn=function(e){F(this,Mn,"Promise","_h"),S(e),vn.call(this);try{e(E(Bn,this,1),E(qn,this,1))}catch(e){qn.call(this,e)}},(vn=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=I(Mn.prototype,{then:function(e,t){var n=xn(ge(this,Mn));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=Ln?Pn.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&jn(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),wn=function(){var e=new vn;this.promise=e,this.resolve=E(Bn,e,1),this.reject=E(qn,e,1)},Tn.f=xn=function(e){return e===Mn||e===kn?new wn(e):bn(e)}),P(P.G+P.W+P.F*!On,{Promise:Mn}),de(Mn,"Promise"),ve("Promise"),kn=i.Promise,P(P.S+P.F*!On,"Promise",{reject:function(e){var t=xn(this);return(0,t.reject)(e),t.promise}}),P(P.S+P.F*!On,"Promise",{resolve:function(e){return function(e,t){if(o(e),r(t)&&t.constructor===e)return t;var n=Tn.f(e);return(0,n.resolve)(t),n.promise}(this,e)}}),P(P.S+P.F*!(On&&lt(function(e){Mn.all(e).catch(Cn)})),"Promise",{all:function(e){var t=this,n=xn(t),i=n.resolve,r=n.reject,o=Sn(function(){var n=[],o=0,a=1;mt(e,!1,function(e){var s=o++,l=!1;n.push(void 0),a++,t.resolve(e).then(function(e){l||(l=!0,n[s]=e,--a||i(n))},r)}),--a||i(n)});return o.e&&r(o.v),n.promise},race:function(e){var t=this,n=xn(t),i=n.reject,r=Sn(function(){mt(e,!1,function(e){t.resolve(e).then(n.resolve,i)})});return r.e&&i(r.v),n.promise}});var Dn={f:ue},Vn=p.f,Un=function(e){var t=i.Symbol||(i.Symbol=n.Symbol||{});"_"==e.charAt(0)||e in t||Vn(t,e,{value:Dn.f(e)})},Hn=se.f,Wn={}.toString,zn="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Gn={f:function(e){return zn&&"[object Window]"==Wn.call(e)?function(e){try{return Hn(e)}catch(e){return zn.slice()}}(e):Hn(K(e))}},Kn=gt.KEY,Yn=ft.f,Qn=p.f,Jn=Gn.f,$n=n.Symbol,Xn=n.JSON,Zn=Xn&&Xn.stringify,ei=ue("_hidden"),ti=ue("toPrimitive"),ni={}.propertyIsEnumerable,ii=Z("symbol-registry"),ri=Z("symbols"),oi=Z("op-symbols"),ai=Object.prototype,si="function"==typeof $n,li=n.QObject,ci=!li||!li.prototype||!li.prototype.findChild,ui=s&&a(function(){return 7!=Be(Qn({},"a",{get:function(){return Qn(this,"a",{value:7}).a}})).a})?function(e,t,n){var i=Yn(ai,t);i&&delete ai[t],Qn(e,t,n),i&&e!==ai&&Qn(ai,t,i)}:Qn,hi=function(e){var t=ri[e]=Be($n.prototype);return t._k=e,t},fi=si&&"symbol"==typeof $n.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof $n},di=function(e,t,n){return e===ai&&di(oi,t,n),o(e),t=f(t,!0),o(n),v(ri,t)?(n.enumerable?(v(e,ei)&&e[ei][t]&&(e[ei][t]=!1),n=Be(n,{enumerable:m(0,!1)})):(v(e,ei)||Qn(e,ei,m(1,{})),e[ei][t]=!0),ui(e,t,n)):Qn(e,t,n)},pi=function(e,t){o(e);for(var n,i=function(e){var t=Oe(e),n=Pt.f;if(n)for(var i,r=n(e),o=ut.f,a=0;r.length>a;)o.call(e,i=r[a++])&&t.push(i);return t}(t=K(t)),r=0,a=i.length;a>r;)di(e,n=i[r++],t[n]);return e},mi=function(e){var t=ni.call(this,e=f(e,!0));return!(this===ai&&v(ri,e)&&!v(oi,e))&&(!(t||!v(this,e)||!v(ri,e)||v(this,ei)&&this[ei][e])||t)},gi=function(e,t){if(e=K(e),t=f(t,!0),e!==ai||!v(ri,t)||v(oi,t)){var n=Yn(e,t);return!n||!v(ri,t)||v(e,ei)&&e[ei][t]||(n.enumerable=!0),n}},yi=function(e){for(var t,n=Jn(K(e)),i=[],r=0;n.length>r;)v(ri,t=n[r++])||t==ei||t==Kn||i.push(t);return i},vi=function(e){for(var t,n=e===ai,i=Jn(n?oi:K(e)),r=[],o=0;i.length>o;)!v(ri,t=i[o++])||n&&!v(ai,t)||r.push(ri[t]);return r};si||(T(($n=function(){if(this instanceof $n)throw TypeError("Symbol is not a constructor!");var e=k(arguments.length>0?arguments[0]:void 0),t=function(n){this===ai&&t.call(oi,n),v(this,ei)&&v(this[ei],e)&&(this[ei][e]=!1),ui(this,e,m(1,n))};return s&&ci&&ui(ai,e,{configurable:!0,set:t}),hi(e)}).prototype,"toString",function(){return this._k}),ft.f=gi,p.f=di,se.f=Gn.f=yi,ut.f=mi,Pt.f=vi,s&&T(ai,"propertyIsEnumerable",mi,!0),Dn.f=function(e){return hi(ue(e))}),P(P.G+P.W+P.F*!si,{Symbol:$n});for(var bi="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),wi=0;bi.length>wi;)ue(bi[wi++]);for(var ki=Oe(ue.store),Ti=0;ki.length>Ti;)Un(ki[Ti++]);P(P.S+P.F*!si,"Symbol",{for:function(e){return v(ii,e+="")?ii[e]:ii[e]=$n(e)},keyFor:function(e){if(!fi(e))throw TypeError(e+" is not a symbol!");for(var t in ii)if(ii[t]===e)return t},useSetter:function(){ci=!0},useSimple:function(){ci=!1}}),P(P.S+P.F*!si,"Object",{create:function(e,t){return void 0===t?Be(e):pi(Be(e),t)},defineProperty:di,defineProperties:pi,getOwnPropertyDescriptor:gi,getOwnPropertyNames:yi,getOwnPropertySymbols:vi}),Xn&&P(P.S+P.F*(!si||a(function(){var e=$n();return"[null]"!=Zn([e])||"{}"!=Zn({a:e})||"{}"!=Zn(Object(e))})),"JSON",{stringify:function(e){for(var t,n,i=[e],o=1;arguments.length>o;)i.push(arguments[o++]);if(n=t=i[1],(r(t)||void 0!==e)&&!fi(e))return ze(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!fi(t))return t}),i[1]=t,Zn.apply(Xn,i)}}),$n.prototype[ti]||g($n.prototype,ti,$n.prototype.valueOf),de($n,"Symbol"),de(Math,"Math",!0),de(n.JSON,"JSON",!0);var Si=function(e,t){var n=(i.Object||{})[e]||Object[e],r={};r[e]=t(n),P(P.S+P.F*a(function(){n(1)}),"Object",r)},Ei=gt.onFreeze;Si("freeze",function(e){return function(t){return e&&r(t)?e(Ei(t)):t}});var _i=gt.onFreeze;Si("seal",function(e){return function(t){return e&&r(t)?e(_i(t)):t}});var Ai=gt.onFreeze;Si("preventExtensions",function(e){return function(t){return e&&r(t)?e(Ai(t)):t}}),Si("isFrozen",function(e){return function(t){return!r(t)||!!e&&e(t)}}),Si("isSealed",function(e){return function(t){return!r(t)||!!e&&e(t)}}),Si("isExtensible",function(e){return function(t){return!!r(t)&&(!e||e(t))}});var Pi=ft.f;Si("getOwnPropertyDescriptor",function(){return function(e,t){return Pi(K(e),t)}}),Si("getPrototypeOf",function(){return function(e){return Ue(le(e))}}),Si("keys",function(){return function(e){return Oe(le(e))}}),Si("getOwnPropertyNames",function(){return Gn.f}),P(P.S+P.F,"Object",{assign:Lt});var Mi=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t};P(P.S,"Object",{is:Mi});var Li=p.f,Ci=Function.prototype,xi=/^\s*function ([^ (]*)/;"name"in Ci||s&&Li(Ci,"name",{configurable:!0,get:function(){try{return(""+this).match(xi)[1]}catch(e){return""}}}),P(P.S,"String",{raw:function(e){for(var t=K(e.raw),n=V(t.length),i=arguments.length,r=[],o=0;n>o;)r.push(String(t[o++])),o<i&&r.push(String(arguments[o]));return r.join("")}});var Oi=String.fromCharCode,Ni=String.fromCodePoint;P(P.S+P.F*(!!Ni&&1!=Ni.length),"String",{fromCodePoint:function(e){for(var t,n=[],i=arguments.length,r=0;i>r;){if(t=+arguments[r++],J(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?Oi(t):Oi(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}});var ji,Ii=(ji=!1,function(e,t){var n,i,r=String(G(e)),o=B(t),a=r.length;return o<0||o>=a?ji?"":void 0:(n=r.charCodeAt(o))<55296||n>56319||o+1===a||(i=r.charCodeAt(o+1))<56320||i>57343?ji?r.charAt(o):n:ji?r.slice(o,o+2):i-56320+(n-55296<<10)+65536});P(P.P,"String",{codePointAt:function(e){return Ii(this,e)}});var Fi=function(e){var t=String(G(this)),n="",i=B(e);if(i<0||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(t+=t))1&i&&(n+=t);return n};P(P.P,"String",{repeat:Fi});var Ri=ue("match"),qi=function(e){var t;return r(e)&&(void 0!==(t=e[Ri])?!!t:"RegExp"==W(e))},Bi=function(e,t,n){if(qi(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(G(e))},Di=ue("match"),Vi=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[Di]=!1,!"/./"[e](t)}catch(e){}}return!0},Ui="".startsWith;P(P.P+P.F*Vi("startsWith"),"String",{startsWith:function(e){var t=Bi(this,e,"startsWith"),n=V(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),i=String(e);return Ui?Ui.call(t,i,n):t.slice(n,n+i.length)===i}});var Hi="".endsWith;P(P.P+P.F*Vi("endsWith"),"String",{endsWith:function(e){var t=Bi(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,i=V(t.length),r=void 0===n?i:Math.min(V(n),i),o=String(e);return Hi?Hi.call(t,o,r):t.slice(r-o.length,r)===o}});P(P.P+P.F*Vi("includes"),"String",{includes:function(e){return!!~Bi(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}});s&&"g"!=/./g.flags&&p.f(RegExp.prototype,"flags",{configurable:!0,get:function(){var e=o(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}});var Wi=function(e,t,n){var i=ue(e),r=n(G,i,""[e]),o=r[0],s=r[1];a(function(){var t={};return t[i]=function(){return 7},7!=""[e](t)})&&(T(String.prototype,e,o),g(RegExp.prototype,i,2==t?function(e,t){return s.call(e,this,t)}:function(e){return s.call(e,this)}))};Wi("match",1,function(e,t,n){return[function(n){var i=e(this),r=null==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]}),Wi("replace",2,function(e,t,n){return[function(i,r){var o=e(this),a=null==i?void 0:i[t];return void 0!==a?a.call(i,o,r):n.call(String(o),i,r)},n]}),Wi("split",2,function(e,t,n){var i=qi,r=n,o=[].push;if("c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length){var a=void 0===/()??/.exec("")[1];n=function(e,t){var n=String(this);if(void 0===e&&0===t)return[];if(!i(e))return r.call(n,e,t);var s,l,c,u,h,f=[],d=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),p=0,m=void 0===t?4294967295:t>>>0,g=new RegExp(e.source,d+"g");for(a||(s=new RegExp("^"+g.source+"$(?!\\s)",d));(l=g.exec(n))&&!((c=l.index+l[0].length)>p&&(f.push(n.slice(p,l.index)),!a&&l.length>1&&l[0].replace(s,function(){for(h=1;h<arguments.length-2;h++)void 0===arguments[h]&&(l[h]=void 0)}),l.length>1&&l.index<n.length&&o.apply(f,l.slice(1)),u=l[0].length,p=c,f.length>=m));)g.lastIndex===l.index&&g.lastIndex++;return p===n.length?!u&&g.test("")||f.push(""):f.push(n.slice(p)),f.length>m?f.slice(0,m):f}}else"0".split(void 0,0).length&&(n=function(e,t){return void 0===e&&0===t?[]:r.call(this,e,t)});return[function(i,r){var o=e(this),a=null==i?void 0:i[t];return void 0!==a?a.call(i,o,r):n.call(String(o),i,r)},n]}),Wi("search",1,function(e,t,n){return[function(n){var i=e(this),r=null==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]});var zi=function(e,t,n){t in e?p.f(e,t,m(0,n)):e[t]=n};P(P.S+P.F*!lt(function(e){}),"Array",{from:function(e){var t,n,i,r,o=le(e),a="function"==typeof this?this:Array,s=arguments.length,l=s>1?arguments[1]:void 0,c=void 0!==l,u=0,h=We(o);if(c&&(l=E(l,s>2?arguments[2]:void 0,2)),null==h||a==Array&&xe(h))for(n=new a(t=V(o.length));t>u;u++)zi(n,u,c?l(o[u],u):o[u]);else for(r=h.call(o),n=new a;!(i=r.next()).done;u++)zi(n,u,c?pt(r,l,[i.value,u],!0):i.value);return n.length=u,n}}),P(P.S+P.F*a(function(){function e(){}return!(Array.of.call(e)instanceof e)}),"Array",{of:function(){for(var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);t>e;)zi(n,e,arguments[e++]);return n.length=t,n}}),P(P.P,"Array",{copyWithin:ct}),$e("copyWithin");var Gi=Ye(5),Ki=!0;"find"in[]&&Array(1).find(function(){Ki=!1}),P(P.P+P.F*Ki,"Array",{find:function(e){return Gi(this,e,arguments.length>1?arguments[1]:void 0)}}),$e("find");var Yi=Ye(6),Qi=!0;"findIndex"in[]&&Array(1).findIndex(function(){Qi=!1}),P(P.P+P.F*Qi,"Array",{findIndex:function(e){return Yi(this,e,arguments.length>1?arguments[1]:void 0)}}),$e("findIndex"),P(P.P,"Array",{fill:ce}),$e("fill");var Ji=n.isFinite;P(P.S,"Number",{isFinite:function(e){return"number"==typeof e&&Ji(e)}});var $i=Math.floor,Xi=function(e){return!r(e)&&isFinite(e)&&$i(e)===e};P(P.S,"Number",{isInteger:Xi});var Zi=Math.abs;P(P.S,"Number",{isSafeInteger:function(e){return Xi(e)&&Zi(e)<=9007199254740991}}),P(P.S,"Number",{isNaN:function(e){return e!=e}}),P(P.S,"Number",{EPSILON:Math.pow(2,-52)}),P(P.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991}),P(P.S,"Number",{MAX_SAFE_INTEGER:9007199254740991});var er=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)},tr=Math.sqrt,nr=Math.acosh;P(P.S+P.F*!(nr&&710==Math.floor(nr(Number.MAX_VALUE))&&nr(1/0)==1/0),"Math",{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:er(e-1+tr(e-1)*tr(e+1))}});var ir=Math.asinh;P(P.S+P.F*!(ir&&1/ir(0)>0),"Math",{asinh:function e(t){return isFinite(t=+t)&&0!=t?t<0?-e(-t):Math.log(t+Math.sqrt(t*t+1)):t}});var rr=Math.atanh;P(P.S+P.F*!(rr&&1/rr(-0)<0),"Math",{atanh:function(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}});var or=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1};P(P.S,"Math",{cbrt:function(e){return or(e=+e)*Math.pow(Math.abs(e),1/3)}}),P(P.S,"Math",{clz32:function(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}});var ar=Math.exp;P(P.S,"Math",{cosh:function(e){return(ar(e=+e)+ar(-e))/2}});var sr=Math.expm1,lr=!sr||sr(10)>22025.465794806718||sr(10)<22025.465794806718||-2e-17!=sr(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:sr;P(P.S+P.F*(lr!=Math.expm1),"Math",{expm1:lr});var cr=Math.pow,ur=cr(2,-52),hr=cr(2,-23),fr=cr(2,127)*(2-hr),dr=cr(2,-126),pr=Math.fround||function(e){var t,n,i=Math.abs(e),r=or(e);return i<dr?r*(i/dr/hr+1/ur-1/ur)*dr*hr:(n=(t=(1+hr/ur)*i)-(t-i))>fr||n!=n?r*(1/0):r*n};P(P.S,"Math",{fround:pr});var mr=Math.abs;P(P.S,"Math",{hypot:function(e,t){for(var n,i,r=0,o=0,a=arguments.length,s=0;o<a;)s<(n=mr(arguments[o++]))?(r=r*(i=s/n)*i+1,s=n):r+=n>0?(i=n/s)*i:n;return s===1/0?1/0:s*Math.sqrt(r)}});var gr=Math.imul;P(P.S+P.F*a(function(){return-5!=gr(4294967295,5)||2!=gr.length}),"Math",{imul:function(e,t){var n=+e,i=+t,r=65535&n,o=65535&i;return 0|r*o+((65535&n>>>16)*o+r*(65535&i>>>16)<<16>>>0)}}),P(P.S,"Math",{log1p:er}),P(P.S,"Math",{log10:function(e){return Math.log(e)*Math.LOG10E}}),P(P.S,"Math",{log2:function(e){return Math.log(e)/Math.LN2}}),P(P.S,"Math",{sign:or});var yr=Math.exp;P(P.S+P.F*a(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(e){return Math.abs(e=+e)<1?(lr(e)-lr(-e))/2:(yr(e-1)-yr(-e-1))*(Math.E/2)}});var vr=Math.exp;P(P.S,"Math",{tanh:function(e){var t=lr(e=+e),n=lr(-e);return t==1/0?1:n==1/0?-1:(t-n)/(vr(e)+vr(-e))}}),P(P.S,"Math",{trunc:function(e){return(e>0?Math.floor:Math.ceil)(e)}});var br=$(!0);P(P.P,"Array",{includes:function(e){return br(this,e,arguments.length>1?arguments[1]:void 0)}}),$e("includes");var wr=ut.f,kr=function(e){return function(t){for(var n,i=K(t),r=Oe(i),o=r.length,a=0,s=[];o>a;)wr.call(i,n=r[a++])&&s.push(e?[n,i[n]]:i[n]);return s}},Tr=kr(!1);P(P.S,"Object",{values:function(e){return Tr(e)}});var Sr=kr(!0);P(P.S,"Object",{entries:function(e){return Sr(e)}}),P(P.S,"Object",{getOwnPropertyDescriptors:function(e){for(var t,n,i=K(e),r=ft.f,o=Jt(i),a={},s=0;o.length>s;)void 0!==(n=r(i,t=o[s++]))&&zi(a,t,n);return a}});var Er=function(e,t,n,i){var r=String(G(e)),o=r.length,a=void 0===n?" ":String(n),s=V(t);if(s<=o||""==a)return r;var l=s-o,c=Fi.call(a,Math.ceil(l/a.length));return c.length>l&&(c=c.slice(0,l)),i?c+r:r+c},_r=n.navigator,Ar=_r&&_r.userAgent||"";P(P.P+P.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(Ar),"String",{padStart:function(e){return Er(this,e,arguments.length>1?arguments[1]:void 0,!0)}}),P(P.P+P.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(Ar),"String",{padEnd:function(e){return Er(this,e,arguments.length>1?arguments[1]:void 0,!1)}});var Pr=[].slice,Mr=/MSIE .\./.test(Ar),Lr=function(e){return function(t,n){var i=arguments.length>2,r=!!i&&Pr.call(arguments,2);return e(i?function(){("function"==typeof t?t:Function(t)).apply(this,r)}:t,n)}};P(P.G+P.B+P.F*Mr,{setTimeout:Lr(n.setTimeout),setInterval:Lr(n.setInterval)}),P(P.G+P.B,{setImmediate:hn.set,clearImmediate:hn.clear});for(var Cr=ue("iterator"),xr=ue("toStringTag"),Or=Me.Array,Nr={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},jr=Oe(Nr),Ir=0;Ir<jr.length;Ir++){var Fr,Rr=jr[Ir],qr=Nr[Rr],Br=n[Rr],Dr=Br&&Br.prototype;if(Dr&&(Dr[Cr]||g(Dr,Cr,Or),Dr[xr]||g(Dr,xr,Rr),Me[Rr]=Or,qr))for(Fr in ot)Dr[Fr]||T(Dr,Fr,ot[Fr],!0)}t(function(t){!function(e){var n,i=Object.prototype,r=i.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},a=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag",c=e.regeneratorRuntime;if(c)t.exports=c;else{(c=e.regeneratorRuntime=t.exports).wrap=b;var u="suspendedStart",h="suspendedYield",f="executing",d="completed",p={},m={};m[a]=function(){return this};var g=Object.getPrototypeOf,y=g&&g(g(C([])));y&&y!==i&&r.call(y,a)&&(m=y);var v=S.prototype=k.prototype=Object.create(m);T.prototype=v.constructor=S,S.constructor=T,S[l]=T.displayName="GeneratorFunction",c.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===T||"GeneratorFunction"===(t.displayName||t.name))},c.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,S):(e.__proto__=S,l in e||(e[l]="GeneratorFunction")),e.prototype=Object.create(v),e},c.awrap=function(e){return{__await:e}},E(_.prototype),_.prototype[s]=function(){return this},c.AsyncIterator=_,c.async=function(e,t,n,i){var r=new _(b(e,t,n,i));return c.isGeneratorFunction(t)?r:r.next().then(function(e){return e.done?e.value:r.next()})},E(v),v[l]="Generator",v[a]=function(){return this},v.toString=function(){return"[object Generator]"},c.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var i=t.pop();if(i in e)return n.value=i,n.done=!1,n}return n.done=!0,n}},c.values=C,L.prototype={constructor:L,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=n,this.done=!1,this.delegate=null,this.method="next",this.arg=n,this.tryEntries.forEach(M),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=n)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function i(i,r){return s.type="throw",s.arg=e,t.next=i,r&&(t.method="next",t.arg=n),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var l=r.call(a,"catchLoc"),c=r.call(a,"finallyLoc");if(l&&c){if(this.prev<a.catchLoc)return i(a.catchLoc,!0);if(this.prev<a.finallyLoc)return i(a.finallyLoc)}else if(l){if(this.prev<a.catchLoc)return i(a.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return i(a.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var o=i;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var a=o?o.completion:{};return a.type=e,a.arg=t,o?(this.method="next",this.next=o.finallyLoc,p):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),p},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),M(n),p}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var i=n.completion;if("throw"===i.type){var r=i.arg;M(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,i){return this.delegate={iterator:C(e),resultName:t,nextLoc:i},"next"===this.method&&(this.arg=n),p}}}function b(e,t,n,i){var r=t&&t.prototype instanceof k?t:k,o=Object.create(r.prototype),a=new L(i||[]);return o._invoke=function(e,t,n){var i=u;return function(r,o){if(i===f)throw new Error("Generator is already running");if(i===d){if("throw"===r)throw o;return x()}for(n.method=r,n.arg=o;;){var a=n.delegate;if(a){var s=A(a,n);if(s){if(s===p)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===u)throw i=d,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=f;var l=w(e,t,n);if("normal"===l.type){if(i=n.done?d:h,l.arg===p)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(i=d,n.method="throw",n.arg=l.arg)}}}(e,n,a),o}function w(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function k(){}function T(){}function S(){}function E(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function _(t){function n(e,i,o,a){var s=w(t[e],t,i);if("throw"!==s.type){var l=s.arg,c=l.value;return c&&"object"==typeof c&&r.call(c,"__await")?Promise.resolve(c.__await).then(function(e){n("next",e,o,a)},function(e){n("throw",e,o,a)}):Promise.resolve(c).then(function(e){l.value=e,o(l)},a)}a(s.arg)}var i;"object"==typeof e.process&&e.process.domain&&(n=e.process.domain.bind(n)),this._invoke=function(e,t){function r(){return new Promise(function(i,r){n(e,t,i,r)})}return i=i?i.then(r,r):r()}}function A(e,t){var i=e.iterator[t.method];if(i===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=n,A(e,t),"throw"===t.method))return p;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return p}var r=w(i,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,p;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=n),t.delegate=null,p):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,p)}function P(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function M(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function L(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(P,this),this.reset(!0)}function C(e){if(e){var t=e[a];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,o=function t(){for(;++i<e.length;)if(r.call(e,i))return t.value=e[i],t.done=!1,t;return t.value=n,t.done=!0,t};return o.next=o}}return{next:x}}function x(){return{value:n,done:!0}}}("object"==typeof e?e:"object"==typeof window?window:"object"==typeof self?self:e)});try{var Vr=new window.CustomEvent("test");if(Vr.preventDefault(),!0!==Vr.defaultPrevented)throw new Error("Could not prevent default")}catch(e){var Ur=function(e,t){var n,i;return t=t||{bubbles:!1,cancelable:!1,detail:void 0},(n=document.createEvent("CustomEvent")).initCustomEvent(e,t.bubbles,t.cancelable,t.detail),i=n.preventDefault,n.preventDefault=function(){i.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};Ur.prototype=window.Event.prototype,window.CustomEvent=Ur}!function(e){var t=function(){try{return!!Symbol.iterator}catch(e){return!1}}(),n=function(e){var n={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return t&&(n[Symbol.iterator]=function(){return n}),n},i=function(e){return encodeURIComponent(e).replace(/%20/g,"+")},r=function(e){return decodeURIComponent(e).replace(/\+/g," ")};"URLSearchParams"in e&&"a=1"===new URLSearchParams("?a=1").toString()||function(){var o=function(e){if(Object.defineProperty(this,"_entries",{value:{}}),"string"==typeof e){if(""!==e)for(var t,n=(e=e.replace(/^\?/,"")).split("&"),i=0;i<n.length;i++)t=n[i].split("="),this.append(r(t[0]),t.length>1?r(t[1]):"")}else if(e instanceof o){var a=this;e.forEach(function(e,t){a.append(e,t)})}},a=o.prototype;a.append=function(e,t){e in this._entries?this._entries[e].push(t.toString()):this._entries[e]=[t.toString()]},a.delete=function(e){delete this._entries[e]},a.get=function(e){return e in this._entries?this._entries[e][0]:null},a.getAll=function(e){return e in this._entries?this._entries[e].slice(0):[]},a.has=function(e){return e in this._entries},a.set=function(e,t){this._entries[e]=[t.toString()]},a.forEach=function(e,t){var n;for(var i in this._entries)if(this._entries.hasOwnProperty(i)){n=this._entries[i];for(var r=0;r<n.length;r++)e.call(t,n[r],i,this)}},a.keys=function(){var e=[];return this.forEach(function(t,n){e.push(n)}),n(e)},a.values=function(){var e=[];return this.forEach(function(t){e.push(t)}),n(e)},a.entries=function(){var e=[];return this.forEach(function(t,n){e.push([n,t])}),n(e)},t&&(a[Symbol.iterator]=a.entries),a.toString=function(){var e="";return this.forEach(function(t,n){e.length>0&&(e+="&"),e+=i(n)+"="+i(t)}),e},e.URLSearchParams=o}()}(void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:e),function(e){if(function(){try{var e=new URL("b","http://a");return e.pathname="c%20d","http://a/c%20d"===e.href&&e.searchParams}catch(e){return!1}}()||function(){var t=e.URL,n=function(e,t){"string"!=typeof e&&(e=String(e));var n=document.implementation.createHTMLDocument("");if(window.doc=n,t){var i=n.createElement("base");i.href=t,n.head.appendChild(i)}var r=n.createElement("a");if(r.href=e,n.body.appendChild(r),r.href=r.href,":"===r.protocol||!/:/.test(r.href))throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:r})},i=n.prototype;["hash","host","hostname","port","protocol","search"].forEach(function(e){!function(e){Object.defineProperty(i,e,{get:function(){return this._anchorElement[e]},set:function(t){this._anchorElement[e]=t},enumerable:!0})}(e)}),Object.defineProperties(i,{toString:{get:function(){var e=this;return function(){return e.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(e){this._anchorElement.href=e},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(e){this._anchorElement.pathname=e},enumerable:!0},origin:{get:function(){var e={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],t=this._anchorElement.port!=e&&""!==this._anchorElement.port;return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(t?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(e){},enumerable:!0},username:{get:function(){return""},set:function(e){},enumerable:!0},searchParams:{get:function(){var e=new URLSearchParams(this.search),t=this;return["append","delete","set"].forEach(function(n){var i=e[n];e[n]=function(){i.apply(e,arguments),t.search=e.toString()}}),e},enumerable:!0}}),n.createObjectURL=function(e){return t.createObjectURL.apply(t,arguments)},n.revokeObjectURL=function(e){return t.revokeObjectURL.apply(t,arguments)},e.URL=n}(),void 0!==e.location&&!("origin"in e.location)){var t=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:t,enumerable:!0})}catch(n){setInterval(function(){e.location.origin=t()},100)}}}(void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:e);var Hr=function(e){return null!=e?e.constructor:null},Wr=function(e,t){return Boolean(e&&t&&e instanceof t)},zr=function(e){return null==e},Gr=function(e){return Hr(e)===Object},Kr=function(e){return Hr(e)===String},Yr=function(e){return Array.isArray(e)},Qr=function(e){return Wr(e,NodeList)},Jr=function(e){return zr(e)||(Kr(e)||Yr(e)||Qr(e))&&!e.length||Gr(e)&&!Object.keys(e).length},$r={nullOrUndefined:zr,object:Gr,number:function(e){return Hr(e)===Number&&!Number.isNaN(e)},string:Kr,boolean:function(e){return Hr(e)===Boolean},function:function(e){return Hr(e)===Function},array:Yr,weakMap:function(e){return Wr(e,WeakMap)},nodeList:Qr,element:function(e){return Wr(e,Element)},textNode:function(e){return Hr(e)===Text},event:function(e){return Wr(e,Event)},cue:function(e){return Wr(e,window.TextTrackCue)||Wr(e,window.VTTCue)},track:function(e){return Wr(e,TextTrack)||!zr(e)&&Kr(e.kind)},url:function(e){if(Wr(e,window.URL))return!0;var t=e;e.startsWith("http://")&&e.startsWith("https://")||(t="http://"+e);try{return!Jr(new URL(t).hostname)}catch(e){return!1}},empty:Jr},Xr=function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}return e}();function Zr(e,t,n){var i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=this,o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(e&&"addEventListener"in e&&!$r.empty(t)&&$r.function(n)){var s=t.split(" "),l=a;Xr&&(l={passive:o,capture:a}),s.forEach(function(t){r&&r.eventListeners&&i&&r.eventListeners.push({element:e,type:t,callback:n,options:l}),e[i?"addEventListener":"removeEventListener"](t,n,l)})}}function eo(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Zr.call(this,e,t,n,!0,i,r)}function to(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Zr.call(this,e,t,n,!1,i,r)}function no(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Zr.call(this,e,t,function o(){to(e,t,o,i,r);for(var a=arguments.length,s=Array(a),l=0;l<a;l++)s[l]=arguments[l];n.apply(this,s)},!0,i,r)}function io(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if($r.element(e)&&!$r.empty(t)){var r=new CustomEvent(t,{bubbles:n,detail:Object.assign({},i,{plyr:this})});e.dispatchEvent(r)}}var ro=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},oo=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),ao=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},so=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],i=!0,r=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(i=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);i=!0);}catch(e){r=!0,o=e}finally{try{!i&&s.return&&s.return()}finally{if(r)throw o}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function lo(e,t){var n=e.length?e:[e];Array.from(n).reverse().forEach(function(e,n){var i=n>0?t.cloneNode(!0):t,r=e.parentNode,o=e.nextSibling;i.appendChild(e),o?r.insertBefore(i,o):r.appendChild(i)})}function co(e,t){$r.element(e)&&!$r.empty(t)&&Object.entries(t).filter(function(e){var t=so(e,2)[1];return!$r.nullOrUndefined(t)}).forEach(function(t){var n=so(t,2),i=n[0],r=n[1];return e.setAttribute(i,r)})}function uo(e,t,n){var i=document.createElement(e);return $r.object(t)&&co(i,t),$r.string(n)&&(i.innerText=n),i}function ho(e,t,n,i){$r.element(t)&&t.appendChild(uo(e,n,i))}function fo(e){$r.nodeList(e)||$r.array(e)?Array.from(e).forEach(fo):$r.element(e)&&$r.element(e.parentNode)&&e.parentNode.removeChild(e)}function po(e){if($r.element(e))for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1}function mo(e,t){return $r.element(t)&&$r.element(t.parentNode)&&$r.element(e)?(t.parentNode.replaceChild(e,t),e):null}function go(e,t){if(!$r.string(e)||$r.empty(e))return{};var n={},i=t;return e.split(",").forEach(function(e){var t=e.trim(),r=t.replace(".",""),o=t.replace(/[[\]]/g,"").split("="),a=o[0],s=o.length>1?o[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":$r.object(i)&&$r.string(i.class)&&(i.class+=" "+r),n.class=r;break;case"#":n.id=t.replace("#","");break;case"[":n[a]=s}}),n}function yo(e,t){if($r.element(e)){var n=t;$r.boolean(n)||(n=!e.hasAttribute("hidden")),n?e.setAttribute("hidden",""):e.removeAttribute("hidden")}}function vo(e,t,n){if($r.nodeList(e))return Array.from(e).map(function(e){return vo(e,t,n)});if($r.element(e)){var i="toggle";return void 0!==n&&(i=n?"add":"remove"),e.classList[i](t),e.classList.contains(t)}return!1}function bo(e,t){return $r.element(e)&&e.classList.contains(t)}function wo(e,t){var n={Element:Element};return(n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)}).call(e,t)}function ko(e){return this.elements.container.querySelectorAll(e)}function To(e){return this.elements.container.querySelector(e)}function So(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];$r.element(e)&&(e.focus(),t&&vo(e,this.config.classNames.tabFocus))}var Eo,_o,Ao,Po=(Eo=document.createElement("span"),_o={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},Ao=Object.keys(_o).find(function(e){return void 0!==Eo.style[e]}),!!$r.string(Ao)&&_o[Ao]);var Mo,Lo={isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)},Co={"audio/ogg":"vorbis","audio/wav":"1","video/webm":"vp8, vorbis","video/mp4":"avc1.42E01E, mp4a.40.2","video/ogg":"theora"},xo={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,n){var i=Lo.isIPhone&&n&&xo.playsinline,r=xo[e]||"html5"!==t;return{api:r,ui:r&&xo.rangeInput&&("video"!==e||!Lo.isIPhone||i)}},pip:!Lo.isIPhone&&$r.function(uo("video").webkitSetPresentationMode),airplay:$r.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=e.split("/"),n=so(t,1)[0];if(!this.isHTML5||n!==this.type)return!1;var i=void 0;e&&e.includes("codecs=")?i=e:"audio/mpeg"===e?i="audio/mpeg;":e in Co&&(i=e+'; codecs="'+Co[e]+'"');try{return Boolean(i&&this.media.canPlayType(i).replace(/no/,""))}catch(e){return!1}},textTracks:"textTracks"in document.createElement("video"),rangeInput:(Mo=document.createElement("input"),Mo.type="range","range"===Mo.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==Po,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},Oo={getSources:function(){var e=this;return this.isHTML5?Array.from(this.media.querySelectorAll("source")).filter(function(t){return xo.mime.call(e,t.getAttribute("type"))}):[]},getQualityOptions:function(){return Oo.getSources.call(this).map(function(e){return Number(e.getAttribute("size"))}).filter(Boolean)},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=Oo.getSources.call(e).find(function(t){return t.getAttribute("src")===e.source});return t&&Number(t.getAttribute("size"))},set:function(t){var n=Oo.getSources.call(e).find(function(e){return Number(e.getAttribute("size"))===t});if(n){var i=e.media,r=i.currentTime,o=i.paused,a=i.preload,s=i.readyState;e.media.src=n.getAttribute("src"),("none"!==a||s)&&(e.once("loadedmetadata",function(){e.currentTime=r,o||e.play()}),e.media.load()),io.call(e,e.media,"qualitychange",!1,{quality:t})}}})}},cancelRequests:function(){this.isHTML5&&(fo(Oo.getSources.call(this)),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}};function No(e,t){return t.split(".").reduce(function(e,t){return e&&e[t]},e)}function jo(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];if(!n.length)return e;var r=n.shift();return $r.object(r)?(Object.keys(r).forEach(function(t){$r.object(r[t])?(Object.keys(e).includes(t)||Object.assign(e,ao({},t,{})),jo(e[t],r[t])):Object.assign(e,ao({},t,r[t]))}),jo.apply(void 0,[e].concat(n))):e}function Io(e){for(var t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return $r.empty(e)?e:e.toString().replace(/{(\d+)}/g,function(e,t){return n[t].toString()})}function Fo(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),n.toString())}function Ro(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})}function qo(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=Fo(e,"-"," "),e=Fo(e,"_"," "),Fo(e=Ro(e)," ","")}(e)).charAt(0).toLowerCase()+e.slice(1)}function Bo(e){var t=document.createElement("div");return t.appendChild(e),t.innerHTML}var Do=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if($r.empty(e)||$r.empty(t))return"";var n=No(t.i18n,e);if($r.empty(n))return"";var i={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(i).forEach(function(e){var t=so(e,2),i=t[0],r=t[1];n=Fo(n,i,r)}),n};function Vo(e){return $r.array(e)?e.filter(function(t,n){return e.indexOf(t)===n}):e}var Uo=function(){function e(t){ro(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return oo(e,[{key:"get",value:function(t){if(!e.supported||!this.enabled)return null;var n=window.localStorage.getItem(this.key);if($r.empty(n))return null;var i=JSON.parse(n);return $r.string(t)&&t.length?i[t]:i}},{key:"set",value:function(t){if(e.supported&&this.enabled&&$r.object(t)){var n=this.get();$r.empty(n)&&(n={}),jo(n,t),window.localStorage.setItem(this.key,JSON.stringify(n))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}();function Ho(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(n,i){try{var r=new XMLHttpRequest;if(!("withCredentials"in r))return;r.addEventListener("load",function(){if("text"===t)try{n(JSON.parse(r.responseText))}catch(e){n(r.responseText)}else n(r.response)}),r.addEventListener("error",function(){throw new Error(r.status)}),r.open("GET",e,!0),r.responseType=t,r.send()}catch(e){i(e)}})}function Wo(e,t){if($r.string(e)){var n=$r.string(t),i=function(){return null!==document.getElementById(t)},r=function(e,t){e.innerHTML=t,n&&i()||document.body.insertAdjacentElement("afterbegin",e)};if(!n||!i()){var o=Uo.supported,a=document.createElement("div");if(a.setAttribute("hidden",""),n&&a.setAttribute("id",t),o){var s=window.localStorage.getItem("cache-"+t);if(null!==s){var l=JSON.parse(s);r(a,l.content)}}Ho(e).then(function(e){$r.empty(e)||(o&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),r(a,e))}).catch(function(){})}}}var zo=function(e){return parseInt(e/60/60%60,10)},Go=function(e){return parseInt(e/60%60,10)},Ko=function(e){return parseInt(e%60,10)};function Yo(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!$r.number(e))return Yo(null,t,n);var i=function(e){return("0"+e).slice(-2)},r=zo(e),o=Go(e),a=Ko(e);return t||r>0?r+=":":r="",(n&&e>0?"-":"")+r+i(o)+":"+i(a)}var Qo={getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||Lo.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=To.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:ko.call(this,this.config.selectors.buttons.play),pause:To.call(this,this.config.selectors.buttons.pause),restart:To.call(this,this.config.selectors.buttons.restart),rewind:To.call(this,this.config.selectors.buttons.rewind),fastForward:To.call(this,this.config.selectors.buttons.fastForward),mute:To.call(this,this.config.selectors.buttons.mute),pip:To.call(this,this.config.selectors.buttons.pip),airplay:To.call(this,this.config.selectors.buttons.airplay),settings:To.call(this,this.config.selectors.buttons.settings),captions:To.call(this,this.config.selectors.buttons.captions),fullscreen:To.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=To.call(this,this.config.selectors.progress),this.elements.inputs={seek:To.call(this,this.config.selectors.inputs.seek),volume:To.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:To.call(this,this.config.selectors.display.buffer),currentTime:To.call(this,this.config.selectors.display.currentTime),duration:To.call(this,this.config.selectors.display.duration)},$r.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},createIcon:function(e,t){var n=Qo.getIconUrl.call(this),i=(n.cors?"":n.url)+"#"+this.config.iconPrefix,r=document.createElementNS("http://www.w3.org/2000/svg","svg");co(r,jo(t,{role:"presentation",focusable:"false"}));var o=document.createElementNS("http://www.w3.org/2000/svg","use"),a=i+"-"+e;return"href"in o?o.setAttributeNS("http://www.w3.org/1999/xlink","href",a):o.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",a),r.appendChild(o),r},createLabel:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={pip:"PIP",airplay:"AirPlay"}[e]||Do(e,this.config);return uo("span",Object.assign({},t,{class:[t.class,this.config.classNames.hidden].filter(Boolean).join(" ")}),n)},createBadge:function(e){if($r.empty(e))return null;var t=uo("span",{class:this.config.classNames.menu.value});return t.appendChild(uo("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=uo("button"),i=Object.assign({},t),r=qo(e),o=!1,a=void 0,s=void 0,l=void 0,c=void 0;switch("type"in i||(i.type="button"),"class"in i?i.class.includes(this.config.classNames.control)||(i.class+=" "+this.config.classNames.control):i.class=this.config.classNames.control,e){case"play":o=!0,a="play",l="pause",s="play",c="pause";break;case"mute":o=!0,a="mute",l="unmute",s="volume",c="muted";break;case"captions":o=!0,a="enableCaptions",l="disableCaptions",s="captions-off",c="captions-on";break;case"fullscreen":o=!0,a="enterFullscreen",l="exitFullscreen",s="enter-fullscreen",c="exit-fullscreen";break;case"play-large":i.class+=" "+this.config.classNames.control+"--overlaid",r="play",a="play",s="play";break;default:a=r,s=e}o?(n.appendChild(Qo.createIcon.call(this,c,{class:"icon--pressed"})),n.appendChild(Qo.createIcon.call(this,s,{class:"icon--not-pressed"})),n.appendChild(Qo.createLabel.call(this,l,{class:"label--pressed"})),n.appendChild(Qo.createLabel.call(this,a,{class:"label--not-pressed"}))):(n.appendChild(Qo.createIcon.call(this,s)),n.appendChild(Qo.createLabel.call(this,a))),jo(i,go(this.config.selectors.buttons[r],i)),co(n,i),"play"===r?($r.array(this.elements.buttons[r])||(this.elements.buttons[r]=[]),this.elements.buttons[r].push(n)):this.elements.buttons[r]=n;var u=this.config.classNames.controlPressed;return Object.defineProperty(n,"pressed",{enumerable:!0,get:function(){return bo(n,u)},set:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];vo(n,u,e)}}),n},createRange:function(e,t){var n=uo("input",jo(go(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-label":Do(e,this.config),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=n,Qo.updateRangeFill.call(this,n),n},createProgress:function(e,t){var n=uo("progress",jo(go(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){n.appendChild(uo("span",null,"0"));var i={played:"played",buffer:"buffered"}[e],r=i?Do(i,this.config):"";n.innerText="% "+r.toLowerCase()}return this.elements.display[e]=n,n},createTime:function(e){var t=go(this.config.selectors.display[e]),n=uo("div",jo(t,{class:(this.config.classNames.display.time+" "+(t.class?t.class:"")).trim(),"aria-label":Do(e,this.config)}),"00:00");return this.elements.display[e]=n,n},bindMenuItemShortcuts:function(e,t){var n=this;eo(e,"keydown",function(i){if([32,38,39,40].includes(i.which)){i.preventDefault(),i.stopPropagation();var r=wo(e,'[role="menuitemradio"]');if(!r&&[32,39].includes(i.which))Qo.showMenuPanel.call(n,t);else{var o=void 0;32!==i.which&&(40===i.which||r&&39===i.which?(o=e.nextElementSibling,$r.element(o)||(o=e.parentNode.firstElementChild)):(o=e.previousElementSibling,$r.element(o)||(o=e.parentNode.lastElementChild)),So.call(n,o,!0))}}},!1)},createMenuItem:function(e){var t=this,n=e.value,i=e.list,r=e.type,o=e.title,a=e.badge,s=void 0===a?null:a,l=e.checked,c=void 0!==l&&l,u=go(this.config.selectors.inputs[r]),h=uo("button",jo(u,{type:"button",role:"menuitemradio",class:(this.config.classNames.control+" "+(u.class?u.class:"")).trim(),"aria-checked":c,value:n})),f=uo("span");f.innerHTML=o,$r.element(s)&&f.appendChild(s),h.appendChild(f),Object.defineProperty(h,"checked",{enumerable:!0,get:function(){return"true"===h.getAttribute("aria-checked")},set:function(e){e&&Array.from(h.parentNode.children).filter(function(e){return wo(e,'[role="menuitemradio"]')}).forEach(function(e){return e.setAttribute("aria-checked","false")}),h.setAttribute("aria-checked",e?"true":"false")}}),this.listeners.bind(h,"click keydown",function(e){if("keydown"!==e.type||32===e.which){switch(e.preventDefault(),e.stopPropagation(),h.checked=!0,r){case"language":t.currentTrack=Number(n);break;case"quality":t.quality=n;break;case"speed":t.speed=parseFloat(n)}Qo.showMenuPanel.call(t,"home")}},r,!1),Qo.bindMenuItemShortcuts.call(this,h,r),i.appendChild(h)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return $r.number(e)?Yo(e,zo(this.duration)>0,t):e},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];$r.element(e)&&$r.number(t)&&(e.innerText=Qo.formatTime(t,n))},updateVolume:function(){this.supported.ui&&($r.element(this.elements.inputs.volume)&&Qo.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),$r.element(this.elements.buttons.mute)&&(this.elements.buttons.mute.pressed=this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;$r.element(e)&&(e.value=t,Qo.updateRangeFill.call(this,e))},updateProgress:function(e){var t=this;if(this.supported.ui&&$r.event(e)){var n,i,r=0;if(e)switch(e.type){case"timeupdate":case"seeking":case"seeked":n=this.currentTime,i=this.duration,r=0===n||0===i||Number.isNaN(n)||Number.isNaN(i)?0:(n/i*100).toFixed(2),"timeupdate"===e.type&&Qo.setRange.call(this,this.elements.inputs.seek,r);break;case"playing":case"progress":!function(e,n){var i=$r.number(n)?n:0,r=$r.element(e)?e:t.elements.display.buffer;if($r.element(r)){r.value=i;var o=r.getElementsByTagName("span")[0];$r.element(o)&&(o.childNodes[0].nodeValue=i)}}(this.elements.display.buffer,100*this.buffered)}}},updateRangeFill:function(e){var t=$r.event(e)?e.target:e;if($r.element(t)&&"range"===t.getAttribute("type")){if(wo(t,this.config.selectors.inputs.seek)){t.setAttribute("aria-valuenow",this.currentTime);var n=Qo.formatTime(this.currentTime),i=Qo.formatTime(this.duration),r=Do("seekLabel",this.config);t.setAttribute("aria-valuetext",r.replace("{currentTime}",n).replace("{duration}",i))}else if(wo(t,this.config.selectors.inputs.volume)){var o=100*t.value;t.setAttribute("aria-valuenow",o),t.setAttribute("aria-valuetext",o+"%")}else t.setAttribute("aria-valuenow",t.value);Lo.isWebkit&&t.style.setProperty("--value",t.value/t.max*100+"%")}},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&$r.element(this.elements.inputs.seek)&&$r.element(this.elements.display.seekTooltip)&&0!==this.duration){var n=0,i=this.elements.progress.getBoundingClientRect(),r=this.config.classNames.tooltip+"--visible",o=function(e){vo(t.elements.display.seekTooltip,r,e)};if(this.touch)o(!1);else{if($r.event(e))n=100/i.width*(e.pageX-i.left);else{if(!bo(this.elements.display.seekTooltip,r))return;n=parseFloat(this.elements.display.seekTooltip.style.left,10)}n<0?n=0:n>100&&(n=100),Qo.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*n),this.elements.display.seekTooltip.style.left=n+"%",$r.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&o("mouseenter"===e.type)}}},timeUpdate:function(e){var t=!$r.element(this.elements.display.duration)&&this.config.invertTime;Qo.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||Qo.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui&&(this.config.invertTime||!this.currentTime)){if(this.duration>=Math.pow(2,32))return yo(this.elements.display.currentTime,!0),void yo(this.elements.progress,!0);$r.element(this.elements.inputs.seek)&&this.elements.inputs.seek.setAttribute("aria-valuemax",this.duration);var e=$r.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&Qo.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&Qo.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),Qo.updateSeekTooltip.call(this)}},toggleMenuButton:function(e,t){yo(this.elements.settings.buttons[e],!t)},updateSetting:function(e,t,n){var i=this.elements.settings.panels[e],r=null,o=t;if("captions"===e)r=this.currentTrack;else{if(r=$r.empty(n)?this[e]:n,$r.empty(r)&&(r=this.config[e].default),!$r.empty(this.options[e])&&!this.options[e].includes(r))return void this.debug.warn("Unsupported value of '"+r+"' for "+e);if(!this.config[e].options.includes(r))return void this.debug.warn("Disabled value of '"+r+"' for "+e)}if($r.element(o)||(o=i&&i.querySelector('[role="menu"]')),$r.element(o)){this.elements.settings.buttons[e].querySelector("."+this.config.classNames.menu.value).innerHTML=Qo.getLabel.call(this,e,r);var a=o&&o.querySelector('[value="'+r+'"]');$r.element(a)&&(a.checked=!0)}},getLabel:function(e,t){switch(e){case"speed":return 1===t?Do("normal",this.config):t+"&times;";case"quality":if($r.number(t)){var n=Do("qualityLabel."+t,this.config);return n.length?n:t+"p"}return Ro(t);case"captions":return Xo.getLabel.call(this);default:return null}},setQualityMenu:function(e){var t=this;if($r.element(this.elements.settings.panels.quality)){var n=this.elements.settings.panels.quality.querySelector('[role="menu"]');$r.array(e)&&(this.options.quality=Vo(e).filter(function(e){return t.config.quality.options.includes(e)}));var i=!$r.empty(this.options.quality)&&this.options.quality.length>1;if(Qo.toggleMenuButton.call(this,"quality",i),po(n),Qo.checkMenu.call(this),i){this.options.quality.sort(function(e,n){var i=t.config.quality.options;return i.indexOf(e)>i.indexOf(n)?1:-1}).forEach(function(e){Qo.createMenuItem.call(t,{value:e,list:n,type:"quality",title:Qo.getLabel.call(t,"quality",e),badge:function(e){var n=Do("qualityBadge."+e,t.config);return n.length?Qo.createBadge.call(t,n):null}(e)})}),Qo.updateSetting.call(this,"quality",n)}}},setCaptionsMenu:function(){var e=this;if($r.element(this.elements.settings.panels.captions)){var t=this.elements.settings.panels.captions.querySelector('[role="menu"]'),n=Xo.getTracks.call(this),i=Boolean(n.length);if(Qo.toggleMenuButton.call(this,"captions",i),po(t),Qo.checkMenu.call(this),i){var r=n.map(function(n,i){return{value:i,checked:e.captions.toggled&&e.currentTrack===i,title:Xo.getLabel.call(e,n),badge:n.language&&Qo.createBadge.call(e,n.language.toUpperCase()),list:t,type:"language"}});r.unshift({value:-1,checked:!this.captions.toggled,title:Do("disabled",this.config),list:t,type:"language"}),r.forEach(Qo.createMenuItem.bind(this)),Qo.updateSetting.call(this,"captions",t)}}},setSpeedMenu:function(e){var t=this;if($r.element(this.elements.settings.panels.speed)){var n=this.elements.settings.panels.speed.querySelector('[role="menu"]');$r.array(e)?this.options.speed=e:(this.isHTML5||this.isVimeo)&&(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(e){return t.config.speed.options.includes(e)});var i=!$r.empty(this.options.speed)&&this.options.speed.length>1;Qo.toggleMenuButton.call(this,"speed",i),po(n),Qo.checkMenu.call(this),i&&(this.options.speed.forEach(function(e){Qo.createMenuItem.call(t,{value:e,list:n,type:"speed",title:Qo.getLabel.call(t,"speed",e)})}),Qo.updateSetting.call(this,"speed",n))}},checkMenu:function(){var e=this.elements.settings.buttons,t=!$r.empty(e)&&Object.values(e).some(function(e){return!e.hidden});yo(this.elements.settings.menu,!t)},toggleMenu:function(e){var t=this.elements.settings.popup,n=this.elements.buttons.settings;if($r.element(t)&&$r.element(n)){var i=$r.boolean(e)?e:$r.element(t)&&t.hasAttribute("hidden");if($r.event(e)){var r=$r.element(t)&&t.contains(e.target),o=e.target===this.elements.buttons.settings;if(r||!r&&!o&&i)return;o&&e.stopPropagation()}if($r.element(n)&&n.setAttribute("aria-expanded",i),$r.element(t)&&(yo(t,!i),vo(this.elements.container,this.config.classNames.menu.open,i),i&&$r.event(e)&&"keydown"===e.type)){var a=Object.values(this.elements.settings.panels).find(function(e){return!e.hidden}).querySelector('[role^="menuitem"]');So.call(this,a,!0)}}},getMenuSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return fo(t),{width:n,height:i}},showMenuPanel:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=document.getElementById("plyr-settings-"+this.id+"-"+t);if($r.element(n)){var i=n.parentNode,r=Array.from(i.children).find(function(e){return!e.hidden});if(xo.transitions&&!xo.reducedMotion){i.style.width=r.scrollWidth+"px",i.style.height=r.scrollHeight+"px";var o=Qo.getMenuSize.call(this,n);eo.call(this,i,Po,function t(n){n.target===i&&["width","height"].includes(n.propertyName)&&(i.style.width="",i.style.height="",to.call(e,i,Po,t))}),i.style.width=o.width+"px",i.style.height=o.height+"px"}yo(r,!0),yo(n,!1);var a=n.querySelector('[role^="menuitem"]');So.call(this,a,!0)}},create:function(e){var t=this;if($r.empty(this.config.controls))return null;var n=uo("div",go(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&n.appendChild(Qo.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&n.appendChild(Qo.createButton.call(this,"rewind")),this.config.controls.includes("play")&&n.appendChild(Qo.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&n.appendChild(Qo.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var i=uo("div",go(this.config.selectors.progress));if(i.appendChild(Qo.createRange.call(this,"seek",{id:"plyr-seek-"+e.id})),i.appendChild(Qo.createProgress.call(this,"buffer")),this.config.tooltips.seek){var r=uo("span",{class:this.config.classNames.tooltip},"00:00");i.appendChild(r),this.elements.display.seekTooltip=r}this.elements.progress=i,n.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&n.appendChild(Qo.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&n.appendChild(Qo.createTime.call(this,"duration")),this.config.controls.includes("mute")&&n.appendChild(Qo.createButton.call(this,"mute")),this.config.controls.includes("volume")){var o=uo("div",{class:"plyr__volume"}),a={max:1,step:.05,value:this.config.volume};o.appendChild(Qo.createRange.call(this,"volume",jo(a,{id:"plyr-volume-"+e.id}))),this.elements.volume=o,n.appendChild(o)}if(this.config.controls.includes("captions")&&n.appendChild(Qo.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!$r.empty(this.config.settings)){var s=uo("div",{class:"plyr__menu",hidden:""});s.appendChild(Qo.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var l=uo("div",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,hidden:"","aria-labelled-by":"plyr-settings-toggle-"+e.id}),c=uo("div"),u=uo("div",{id:"plyr-settings-"+e.id+"-home"}),h=uo("div",{role:"menu"});u.appendChild(h),c.appendChild(u),this.elements.settings.panels.home=u,this.config.settings.forEach(function(n){var i=uo("button",jo(go(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",role:"menuitem","aria-haspopup":!0,hidden:""}));Qo.bindMenuItemShortcuts.call(t,i,n),eo(i,"click",function(){Qo.showMenuPanel.call(t,n)});var r=uo("span",null,Do(n,t.config)),o=uo("span",{class:t.config.classNames.menu.value});o.innerHTML=e[n],r.appendChild(o),i.appendChild(r),h.appendChild(i);var a=uo("div",{id:"plyr-settings-"+e.id+"-"+n,hidden:""}),s=uo("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back"});s.appendChild(uo("span",{"aria-hidden":!0},Do(n,t.config))),s.appendChild(uo("span",{class:t.config.classNames.hidden},Do("menuBack",t.config))),eo(a,"keydown",function(e){37===e.which&&(e.preventDefault(),e.stopPropagation(),Qo.showMenuPanel.call(t,"home"))},!1),eo(s,"click",function(){Qo.showMenuPanel.call(t,"home")}),a.appendChild(s),a.appendChild(uo("div",{role:"menu"})),c.appendChild(a),t.elements.settings.buttons[n]=i,t.elements.settings.panels[n]=a}),l.appendChild(c),s.appendChild(l),n.appendChild(s),this.elements.settings.popup=l,this.elements.settings.menu=s}return this.config.controls.includes("pip")&&xo.pip&&n.appendChild(Qo.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&xo.airplay&&n.appendChild(Qo.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&n.appendChild(Qo.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(Qo.createButton.call(this,"play-large")),this.elements.controls=n,this.isHTML5&&Qo.setQualityMenu.call(this,Oo.getQualityOptions.call(this)),Qo.setSpeedMenu.call(this),n},inject:function(){var e=this;if(this.config.loadSprite){var t=Qo.getIconUrl.call(this);t.cors&&Wo(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var n=null;this.elements.controls=null;var i={id:this.id,seektime:this.config.seekTime,title:this.config.title},r=!0;$r.string(this.config.controls)||$r.element(this.config.controls)?n=this.config.controls:$r.function(this.config.controls)?n=this.config.controls.call(this,i):(n=Qo.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:Xo.getLabel.call(this)}),r=!1);var o=function(e){var t=e;return Object.entries(i).forEach(function(e){var n=so(e,2),i=n[0],r=n[1];t=Fo(t,"{"+i+"}",r)}),t};r&&($r.string(this.config.controls)?n=o(n):$r.element(n)&&(n.innerHTML=o(n.innerHTML)));var a,s=void 0;if($r.string(this.config.selectors.controls.container)&&(s=document.querySelector(this.config.selectors.controls.container)),$r.element(s)||(s=this.elements.container),$r.element(n)?s.appendChild(n):n&&s.insertAdjacentHTML("beforeend",n),$r.element(this.elements.controls)||Qo.findElements.call(this),window.navigator.userAgent.includes("Edge")&&(a=s,setTimeout(function(){yo(a,!0),a.offsetHeight,yo(a,!1)},0)),this.config.tooltips.controls){var l=this.config,c=l.classNames,u=l.selectors,h=u.controls.wrapper+" "+u.labels+" ."+c.hidden,f=ko.call(this,h);Array.from(f).forEach(function(t){vo(t,e.config.classNames.hidden,!1),vo(t,e.config.classNames.tooltip,!0)})}}};function Jo(e){var t=e;if(!(arguments.length>1&&void 0!==arguments[1])||arguments[1]){var n=document.createElement("a");n.href=t,t=n.href}try{return new URL(t)}catch(e){return null}}function $o(e){var t=new URLSearchParams;return $r.object(e)&&Object.entries(e).forEach(function(e){var n=so(e,2),i=n[0],r=n[1];t.set(i,r)}),t}var Xo={setup:function(){if(this.supported.ui)if(!this.isVideo||this.isYouTube||this.isHTML5&&!xo.textTracks)$r.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&Qo.setCaptionsMenu.call(this);else{var e,t;if($r.element(this.elements.captions)||(this.elements.captions=uo("div",go(this.config.selectors.captions)),e=this.elements.captions,t=this.elements.wrapper,$r.element(e)&&$r.element(t)&&t.parentNode.insertBefore(e,t.nextSibling)),Lo.isIE&&window.URL){var n=this.media.querySelectorAll("track");Array.from(n).forEach(function(e){var t=e.getAttribute("src"),n=Jo(t);null!==n&&n.hostname!==window.location.href.hostname&&["http:","https:"].includes(n.protocol)&&Ho(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){fo(e)})})}var i=Vo(Array.from(navigator.languages||navigator.language||navigator.userLanguage).map(function(e){return e.split("-")[0]})),r=(this.storage.get("language")||this.config.captions.language||"auto").toLowerCase();if("auto"===r)r=so(i,1)[0];var o=this.storage.get("captions");if($r.boolean(o)||(o=this.config.captions.active),Object.assign(this.captions,{toggled:!1,active:o,language:r,languages:i}),this.isHTML5){var a=this.config.captions.update?"addtrack removetrack":"removetrack";eo.call(this,this.media.textTracks,a,Xo.update.bind(this))}setTimeout(Xo.update.bind(this),0)}},update:function(){var e=this,t=Xo.getTracks.call(this,!0),n=this.captions,i=n.active,r=n.language,o=n.meta,a=n.currentTrackNode,s=Boolean(t.find(function(e){return e.language===r}));this.isHTML5&&this.isVideo&&t.filter(function(e){return!o.get(e)}).forEach(function(t){e.debug.log("Track added",t),o.set(t,{default:"showing"===t.mode}),t.mode="hidden",eo.call(e,t,"cuechange",function(){return Xo.updateCues.call(e)})}),(s&&this.language!==r||!t.includes(a))&&(Xo.setLanguage.call(this,r),Xo.toggle.call(this,i&&s)),vo(this.elements.container,this.config.classNames.captions.enabled,!$r.empty(t)),(this.config.controls||[]).includes("settings")&&this.config.settings.includes("captions")&&Qo.setCaptionsMenu.call(this)},toggle:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(this.supported.ui){var n=this.captions.toggled,i=this.config.classNames.captions.active,r=$r.nullOrUndefined(e)?!n:e;if(r!==n){if(t||(this.captions.active=r,this.storage.set({captions:r})),!this.language&&r&&!t){var o=Xo.getTracks.call(this),a=Xo.findTrack.call(this,[this.captions.language].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(this.captions.languages)),!0);return this.captions.language=a.language,void Xo.set.call(this,o.indexOf(a))}this.elements.buttons.captions&&(this.elements.buttons.captions.pressed=r),vo(this.elements.container,i,r),this.captions.toggled=r,Qo.updateSetting.call(this,"captions"),io.call(this,this.media,r?"captionsenabled":"captionsdisabled")}}},set:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=Xo.getTracks.call(this);if(-1!==e)if($r.number(e))if(e in n){if(this.captions.currentTrack!==e){this.captions.currentTrack=e;var i=n[e],r=(i||{}).language;this.captions.currentTrackNode=i,Qo.updateSetting.call(this,"captions"),t||(this.captions.language=r,this.storage.set({language:r})),this.isVimeo&&this.embed.enableTextTrack(r),io.call(this,this.media,"languagechange")}Xo.toggle.call(this,!0,t),this.isHTML5&&this.isVideo&&Xo.updateCues.call(this)}else this.debug.warn("Track not found",e);else this.debug.warn("Invalid caption argument",e);else Xo.toggle.call(this,!1,t)},setLanguage:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if($r.string(e)){var n=e.toLowerCase();this.captions.language=n;var i=Xo.getTracks.call(this),r=Xo.findTrack.call(this,[n]);Xo.set.call(this,i.indexOf(r),t)}else this.debug.warn("Invalid language argument",e)},getTracks:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return Array.from((this.media||{}).textTracks||[]).filter(function(n){return!e.isHTML5||t||e.captions.meta.has(n)}).filter(function(e){return["captions","subtitles"].includes(e.kind)})},findTrack:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=Xo.getTracks.call(this),r=function(e){return Number((t.captions.meta.get(e)||{}).default)},o=Array.from(i).sort(function(e,t){return r(t)-r(e)}),a=void 0;return e.every(function(e){return!(a=o.find(function(t){return t.language===e}))}),a||(n?o[0]:void 0)},getCurrentTrack:function(){return Xo.getTracks.call(this)[this.currentTrack]},getLabel:function(e){var t=e;return!$r.track(t)&&xo.textTracks&&this.captions.toggled&&(t=Xo.getCurrentTrack.call(this)),$r.track(t)?$r.empty(t.label)?$r.empty(t.language)?Do("enabled",this.config):e.language.toUpperCase():t.label:Do("disabled",this.config)},updateCues:function(e){if(this.supported.ui)if($r.element(this.elements.captions))if($r.nullOrUndefined(e)||Array.isArray(e)){var t=e;if(!t){var n=Xo.getCurrentTrack.call(this);t=Array.from((n||{}).activeCues||[]).map(function(e){return e.getCueAsHTML()}).map(Bo)}var i=t.map(function(e){return e.trim()}).join("\n");if(i!==this.elements.captions.innerHTML){po(this.elements.captions);var r=uo("span",go(this.config.selectors.caption));r.innerHTML=i,this.elements.captions.appendChild(r),io.call(this,this.media,"cuechange")}}else this.debug.warn("updateCues: Invalid input",e);else this.debug.warn("No captions element to render to")}},Zo={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,playsinline:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.3.12/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240,"default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:"auto",update:!1},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime}s",play:"Play",pause:"Pause",fastForward:"Forward {seektime}s",seek:"Seek",seekLabel:"{currentTime} of {duration}",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",menuBack:"Go back to previous menu",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad",qualityBadge:{2160:"4K",1440:"HD",1080:"HD",720:"HD",576:"SD",480:"SD"}},urls:{vimeo:{sdk:"https://player.vimeo.com/api/player.js",iframe:"https://player.vimeo.com/video/{0}?{1}",api:"https://vimeo.com/api/v2/video/{0}.json"},youtube:{sdk:"https://www.youtube.com/iframe_api",api:"https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet"},googleIMA:{sdk:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adscontentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress__buffer",loop:".plyr__progress__loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",caption:".plyr__caption",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{type:"plyr--{0}",provider:"plyr--{0}",video:"plyr__video-wrapper",embed:"plyr__video-embed",embedContainer:"plyr__video-embed__container",poster:"plyr__poster",posterEnabled:"plyr__poster-enabled",ads:"plyr__ads",control:"plyr__control",controlPressed:"plyr__control--pressed",playing:"plyr--playing",paused:"plyr--paused",stopped:"plyr--stopped",loading:"plyr--loading",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",display:{time:"plyr__time"},menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:""}},ea={html5:"html5",youtube:"youtube",vimeo:"vimeo"},ta={audio:"audio",video:"video"};var na=function(){},ia=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];ro(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return oo(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):na}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):na}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):na}}]),e}();function ra(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;$r.element(e)&&(e.pressed=this.active),io.call(this.player,this.target,this.active?"enterfullscreen":"exitfullscreen",!0),Lo.isIos||function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if($r.element(e)){var n=ko.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),i=n[0],r=n[n.length-1];Zr.call(this,this.elements.container,"keydown",function(e){if("Tab"===e.key&&9===e.keyCode){var t=document.activeElement;t!==r||e.shiftKey?t===i&&e.shiftKey&&(r.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}},t,!1)}}.call(this.player,this.target,this.active)}}function oa(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",vo(this.target,this.player.config.classNames.fullscreen.fallback,e),ra.call(this)}var aa=function(){function e(t){var n=this;ro(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},eo.call(this.player,document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){ra.call(n)}),eo.call(this.player,this.player.elements.container,"dblclick",function(e){$r.element(n.player.elements.controls)&&n.player.elements.controls.contains(e.target)||n.toggle()}),this.update()}return oo(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),vo(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(Lo.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?$r.empty(this.prefix)||this.target[this.prefix+"Request"+this.property]():this.target.requestFullscreen():oa.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(Lo.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!$r.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.property]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else oa.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[""+this.prefix+this.property+"Element"]:document.fullscreenElement)===this.target:bo(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return Lo.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if($r.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!$r.function(document[t+"ExitFullscreen"])&&!$r.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}();function sa(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Promise(function(n,i){var r=new Image,o=function(){delete r.onload,delete r.onerror,(r.naturalWidth>=t?n:i)(r)};Object.assign(r,{onload:o,onerror:o,src:e})})}var la={addStyleHook:function(){vo(this.elements.container,this.config.selectors.container.replace(".",""),!0),vo(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void la.toggleNativeControls.call(this,!0);$r.element(this.elements.controls)||(Qo.inject.call(this),this.listeners.controls()),la.toggleNativeControls.call(this),this.isHTML5&&Xo.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,Qo.updateVolume.call(this),Qo.timeUpdate.call(this),la.checkPlaying.call(this),vo(this.elements.container,this.config.classNames.pip.supported,xo.pip&&this.isHTML5&&this.isVideo),vo(this.elements.container,this.config.classNames.airplay.supported,xo.airplay&&this.isHTML5),vo(this.elements.container,this.config.classNames.isIos,Lo.isIos),vo(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){io.call(e,e.media,"ready")},0),la.setTitle.call(this),this.poster&&la.setPoster.call(this,this.poster,!1).catch(function(){}),this.config.duration&&Qo.durationUpdate.call(this)},setTitle:function(){var e=Do("play",this.config);if($r.string(this.config.title)&&!$r.empty(this.config.title)&&(e+=", "+this.config.title),Array.from(this.elements.buttons.play||[]).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=To.call(this,"iframe");if(!$r.element(t))return;var n=$r.empty(this.config.title)?"video":this.config.title,i=Do("frameTitle",this.config);t.setAttribute("title",i.replace("{title}",n))}},togglePoster:function(e){vo(this.elements.container,this.config.classNames.posterEnabled,e)},setPoster:function(e){var t=this;return arguments.length>1&&void 0!==arguments[1]&&!arguments[1]||!this.poster?(this.media.setAttribute("poster",e),function(){var e=this;return new Promise(function(t){return e.ready?setTimeout(t,0):eo.call(e,e.elements.container,"ready",t)}).then(function(){})}.call(this).then(function(){return sa(e)}).catch(function(n){throw e===t.poster&&la.togglePoster.call(t,!1),n}).then(function(){if(e!==t.poster)throw new Error("setPoster cancelled by later call to setPoster")}).then(function(){return Object.assign(t.elements.poster.style,{backgroundImage:"url('"+e+"')",backgroundSize:""}),la.togglePoster.call(t,!0),e})):Promise.reject(new Error("Poster already set"))},checkPlaying:function(e){var t=this;vo(this.elements.container,this.config.classNames.playing,this.playing),vo(this.elements.container,this.config.classNames.paused,this.paused),vo(this.elements.container,this.config.classNames.stopped,this.stopped),Array.from(this.elements.buttons.play||[]).forEach(function(e){e.pressed=t.playing}),$r.event(e)&&"timeupdate"===e.type||la.toggleControls.call(this)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){vo(t.elements.container,t.config.classNames.loading,t.loading),la.toggleControls.call(t)},this.loading?250:0)},toggleControls:function(e){var t=this.elements.controls;t&&this.config.hideControls&&this.toggleControls(Boolean(e||this.loading||this.paused||t.pressed||t.hover))}},ca=function(){function e(t){ro(this,e),this.player=t,this.lastKey=null,this.focusTimer=null,this.lastKeyDown=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.setTabFocus=this.setTabFocus.bind(this),this.firstTouch=this.firstTouch.bind(this)}return oo(e,[{key:"handleKey",value:function(e){var t=this,n=e.keyCode?e.keyCode:e.which,i="keydown"===e.type,r=i&&n===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&$r.number(n)){if(i){var o=document.activeElement;if($r.element(o)){var a=this.player.config.selectors.editable;if(o!==this.player.elements.inputs.seek&&wo(o,a))return;if(32===e.which&&wo(o,'button, [role^="menuitem"]'))return}switch([32,37,38,39,40,48,49,50,51,52,53,54,56,57,67,70,73,75,76,77,79].includes(n)&&(e.preventDefault(),e.stopPropagation()),n){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:r||(t.player.currentTime=t.player.duration/10*(n-48));break;case 32:case 75:r||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:r||(this.player.muted=!this.player.muted);break;case 39:this.player.forward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:r||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===n&&this.player.fullscreen.toggle(),this.lastKey=n}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){Qo.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){this.player.touch=!0,vo(this.player.elements.container,this.player.config.classNames.isTouch,!0)}},{key:"setTabFocus",value:function(e){var t=this;if(clearTimeout(this.focusTimer),"keydown"!==e.type||"Tab"===e.code){"keydown"===e.type&&(this.lastKeyDown=e.timeStamp);var n,i=e.timeStamp-this.lastKeyDown<=20;if("focus"!==e.type||i)n=t.player.config.classNames.tabFocus,vo(ko.call(t.player,"."+n),n,!1),this.focusTimer=setTimeout(function(){var e=document.activeElement;t.player.elements.container.contains(e)&&vo(document.activeElement,t.player.config.classNames.tabFocus,!0)},10)}}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&Zr.call(this.player,window,"keydown keyup",this.handleKey,e,!1),Zr.call(this.player,document.body,"click",this.toggleMenu,e),no.call(this.player,document.body,"touchstart",this.firstTouch),Zr.call(this.player,document.body,"keydown focus blur",this.setTabFocus,e,!1,!0)}},{key:"container",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&eo.call(this.player,this.player.elements.container,"keydown keyup",this.handleKey,!1),eo.call(this.player,this.player.elements.container,"mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen",function(t){var n=e.player.elements.controls;"enterfullscreen"===t.type&&(n.pressed=!1,n.hover=!1);var i=0;["touchstart","touchmove","mousemove"].includes(t.type)&&(la.toggleControls.call(e.player,!0),i=e.player.touch?3e3:2e3),clearTimeout(e.player.timers.controls),e.player.timers.controls=setTimeout(function(){return la.toggleControls.call(e.player,!1)},i)})}},{key:"media",value:function(){var e=this;if(eo.call(this.player,this.player.media,"timeupdate seeking seeked",function(t){return Qo.timeUpdate.call(e.player,t)}),eo.call(this.player,this.player.media,"durationchange loadeddata loadedmetadata",function(t){return Qo.durationUpdate.call(e.player,t)}),eo.call(this.player,this.player.media,"canplay",function(){yo(e.player.elements.volume,!e.player.hasAudio),yo(e.player.elements.buttons.mute,!e.player.hasAudio)}),eo.call(this.player,this.player.media,"ended",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.resetOnEnd&&e.player.restart()}),eo.call(this.player,this.player.media,"progress playing seeking seeked",function(t){return Qo.updateProgress.call(e.player,t)}),eo.call(this.player,this.player.media,"volumechange",function(t){return Qo.updateVolume.call(e.player,t)}),eo.call(this.player,this.player.media,"playing play pause ended emptied timeupdate",function(t){return la.checkPlaying.call(e.player,t)}),eo.call(this.player,this.player.media,"waiting canplay seeked playing",function(t){return la.checkLoading.call(e.player,t)}),eo.call(this.player,this.player.media,"playing",function(){e.player.ads&&e.player.ads.enabled&&!e.player.ads.initialized&&e.player.ads.managerPromise.then(function(){return e.player.ads.play()}).catch(function(){return e.player.play()})}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=To.call(this.player,"."+this.player.config.classNames.video);if(!$r.element(t))return;eo.call(this.player,t,"click",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&eo.call(this.player,this.player.elements.wrapper,"contextmenu",function(e){e.preventDefault()},!1),eo.call(this.player,this.player.media,"volumechange",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),eo.call(this.player,this.player.media,"ratechange",function(){Qo.updateSetting.call(e.player,"speed"),e.player.storage.set({speed:e.player.speed})}),eo.call(this.player,this.player.media,"qualityrequested",function(t){e.player.storage.set({quality:t.detail.quality})}),eo.call(this.player,this.player.media,"qualitychange",function(t){Qo.updateSetting.call(e.player,"quality",null,t.detail.quality)});var n=this.player.config.events.concat(["keyup","keydown"]).join(" ");eo.call(this.player,this.player.media,n,function(t){var n=t.detail,i=void 0===n?{}:n;"error"===t.type&&(i=e.player.media.error),io.call(e.player,e.player.elements.container,t.type,!0,i)})}},{key:"proxy",value:function(e,t,n){var i=this.player.config.listeners[n],r=!0;$r.function(i)&&(r=i.call(this.player,e)),r&&$r.function(t)&&t.call(this.player,e)}},{key:"bind",value:function(e,t,n,i){var r=this,o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=this.player.config.listeners[i],s=$r.function(a);eo.call(this.player,e,t,function(e){return r.proxy(e,n,i)},o&&!s)}},{key:"controls",value:function(){var e=this,t=Lo.isIE?"change":"input";this.player.elements.buttons.play&&Array.from(this.player.elements.buttons.play).forEach(function(t){e.bind(t,"click",e.player.togglePlay,"play")}),this.bind(this.player.elements.buttons.restart,"click",this.player.restart,"restart"),this.bind(this.player.elements.buttons.rewind,"click",this.player.rewind,"rewind"),this.bind(this.player.elements.buttons.fastForward,"click",this.player.forward,"fastForward"),this.bind(this.player.elements.buttons.mute,"click",function(){e.player.muted=!e.player.muted},"mute"),this.bind(this.player.elements.buttons.captions,"click",function(){return e.player.toggleCaptions()}),this.bind(this.player.elements.buttons.fullscreen,"click",function(){e.player.fullscreen.toggle()},"fullscreen"),this.bind(this.player.elements.buttons.pip,"click",function(){e.player.pip="toggle"},"pip"),this.bind(this.player.elements.buttons.airplay,"click",this.player.airplay,"airplay"),this.bind(this.player.elements.buttons.settings,"click",function(t){Qo.toggleMenu.call(e.player,t)}),this.bind(this.player.elements.buttons.settings,"keydown",function(t){32===t.which&&(t.preventDefault(),t.stopPropagation(),Qo.toggleMenu.call(e.player,t))},null,!1),this.bind(this.player.elements.inputs.seek,"mousedown mousemove",function(t){var n=e.player.elements.progress.getBoundingClientRect(),i=100/n.width*(t.pageX-n.left);t.currentTarget.setAttribute("seek-value",i)}),this.bind(this.player.elements.inputs.seek,"mousedown mouseup keydown keyup touchstart touchend",function(t){var n=t.currentTarget,i=t.keyCode?t.keyCode:t.which,r=t.type;if("keydown"!==r&&"keyup"!==r||39===i||37===i){var o=n.hasAttribute("play-on-seeked"),a=["mouseup","touchend","keyup"].includes(t.type);o&&a?(n.removeAttribute("play-on-seeked"),e.player.play()):!a&&e.player.playing&&(n.setAttribute("play-on-seeked",""),e.player.pause())}}),this.bind(this.player.elements.inputs.seek,t,function(t){var n=t.currentTarget,i=n.getAttribute("seek-value");$r.empty(i)&&(i=n.value),n.removeAttribute("seek-value"),e.player.currentTime=i/n.max*e.player.duration},"seek"),this.player.config.toggleInvert&&!$r.element(this.player.elements.display.duration)&&this.bind(this.player.elements.display.currentTime,"click",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,Qo.timeUpdate.call(e.player))}),this.bind(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},"volume"),Lo.isWebkit&&Array.from(ko.call(this.player,'input[type="range"]')).forEach(function(t){e.bind(t,"input",function(t){return Qo.updateRangeFill.call(e.player,t.target)})}),this.bind(this.player.elements.progress,"mouseenter mouseleave mousemove",function(t){return Qo.updateSeekTooltip.call(e.player,t)}),this.bind(this.player.elements.controls,"mouseenter mouseleave",function(t){e.player.elements.controls.hover=!e.player.touch&&"mouseenter"===t.type}),this.bind(this.player.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.player.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),this.bind(this.player.elements.controls,"focusin focusout",function(t){var n=e.player,i=n.config,r=n.elements,o=n.timers;if(vo(r.controls,i.classNames.noTransition,"focusin"===t.type),la.toggleControls.call(e.player,"focusin"===t.type),"focusin"===t.type){setTimeout(function(){vo(r.controls,i.classNames.noTransition,!1)},0);var a=e.touch?3e3:4e3;clearTimeout(o.controls),o.controls=setTimeout(function(){return la.toggleControls.call(e.player,!1)},a)}}),this.bind(this.player.elements.inputs.volume,"wheel",function(t){var n=t.webkitDirectionInvertedFromDevice,i=[t.deltaX,-t.deltaY].map(function(e){return n?-e:e}),r=so(i,2),o=r[0],a=r[1],s=Math.sign(Math.abs(o)>Math.abs(a)?o:a);e.player.increaseVolume(s/50);var l=e.player.media.volume;(1===s&&l<1||-1===s&&l>0)&&t.preventDefault()},"volume",!1)}}]),e}(),ua=t(function(e,t){var n;n=function(){var e=function(){},t={},n={},i={};function r(e,t){if(e){var r=i[e];if(n[e]=t,r)for(;r.length;)r[0](e,t),r.splice(0,1)}}function o(t,n){t.call&&(t={success:t}),n.length?(t.error||e)(n):(t.success||e)(t)}function a(t,n,i,r){var o,s,l=document,c=i.async,u=(i.numRetries||0)+1,h=i.before||e,f=t.replace(/^(css|img)!/,"");r=r||0,/(^css!|\.css$)/.test(t)?(o=!0,(s=l.createElement("link")).rel="stylesheet",s.href=f):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(s=l.createElement("img")).src=f:((s=l.createElement("script")).src=t,s.async=void 0===c||c),s.onload=s.onerror=s.onbeforeload=function(e){var l=e.type[0];if(o&&"hideFocus"in s)try{s.sheet.cssText.length||(l="e")}catch(e){l="e"}if("e"==l&&(r+=1)<u)return a(t,n,i,r);n(t,l,e.defaultPrevented)},!1!==h(t,s)&&l.head.appendChild(s)}function s(e,n,i){var s,l;if(n&&n.trim&&(s=n),l=(s?i:n)||{},s){if(s in t)throw"LoadJS";t[s]=!0}!function(e,t,n){var i,r,o=(e=e.push?e:[e]).length,s=o,l=[];for(i=function(e,n,i){if("e"==n&&l.push(e),"b"==n){if(!i)return;l.push(e)}--o||t(l)},r=0;r<s;r++)a(e[r],i,n)}(e,function(e){o(l,e),r(s,e)},l)}return s.ready=function(e,t){return function(e,t){e=e.push?e:[e];var r,o,a,s=[],l=e.length,c=l;for(r=function(e,n){n.length&&s.push(e),--c||t(s)};l--;)o=e[l],(a=n[o])?r(o,a):(i[o]=i[o]||[]).push(r)}(e,function(e){o(t,e)}),s},s.done=function(e){r(e,[])},s.reset=function(){t={},n={},i={}},s.isDefined=function(e){return e in t},s},e.exports=n()});function ha(e){return new Promise(function(t,n){ua(e,{success:t,error:n})})}function fa(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,io.call(this,this.media,e?"play":"pause"))}var da={setup:function(){var e=this;vo(this.elements.wrapper,this.config.classNames.embed,!0),da.setAspectRatio.call(this),$r.object(window.Vimeo)?da.ready.call(this):ha(this.config.urls.vimeo.sdk).then(function(){da.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=($r.string(e)?e:this.config.ratio).split(":"),n=so(t,2),i=100/n[0]*n[1];if(this.elements.wrapper.style.paddingBottom=i+"%",this.supported.ui){var r=(240-i)/4.8;this.media.style.transform="translateY(-"+r+"%)"}},ready:function(){var e=this,t=this,n=$o({loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative}),i=t.media.getAttribute("src");$r.empty(i)&&(i=t.media.getAttribute(t.config.attributes.embed.id));var r,o=(r=i,$r.empty(r)?null:$r.number(Number(r))?r:r.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:r),a=uo("iframe"),s=Io(t.config.urls.vimeo.iframe,o,n);a.setAttribute("src",s),a.setAttribute("allowfullscreen",""),a.setAttribute("allowtransparency",""),a.setAttribute("allow","autoplay");var l=uo("div",{poster:t.poster,class:t.config.classNames.embedContainer});l.appendChild(a),t.media=mo(l,t.media),Ho(Io(t.config.urls.vimeo.api,o),"json").then(function(e){if(!$r.empty(e)){var n=new URL(e[0].thumbnail_large);n.pathname=n.pathname.split("_")[0]+".jpg",la.setPoster.call(t,n.href).catch(function(){})}}),t.embed=new window.Vimeo.Player(a,{autopause:t.config.autopause,muted:t.muted}),t.media.paused=!0,t.media.currentTime=0,t.supported.ui&&t.embed.disableTextTrack(),t.media.play=function(){return fa.call(t,!0),t.embed.play()},t.media.pause=function(){return fa.call(t,!1),t.embed.pause()},t.media.stop=function(){t.pause(),t.currentTime=0};var c=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return c},set:function(e){var n=t.embed,i=t.media,r=t.paused,o=t.volume,a=r&&!n.hasPlayed;i.seeking=!0,io.call(t,i,"seeking"),Promise.resolve(a&&n.setVolume(0)).then(function(){return n.setCurrentTime(e)}).then(function(){return a&&n.pause()}).then(function(){return a&&n.setVolume(o)}).catch(function(){})}});var u=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return u},set:function(e){t.embed.setPlaybackRate(e).then(function(){u=e,io.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&Qo.setSpeedMenu.call(t,[])})}});var h=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return h},set:function(e){t.embed.setVolume(e).then(function(){h=e,io.call(t,t.media,"volumechange")})}});var f=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return f},set:function(e){var n=!!$r.boolean(e)&&e;t.embed.setVolume(n?0:t.config.volume).then(function(){f=n,io.call(t,t.media,"volumechange")})}});var d=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return d},set:function(e){var n=$r.boolean(e)?e:t.config.loop.active;t.embed.setLoop(n).then(function(){d=n})}});var p=void 0;t.embed.getVideoUrl().then(function(e){p=e}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return p}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var n=function(e,t){var n=function e(t,n){return 0===n?t:e(n,t%n)}(e,t);return e/n+":"+t/n}(t[0],t[1]);da.setAspectRatio.call(e,n)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(n){t.config.title=n,la.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,io.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,io.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,Xo.setup.call(t)}),t.embed.on("cuechange",function(e){var n=e.cues,i=(void 0===n?[]:n).map(function(e){return t=e.text,n=document.createDocumentFragment(),i=document.createElement("div"),n.appendChild(i),i.innerHTML=t,n.firstChild.innerText;var t,n,i});Xo.updateCues.call(t,i)}),t.embed.on("loaded",function(){(t.embed.getPaused().then(function(e){fa.call(t,!e),e||io.call(t,t.media,"playing")}),$r.element(t.embed.element)&&t.supported.ui)&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){fa.call(t,!0),io.call(t,t.media,"playing")}),t.embed.on("pause",function(){fa.call(t,!1)}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,io.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,io.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&io.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,io.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,io.call(t,t.media,"seeked")}),t.embed.on("ended",function(){t.media.paused=!0,io.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,io.call(t,t.media,"error")}),setTimeout(function(){return la.build.call(t)},0)}};function pa(e){var t=Object.entries({hd2160:2160,hd1440:1440,hd1080:1080,hd720:720,large:480,medium:360,small:240,tiny:144}).find(function(t){return t.includes(e)});return t?t.find(function(t){return t!==e}):"default"}function ma(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,io.call(this,this.media,e?"play":"pause"))}var ga,ya={setup:function(){var e=this;vo(this.elements.wrapper,this.config.classNames.embed,!0),ya.setAspectRatio.call(this),$r.object(window.YT)&&$r.function(window.YT.Player)?ya.ready.call(this):(ha(this.config.urls.youtube.sdk).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){ya.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if($r.function(this.embed.getVideoData)){var n=this.embed.getVideoData().title;if($r.empty(n))return this.config.title=n,void la.setTitle.call(this)}var i=this.config.keys.google;$r.string(i)&&!$r.empty(i)&&Ho(Io(this.config.urls.youtube.api,e,i)).then(function(e){$r.object(e)&&(t.config.title=e.items[0].snippet.title,la.setTitle.call(t))}).catch(function(){})},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if($r.empty(t)||!t.startsWith("youtube-")){var n=e.media.getAttribute("src");$r.empty(n)&&(n=e.media.getAttribute(this.config.attributes.embed.id));var i,r=(i=n,$r.empty(i)?null:i.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:i),o=e.provider+"-"+Math.floor(1e4*Math.random()),a=uo("div",{id:o,poster:e.poster});e.media=mo(a,e.media);var s=function(e){return"https://img.youtube.com/vi/"+r+"/"+e+"default.jpg"};sa(s("maxres"),121).catch(function(){return sa(s("sd"),121)}).catch(function(){return sa(s("hq"))}).then(function(t){return la.setPoster.call(e,t.src)}).then(function(t){t.includes("maxres")||(e.elements.poster.style.backgroundSize="cover")}).catch(function(){}),e.embed=new window.YT.Player(o,{videoId:r,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!e.media.error){var n=t.data,i={2:"The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.",5:"The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.",100:"The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.",101:"The owner of the requested video does not allow it to be played in embedded players.",150:"The owner of the requested video does not allow it to be played in embedded players."}[n]||"An unknown error occured";e.media.error={code:n,message:i},io.call(e,e.media,"error")}},onPlaybackQualityChange:function(){io.call(e,e.media,"qualitychange",!1,{quality:e.media.quality})},onPlaybackRateChange:function(t){var n=t.target;e.media.playbackRate=n.getPlaybackRate(),io.call(e,e.media,"ratechange")},onReady:function(t){var n=t.target;ya.getTitle.call(e,r),e.media.play=function(){ma.call(e,!0),n.playVideo()},e.media.pause=function(){ma.call(e,!1),n.pauseVideo()},e.media.stop=function(){n.stopVideo()},e.media.duration=n.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(n.getCurrentTime())},set:function(t){e.paused&&!e.embed.hasPlayed&&e.embed.mute(),e.media.seeking=!0,io.call(e,e.media,"seeking"),n.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return n.getPlaybackRate()},set:function(e){n.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return pa(n.getPlaybackQuality())},set:function(e){n.setPlaybackQuality(pa(e))}});var i=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return i},set:function(t){i=t,n.setVolume(100*i),io.call(e,e.media,"volumechange")}});var o=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return o},set:function(t){var i=$r.boolean(t)?t:o;o=i,n[i?"mute":"unMute"](),io.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return n.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=n.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),io.call(e,e.media,"timeupdate"),io.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=n.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&io.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),io.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return la.build.call(e)},50)},onStateChange:function(t){var n,i=t.target;switch(clearInterval(e.timers.playing),e.media.seeking&&[1,2].includes(t.data)&&(e.media.seeking=!1,io.call(e,e.media,"seeked")),t.data){case-1:io.call(e,e.media,"timeupdate"),e.media.buffered=i.getVideoLoadedFraction(),io.call(e,e.media,"progress");break;case 0:ma.call(e,!1),e.media.loop?(i.stopVideo(),i.playVideo()):io.call(e,e.media,"ended");break;case 1:e.media.paused&&!e.embed.hasPlayed?e.media.pause():(ma.call(e,!0),io.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){io.call(e,e.media,"timeupdate")},50),e.media.duration!==i.getDuration()&&(e.media.duration=i.getDuration(),io.call(e,e.media,"durationchange")),Qo.setQualityMenu.call(e,(n=i.getAvailableQualityLevels(),$r.empty(n)?n:Vo(n.map(function(e){return pa(e)})))));break;case 2:e.muted||e.embed.unMute(),ma.call(e,!1)}io.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},va={setup:function(){this.media?(vo(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),vo(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&vo(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.isVideo&&(this.elements.wrapper=uo("div",{class:this.config.classNames.video}),lo(this.media,this.elements.wrapper),this.elements.poster=uo("div",{class:this.config.classNames.poster}),this.elements.wrapper.appendChild(this.elements.poster)),this.isHTML5?Oo.extend.call(this):this.isYouTube?ya.setup.call(this):this.isVimeo&&da.setup.call(this)):this.debug.warn("No media element found!")}},ba=function(){function e(t){var n=this;ro(this,e),this.player=t,this.publisherId=t.config.ads.publisherId,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){n.on("loaded",e),n.on("error",t)}),this.load()}return oo(e,[{key:"load",value:function(){var e=this;this.enabled&&($r.object(window.google)&&$r.object(window.google.ima)?this.ready():ha(this.player.config.urls.googleIMA.sdk).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=uo("div",{class:this.player.config.classNames.ads}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var n=new google.ima.AdsRequest;n.adTagUrl=this.tagUrl,n.linearAdSlotWidth=t.offsetWidth,n.linearAdSlotHeight=t.offsetHeight,n.nonLinearAdSlotWidth=t.offsetWidth,n.nonLinearAdSlotHeight=t.offsetHeight,n.forceNonLinearFullSlot=!1,n.setAdWillPlayMuted(!this.player.muted),this.loader.requestAds(n)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=Yo(Math.max(e.manager.getRemainingTime(),0)),n=Do("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",n)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),$r.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var n=t.player.elements.progress;if($r.element(n)){var i=100/t.player.duration*e,r=uo("span",{class:t.player.config.classNames.cues});r.style.left=i.toString()+"%",n.appendChild(r)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,n=this.player.elements.container,i=e.getAd(),r=function(e){var n="ads"+e.replace(/_/g,"").toLowerCase();io.call(t.player,t.player.media,n)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),r(e.type),this.pollCountdown(!0),i.isLinear()||(i.width=n.offsetWidth,i.height=n.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:r(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:r(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:r(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:r(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,n=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return n=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;$r.empty(e.cuePoints)||e.cuePoints.forEach(function(i,r){n<i&&i<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(r,1))})}),window.addEventListener("resize",function(){e.manager&&e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("error"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,n=arguments.length,i=Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];var o=this.events[e];$r.array(o)&&o.forEach(function(e){$r.function(e)&&e.apply(t,i)})}},{key:"on",value:function(e,t){return $r.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var n=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){n.cancel(),n.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){$r.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"enabled",get:function(){return this.player.isHTML5&&this.player.isVideo&&this.player.config.ads.enabled&&!$r.empty(this.publisherId)}},{key:"tagUrl",get:function(){return"https://go.aniview.com/api/adserver6/vast/?"+$o({AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:window.location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId})}}]),e}(),wa={insertElements:function(e,t){var n=this;$r.string(t)?ho(e,this.media,{src:t}):$r.array(t)&&t.forEach(function(t){ho(e,n.media,t)})},change:function(e){var t=this;No(e,"sources.length")?(Oo.cancelRequests.call(this),this.destroy.call(this,function(){t.options.quality=[],fo(t.media),t.media=null,$r.element(t.elements.container)&&t.elements.container.removeAttribute("class");var n=e.sources,i=e.type,r=so(n,1)[0],o=r.provider,a=void 0===o?ea.html5:o,s=r.src,l="html5"===a?i:"div",c="html5"===a?{}:{src:s};Object.assign(t,{provider:a,type:i,supported:xo.check(i,a,t.config.playsinline),media:uo(l,c)}),t.elements.container.appendChild(t.media),$r.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),$r.empty(e.poster)||(t.poster=e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.playsinline&&t.media.setAttribute("playsinline","")),la.addStyleHook.call(t),t.isHTML5&&wa.insertElements.call(t,"source",n),t.config.title=e.title,va.setup.call(t),t.isHTML5&&("tracks"in e&&wa.insertElements.call(t,"track",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&la.build.call(t),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}},ka=function(){function e(t,n){var i=this;if(ro(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=xo.touch,this.media=t,$r.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||$r.nodeList(this.media)||$r.array(this.media))&&(this.media=this.media[0]),this.config=jo({},Zo,e.defaults,n||{},function(){try{return JSON.parse(i.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,captions:null,buttons:{},display:{},progress:{},inputs:{},settings:{popup:null,menu:null,panels:{},buttons:{}}},this.captions={active:null,currentTrack:-1,meta:new WeakMap},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new ia(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",xo),!$r.nullOrUndefined(this.media)&&$r.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(xo.check().api){var r=this.media.cloneNode(!0);r.autoplay=!1,this.elements.original=r;var o=this.media.tagName.toLowerCase(),a=null,s=null;switch(o){case"div":if(a=this.media.querySelector("iframe"),$r.element(a)){if(s=Jo(a.getAttribute("src")),this.provider=function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?ea.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{0,9}(?=\b|\/)/.test(e)?ea.vimeo:null}(s.toString()),this.elements.container=this.media,this.media=a,this.elements.container.className="",s.searchParams.length){var l=["1","true"];l.includes(s.searchParams.get("autoplay"))&&(this.config.autoplay=!0),l.includes(s.searchParams.get("loop"))&&(this.config.loop.active=!0),this.isYouTube?this.config.playsinline=l.includes(s.searchParams.get("playsinline")):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if($r.empty(this.provider)||!Object.keys(ea).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=ta.video;break;case"video":case"audio":this.type=o,this.provider=ea.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.playsinline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=xo.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.eventListeners=[],this.listeners=new ca(this),this.storage=new Uo(this),this.media.plyr=this,$r.element(this.elements.container)||(this.elements.container=uo("div"),lo(this.media,this.elements.container)),la.addStyleHook.call(this),va.setup.call(this),this.config.debug&&eo.call(this,this.elements.container,this.config.events.join(" "),function(e){i.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&la.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new aa(this),this.ads=new ba(this),this.config.autoplay&&this.play()):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return oo(e,[{key:"play",value:function(){return $r.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&$r.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){($r.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?(this.pause(),this.restart()):$r.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-($r.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+($r.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+($r.number(e)?e:0)}},{key:"decreaseVolume",value:function(e){this.increaseVolume(-e)}},{key:"toggleCaptions",value:function(e){Xo.toggle.call(this,e,!1)}},{key:"airplay",value:function(){xo.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){if(this.supported.ui&&!this.isAudio){var t=bo(this.elements.container,this.config.classNames.hideControls),n=void 0===e?void 0:!e,i=vo(this.elements.container,this.config.classNames.hideControls,n);if(i&&this.config.controls.includes("settings")&&!$r.empty(this.config.settings)&&Qo.toggleMenu.call(this,!1),i!==t){var r=i?"controlshidden":"controlsshown";io.call(this,this.media,r)}return!i}return!1}},{key:"on",value:function(e,t){eo.call(this,this.elements.container,e,t)}},{key:"once",value:function(e,t){no.call(this,this.elements.container,e,t)}},{key:"off",value:function(e,t){to(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var i=function(){document.body.style.overflow="",t.embed=null,n?(Object.keys(t.elements).length&&(fo(t.elements.buttons.play),fo(t.elements.captions),fo(t.elements.controls),fo(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),$r.function(e)&&e()):(function(){this&&this.eventListeners&&(this.eventListeners.forEach(function(e){var t=e.element,n=e.type,i=e.callback,r=e.options;t.removeEventListener(n,i,r)}),this.eventListeners=[])}.call(t),mo(t.elements.original,t.elements.container),io.call(t,t.elements.original,"destroyed",!0),$r.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};this.stop(),this.isHTML5?(clearTimeout(this.timers.loading),la.toggleNativeControls.call(this,!0),i()):this.isYouTube?(clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&$r.function(this.embed.destroy)&&this.embed.destroy(),i()):this.isVimeo&&(null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200))}}},{key:"supports",value:function(e){return xo.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===ea.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===ea.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===ea.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===ta.video)}},{key:"isAudio",get:function(){return Boolean(this.type===ta.audio)}},{key:"playing",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"stopped",get:function(){return Boolean(this.paused&&0===this.currentTime)}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){if(this.duration){var t=$r.number(e)&&e>0;this.media.currentTime=t?Math.min(e,this.duration):0,this.debug.log("Seeking to "+this.currentTime+" seconds")}},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return $r.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseFloat(this.config.duration),t=(this.media||{}).duration,n=$r.number(t)&&t!==1/0?t:0;return e||n}},{key:"volume",set:function(e){var t=e;$r.string(t)&&(t=Number(t)),$r.number(t)||(t=this.storage.get("volume")),$r.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!$r.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;$r.boolean(t)||(t=this.storage.get("muted")),$r.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;$r.number(e)&&(t=e),$r.number(t)||(t=this.storage.get("speed")),$r.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=this.config.quality,n=this.options.quality;if(n.length){var i=[!$r.empty(e)&&Number(e),this.storage.get("quality"),t.selected,t.default].find($r.number);if(!n.includes(i)){var r=function(e,t){return $r.array(e)&&e.length?e.reduce(function(e,n){return Math.abs(n-t)<Math.abs(e-t)?n:e}):null}(n,i);this.debug.warn("Unsupported quality option: "+i+", using "+r+" instead"),i=r}io.call(this,this.media,"qualityrequested",!1,{quality:i}),t.selected=i,this.media.quality=i}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=$r.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){wa.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isVideo?la.setPoster.call(this,e,!1).catch(function(){}):this.debug.warn("Poster can only be set for video")},get:function(){return this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=$r.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"currentTrack",set:function(e){Xo.set.call(this,e,!1)},get:function(){var e=this.captions,t=e.toggled,n=e.currentTrack;return t?n:-1}},{key:"language",set:function(e){Xo.setLanguage.call(this,e,!1)},get:function(){return(Xo.getCurrentTrack.call(this)||{}).language}},{key:"pip",set:function(e){var t="picture-in-picture",n="inline";if(xo.pip){var i=$r.boolean(e)?e:this.pip===n;this.media.webkitSetPresentationMode(i?t:n)}},get:function(){return xo.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,n){return xo.check(e,t,n)}},{key:"loadSprite",value:function(e,t){return Wo(e,t)}},{key:"setup",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=null;return $r.string(t)?i=Array.from(document.querySelectorAll(t)):$r.nodeList(t)?i=Array.from(t):$r.array(t)&&(i=t.filter($r.element)),$r.empty(i)?null:i.map(function(t){return new e(t,n)})}}]),e}();return ka.defaults=(ga=Zo,JSON.parse(JSON.stringify(ga))),ka});
+"object"==typeof navigator&&function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),i=t(function(e){var t=e.exports={version:"2.5.3"};"number"==typeof __e&&(__e=t)}),r=(i.version,function(e){return"object"==typeof e?null!==e:"function"==typeof e}),o=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e},a=function(e){try{return!!e()}catch(e){return!0}},s=!a(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),l=n.document,c=r(l)&&r(l.createElement),u=function(e){return c?l.createElement(e):{}},f=!s&&!a(function(){return 7!=Object.defineProperty(u("div"),"a",{get:function(){return 7}}).a}),h=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")},d=Object.defineProperty,p={f:s?Object.defineProperty:function(e,t,n){if(o(e),t=h(t,!0),o(n),f)try{return d(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},m=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},g=s?function(e,t,n){return p.f(e,t,m(1,n))}:function(e,t,n){return e[t]=n,e},y={}.hasOwnProperty,v=function(e,t){return y.call(e,t)},b=0,w=Math.random(),k=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++b+w).toString(36))},T=t(function(e){var t=k("src"),r=Function.toString,o=(""+r).split("toString");i.inspectSource=function(e){return r.call(e)},(e.exports=function(e,i,r,a){var s="function"==typeof r;s&&(v(r,"name")||g(r,"name",i)),e[i]!==r&&(s&&(v(r,t)||g(r,t,e[i]?""+e[i]:o.join(String(i)))),e===n?e[i]=r:a?e[i]?e[i]=r:g(e,i,r):(delete e[i],g(e,i,r)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[t]||r.call(this)})}),S=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},E=function(e,t,n){if(S(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,r){return e.call(t,n,i,r)}}return function(){return e.apply(t,arguments)}},_=function(e,t,r){var o,a,s,l,c=e&_.F,u=e&_.G,f=e&_.S,h=e&_.P,d=e&_.B,p=u?n:f?n[t]||(n[t]={}):(n[t]||{}).prototype,m=u?i:i[t]||(i[t]={}),y=m.prototype||(m.prototype={});for(o in u&&(r=t),r)s=((a=!c&&p&&void 0!==p[o])?p:r)[o],l=d&&a?E(s,n):h&&"function"==typeof s?E(Function.call,s):s,p&&T(p,o,s,e&_.U),m[o]!=s&&g(m,o,l),h&&y[o]!=s&&(y[o]=s)};n.core=i,_.F=1,_.G=2,_.S=4,_.P=8,_.B=16,_.W=32,_.U=64,_.R=128;for(var A,P=_,M=k("typed_array"),L=k("view"),C=!(!n.ArrayBuffer||!n.DataView),x=C,O=0,N="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");O<9;)(A=n[N[O++]])?(g(A.prototype,M,!0),g(A.prototype,L,!0)):x=!1;var j={ABV:C,CONSTR:x,TYPED:M,VIEW:L},I=function(e,t,n){for(var i in t)T(e,i,t[i],n);return e},F=function(e,t,n,i){if(!(e instanceof t)||void 0!==i&&i in e)throw TypeError(n+": incorrect invocation!");return e},R=Math.ceil,q=Math.floor,B=function(e){return isNaN(e=+e)?0:(e>0?q:R)(e)},D=Math.min,V=function(e){return e>0?D(B(e),9007199254740991):0},U=function(e){if(void 0===e)return 0;var t=B(e),n=V(t);if(t!==n)throw RangeError("Wrong length!");return n},H={}.toString,W=function(e){return H.call(e).slice(8,-1)},z=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==W(e)?e.split(""):Object(e)},G=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e},K=function(e){return z(G(e))},Y=Math.max,Q=Math.min,J=function(e,t){return(e=B(e))<0?Y(e+t,0):Q(e,t)},$=function(e){return function(t,n,i){var r,o=K(t),a=V(o.length),s=J(i,a);if(e&&n!=n){for(;a>s;)if((r=o[s++])!=r)return!0}else for(;a>s;s++)if((e||s in o)&&o[s]===n)return e||s||0;return!e&&-1}},X=n["__core-js_shared__"]||(n["__core-js_shared__"]={}),Z=function(e){return X[e]||(X[e]={})},ee=Z("keys"),te=function(e){return ee[e]||(ee[e]=k(e))},ne=$(!1),ie=te("IE_PROTO"),re=function(e,t){var n,i=K(e),r=0,o=[];for(n in i)n!=ie&&v(i,n)&&o.push(n);for(;t.length>r;)v(i,n=t[r++])&&(~ne(o,n)||o.push(n));return o},oe="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),ae=oe.concat("length","prototype"),se={f:Object.getOwnPropertyNames||function(e){return re(e,ae)}},le=function(e){return Object(G(e))},ce=function(e){for(var t=le(this),n=V(t.length),i=arguments.length,r=J(i>1?arguments[1]:void 0,n),o=i>2?arguments[2]:void 0,a=void 0===o?n:J(o,n);a>r;)t[r++]=e;return t},ue=t(function(e){var t=Z("wks"),i=n.Symbol,r="function"==typeof i;(e.exports=function(e){return t[e]||(t[e]=r&&i[e]||(r?i:k)("Symbol."+e))}).store=t}),fe=p.f,he=ue("toStringTag"),de=function(e,t,n){e&&!v(e=n?e:e.prototype,he)&&fe(e,he,{configurable:!0,value:t})},pe=t(function(e,t){var i=se.f,r=p.f,o="prototype",l="Wrong index!",c=n.ArrayBuffer,u=n.DataView,f=n.Math,h=n.RangeError,d=n.Infinity,m=c,y=f.abs,v=f.pow,b=f.floor,w=f.log,k=f.LN2,T=s?"_b":"buffer",S=s?"_l":"byteLength",E=s?"_o":"byteOffset";function _(e,t,n){var i,r,o,a=new Array(n),s=8*n-t-1,l=(1<<s)-1,c=l>>1,u=23===t?v(2,-24)-v(2,-77):0,f=0,h=e<0||0===e&&1/e<0?1:0;for((e=y(e))!=e||e===d?(r=e!=e?1:0,i=l):(i=b(w(e)/k),e*(o=v(2,-i))<1&&(i--,o*=2),(e+=i+c>=1?u/o:u*v(2,1-c))*o>=2&&(i++,o/=2),i+c>=l?(r=0,i=l):i+c>=1?(r=(e*o-1)*v(2,t),i+=c):(r=e*v(2,c-1)*v(2,t),i=0));t>=8;a[f++]=255&r,r/=256,t-=8);for(i=i<<t|r,s+=t;s>0;a[f++]=255&i,i/=256,s-=8);return a[--f]|=128*h,a}function A(e,t,n){var i,r=8*n-t-1,o=(1<<r)-1,a=o>>1,s=r-7,l=n-1,c=e[l--],u=127&c;for(c>>=7;s>0;u=256*u+e[l],l--,s-=8);for(i=u&(1<<-s)-1,u>>=-s,s+=t;s>0;i=256*i+e[l],l--,s-=8);if(0===u)u=1-a;else{if(u===o)return i?NaN:c?-d:d;i+=v(2,t),u-=a}return(c?-1:1)*i*v(2,u-t)}function P(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]}function M(e){return[255&e]}function L(e){return[255&e,e>>8&255]}function C(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}function x(e){return _(e,52,8)}function O(e){return _(e,23,4)}function N(e,t,n){r(e[o],t,{get:function(){return this[n]}})}function R(e,t,n,i){var r=U(+n);if(r+t>e[S])throw h(l);var o=e[T]._b,a=r+e[E],s=o.slice(a,a+t);return i?s:s.reverse()}function q(e,t,n,i,r,o){var a=U(+n);if(a+t>e[S])throw h(l);for(var s=e[T]._b,c=a+e[E],u=i(+r),f=0;f<t;f++)s[c+f]=u[o?f:t-f-1]}if(j.ABV){if(!a(function(){c(1)})||!a(function(){new c(-1)})||a(function(){return new c,new c(1.5),new c(NaN),"ArrayBuffer"!=c.name})){for(var D,H=(c=function(e){return F(this,c),new m(U(e))})[o]=m[o],W=i(m),z=0;W.length>z;)(D=W[z++])in c||g(c,D,m[D]);H.constructor=c}var G=new u(new c(2)),K=u[o].setInt8;G.setInt8(0,2147483648),G.setInt8(1,2147483649),!G.getInt8(0)&&G.getInt8(1)||I(u[o],{setInt8:function(e,t){K.call(this,e,t<<24>>24)},setUint8:function(e,t){K.call(this,e,t<<24>>24)}},!0)}else c=function(e){F(this,c,"ArrayBuffer");var t=U(e);this._b=ce.call(new Array(t),0),this[S]=t},u=function(e,t,n){F(this,u,"DataView"),F(e,c,"DataView");var i=e[S],r=B(t);if(r<0||r>i)throw h("Wrong offset!");if(r+(n=void 0===n?i-r:V(n))>i)throw h("Wrong length!");this[T]=e,this[E]=r,this[S]=n},s&&(N(c,"byteLength","_l"),N(u,"buffer","_b"),N(u,"byteLength","_l"),N(u,"byteOffset","_o")),I(u[o],{getInt8:function(e){return R(this,1,e)[0]<<24>>24},getUint8:function(e){return R(this,1,e)[0]},getInt16:function(e){var t=R(this,2,e,arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=R(this,2,e,arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return P(R(this,4,e,arguments[1]))},getUint32:function(e){return P(R(this,4,e,arguments[1]))>>>0},getFloat32:function(e){return A(R(this,4,e,arguments[1]),23,4)},getFloat64:function(e){return A(R(this,8,e,arguments[1]),52,8)},setInt8:function(e,t){q(this,1,e,M,t)},setUint8:function(e,t){q(this,1,e,M,t)},setInt16:function(e,t){q(this,2,e,L,t,arguments[2])},setUint16:function(e,t){q(this,2,e,L,t,arguments[2])},setInt32:function(e,t){q(this,4,e,C,t,arguments[2])},setUint32:function(e,t){q(this,4,e,C,t,arguments[2])},setFloat32:function(e,t){q(this,4,e,O,t,arguments[2])},setFloat64:function(e,t){q(this,8,e,x,t,arguments[2])}});de(c,"ArrayBuffer"),de(u,"DataView"),g(u[o],j.VIEW,!0),t.ArrayBuffer=c,t.DataView=u}),me=ue("species"),ge=function(e,t){var n,i=o(e).constructor;return void 0===i||null==(n=o(i)[me])?t:S(n)},ye=ue("species"),ve=function(e){var t=n[e];s&&t&&!t[ye]&&p.f(t,ye,{configurable:!0,get:function(){return this}})},be=n.ArrayBuffer,we=pe.ArrayBuffer,ke=pe.DataView,Te=j.ABV&&be.isView,Se=we.prototype.slice,Ee=j.VIEW;P(P.G+P.W+P.F*(be!==we),{ArrayBuffer:we}),P(P.S+P.F*!j.CONSTR,"ArrayBuffer",{isView:function(e){return Te&&Te(e)||r(e)&&Ee in e}}),P(P.P+P.U+P.F*a(function(){return!new we(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function(e,t){if(void 0!==Se&&void 0===t)return Se.call(o(this),e);for(var n=o(this).byteLength,i=J(e,n),r=J(void 0===t?n:t,n),a=new(ge(this,we))(V(r-i)),s=new ke(this),l=new ke(a),c=0;i<r;)l.setUint8(c++,s.getUint8(i++));return a}}),ve("ArrayBuffer");var _e=ue("toStringTag"),Ae="Arguments"==W(function(){return arguments}()),Pe=function(e){var t,n,i;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),_e))?n:Ae?W(t):"Object"==(i=W(t))&&"function"==typeof t.callee?"Arguments":i},Me={},Le=ue("iterator"),Ce=Array.prototype,xe=function(e){return void 0!==e&&(Me.Array===e||Ce[Le]===e)},Oe=Object.keys||function(e){return re(e,oe)},Ne=s?Object.defineProperties:function(e,t){o(e);for(var n,i=Oe(t),r=i.length,a=0;r>a;)p.f(e,n=i[a++],t[n]);return e},je=n.document,Ie=je&&je.documentElement,Fe=te("IE_PROTO"),Re=function(){},qe=function(){var e,t=u("iframe"),n=oe.length;for(t.style.display="none",Ie.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),qe=e.F;n--;)delete qe.prototype[oe[n]];return qe()},Be=Object.create||function(e,t){var n;return null!==e?(Re.prototype=o(e),n=new Re,Re.prototype=null,n[Fe]=e):n=qe(),void 0===t?n:Ne(n,t)},De=te("IE_PROTO"),Ve=Object.prototype,Ue=Object.getPrototypeOf||function(e){return e=le(e),v(e,De)?e[De]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?Ve:null},He=ue("iterator"),We=i.getIteratorMethod=function(e){if(null!=e)return e[He]||e["@@iterator"]||Me[Pe(e)]},ze=Array.isArray||function(e){return"Array"==W(e)},Ge=ue("species"),Ke=function(e,t){return new(function(e){var t;return ze(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!ze(t.prototype)||(t=void 0),r(t)&&null===(t=t[Ge])&&(t=void 0)),void 0===t?Array:t}(e))(t)},Ye=function(e,t){var n=1==e,i=2==e,r=3==e,o=4==e,a=6==e,s=5==e||a,l=t||Ke;return function(t,c,u){for(var f,h,d=le(t),p=z(d),m=E(c,u,3),g=V(p.length),y=0,v=n?l(t,g):i?l(t,0):void 0;g>y;y++)if((s||y in p)&&(h=m(f=p[y],y,d),e))if(n)v[y]=h;else if(h)switch(e){case 3:return!0;case 5:return f;case 6:return y;case 2:v.push(f)}else if(o)return!1;return a?-1:r||o?o:v}},Qe=ue("unscopables"),Je=Array.prototype;null==Je[Qe]&&g(Je,Qe,{});var $e=function(e){Je[Qe][e]=!0},Xe=function(e,t){return{value:t,done:!!e}},Ze={};g(Ze,ue("iterator"),function(){return this});var et=function(e,t,n){e.prototype=Be(Ze,{next:m(1,n)}),de(e,t+" Iterator")},tt=ue("iterator"),nt=!([].keys&&"next"in[].keys()),it=function(){return this},rt=function(e,t,n,i,r,o,a){et(n,t,i);var s,l,c,u=function(e){if(!nt&&e in p)return p[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},f=t+" Iterator",h="values"==r,d=!1,p=e.prototype,m=p[tt]||p["@@iterator"]||r&&p[r],y=!nt&&m||u(r),b=r?h?u("entries"):y:void 0,w="Array"==t&&p.entries||m;if(w&&(c=Ue(w.call(new e)))!==Object.prototype&&c.next&&(de(c,f,!0),v(c,tt)||g(c,tt,it)),h&&m&&"values"!==m.name&&(d=!0,y=function(){return m.call(this)}),(nt||d||!p[tt])&&g(p,tt,y),Me[t]=y,Me[f]=it,r)if(s={values:h?y:u("values"),keys:o?y:u("keys"),entries:b},a)for(l in s)l in p||T(p,l,s[l]);else P(P.P+P.F*(nt||d),t,s);return s},ot=rt(Array,"Array",function(e,t){this._t=K(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,Xe(1)):Xe(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values");Me.Arguments=Me.Array,$e("keys"),$e("values"),$e("entries");var at=ue("iterator"),st=!1;try{[7][at]().return=function(){st=!0}}catch(e){}var lt=function(e,t){if(!t&&!st)return!1;var n=!1;try{var i=[7],r=i[at]();r.next=function(){return{done:n=!0}},i[at]=function(){return r},e(i)}catch(e){}return n},ct=[].copyWithin||function(e,t){var n=le(this),i=V(n.length),r=J(e,i),o=J(t,i),a=arguments.length>2?arguments[2]:void 0,s=Math.min((void 0===a?i:J(a,i))-o,i-r),l=1;for(o<r&&r<o+s&&(l=-1,o+=s-1,r+=s-1);s-- >0;)o in n?n[r]=n[o]:delete n[r],r+=l,o+=l;return n},ut={f:{}.propertyIsEnumerable},ft=Object.getOwnPropertyDescriptor,ht={f:s?ft:function(e,t){if(e=K(e),t=h(t,!0),f)try{return ft(e,t)}catch(e){}if(v(e,t))return m(!ut.f.call(e,t),e[t])}},dt=t(function(e){if(s){var t=n,i=a,o=P,l=j,c=pe,u=E,f=F,d=m,y=g,b=I,w=B,T=V,S=U,_=J,A=h,M=v,L=Pe,C=r,x=le,O=xe,N=Be,R=Ue,q=se.f,D=We,H=k,W=ue,z=Ye,G=$,K=ge,Y=ot,Q=Me,X=lt,Z=ve,ee=ce,te=ct,ne=p,ie=ht,re=ne.f,oe=ie.f,ae=t.RangeError,fe=t.TypeError,he=t.Uint8Array,de=Array.prototype,me=c.ArrayBuffer,ye=c.DataView,be=z(0),we=z(2),ke=z(3),Te=z(4),Se=z(5),Ee=z(6),_e=G(!0),Ae=G(!1),Le=Y.values,Ce=Y.keys,Oe=Y.entries,Ne=de.lastIndexOf,je=de.reduce,Ie=de.reduceRight,Fe=de.join,Re=de.sort,qe=de.slice,De=de.toString,Ve=de.toLocaleString,He=W("iterator"),ze=W("toStringTag"),Ge=H("typed_constructor"),Ke=H("def_constructor"),Qe=l.CONSTR,Je=l.TYPED,$e=l.VIEW,Xe=z(1,function(e,t){return it(K(e,e[Ke]),t)}),Ze=i(function(){return 1===new he(new Uint16Array([1]).buffer)[0]}),et=!!he&&!!he.prototype.set&&i(function(){new he(1).set({})}),tt=function(e,t){var n=w(e);if(n<0||n%t)throw ae("Wrong offset!");return n},nt=function(e){if(C(e)&&Je in e)return e;throw fe(e+" is not a typed array!")},it=function(e,t){if(!(C(e)&&Ge in e))throw fe("It is not a typed array constructor!");return new e(t)},rt=function(e,t){return at(K(e,e[Ke]),t)},at=function(e,t){for(var n=0,i=t.length,r=it(e,i);i>n;)r[n]=t[n++];return r},st=function(e,t,n){re(e,t,{get:function(){return this._d[n]}})},ut=function(e){var t,n,i,r,o,a,s=x(e),l=arguments.length,c=l>1?arguments[1]:void 0,f=void 0!==c,h=D(s);if(null!=h&&!O(h)){for(a=h.call(s),i=[],t=0;!(o=a.next()).done;t++)i.push(o.value);s=i}for(f&&l>2&&(c=u(c,arguments[2],2)),t=0,n=T(s.length),r=it(this,n);n>t;t++)r[t]=f?c(s[t],t):s[t];return r},ft=function(){for(var e=0,t=arguments.length,n=it(this,t);t>e;)n[e]=arguments[e++];return n},dt=!!he&&i(function(){Ve.call(new he(1))}),pt=function(){return Ve.apply(dt?qe.call(nt(this)):nt(this),arguments)},mt={copyWithin:function(e,t){return te.call(nt(this),e,t,arguments.length>2?arguments[2]:void 0)},every:function(e){return Te(nt(this),e,arguments.length>1?arguments[1]:void 0)},fill:function(e){return ee.apply(nt(this),arguments)},filter:function(e){return rt(this,we(nt(this),e,arguments.length>1?arguments[1]:void 0))},find:function(e){return Se(nt(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function(e){return Ee(nt(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function(e){be(nt(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function(e){return Ae(nt(this),e,arguments.length>1?arguments[1]:void 0)},includes:function(e){return _e(nt(this),e,arguments.length>1?arguments[1]:void 0)},join:function(e){return Fe.apply(nt(this),arguments)},lastIndexOf:function(e){return Ne.apply(nt(this),arguments)},map:function(e){return Xe(nt(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function(e){return je.apply(nt(this),arguments)},reduceRight:function(e){return Ie.apply(nt(this),arguments)},reverse:function(){for(var e,t=nt(this).length,n=Math.floor(t/2),i=0;i<n;)e=this[i],this[i++]=this[--t],this[t]=e;return this},some:function(e){return ke(nt(this),e,arguments.length>1?arguments[1]:void 0)},sort:function(e){return Re.call(nt(this),e)},subarray:function(e,t){var n=nt(this),i=n.length,r=_(e,i);return new(K(n,n[Ke]))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,T((void 0===t?i:_(t,i))-r))}},gt=function(e,t){return rt(this,qe.call(nt(this),e,t))},yt=function(e){nt(this);var t=tt(arguments[1],1),n=this.length,i=x(e),r=T(i.length),o=0;if(r+t>n)throw ae("Wrong length!");for(;o<r;)this[t+o]=i[o++]},vt={entries:function(){return Oe.call(nt(this))},keys:function(){return Ce.call(nt(this))},values:function(){return Le.call(nt(this))}},bt=function(e,t){return C(e)&&e[Je]&&"symbol"!=typeof t&&t in e&&String(+t)==String(t)},wt=function(e,t){return bt(e,t=A(t,!0))?d(2,e[t]):oe(e,t)},kt=function(e,t,n){return!(bt(e,t=A(t,!0))&&C(n)&&M(n,"value"))||M(n,"get")||M(n,"set")||n.configurable||M(n,"writable")&&!n.writable||M(n,"enumerable")&&!n.enumerable?re(e,t,n):(e[t]=n.value,e)};Qe||(ie.f=wt,ne.f=kt),o(o.S+o.F*!Qe,"Object",{getOwnPropertyDescriptor:wt,defineProperty:kt}),i(function(){De.call({})})&&(De=Ve=function(){return Fe.call(this)});var Tt=b({},mt);b(Tt,vt),y(Tt,He,vt.values),b(Tt,{slice:gt,set:yt,constructor:function(){},toString:De,toLocaleString:pt}),st(Tt,"buffer","b"),st(Tt,"byteOffset","o"),st(Tt,"byteLength","l"),st(Tt,"length","e"),re(Tt,ze,{get:function(){return this[Je]}}),e.exports=function(e,n,r,a){var s=e+((a=!!a)?"Clamped":"")+"Array",c="get"+e,u="set"+e,h=t[s],d=h||{},p=h&&R(h),m=!h||!l.ABV,g={},v=h&&h.prototype,b=function(e,t){re(e,t,{get:function(){return function(e,t){var i=e._d;return i.v[c](t*n+i.o,Ze)}(this,t)},set:function(e){return function(e,t,i){var r=e._d;a&&(i=(i=Math.round(i))<0?0:i>255?255:255&i),r.v[u](t*n+r.o,i,Ze)}(this,t,e)},enumerable:!0})};m?(h=r(function(e,t,i,r){f(e,h,s,"_d");var o,a,l,c,u=0,d=0;if(C(t)){if(!(t instanceof me||"ArrayBuffer"==(c=L(t))||"SharedArrayBuffer"==c))return Je in t?at(h,t):ut.call(h,t);o=t,d=tt(i,n);var p=t.byteLength;if(void 0===r){if(p%n)throw ae("Wrong length!");if((a=p-d)<0)throw ae("Wrong length!")}else if((a=T(r)*n)+d>p)throw ae("Wrong length!");l=a/n}else l=S(t),o=new me(a=l*n);for(y(e,"_d",{b:o,o:d,l:a,e:l,v:new ye(o)});u<l;)b(e,u++)}),v=h.prototype=N(Tt),y(v,"constructor",h)):i(function(){h(1)})&&i(function(){new h(-1)})&&X(function(e){new h,new h(null),new h(1.5),new h(e)},!0)||(h=r(function(e,t,i,r){var o;return f(e,h,s),C(t)?t instanceof me||"ArrayBuffer"==(o=L(t))||"SharedArrayBuffer"==o?void 0!==r?new d(t,tt(i,n),r):void 0!==i?new d(t,tt(i,n)):new d(t):Je in t?at(h,t):ut.call(h,t):new d(S(t))}),be(p!==Function.prototype?q(d).concat(q(p)):q(d),function(e){e in h||y(h,e,d[e])}),h.prototype=v,v.constructor=h);var w=v[He],k=!!w&&("values"==w.name||null==w.name),E=vt.values;y(h,Ge,!0),y(v,Je,s),y(v,$e,!0),y(v,Ke,h),(a?new h(1)[ze]==s:ze in v)||re(v,ze,{get:function(){return s}}),g[s]=h,o(o.G+o.W+o.F*(h!=d),g),o(o.S,s,{BYTES_PER_ELEMENT:n}),o(o.S+o.F*i(function(){d.of.call(h,1)}),s,{from:ut,of:ft}),"BYTES_PER_ELEMENT"in v||y(v,"BYTES_PER_ELEMENT",n),o(o.P,s,mt),Z(s),o(o.P+o.F*et,s,{set:yt}),o(o.P+o.F*!k,s,vt),v.toString!=De&&(v.toString=De),o(o.P+o.F*i(function(){new h(1).slice()}),s,{slice:gt}),o(o.P+o.F*(i(function(){return[1,2].toLocaleString()!=new h([1,2]).toLocaleString()})||!i(function(){v.toLocaleString.call([1,2])})),s,{toLocaleString:pt}),Q[s]=k?w:E,k||y(v,He,E)}}else e.exports=function(){}});dt("Int8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),dt("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),dt("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}},!0),dt("Int16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),dt("Uint16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),dt("Int32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),dt("Uint32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),dt("Float32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),dt("Float64",8,function(e){return function(t,n,i){return e(this,t,n,i)}});var pt=function(e,t,n,i){try{return i?t(o(n)[0],n[1]):t(n)}catch(t){var r=e.return;throw void 0!==r&&o(r.call(e)),t}},mt=t(function(e){var t={},n={},i=e.exports=function(e,i,r,a,s){var l,c,u,f,h=s?function(){return e}:We(e),d=E(r,a,i?2:1),p=0;if("function"!=typeof h)throw TypeError(e+" is not iterable!");if(xe(h)){for(l=V(e.length);l>p;p++)if((f=i?d(o(c=e[p])[0],c[1]):d(e[p]))===t||f===n)return f}else for(u=h.call(e);!(c=u.next()).done;)if((f=pt(u,d,c.value,i))===t||f===n)return f};i.BREAK=t,i.RETURN=n}),gt=t(function(e){var t=k("meta"),n=p.f,i=0,o=Object.isExtensible||function(){return!0},s=!a(function(){return o(Object.preventExtensions({}))}),l=function(e){n(e,t,{value:{i:"O"+ ++i,w:{}}})},c=e.exports={KEY:t,NEED:!1,fastKey:function(e,n){if(!r(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!v(e,t)){if(!o(e))return"F";if(!n)return"E";l(e)}return e[t].i},getWeak:function(e,n){if(!v(e,t)){if(!o(e))return!0;if(!n)return!1;l(e)}return e[t].w},onFreeze:function(e){return s&&c.NEED&&o(e)&&!v(e,t)&&l(e),e}}}),yt=(gt.KEY,gt.NEED,gt.fastKey,gt.getWeak,gt.onFreeze,function(e,t){if(!r(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e}),vt=p.f,bt=gt.fastKey,wt=s?"_s":"size",kt=function(e,t){var n,i=bt(t);if("F"!==i)return e._i[i];for(n=e._f;n;n=n.n)if(n.k==t)return n},Tt={getConstructor:function(e,t,n,i){var r=e(function(e,o){F(e,r,t,"_i"),e._t=t,e._i=Be(null),e._f=void 0,e._l=void 0,e[wt]=0,null!=o&&mt(o,n,e[i],e)});return I(r.prototype,{clear:function(){for(var e=yt(this,t),n=e._i,i=e._f;i;i=i.n)i.r=!0,i.p&&(i.p=i.p.n=void 0),delete n[i.i];e._f=e._l=void 0,e[wt]=0},delete:function(e){var n=yt(this,t),i=kt(n,e);if(i){var r=i.n,o=i.p;delete n._i[i.i],i.r=!0,o&&(o.n=r),r&&(r.p=o),n._f==i&&(n._f=r),n._l==i&&(n._l=o),n[wt]--}return!!i},forEach:function(e){yt(this,t);for(var n,i=E(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(i(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!kt(yt(this,t),e)}}),s&&vt(r.prototype,"size",{get:function(){return yt(this,t)[wt]}}),r},def:function(e,t,n){var i,r,o=kt(e,t);return o?o.v=n:(e._l=o={i:r=bt(t,!0),k:t,v:n,p:i=e._l,n:void 0,r:!1},e._f||(e._f=o),i&&(i.n=o),e[wt]++,"F"!==r&&(e._i[r]=o)),e},getEntry:kt,setStrong:function(e,t,n){rt(e,t,function(e,n){this._t=yt(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?Xe(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,Xe(1))},n?"entries":"values",!n,!0),ve(t)}},St=function(e,t){if(o(e),!r(t)&&null!==t)throw TypeError(t+": can't set as prototype!")},Et={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,n){try{(n=E(Function.call,ht.f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,i){return St(e,i),t?e.__proto__=i:n(e,i),e}}({},!1):void 0),check:St},_t=Et.set,At=function(e,t,i,o,s,l){var c=n[e],u=c,f=s?"set":"add",h=u&&u.prototype,d={},p=function(e){var t=h[e];T(h,e,"delete"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return l&&!r(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof u&&(l||h.forEach&&!a(function(){(new u).entries().next()}))){var m=new u,g=m[f](l?{}:-0,1)!=m,y=a(function(){m.has(1)}),v=lt(function(e){new u(e)}),b=!l&&a(function(){for(var e=new u,t=5;t--;)e[f](t,t);return!e.has(-0)});v||((u=t(function(t,n){F(t,u,e);var i=function(e,t,n){var i,o=t.constructor;return o!==n&&"function"==typeof o&&(i=o.prototype)!==n.prototype&&r(i)&&_t&&_t(e,i),e}(new c,t,u);return null!=n&&mt(n,s,i[f],i),i})).prototype=h,h.constructor=u),(y||b)&&(p("delete"),p("has"),s&&p("get")),(b||g)&&p(f),l&&h.clear&&delete h.clear}else u=o.getConstructor(t,e,s,f),I(u.prototype,i),gt.NEED=!0;return de(u,e),d[e]=u,P(P.G+P.W+P.F*(u!=c),d),l||o.setStrong(u,e,s),u},Pt=(At("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=Tt.getEntry(yt(this,"Map"),e);return t&&t.v},set:function(e,t){return Tt.def(yt(this,"Map"),0===e?0:e,t)}},Tt,!0),At("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return Tt.def(yt(this,"Set"),e=0===e?0:e,e)}},Tt),{f:Object.getOwnPropertySymbols}),Mt=Object.assign,Lt=!Mt||a(function(){var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach(function(e){t[e]=e}),7!=Mt({},e)[n]||Object.keys(Mt({},t)).join("")!=i})?function(e,t){for(var n=le(e),i=arguments.length,r=1,o=Pt.f,a=ut.f;i>r;)for(var s,l=z(arguments[r++]),c=o?Oe(l).concat(o(l)):Oe(l),u=c.length,f=0;u>f;)a.call(l,s=c[f++])&&(n[s]=l[s]);return n}:Mt,Ct=gt.getWeak,xt=Ye(5),Ot=Ye(6),Nt=0,jt=function(e){return e._l||(e._l=new It)},It=function(){this.a=[]},Ft=function(e,t){return xt(e.a,function(e){return e[0]===t})};It.prototype={get:function(e){var t=Ft(this,e);if(t)return t[1]},has:function(e){return!!Ft(this,e)},set:function(e,t){var n=Ft(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=Ot(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}};var Rt={getConstructor:function(e,t,n,i){var o=e(function(e,r){F(e,o,t,"_i"),e._t=t,e._i=Nt++,e._l=void 0,null!=r&&mt(r,n,e[i],e)});return I(o.prototype,{delete:function(e){if(!r(e))return!1;var n=Ct(e);return!0===n?jt(yt(this,t)).delete(e):n&&v(n,this._i)&&delete n[this._i]},has:function(e){if(!r(e))return!1;var n=Ct(e);return!0===n?jt(yt(this,t)).has(e):n&&v(n,this._i)}}),o},def:function(e,t,n){var i=Ct(o(t),!0);return!0===i?jt(e).set(t,n):i[e._i]=n,e},ufstore:jt};t(function(e){var t,n=Ye(0),i=gt.getWeak,o=Object.isExtensible,s=Rt.ufstore,l={},c=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},u={get:function(e){if(r(e)){var t=i(e);return!0===t?s(yt(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return Rt.def(yt(this,"WeakMap"),e,t)}},f=e.exports=At("WeakMap",c,u,Rt,!0,!0);a(function(){return 7!=(new f).set((Object.freeze||Object)(l),7).get(l)})&&(t=Rt.getConstructor(c,"WeakMap"),Lt(t.prototype,u),gt.NEED=!0,n(["delete","has","get","set"],function(e){var n=f.prototype,i=n[e];T(n,e,function(n,a){if(r(n)&&!o(n)){this._f||(this._f=new t);var s=this._f[e](n,a);return"set"==e?this:s}return i.call(this,n,a)})}))});At("WeakSet",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return Rt.def(yt(this,"WeakSet"),e,!0)}},Rt,!1,!0);var qt=(n.Reflect||{}).apply,Bt=Function.apply;P(P.S+P.F*!a(function(){qt(function(){})}),"Reflect",{apply:function(e,t,n){var i=S(e),r=o(n);return qt?qt(i,t,r):Bt.call(i,t,r)}});var Dt=function(e,t,n){var i=void 0===n;switch(t.length){case 0:return i?e():e.call(n);case 1:return i?e(t[0]):e.call(n,t[0]);case 2:return i?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return i?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return i?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)},Vt=[].slice,Ut={},Ht=Function.bind||function(e){var t=S(this),n=Vt.call(arguments,1),i=function(){var r=n.concat(Vt.call(arguments));return this instanceof i?function(e,t,n){if(!(t in Ut)){for(var i=[],r=0;r<t;r++)i[r]="a["+r+"]";Ut[t]=Function("F,a","return new F("+i.join(",")+")")}return Ut[t](e,n)}(t,r.length,r):Dt(t,r,e)};return r(t.prototype)&&(i.prototype=t.prototype),i},Wt=(n.Reflect||{}).construct,zt=a(function(){function e(){}return!(Wt(function(){},[],e)instanceof e)}),Gt=!a(function(){Wt(function(){})});P(P.S+P.F*(zt||Gt),"Reflect",{construct:function(e,t){S(e),o(t);var n=arguments.length<3?e:S(arguments[2]);if(Gt&&!zt)return Wt(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var i=[null];return i.push.apply(i,t),new(Ht.apply(e,i))}var a=n.prototype,s=Be(r(a)?a:Object.prototype),l=Function.apply.call(e,s,t);return r(l)?l:s}}),P(P.S+P.F*a(function(){Reflect.defineProperty(p.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(e,t,n){o(e),t=h(t,!0),o(n);try{return p.f(e,t,n),!0}catch(e){return!1}}});var Kt=ht.f;P(P.S,"Reflect",{deleteProperty:function(e,t){var n=Kt(o(e),t);return!(n&&!n.configurable)&&delete e[t]}}),P(P.S,"Reflect",{get:function e(t,n){var i,a,s=arguments.length<3?t:arguments[2];return o(t)===s?t[n]:(i=ht.f(t,n))?v(i,"value")?i.value:void 0!==i.get?i.get.call(s):void 0:r(a=Ue(t))?e(a,n,s):void 0}}),P(P.S,"Reflect",{getOwnPropertyDescriptor:function(e,t){return ht.f(o(e),t)}}),P(P.S,"Reflect",{getPrototypeOf:function(e){return Ue(o(e))}}),P(P.S,"Reflect",{has:function(e,t){return t in e}});var Yt=Object.isExtensible;P(P.S,"Reflect",{isExtensible:function(e){return o(e),!Yt||Yt(e)}});var Qt=n.Reflect,Jt=Qt&&Qt.ownKeys||function(e){var t=se.f(o(e)),n=Pt.f;return n?t.concat(n(e)):t};P(P.S,"Reflect",{ownKeys:Jt});var $t=Object.preventExtensions;P(P.S,"Reflect",{preventExtensions:function(e){o(e);try{return $t&&$t(e),!0}catch(e){return!1}}}),P(P.S,"Reflect",{set:function e(t,n,i){var a,s,l=arguments.length<4?t:arguments[3],c=ht.f(o(t),n);if(!c){if(r(s=Ue(t)))return e(s,n,i,l);c=m(0)}return v(c,"value")?!(!1===c.writable||!r(l)||((a=ht.f(l,n)||m(0)).value=i,p.f(l,n,a),0)):void 0!==c.set&&(c.set.call(l,i),!0)}}),Et&&P(P.S,"Reflect",{setPrototypeOf:function(e,t){Et.check(e,t);try{return Et.set(e,t),!0}catch(e){return!1}}});var Xt,Zt,en,tn=n.process,nn=n.setImmediate,rn=n.clearImmediate,on=n.MessageChannel,an=n.Dispatch,sn=0,ln={},cn=function(){var e=+this;if(ln.hasOwnProperty(e)){var t=ln[e];delete ln[e],t()}},un=function(e){cn.call(e.data)};nn&&rn||(nn=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return ln[++sn]=function(){Dt("function"==typeof e?e:Function(e),t)},Xt(sn),sn},rn=function(e){delete ln[e]},"process"==W(tn)?Xt=function(e){tn.nextTick(E(cn,e,1))}:an&&an.now?Xt=function(e){an.now(E(cn,e,1))}:on?(en=(Zt=new on).port2,Zt.port1.onmessage=un,Xt=E(en.postMessage,en,1)):n.addEventListener&&"function"==typeof postMessage&&!n.importScripts?(Xt=function(e){n.postMessage(e+"","*")},n.addEventListener("message",un,!1)):Xt="onreadystatechange"in u("script")?function(e){Ie.appendChild(u("script")).onreadystatechange=function(){Ie.removeChild(this),cn.call(e)}}:function(e){setTimeout(E(cn,e,1),0)});var fn={set:nn,clear:rn},hn=fn.set,dn=n.MutationObserver||n.WebKitMutationObserver,pn=n.process,mn=n.Promise,gn="process"==W(pn);function yn(e){var t,n;this.promise=new e(function(e,i){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=i}),this.resolve=S(t),this.reject=S(n)}var vn,bn,wn,kn,Tn={f:function(e){return new yn(e)}},Sn=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},En=fn.set,_n=function(){var e,t,i,r=function(){var n,r;for(gn&&(n=pn.domain)&&n.exit();e;){r=e.fn,e=e.next;try{r()}catch(n){throw e?i():t=void 0,n}}t=void 0,n&&n.enter()};if(gn)i=function(){pn.nextTick(r)};else if(!dn||n.navigator&&n.navigator.standalone)if(mn&&mn.resolve){var o=mn.resolve();i=function(){o.then(r)}}else i=function(){hn.call(n,r)};else{var a=!0,s=document.createTextNode("");new dn(r).observe(s,{characterData:!0}),i=function(){s.data=a=!a}}return function(n){var r={fn:n,next:void 0};t&&(t.next=r),e||(e=r,i()),t=r}}(),An=n.TypeError,Pn=n.process,Mn=n.Promise,Ln="process"==Pe(Pn),Cn=function(){},xn=bn=Tn.f,On=!!function(){try{var e=Mn.resolve(1),t=(e.constructor={})[ue("species")]=function(e){e(Cn,Cn)};return(Ln||"function"==typeof PromiseRejectionEvent)&&e.then(Cn)instanceof t}catch(e){}}(),Nn=function(e){var t;return!(!r(e)||"function"!=typeof(t=e.then))&&t},jn=function(e,t){if(!e._n){e._n=!0;var n=e._c;_n(function(){for(var i=e._v,r=1==e._s,o=0,a=function(t){var n,o,a=r?t.ok:t.fail,s=t.resolve,l=t.reject,c=t.domain;try{a?(r||(2==e._h&&Rn(e),e._h=1),!0===a?n=i:(c&&c.enter(),n=a(i),c&&c.exit()),n===t.promise?l(An("Promise-chain cycle")):(o=Nn(n))?o.call(n,s,l):s(n)):l(i)}catch(e){l(e)}};n.length>o;)a(n[o++]);e._c=[],e._n=!1,t&&!e._h&&In(e)})}},In=function(e){En.call(n,function(){var t,i,r,o=e._v,a=Fn(e);if(a&&(t=Sn(function(){Ln?Pn.emit("unhandledRejection",o,e):(i=n.onunhandledrejection)?i({promise:e,reason:o}):(r=n.console)&&r.error&&r.error("Unhandled promise rejection",o)}),e._h=Ln||Fn(e)?2:1),e._a=void 0,a&&t.e)throw t.v})},Fn=function(e){return 1!==e._h&&0===(e._a||e._c).length},Rn=function(e){En.call(n,function(){var t;Ln?Pn.emit("rejectionHandled",e):(t=n.onrejectionhandled)&&t({promise:e,reason:e._v})})},qn=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),jn(t,!0))},Bn=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw An("Promise can't be resolved itself");(t=Nn(e))?_n(function(){var i={_w:n,_d:!1};try{t.call(e,E(Bn,i,1),E(qn,i,1))}catch(e){qn.call(i,e)}}):(n._v=e,n._s=1,jn(n,!1))}catch(e){qn.call({_w:n,_d:!1},e)}}};On||(Mn=function(e){F(this,Mn,"Promise","_h"),S(e),vn.call(this);try{e(E(Bn,this,1),E(qn,this,1))}catch(e){qn.call(this,e)}},(vn=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=I(Mn.prototype,{then:function(e,t){var n=xn(ge(this,Mn));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=Ln?Pn.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&jn(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),wn=function(){var e=new vn;this.promise=e,this.resolve=E(Bn,e,1),this.reject=E(qn,e,1)},Tn.f=xn=function(e){return e===Mn||e===kn?new wn(e):bn(e)}),P(P.G+P.W+P.F*!On,{Promise:Mn}),de(Mn,"Promise"),ve("Promise"),kn=i.Promise,P(P.S+P.F*!On,"Promise",{reject:function(e){var t=xn(this);return(0,t.reject)(e),t.promise}}),P(P.S+P.F*!On,"Promise",{resolve:function(e){return function(e,t){if(o(e),r(t)&&t.constructor===e)return t;var n=Tn.f(e);return(0,n.resolve)(t),n.promise}(this,e)}}),P(P.S+P.F*!(On&&lt(function(e){Mn.all(e).catch(Cn)})),"Promise",{all:function(e){var t=this,n=xn(t),i=n.resolve,r=n.reject,o=Sn(function(){var n=[],o=0,a=1;mt(e,!1,function(e){var s=o++,l=!1;n.push(void 0),a++,t.resolve(e).then(function(e){l||(l=!0,n[s]=e,--a||i(n))},r)}),--a||i(n)});return o.e&&r(o.v),n.promise},race:function(e){var t=this,n=xn(t),i=n.reject,r=Sn(function(){mt(e,!1,function(e){t.resolve(e).then(n.resolve,i)})});return r.e&&i(r.v),n.promise}});var Dn={f:ue},Vn=p.f,Un=function(e){var t=i.Symbol||(i.Symbol=n.Symbol||{});"_"==e.charAt(0)||e in t||Vn(t,e,{value:Dn.f(e)})},Hn=se.f,Wn={}.toString,zn="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Gn={f:function(e){return zn&&"[object Window]"==Wn.call(e)?function(e){try{return Hn(e)}catch(e){return zn.slice()}}(e):Hn(K(e))}},Kn=gt.KEY,Yn=ht.f,Qn=p.f,Jn=Gn.f,$n=n.Symbol,Xn=n.JSON,Zn=Xn&&Xn.stringify,ei=ue("_hidden"),ti=ue("toPrimitive"),ni={}.propertyIsEnumerable,ii=Z("symbol-registry"),ri=Z("symbols"),oi=Z("op-symbols"),ai=Object.prototype,si="function"==typeof $n,li=n.QObject,ci=!li||!li.prototype||!li.prototype.findChild,ui=s&&a(function(){return 7!=Be(Qn({},"a",{get:function(){return Qn(this,"a",{value:7}).a}})).a})?function(e,t,n){var i=Yn(ai,t);i&&delete ai[t],Qn(e,t,n),i&&e!==ai&&Qn(ai,t,i)}:Qn,fi=function(e){var t=ri[e]=Be($n.prototype);return t._k=e,t},hi=si&&"symbol"==typeof $n.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof $n},di=function(e,t,n){return e===ai&&di(oi,t,n),o(e),t=h(t,!0),o(n),v(ri,t)?(n.enumerable?(v(e,ei)&&e[ei][t]&&(e[ei][t]=!1),n=Be(n,{enumerable:m(0,!1)})):(v(e,ei)||Qn(e,ei,m(1,{})),e[ei][t]=!0),ui(e,t,n)):Qn(e,t,n)},pi=function(e,t){o(e);for(var n,i=function(e){var t=Oe(e),n=Pt.f;if(n)for(var i,r=n(e),o=ut.f,a=0;r.length>a;)o.call(e,i=r[a++])&&t.push(i);return t}(t=K(t)),r=0,a=i.length;a>r;)di(e,n=i[r++],t[n]);return e},mi=function(e){var t=ni.call(this,e=h(e,!0));return!(this===ai&&v(ri,e)&&!v(oi,e))&&(!(t||!v(this,e)||!v(ri,e)||v(this,ei)&&this[ei][e])||t)},gi=function(e,t){if(e=K(e),t=h(t,!0),e!==ai||!v(ri,t)||v(oi,t)){var n=Yn(e,t);return!n||!v(ri,t)||v(e,ei)&&e[ei][t]||(n.enumerable=!0),n}},yi=function(e){for(var t,n=Jn(K(e)),i=[],r=0;n.length>r;)v(ri,t=n[r++])||t==ei||t==Kn||i.push(t);return i},vi=function(e){for(var t,n=e===ai,i=Jn(n?oi:K(e)),r=[],o=0;i.length>o;)!v(ri,t=i[o++])||n&&!v(ai,t)||r.push(ri[t]);return r};si||(T(($n=function(){if(this instanceof $n)throw TypeError("Symbol is not a constructor!");var e=k(arguments.length>0?arguments[0]:void 0),t=function(n){this===ai&&t.call(oi,n),v(this,ei)&&v(this[ei],e)&&(this[ei][e]=!1),ui(this,e,m(1,n))};return s&&ci&&ui(ai,e,{configurable:!0,set:t}),fi(e)}).prototype,"toString",function(){return this._k}),ht.f=gi,p.f=di,se.f=Gn.f=yi,ut.f=mi,Pt.f=vi,s&&T(ai,"propertyIsEnumerable",mi,!0),Dn.f=function(e){return fi(ue(e))}),P(P.G+P.W+P.F*!si,{Symbol:$n});for(var bi="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),wi=0;bi.length>wi;)ue(bi[wi++]);for(var ki=Oe(ue.store),Ti=0;ki.length>Ti;)Un(ki[Ti++]);P(P.S+P.F*!si,"Symbol",{for:function(e){return v(ii,e+="")?ii[e]:ii[e]=$n(e)},keyFor:function(e){if(!hi(e))throw TypeError(e+" is not a symbol!");for(var t in ii)if(ii[t]===e)return t},useSetter:function(){ci=!0},useSimple:function(){ci=!1}}),P(P.S+P.F*!si,"Object",{create:function(e,t){return void 0===t?Be(e):pi(Be(e),t)},defineProperty:di,defineProperties:pi,getOwnPropertyDescriptor:gi,getOwnPropertyNames:yi,getOwnPropertySymbols:vi}),Xn&&P(P.S+P.F*(!si||a(function(){var e=$n();return"[null]"!=Zn([e])||"{}"!=Zn({a:e})||"{}"!=Zn(Object(e))})),"JSON",{stringify:function(e){for(var t,n,i=[e],o=1;arguments.length>o;)i.push(arguments[o++]);if(n=t=i[1],(r(t)||void 0!==e)&&!hi(e))return ze(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!hi(t))return t}),i[1]=t,Zn.apply(Xn,i)}}),$n.prototype[ti]||g($n.prototype,ti,$n.prototype.valueOf),de($n,"Symbol"),de(Math,"Math",!0),de(n.JSON,"JSON",!0);var Si=function(e,t){var n=(i.Object||{})[e]||Object[e],r={};r[e]=t(n),P(P.S+P.F*a(function(){n(1)}),"Object",r)},Ei=gt.onFreeze;Si("freeze",function(e){return function(t){return e&&r(t)?e(Ei(t)):t}});var _i=gt.onFreeze;Si("seal",function(e){return function(t){return e&&r(t)?e(_i(t)):t}});var Ai=gt.onFreeze;Si("preventExtensions",function(e){return function(t){return e&&r(t)?e(Ai(t)):t}}),Si("isFrozen",function(e){return function(t){return!r(t)||!!e&&e(t)}}),Si("isSealed",function(e){return function(t){return!r(t)||!!e&&e(t)}}),Si("isExtensible",function(e){return function(t){return!!r(t)&&(!e||e(t))}});var Pi=ht.f;Si("getOwnPropertyDescriptor",function(){return function(e,t){return Pi(K(e),t)}}),Si("getPrototypeOf",function(){return function(e){return Ue(le(e))}}),Si("keys",function(){return function(e){return Oe(le(e))}}),Si("getOwnPropertyNames",function(){return Gn.f}),P(P.S+P.F,"Object",{assign:Lt});var Mi=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t};P(P.S,"Object",{is:Mi});var Li=p.f,Ci=Function.prototype,xi=/^\s*function ([^ (]*)/;"name"in Ci||s&&Li(Ci,"name",{configurable:!0,get:function(){try{return(""+this).match(xi)[1]}catch(e){return""}}}),P(P.S,"String",{raw:function(e){for(var t=K(e.raw),n=V(t.length),i=arguments.length,r=[],o=0;n>o;)r.push(String(t[o++])),o<i&&r.push(String(arguments[o]));return r.join("")}});var Oi=String.fromCharCode,Ni=String.fromCodePoint;P(P.S+P.F*(!!Ni&&1!=Ni.length),"String",{fromCodePoint:function(e){for(var t,n=[],i=arguments.length,r=0;i>r;){if(t=+arguments[r++],J(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?Oi(t):Oi(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}});var ji,Ii=(ji=!1,function(e,t){var n,i,r=String(G(e)),o=B(t),a=r.length;return o<0||o>=a?ji?"":void 0:(n=r.charCodeAt(o))<55296||n>56319||o+1===a||(i=r.charCodeAt(o+1))<56320||i>57343?ji?r.charAt(o):n:ji?r.slice(o,o+2):i-56320+(n-55296<<10)+65536});P(P.P,"String",{codePointAt:function(e){return Ii(this,e)}});var Fi=function(e){var t=String(G(this)),n="",i=B(e);if(i<0||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(t+=t))1&i&&(n+=t);return n};P(P.P,"String",{repeat:Fi});var Ri=ue("match"),qi=function(e){var t;return r(e)&&(void 0!==(t=e[Ri])?!!t:"RegExp"==W(e))},Bi=function(e,t,n){if(qi(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(G(e))},Di=ue("match"),Vi=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[Di]=!1,!"/./"[e](t)}catch(e){}}return!0},Ui="".startsWith;P(P.P+P.F*Vi("startsWith"),"String",{startsWith:function(e){var t=Bi(this,e,"startsWith"),n=V(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),i=String(e);return Ui?Ui.call(t,i,n):t.slice(n,n+i.length)===i}});var Hi="".endsWith;P(P.P+P.F*Vi("endsWith"),"String",{endsWith:function(e){var t=Bi(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,i=V(t.length),r=void 0===n?i:Math.min(V(n),i),o=String(e);return Hi?Hi.call(t,o,r):t.slice(r-o.length,r)===o}});P(P.P+P.F*Vi("includes"),"String",{includes:function(e){return!!~Bi(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}});s&&"g"!=/./g.flags&&p.f(RegExp.prototype,"flags",{configurable:!0,get:function(){var e=o(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}});var Wi=function(e,t,n){var i=ue(e),r=n(G,i,""[e]),o=r[0],s=r[1];a(function(){var t={};return t[i]=function(){return 7},7!=""[e](t)})&&(T(String.prototype,e,o),g(RegExp.prototype,i,2==t?function(e,t){return s.call(e,this,t)}:function(e){return s.call(e,this)}))};Wi("match",1,function(e,t,n){return[function(n){var i=e(this),r=null==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]}),Wi("replace",2,function(e,t,n){return[function(i,r){var o=e(this),a=null==i?void 0:i[t];return void 0!==a?a.call(i,o,r):n.call(String(o),i,r)},n]}),Wi("split",2,function(e,t,n){var i=qi,r=n,o=[].push;if("c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length){var a=void 0===/()??/.exec("")[1];n=function(e,t){var n=String(this);if(void 0===e&&0===t)return[];if(!i(e))return r.call(n,e,t);var s,l,c,u,f,h=[],d=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),p=0,m=void 0===t?4294967295:t>>>0,g=new RegExp(e.source,d+"g");for(a||(s=new RegExp("^"+g.source+"$(?!\\s)",d));(l=g.exec(n))&&!((c=l.index+l[0].length)>p&&(h.push(n.slice(p,l.index)),!a&&l.length>1&&l[0].replace(s,function(){for(f=1;f<arguments.length-2;f++)void 0===arguments[f]&&(l[f]=void 0)}),l.length>1&&l.index<n.length&&o.apply(h,l.slice(1)),u=l[0].length,p=c,h.length>=m));)g.lastIndex===l.index&&g.lastIndex++;return p===n.length?!u&&g.test("")||h.push(""):h.push(n.slice(p)),h.length>m?h.slice(0,m):h}}else"0".split(void 0,0).length&&(n=function(e,t){return void 0===e&&0===t?[]:r.call(this,e,t)});return[function(i,r){var o=e(this),a=null==i?void 0:i[t];return void 0!==a?a.call(i,o,r):n.call(String(o),i,r)},n]}),Wi("search",1,function(e,t,n){return[function(n){var i=e(this),r=null==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]});var zi=function(e,t,n){t in e?p.f(e,t,m(0,n)):e[t]=n};P(P.S+P.F*!lt(function(e){}),"Array",{from:function(e){var t,n,i,r,o=le(e),a="function"==typeof this?this:Array,s=arguments.length,l=s>1?arguments[1]:void 0,c=void 0!==l,u=0,f=We(o);if(c&&(l=E(l,s>2?arguments[2]:void 0,2)),null==f||a==Array&&xe(f))for(n=new a(t=V(o.length));t>u;u++)zi(n,u,c?l(o[u],u):o[u]);else for(r=f.call(o),n=new a;!(i=r.next()).done;u++)zi(n,u,c?pt(r,l,[i.value,u],!0):i.value);return n.length=u,n}}),P(P.S+P.F*a(function(){function e(){}return!(Array.of.call(e)instanceof e)}),"Array",{of:function(){for(var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);t>e;)zi(n,e,arguments[e++]);return n.length=t,n}}),P(P.P,"Array",{copyWithin:ct}),$e("copyWithin");var Gi=Ye(5),Ki=!0;"find"in[]&&Array(1).find(function(){Ki=!1}),P(P.P+P.F*Ki,"Array",{find:function(e){return Gi(this,e,arguments.length>1?arguments[1]:void 0)}}),$e("find");var Yi=Ye(6),Qi=!0;"findIndex"in[]&&Array(1).findIndex(function(){Qi=!1}),P(P.P+P.F*Qi,"Array",{findIndex:function(e){return Yi(this,e,arguments.length>1?arguments[1]:void 0)}}),$e("findIndex"),P(P.P,"Array",{fill:ce}),$e("fill");var Ji=n.isFinite;P(P.S,"Number",{isFinite:function(e){return"number"==typeof e&&Ji(e)}});var $i=Math.floor,Xi=function(e){return!r(e)&&isFinite(e)&&$i(e)===e};P(P.S,"Number",{isInteger:Xi});var Zi=Math.abs;P(P.S,"Number",{isSafeInteger:function(e){return Xi(e)&&Zi(e)<=9007199254740991}}),P(P.S,"Number",{isNaN:function(e){return e!=e}}),P(P.S,"Number",{EPSILON:Math.pow(2,-52)}),P(P.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991}),P(P.S,"Number",{MAX_SAFE_INTEGER:9007199254740991});var er=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)},tr=Math.sqrt,nr=Math.acosh;P(P.S+P.F*!(nr&&710==Math.floor(nr(Number.MAX_VALUE))&&nr(1/0)==1/0),"Math",{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:er(e-1+tr(e-1)*tr(e+1))}});var ir=Math.asinh;P(P.S+P.F*!(ir&&1/ir(0)>0),"Math",{asinh:function e(t){return isFinite(t=+t)&&0!=t?t<0?-e(-t):Math.log(t+Math.sqrt(t*t+1)):t}});var rr=Math.atanh;P(P.S+P.F*!(rr&&1/rr(-0)<0),"Math",{atanh:function(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}});var or=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1};P(P.S,"Math",{cbrt:function(e){return or(e=+e)*Math.pow(Math.abs(e),1/3)}}),P(P.S,"Math",{clz32:function(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}});var ar=Math.exp;P(P.S,"Math",{cosh:function(e){return(ar(e=+e)+ar(-e))/2}});var sr=Math.expm1,lr=!sr||sr(10)>22025.465794806718||sr(10)<22025.465794806718||-2e-17!=sr(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:sr;P(P.S+P.F*(lr!=Math.expm1),"Math",{expm1:lr});var cr=Math.pow,ur=cr(2,-52),fr=cr(2,-23),hr=cr(2,127)*(2-fr),dr=cr(2,-126),pr=Math.fround||function(e){var t,n,i=Math.abs(e),r=or(e);return i<dr?r*(i/dr/fr+1/ur-1/ur)*dr*fr:(n=(t=(1+fr/ur)*i)-(t-i))>hr||n!=n?r*(1/0):r*n};P(P.S,"Math",{fround:pr});var mr=Math.abs;P(P.S,"Math",{hypot:function(e,t){for(var n,i,r=0,o=0,a=arguments.length,s=0;o<a;)s<(n=mr(arguments[o++]))?(r=r*(i=s/n)*i+1,s=n):r+=n>0?(i=n/s)*i:n;return s===1/0?1/0:s*Math.sqrt(r)}});var gr=Math.imul;P(P.S+P.F*a(function(){return-5!=gr(4294967295,5)||2!=gr.length}),"Math",{imul:function(e,t){var n=+e,i=+t,r=65535&n,o=65535&i;return 0|r*o+((65535&n>>>16)*o+r*(65535&i>>>16)<<16>>>0)}}),P(P.S,"Math",{log1p:er}),P(P.S,"Math",{log10:function(e){return Math.log(e)*Math.LOG10E}}),P(P.S,"Math",{log2:function(e){return Math.log(e)/Math.LN2}}),P(P.S,"Math",{sign:or});var yr=Math.exp;P(P.S+P.F*a(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(e){return Math.abs(e=+e)<1?(lr(e)-lr(-e))/2:(yr(e-1)-yr(-e-1))*(Math.E/2)}});var vr=Math.exp;P(P.S,"Math",{tanh:function(e){var t=lr(e=+e),n=lr(-e);return t==1/0?1:n==1/0?-1:(t-n)/(vr(e)+vr(-e))}}),P(P.S,"Math",{trunc:function(e){return(e>0?Math.floor:Math.ceil)(e)}});var br=$(!0);P(P.P,"Array",{includes:function(e){return br(this,e,arguments.length>1?arguments[1]:void 0)}}),$e("includes");var wr=ut.f,kr=function(e){return function(t){for(var n,i=K(t),r=Oe(i),o=r.length,a=0,s=[];o>a;)wr.call(i,n=r[a++])&&s.push(e?[n,i[n]]:i[n]);return s}},Tr=kr(!1);P(P.S,"Object",{values:function(e){return Tr(e)}});var Sr=kr(!0);P(P.S,"Object",{entries:function(e){return Sr(e)}}),P(P.S,"Object",{getOwnPropertyDescriptors:function(e){for(var t,n,i=K(e),r=ht.f,o=Jt(i),a={},s=0;o.length>s;)void 0!==(n=r(i,t=o[s++]))&&zi(a,t,n);return a}});var Er=function(e,t,n,i){var r=String(G(e)),o=r.length,a=void 0===n?" ":String(n),s=V(t);if(s<=o||""==a)return r;var l=s-o,c=Fi.call(a,Math.ceil(l/a.length));return c.length>l&&(c=c.slice(0,l)),i?c+r:r+c},_r=n.navigator,Ar=_r&&_r.userAgent||"";P(P.P+P.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(Ar),"String",{padStart:function(e){return Er(this,e,arguments.length>1?arguments[1]:void 0,!0)}}),P(P.P+P.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(Ar),"String",{padEnd:function(e){return Er(this,e,arguments.length>1?arguments[1]:void 0,!1)}});var Pr=[].slice,Mr=/MSIE .\./.test(Ar),Lr=function(e){return function(t,n){var i=arguments.length>2,r=!!i&&Pr.call(arguments,2);return e(i?function(){("function"==typeof t?t:Function(t)).apply(this,r)}:t,n)}};P(P.G+P.B+P.F*Mr,{setTimeout:Lr(n.setTimeout),setInterval:Lr(n.setInterval)}),P(P.G+P.B,{setImmediate:fn.set,clearImmediate:fn.clear});for(var Cr=ue("iterator"),xr=ue("toStringTag"),Or=Me.Array,Nr={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},jr=Oe(Nr),Ir=0;Ir<jr.length;Ir++){var Fr,Rr=jr[Ir],qr=Nr[Rr],Br=n[Rr],Dr=Br&&Br.prototype;if(Dr&&(Dr[Cr]||g(Dr,Cr,Or),Dr[xr]||g(Dr,xr,Rr),Me[Rr]=Or,qr))for(Fr in ot)Dr[Fr]||T(Dr,Fr,ot[Fr],!0)}t(function(t){!function(e){var n,i=Object.prototype,r=i.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},a=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag",c=e.regeneratorRuntime;if(c)t.exports=c;else{(c=e.regeneratorRuntime=t.exports).wrap=b;var u="suspendedStart",f="suspendedYield",h="executing",d="completed",p={},m={};m[a]=function(){return this};var g=Object.getPrototypeOf,y=g&&g(g(C([])));y&&y!==i&&r.call(y,a)&&(m=y);var v=S.prototype=k.prototype=Object.create(m);T.prototype=v.constructor=S,S.constructor=T,S[l]=T.displayName="GeneratorFunction",c.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===T||"GeneratorFunction"===(t.displayName||t.name))},c.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,S):(e.__proto__=S,l in e||(e[l]="GeneratorFunction")),e.prototype=Object.create(v),e},c.awrap=function(e){return{__await:e}},E(_.prototype),_.prototype[s]=function(){return this},c.AsyncIterator=_,c.async=function(e,t,n,i){var r=new _(b(e,t,n,i));return c.isGeneratorFunction(t)?r:r.next().then(function(e){return e.done?e.value:r.next()})},E(v),v[l]="Generator",v[a]=function(){return this},v.toString=function(){return"[object Generator]"},c.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var i=t.pop();if(i in e)return n.value=i,n.done=!1,n}return n.done=!0,n}},c.values=C,L.prototype={constructor:L,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=n,this.done=!1,this.delegate=null,this.method="next",this.arg=n,this.tryEntries.forEach(M),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=n)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function i(i,r){return s.type="throw",s.arg=e,t.next=i,r&&(t.method="next",t.arg=n),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var l=r.call(a,"catchLoc"),c=r.call(a,"finallyLoc");if(l&&c){if(this.prev<a.catchLoc)return i(a.catchLoc,!0);if(this.prev<a.finallyLoc)return i(a.finallyLoc)}else if(l){if(this.prev<a.catchLoc)return i(a.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return i(a.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var o=i;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var a=o?o.completion:{};return a.type=e,a.arg=t,o?(this.method="next",this.next=o.finallyLoc,p):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),p},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),M(n),p}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var i=n.completion;if("throw"===i.type){var r=i.arg;M(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,i){return this.delegate={iterator:C(e),resultName:t,nextLoc:i},"next"===this.method&&(this.arg=n),p}}}function b(e,t,n,i){var r=t&&t.prototype instanceof k?t:k,o=Object.create(r.prototype),a=new L(i||[]);return o._invoke=function(e,t,n){var i=u;return function(r,o){if(i===h)throw new Error("Generator is already running");if(i===d){if("throw"===r)throw o;return x()}for(n.method=r,n.arg=o;;){var a=n.delegate;if(a){var s=A(a,n);if(s){if(s===p)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===u)throw i=d,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=h;var l=w(e,t,n);if("normal"===l.type){if(i=n.done?d:f,l.arg===p)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(i=d,n.method="throw",n.arg=l.arg)}}}(e,n,a),o}function w(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function k(){}function T(){}function S(){}function E(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function _(t){function n(e,i,o,a){var s=w(t[e],t,i);if("throw"!==s.type){var l=s.arg,c=l.value;return c&&"object"==typeof c&&r.call(c,"__await")?Promise.resolve(c.__await).then(function(e){n("next",e,o,a)},function(e){n("throw",e,o,a)}):Promise.resolve(c).then(function(e){l.value=e,o(l)},a)}a(s.arg)}var i;"object"==typeof e.process&&e.process.domain&&(n=e.process.domain.bind(n)),this._invoke=function(e,t){function r(){return new Promise(function(i,r){n(e,t,i,r)})}return i=i?i.then(r,r):r()}}function A(e,t){var i=e.iterator[t.method];if(i===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=n,A(e,t),"throw"===t.method))return p;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return p}var r=w(i,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,p;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=n),t.delegate=null,p):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,p)}function P(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function M(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function L(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(P,this),this.reset(!0)}function C(e){if(e){var t=e[a];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,o=function t(){for(;++i<e.length;)if(r.call(e,i))return t.value=e[i],t.done=!1,t;return t.value=n,t.done=!0,t};return o.next=o}}return{next:x}}function x(){return{value:n,done:!0}}}("object"==typeof e?e:"object"==typeof window?window:"object"==typeof self?self:e)});try{var Vr=new window.CustomEvent("test");if(Vr.preventDefault(),!0!==Vr.defaultPrevented)throw new Error("Could not prevent default")}catch(e){var Ur=function(e,t){var n,i;return t=t||{bubbles:!1,cancelable:!1,detail:void 0},(n=document.createEvent("CustomEvent")).initCustomEvent(e,t.bubbles,t.cancelable,t.detail),i=n.preventDefault,n.preventDefault=function(){i.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};Ur.prototype=window.Event.prototype,window.CustomEvent=Ur}!function(e){var t=function(){try{return!!Symbol.iterator}catch(e){return!1}}(),n=function(e){var n={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return t&&(n[Symbol.iterator]=function(){return n}),n},i=function(e){return encodeURIComponent(e).replace(/%20/g,"+")},r=function(e){return decodeURIComponent(e).replace(/\+/g," ")};"URLSearchParams"in e&&"a=1"===new URLSearchParams("?a=1").toString()||function(){var o=function(e){if(Object.defineProperty(this,"_entries",{value:{}}),"string"==typeof e){if(""!==e)for(var t,n=(e=e.replace(/^\?/,"")).split("&"),i=0;i<n.length;i++)t=n[i].split("="),this.append(r(t[0]),t.length>1?r(t[1]):"")}else if(e instanceof o){var a=this;e.forEach(function(e,t){a.append(e,t)})}},a=o.prototype;a.append=function(e,t){e in this._entries?this._entries[e].push(t.toString()):this._entries[e]=[t.toString()]},a.delete=function(e){delete this._entries[e]},a.get=function(e){return e in this._entries?this._entries[e][0]:null},a.getAll=function(e){return e in this._entries?this._entries[e].slice(0):[]},a.has=function(e){return e in this._entries},a.set=function(e,t){this._entries[e]=[t.toString()]},a.forEach=function(e,t){var n;for(var i in this._entries)if(this._entries.hasOwnProperty(i)){n=this._entries[i];for(var r=0;r<n.length;r++)e.call(t,n[r],i,this)}},a.keys=function(){var e=[];return this.forEach(function(t,n){e.push(n)}),n(e)},a.values=function(){var e=[];return this.forEach(function(t){e.push(t)}),n(e)},a.entries=function(){var e=[];return this.forEach(function(t,n){e.push([n,t])}),n(e)},t&&(a[Symbol.iterator]=a.entries),a.toString=function(){var e="";return this.forEach(function(t,n){e.length>0&&(e+="&"),e+=i(n)+"="+i(t)}),e},e.URLSearchParams=o}()}(void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:e),function(e){if(function(){try{var e=new URL("b","http://a");return e.pathname="c%20d","http://a/c%20d"===e.href&&e.searchParams}catch(e){return!1}}()||function(){var t=e.URL,n=function(e,t){"string"!=typeof e&&(e=String(e));var n=document.implementation.createHTMLDocument("");if(window.doc=n,t){var i=n.createElement("base");i.href=t,n.head.appendChild(i)}var r=n.createElement("a");if(r.href=e,n.body.appendChild(r),r.href=r.href,":"===r.protocol||!/:/.test(r.href))throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:r})},i=n.prototype;["hash","host","hostname","port","protocol","search"].forEach(function(e){!function(e){Object.defineProperty(i,e,{get:function(){return this._anchorElement[e]},set:function(t){this._anchorElement[e]=t},enumerable:!0})}(e)}),Object.defineProperties(i,{toString:{get:function(){var e=this;return function(){return e.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(e){this._anchorElement.href=e},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(e){this._anchorElement.pathname=e},enumerable:!0},origin:{get:function(){var e={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],t=this._anchorElement.port!=e&&""!==this._anchorElement.port;return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(t?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(e){},enumerable:!0},username:{get:function(){return""},set:function(e){},enumerable:!0},searchParams:{get:function(){var e=new URLSearchParams(this.search),t=this;return["append","delete","set"].forEach(function(n){var i=e[n];e[n]=function(){i.apply(e,arguments),t.search=e.toString()}}),e},enumerable:!0}}),n.createObjectURL=function(e){return t.createObjectURL.apply(t,arguments)},n.revokeObjectURL=function(e){return t.revokeObjectURL.apply(t,arguments)},e.URL=n}(),void 0!==e.location&&!("origin"in e.location)){var t=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:t,enumerable:!0})}catch(n){setInterval(function(){e.location.origin=t()},100)}}}(void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:e);var Hr=function(e){return null!=e?e.constructor:null},Wr=function(e,t){return Boolean(e&&t&&e instanceof t)},zr=function(e){return null==e},Gr=function(e){return Hr(e)===Object},Kr=function(e){return Hr(e)===String},Yr=function(e){return Array.isArray(e)},Qr=function(e){return Wr(e,NodeList)},Jr=function(e){return zr(e)||(Kr(e)||Yr(e)||Qr(e))&&!e.length||Gr(e)&&!Object.keys(e).length},$r={nullOrUndefined:zr,object:Gr,number:function(e){return Hr(e)===Number&&!Number.isNaN(e)},string:Kr,boolean:function(e){return Hr(e)===Boolean},function:function(e){return Hr(e)===Function},array:Yr,weakMap:function(e){return Wr(e,WeakMap)},nodeList:Qr,element:function(e){return Wr(e,Element)},textNode:function(e){return Hr(e)===Text},event:function(e){return Wr(e,Event)},cue:function(e){return Wr(e,window.TextTrackCue)||Wr(e,window.VTTCue)},track:function(e){return Wr(e,TextTrack)||!zr(e)&&Kr(e.kind)},url:function(e){if(Wr(e,window.URL))return!0;var t=e;e.startsWith("http://")&&e.startsWith("https://")||(t="http://"+e);try{return!Jr(new URL(t).hostname)}catch(e){return!1}},empty:Jr},Xr=function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}return e}();function Zr(e,t,n){var i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=this,o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(e&&"addEventListener"in e&&!$r.empty(t)&&$r.function(n)){var s=t.split(" "),l=a;Xr&&(l={passive:o,capture:a}),s.forEach(function(t){r&&r.eventListeners&&i&&r.eventListeners.push({element:e,type:t,callback:n,options:l}),e[i?"addEventListener":"removeEventListener"](t,n,l)})}}function eo(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Zr.call(this,e,t,n,!0,i,r)}function to(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Zr.call(this,e,t,n,!1,i,r)}function no(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Zr.call(this,e,t,function o(){to(e,t,o,i,r);for(var a=arguments.length,s=Array(a),l=0;l<a;l++)s[l]=arguments[l];n.apply(this,s)},!0,i,r)}function io(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if($r.element(e)&&!$r.empty(t)){var r=new CustomEvent(t,{bubbles:n,detail:Object.assign({},i,{plyr:this})});e.dispatchEvent(r)}}var ro=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},oo=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),ao=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},so=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],i=!0,r=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(i=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);i=!0);}catch(e){r=!0,o=e}finally{try{!i&&s.return&&s.return()}finally{if(r)throw o}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function lo(e,t){var n=e.length?e:[e];Array.from(n).reverse().forEach(function(e,n){var i=n>0?t.cloneNode(!0):t,r=e.parentNode,o=e.nextSibling;i.appendChild(e),o?r.insertBefore(i,o):r.appendChild(i)})}function co(e,t){$r.element(e)&&!$r.empty(t)&&Object.entries(t).filter(function(e){var t=so(e,2)[1];return!$r.nullOrUndefined(t)}).forEach(function(t){var n=so(t,2),i=n[0],r=n[1];return e.setAttribute(i,r)})}function uo(e,t,n){var i=document.createElement(e);return $r.object(t)&&co(i,t),$r.string(n)&&(i.innerText=n),i}function fo(e,t,n,i){$r.element(t)&&t.appendChild(uo(e,n,i))}function ho(e){$r.nodeList(e)||$r.array(e)?Array.from(e).forEach(ho):$r.element(e)&&$r.element(e.parentNode)&&e.parentNode.removeChild(e)}function po(e){if($r.element(e))for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1}function mo(e,t){return $r.element(t)&&$r.element(t.parentNode)&&$r.element(e)?(t.parentNode.replaceChild(e,t),e):null}function go(e,t){if(!$r.string(e)||$r.empty(e))return{};var n={},i=t;return e.split(",").forEach(function(e){var t=e.trim(),r=t.replace(".",""),o=t.replace(/[[\]]/g,"").split("="),a=o[0],s=o.length>1?o[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":$r.object(i)&&$r.string(i.class)&&(i.class+=" "+r),n.class=r;break;case"#":n.id=t.replace("#","");break;case"[":n[a]=s}}),n}function yo(e,t){if($r.element(e)){var n=t;$r.boolean(n)||(n=!e.hasAttribute("hidden")),n?e.setAttribute("hidden",""):e.removeAttribute("hidden")}}function vo(e,t,n){if($r.nodeList(e))return Array.from(e).map(function(e){return vo(e,t,n)});if($r.element(e)){var i="toggle";return void 0!==n&&(i=n?"add":"remove"),e.classList[i](t),e.classList.contains(t)}return!1}function bo(e,t){return $r.element(e)&&e.classList.contains(t)}function wo(e,t){var n={Element:Element};return(n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)}).call(e,t)}function ko(e){return this.elements.container.querySelectorAll(e)}function To(e){return this.elements.container.querySelector(e)}function So(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];$r.element(e)&&(e.focus(),t&&vo(e,this.config.classNames.tabFocus))}var Eo,_o,Ao,Po=(Eo=document.createElement("span"),_o={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},Ao=Object.keys(_o).find(function(e){return void 0!==Eo.style[e]}),!!$r.string(Ao)&&_o[Ao]);function Mo(e){setTimeout(function(){try{yo(e,!0),e.offsetHeight,yo(e,!1)}catch(e){}},0)}var Lo,Co={isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)},xo={"audio/ogg":"vorbis","audio/wav":"1","video/webm":"vp8, vorbis","video/mp4":"avc1.42E01E, mp4a.40.2","video/ogg":"theora"},Oo={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,n){var i=Co.isIPhone&&n&&Oo.playsinline,r=Oo[e]||"html5"!==t;return{api:r,ui:r&&Oo.rangeInput&&("video"!==e||!Co.isIPhone||i)}},pip:!Co.isIPhone&&$r.function(uo("video").webkitSetPresentationMode),airplay:$r.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=e.split("/"),n=so(t,1)[0];if(!this.isHTML5||n!==this.type)return!1;var i=void 0;e&&e.includes("codecs=")?i=e:"audio/mpeg"===e?i="audio/mpeg;":e in xo&&(i=e+'; codecs="'+xo[e]+'"');try{return Boolean(i&&this.media.canPlayType(i).replace(/no/,""))}catch(e){return!1}},textTracks:"textTracks"in document.createElement("video"),rangeInput:(Lo=document.createElement("input"),Lo.type="range","range"===Lo.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==Po,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},No={getSources:function(){var e=this;return this.isHTML5?Array.from(this.media.querySelectorAll("source")).filter(function(t){return Oo.mime.call(e,t.getAttribute("type"))}):[]},getQualityOptions:function(){return No.getSources.call(this).map(function(e){return Number(e.getAttribute("size"))}).filter(Boolean)},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=No.getSources.call(e).find(function(t){return t.getAttribute("src")===e.source});return t&&Number(t.getAttribute("size"))},set:function(t){var n=No.getSources.call(e).find(function(e){return Number(e.getAttribute("size"))===t});if(n){var i=e.media,r=i.currentTime,o=i.paused,a=i.preload,s=i.readyState;e.media.src=n.getAttribute("src"),("none"!==a||s)&&(e.once("loadedmetadata",function(){e.currentTime=r,o||e.play()}),e.media.load()),io.call(e,e.media,"qualitychange",!1,{quality:t})}}})}},cancelRequests:function(){this.isHTML5&&(ho(No.getSources.call(this)),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}};function jo(e,t){return t.split(".").reduce(function(e,t){return e&&e[t]},e)}function Io(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];if(!n.length)return e;var r=n.shift();return $r.object(r)?(Object.keys(r).forEach(function(t){$r.object(r[t])?(Object.keys(e).includes(t)||Object.assign(e,ao({},t,{})),Io(e[t],r[t])):Object.assign(e,ao({},t,r[t]))}),Io.apply(void 0,[e].concat(n))):e}function Fo(e){for(var t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return $r.empty(e)?e:e.toString().replace(/{(\d+)}/g,function(e,t){return n[t].toString()})}function Ro(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),n.toString())}function qo(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})}function Bo(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=Ro(e,"-"," "),e=Ro(e,"_"," "),Ro(e=qo(e)," ","")}(e)).charAt(0).toLowerCase()+e.slice(1)}function Do(e){var t=document.createElement("div");return t.appendChild(e),t.innerHTML}var Vo=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if($r.empty(e)||$r.empty(t))return"";var n=jo(t.i18n,e);if($r.empty(n))return"";var i={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(i).forEach(function(e){var t=so(e,2),i=t[0],r=t[1];n=Ro(n,i,r)}),n};function Uo(e){return $r.array(e)?e.filter(function(t,n){return e.indexOf(t)===n}):e}var Ho=function(){function e(t){ro(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return oo(e,[{key:"get",value:function(t){if(!e.supported||!this.enabled)return null;var n=window.localStorage.getItem(this.key);if($r.empty(n))return null;var i=JSON.parse(n);return $r.string(t)&&t.length?i[t]:i}},{key:"set",value:function(t){if(e.supported&&this.enabled&&$r.object(t)){var n=this.get();$r.empty(n)&&(n={}),Io(n,t),window.localStorage.setItem(this.key,JSON.stringify(n))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}();function Wo(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(n,i){try{var r=new XMLHttpRequest;if(!("withCredentials"in r))return;r.addEventListener("load",function(){if("text"===t)try{n(JSON.parse(r.responseText))}catch(e){n(r.responseText)}else n(r.response)}),r.addEventListener("error",function(){throw new Error(r.status)}),r.open("GET",e,!0),r.responseType=t,r.send()}catch(e){i(e)}})}function zo(e,t){if($r.string(e)){var n=$r.string(t),i=function(){return null!==document.getElementById(t)},r=function(e,t){e.innerHTML=t,n&&i()||document.body.insertAdjacentElement("afterbegin",e)};if(!n||!i()){var o=Ho.supported,a=document.createElement("div");if(a.setAttribute("hidden",""),n&&a.setAttribute("id",t),o){var s=window.localStorage.getItem("cache-"+t);if(null!==s){var l=JSON.parse(s);r(a,l.content)}}Wo(e).then(function(e){$r.empty(e)||(o&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),r(a,e))}).catch(function(){})}}}var Go=function(e){return parseInt(e/60/60%60,10)},Ko=function(e){return parseInt(e/60%60,10)},Yo=function(e){return parseInt(e%60,10)};function Qo(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!$r.number(e))return Qo(null,t,n);var i=function(e){return("0"+e).slice(-2)},r=Go(e),o=Ko(e),a=Yo(e);return t||r>0?r+=":":r="",(n&&e>0?"-":"")+r+i(o)+":"+i(a)}var Jo={getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||Co.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=To.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:ko.call(this,this.config.selectors.buttons.play),pause:To.call(this,this.config.selectors.buttons.pause),restart:To.call(this,this.config.selectors.buttons.restart),rewind:To.call(this,this.config.selectors.buttons.rewind),fastForward:To.call(this,this.config.selectors.buttons.fastForward),mute:To.call(this,this.config.selectors.buttons.mute),pip:To.call(this,this.config.selectors.buttons.pip),airplay:To.call(this,this.config.selectors.buttons.airplay),settings:To.call(this,this.config.selectors.buttons.settings),captions:To.call(this,this.config.selectors.buttons.captions),fullscreen:To.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=To.call(this,this.config.selectors.progress),this.elements.inputs={seek:To.call(this,this.config.selectors.inputs.seek),volume:To.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:To.call(this,this.config.selectors.display.buffer),currentTime:To.call(this,this.config.selectors.display.currentTime),duration:To.call(this,this.config.selectors.display.duration)},$r.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},createIcon:function(e,t){var n=Jo.getIconUrl.call(this),i=(n.cors?"":n.url)+"#"+this.config.iconPrefix,r=document.createElementNS("http://www.w3.org/2000/svg","svg");co(r,Io(t,{role:"presentation",focusable:"false"}));var o=document.createElementNS("http://www.w3.org/2000/svg","use"),a=i+"-"+e;return"href"in o?o.setAttributeNS("http://www.w3.org/1999/xlink","href",a):o.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",a),r.appendChild(o),r},createLabel:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={pip:"PIP",airplay:"AirPlay"}[e]||Vo(e,this.config);return uo("span",Object.assign({},t,{class:[t.class,this.config.classNames.hidden].filter(Boolean).join(" ")}),n)},createBadge:function(e){if($r.empty(e))return null;var t=uo("span",{class:this.config.classNames.menu.value});return t.appendChild(uo("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=uo("button"),i=Object.assign({},t),r=Bo(e),o=!1,a=void 0,s=void 0,l=void 0,c=void 0;switch("type"in i||(i.type="button"),"class"in i?i.class.includes(this.config.classNames.control)||(i.class+=" "+this.config.classNames.control):i.class=this.config.classNames.control,e){case"play":o=!0,a="play",l="pause",s="play",c="pause";break;case"mute":o=!0,a="mute",l="unmute",s="volume",c="muted";break;case"captions":o=!0,a="enableCaptions",l="disableCaptions",s="captions-off",c="captions-on";break;case"fullscreen":o=!0,a="enterFullscreen",l="exitFullscreen",s="enter-fullscreen",c="exit-fullscreen";break;case"play-large":i.class+=" "+this.config.classNames.control+"--overlaid",r="play",a="play",s="play";break;default:a=r,s=e}o?(n.appendChild(Jo.createIcon.call(this,c,{class:"icon--pressed"})),n.appendChild(Jo.createIcon.call(this,s,{class:"icon--not-pressed"})),n.appendChild(Jo.createLabel.call(this,l,{class:"label--pressed"})),n.appendChild(Jo.createLabel.call(this,a,{class:"label--not-pressed"}))):(n.appendChild(Jo.createIcon.call(this,s)),n.appendChild(Jo.createLabel.call(this,a))),Io(i,go(this.config.selectors.buttons[r],i)),co(n,i),"play"===r?($r.array(this.elements.buttons[r])||(this.elements.buttons[r]=[]),this.elements.buttons[r].push(n)):this.elements.buttons[r]=n;var u=this.config.classNames.controlPressed;return Object.defineProperty(n,"pressed",{enumerable:!0,get:function(){return bo(n,u)},set:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];vo(n,u,e)}}),n},createRange:function(e,t){var n=uo("input",Io(go(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-label":Vo(e,this.config),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=n,Jo.updateRangeFill.call(this,n),n},createProgress:function(e,t){var n=uo("progress",Io(go(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){n.appendChild(uo("span",null,"0"));var i={played:"played",buffer:"buffered"}[e],r=i?Vo(i,this.config):"";n.innerText="% "+r.toLowerCase()}return this.elements.display[e]=n,n},createTime:function(e){var t=go(this.config.selectors.display[e]),n=uo("div",Io(t,{class:(this.config.classNames.display.time+" "+(t.class?t.class:"")).trim(),"aria-label":Vo(e,this.config)}),"00:00");return this.elements.display[e]=n,n},bindMenuItemShortcuts:function(e,t){var n=this;eo(e,"keydown",function(i){if([32,38,39,40].includes(i.which)){i.preventDefault(),i.stopPropagation();var r=wo(e,'[role="menuitemradio"]');if(!r&&[32,39].includes(i.which))Jo.showMenuPanel.call(n,t,!0);else{var o=void 0;32!==i.which&&(40===i.which||r&&39===i.which?(o=e.nextElementSibling,$r.element(o)||(o=e.parentNode.firstElementChild)):(o=e.previousElementSibling,$r.element(o)||(o=e.parentNode.lastElementChild)),So.call(n,o,!0))}}},!1)},createMenuItem:function(e){var t=this,n=e.value,i=e.list,r=e.type,o=e.title,a=e.badge,s=void 0===a?null:a,l=e.checked,c=void 0!==l&&l,u=go(this.config.selectors.inputs[r]),f=uo("button",Io(u,{type:"button",role:"menuitemradio",class:(this.config.classNames.control+" "+(u.class?u.class:"")).trim(),"aria-checked":c,value:n})),h=uo("span");h.innerHTML=o,$r.element(s)&&h.appendChild(s),f.appendChild(h),Object.defineProperty(f,"checked",{enumerable:!0,get:function(){return"true"===f.getAttribute("aria-checked")},set:function(e){e&&Array.from(f.parentNode.children).filter(function(e){return wo(e,'[role="menuitemradio"]')}).forEach(function(e){return e.setAttribute("aria-checked","false")}),f.setAttribute("aria-checked",e?"true":"false")}}),this.listeners.bind(f,"click keydown",function(e){if("keydown"!==e.type||32===e.which){switch(e.preventDefault(),e.stopPropagation(),f.checked=!0,r){case"language":t.currentTrack=Number(n);break;case"quality":t.quality=n;break;case"speed":t.speed=parseFloat(n)}Jo.showMenuPanel.call(t,"home","keydown"===e.type)}},r,!1),Jo.bindMenuItemShortcuts.call(this,f,r),i.appendChild(f)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return $r.number(e)?Qo(e,Go(this.duration)>0,t):e},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];$r.element(e)&&$r.number(t)&&(e.innerText=Jo.formatTime(t,n))},updateVolume:function(){this.supported.ui&&($r.element(this.elements.inputs.volume)&&Jo.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),$r.element(this.elements.buttons.mute)&&(this.elements.buttons.mute.pressed=this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;$r.element(e)&&(e.value=t,Jo.updateRangeFill.call(this,e))},updateProgress:function(e){var t=this;if(this.supported.ui&&$r.event(e)){var n,i,r=0;if(e)switch(e.type){case"timeupdate":case"seeking":case"seeked":n=this.currentTime,i=this.duration,r=0===n||0===i||Number.isNaN(n)||Number.isNaN(i)?0:(n/i*100).toFixed(2),"timeupdate"===e.type&&Jo.setRange.call(this,this.elements.inputs.seek,r);break;case"playing":case"progress":!function(e,n){var i=$r.number(n)?n:0,r=$r.element(e)?e:t.elements.display.buffer;if($r.element(r)){r.value=i;var o=r.getElementsByTagName("span")[0];$r.element(o)&&(o.childNodes[0].nodeValue=i)}}(this.elements.display.buffer,100*this.buffered)}}},updateRangeFill:function(e){var t=$r.event(e)?e.target:e;if($r.element(t)&&"range"===t.getAttribute("type")){if(wo(t,this.config.selectors.inputs.seek)){t.setAttribute("aria-valuenow",this.currentTime);var n=Jo.formatTime(this.currentTime),i=Jo.formatTime(this.duration),r=Vo("seekLabel",this.config);t.setAttribute("aria-valuetext",r.replace("{currentTime}",n).replace("{duration}",i))}else if(wo(t,this.config.selectors.inputs.volume)){var o=100*t.value;t.setAttribute("aria-valuenow",o),t.setAttribute("aria-valuetext",o+"%")}else t.setAttribute("aria-valuenow",t.value);Co.isWebkit&&t.style.setProperty("--value",t.value/t.max*100+"%")}},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&$r.element(this.elements.inputs.seek)&&$r.element(this.elements.display.seekTooltip)&&0!==this.duration){var n=0,i=this.elements.progress.getBoundingClientRect(),r=this.config.classNames.tooltip+"--visible",o=function(e){vo(t.elements.display.seekTooltip,r,e)};if(this.touch)o(!1);else{if($r.event(e))n=100/i.width*(e.pageX-i.left);else{if(!bo(this.elements.display.seekTooltip,r))return;n=parseFloat(this.elements.display.seekTooltip.style.left,10)}n<0?n=0:n>100&&(n=100),Jo.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*n),this.elements.display.seekTooltip.style.left=n+"%",$r.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&o("mouseenter"===e.type)}}},timeUpdate:function(e){var t=!$r.element(this.elements.display.duration)&&this.config.invertTime;Jo.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||Jo.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui&&(this.config.invertTime||!this.currentTime)){if(this.duration>=Math.pow(2,32))return yo(this.elements.display.currentTime,!0),void yo(this.elements.progress,!0);$r.element(this.elements.inputs.seek)&&this.elements.inputs.seek.setAttribute("aria-valuemax",this.duration);var e=$r.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&Jo.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&Jo.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),Jo.updateSeekTooltip.call(this)}},toggleMenuButton:function(e,t){yo(this.elements.settings.buttons[e],!t)},updateSetting:function(e,t,n){var i=this.elements.settings.panels[e],r=null,o=t;if("captions"===e)r=this.currentTrack;else{if(r=$r.empty(n)?this[e]:n,$r.empty(r)&&(r=this.config[e].default),!$r.empty(this.options[e])&&!this.options[e].includes(r))return void this.debug.warn("Unsupported value of '"+r+"' for "+e);if(!this.config[e].options.includes(r))return void this.debug.warn("Disabled value of '"+r+"' for "+e)}if($r.element(o)||(o=i&&i.querySelector('[role="menu"]')),$r.element(o)){this.elements.settings.buttons[e].querySelector("."+this.config.classNames.menu.value).innerHTML=Jo.getLabel.call(this,e,r);var a=o&&o.querySelector('[value="'+r+'"]');$r.element(a)&&(a.checked=!0)}},getLabel:function(e,t){switch(e){case"speed":return 1===t?Vo("normal",this.config):t+"&times;";case"quality":if($r.number(t)){var n=Vo("qualityLabel."+t,this.config);return n.length?n:t+"p"}return qo(t);case"captions":return Zo.getLabel.call(this);default:return null}},setQualityMenu:function(e){var t=this;if($r.element(this.elements.settings.panels.quality)){var n=this.elements.settings.panels.quality.querySelector('[role="menu"]');$r.array(e)&&(this.options.quality=Uo(e).filter(function(e){return t.config.quality.options.includes(e)}));var i=!$r.empty(this.options.quality)&&this.options.quality.length>1;if(Jo.toggleMenuButton.call(this,"quality",i),po(n),Jo.checkMenu.call(this),i){this.options.quality.sort(function(e,n){var i=t.config.quality.options;return i.indexOf(e)>i.indexOf(n)?1:-1}).forEach(function(e){Jo.createMenuItem.call(t,{value:e,list:n,type:"quality",title:Jo.getLabel.call(t,"quality",e),badge:function(e){var n=Vo("qualityBadge."+e,t.config);return n.length?Jo.createBadge.call(t,n):null}(e)})}),Jo.updateSetting.call(this,"quality",n)}}},setCaptionsMenu:function(){var e=this;if($r.element(this.elements.settings.panels.captions)){var t=this.elements.settings.panels.captions.querySelector('[role="menu"]'),n=Zo.getTracks.call(this),i=Boolean(n.length);if(Jo.toggleMenuButton.call(this,"captions",i),po(t),Jo.checkMenu.call(this),i){var r=n.map(function(n,i){return{value:i,checked:e.captions.toggled&&e.currentTrack===i,title:Zo.getLabel.call(e,n),badge:n.language&&Jo.createBadge.call(e,n.language.toUpperCase()),list:t,type:"language"}});r.unshift({value:-1,checked:!this.captions.toggled,title:Vo("disabled",this.config),list:t,type:"language"}),r.forEach(Jo.createMenuItem.bind(this)),Jo.updateSetting.call(this,"captions",t)}}},setSpeedMenu:function(e){var t=this;if($r.element(this.elements.settings.panels.speed)){var n=this.elements.settings.panels.speed.querySelector('[role="menu"]');$r.array(e)?this.options.speed=e:(this.isHTML5||this.isVimeo)&&(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(e){return t.config.speed.options.includes(e)});var i=!$r.empty(this.options.speed)&&this.options.speed.length>1;Jo.toggleMenuButton.call(this,"speed",i),po(n),Jo.checkMenu.call(this),i&&(this.options.speed.forEach(function(e){Jo.createMenuItem.call(t,{value:e,list:n,type:"speed",title:Jo.getLabel.call(t,"speed",e)})}),Jo.updateSetting.call(this,"speed",n))}},checkMenu:function(){var e=this.elements.settings.buttons,t=!$r.empty(e)&&Object.values(e).some(function(e){return!e.hidden});yo(this.elements.settings.menu,!t)},toggleMenu:function(e){var t=this.elements.settings.popup,n=this.elements.buttons.settings;if($r.element(t)&&$r.element(n)){var i=$r.boolean(e)?e:$r.element(t)&&t.hasAttribute("hidden");if($r.event(e)){var r=$r.element(t)&&t.contains(e.target),o=e.target===this.elements.buttons.settings;if(r||!r&&!o&&i)return;o&&e.stopPropagation()}if($r.element(n)&&n.setAttribute("aria-expanded",i),$r.element(t)&&(yo(t,!i),vo(this.elements.container,this.config.classNames.menu.open,i),i&&$r.event(e)&&"keydown"===e.type)){var a=Object.values(this.elements.settings.panels).find(function(e){return!e.hidden}).querySelector('[role^="menuitem"]');So.call(this,a,!0)}}},getMenuSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return ho(t),{width:n,height:i}},showMenuPanel:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=document.getElementById("plyr-settings-"+this.id+"-"+t);if($r.element(i)){var r=i.parentNode,o=Array.from(r.children).find(function(e){return!e.hidden});if(Oo.transitions&&!Oo.reducedMotion){r.style.width=o.scrollWidth+"px",r.style.height=o.scrollHeight+"px";var a=Jo.getMenuSize.call(this,i);eo.call(this,r,Po,function t(n){n.target===r&&["width","height"].includes(n.propertyName)&&(r.style.width="",r.style.height="",to.call(e,r,Po,t))}),r.style.width=a.width+"px",r.style.height=a.height+"px"}yo(o,!0),yo(i,!1);var s=i.querySelector('[role^="menuitem"]');So.call(this,s,n)}},create:function(e){var t=this;if($r.empty(this.config.controls))return null;var n=uo("div",go(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&n.appendChild(Jo.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&n.appendChild(Jo.createButton.call(this,"rewind")),this.config.controls.includes("play")&&n.appendChild(Jo.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&n.appendChild(Jo.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var i=uo("div",go(this.config.selectors.progress));if(i.appendChild(Jo.createRange.call(this,"seek",{id:"plyr-seek-"+e.id})),i.appendChild(Jo.createProgress.call(this,"buffer")),this.config.tooltips.seek){var r=uo("span",{class:this.config.classNames.tooltip},"00:00");i.appendChild(r),this.elements.display.seekTooltip=r}this.elements.progress=i,n.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&n.appendChild(Jo.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&n.appendChild(Jo.createTime.call(this,"duration")),this.config.controls.includes("mute")&&n.appendChild(Jo.createButton.call(this,"mute")),this.config.controls.includes("volume")){var o=uo("div",{class:"plyr__volume"}),a={max:1,step:.05,value:this.config.volume};o.appendChild(Jo.createRange.call(this,"volume",Io(a,{id:"plyr-volume-"+e.id}))),this.elements.volume=o,n.appendChild(o)}if(this.config.controls.includes("captions")&&n.appendChild(Jo.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!$r.empty(this.config.settings)){var s=uo("div",{class:"plyr__menu",hidden:""});s.appendChild(Jo.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var l=uo("div",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,hidden:"","aria-labelled-by":"plyr-settings-toggle-"+e.id}),c=uo("div"),u=uo("div",{id:"plyr-settings-"+e.id+"-home"}),f=uo("div",{role:"menu"});u.appendChild(f),c.appendChild(u),this.elements.settings.panels.home=u,this.config.settings.forEach(function(n){var i=uo("button",Io(go(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",role:"menuitem","aria-haspopup":!0,hidden:""}));Jo.bindMenuItemShortcuts.call(t,i,n),eo(i,"click",function(){Jo.showMenuPanel.call(t,n,!1)});var r=uo("span",null,Vo(n,t.config)),o=uo("span",{class:t.config.classNames.menu.value});o.innerHTML=e[n],r.appendChild(o),i.appendChild(r),f.appendChild(i);var a=uo("div",{id:"plyr-settings-"+e.id+"-"+n,hidden:""}),s=uo("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back"});s.appendChild(uo("span",{"aria-hidden":!0},Vo(n,t.config))),s.appendChild(uo("span",{class:t.config.classNames.hidden},Vo("menuBack",t.config))),eo(a,"keydown",function(e){37===e.which&&(e.preventDefault(),e.stopPropagation(),Jo.showMenuPanel.call(t,"home",!0))},!1),eo(s,"click",function(){Jo.showMenuPanel.call(t,"home",!1)}),a.appendChild(s),a.appendChild(uo("div",{role:"menu"})),c.appendChild(a),t.elements.settings.buttons[n]=i,t.elements.settings.panels[n]=a}),l.appendChild(c),s.appendChild(l),n.appendChild(s),this.elements.settings.popup=l,this.elements.settings.menu=s}return this.config.controls.includes("pip")&&Oo.pip&&n.appendChild(Jo.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&Oo.airplay&&n.appendChild(Jo.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&n.appendChild(Jo.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(Jo.createButton.call(this,"play-large")),this.elements.controls=n,this.isHTML5&&Jo.setQualityMenu.call(this,No.getQualityOptions.call(this)),Jo.setSpeedMenu.call(this),n},inject:function(){var e=this;if(this.config.loadSprite){var t=Jo.getIconUrl.call(this);t.cors&&zo(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var n=null;this.elements.controls=null;var i={id:this.id,seektime:this.config.seekTime,title:this.config.title},r=!0;$r.string(this.config.controls)||$r.element(this.config.controls)?n=this.config.controls:$r.function(this.config.controls)?n=this.config.controls.call(this,i):(n=Jo.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:Zo.getLabel.call(this)}),r=!1);var o=function(e){var t=e;return Object.entries(i).forEach(function(e){var n=so(e,2),i=n[0],r=n[1];t=Ro(t,"{"+i+"}",r)}),t};r&&($r.string(this.config.controls)?n=o(n):$r.element(n)&&(n.innerHTML=o(n.innerHTML)));var a=void 0;if($r.string(this.config.selectors.controls.container)&&(a=document.querySelector(this.config.selectors.controls.container)),$r.element(a)||(a=this.elements.container),$r.element(n)?a.appendChild(n):n&&a.insertAdjacentHTML("beforeend",n),$r.element(this.elements.controls)||Jo.findElements.call(this),window.navigator.userAgent.includes("Edge")&&Mo(a),this.config.tooltips.controls){var s=this.config,l=s.classNames,c=s.selectors,u=c.controls.wrapper+" "+c.labels+" ."+l.hidden,f=ko.call(this,u);Array.from(f).forEach(function(t){vo(t,e.config.classNames.hidden,!1),vo(t,e.config.classNames.tooltip,!0)})}}};function $o(e){var t=e;if(!(arguments.length>1&&void 0!==arguments[1])||arguments[1]){var n=document.createElement("a");n.href=t,t=n.href}try{return new URL(t)}catch(e){return null}}function Xo(e){var t=new URLSearchParams;return $r.object(e)&&Object.entries(e).forEach(function(e){var n=so(e,2),i=n[0],r=n[1];t.set(i,r)}),t}var Zo={setup:function(){if(this.supported.ui)if(!this.isVideo||this.isYouTube||this.isHTML5&&!Oo.textTracks)$r.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&Jo.setCaptionsMenu.call(this);else{var e,t;if($r.element(this.elements.captions)||(this.elements.captions=uo("div",go(this.config.selectors.captions)),e=this.elements.captions,t=this.elements.wrapper,$r.element(e)&&$r.element(t)&&t.parentNode.insertBefore(e,t.nextSibling)),Co.isIE&&window.URL){var n=this.media.querySelectorAll("track");Array.from(n).forEach(function(e){var t=e.getAttribute("src"),n=$o(t);null!==n&&n.hostname!==window.location.href.hostname&&["http:","https:"].includes(n.protocol)&&Wo(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){ho(e)})})}var i=Uo(Array.from(navigator.languages||navigator.language||navigator.userLanguage).map(function(e){return e.split("-")[0]})),r=(this.storage.get("language")||this.config.captions.language||"auto").toLowerCase();if("auto"===r)r=so(i,1)[0];var o=this.storage.get("captions");if($r.boolean(o)||(o=this.config.captions.active),Object.assign(this.captions,{toggled:!1,active:o,language:r,languages:i}),this.isHTML5){var a=this.config.captions.update?"addtrack removetrack":"removetrack";eo.call(this,this.media.textTracks,a,Zo.update.bind(this))}setTimeout(Zo.update.bind(this),0)}},update:function(){var e=this,t=Zo.getTracks.call(this,!0),n=this.captions,i=n.active,r=n.language,o=n.meta,a=n.currentTrackNode,s=Boolean(t.find(function(e){return e.language===r}));this.isHTML5&&this.isVideo&&t.filter(function(e){return!o.get(e)}).forEach(function(t){e.debug.log("Track added",t),o.set(t,{default:"showing"===t.mode}),t.mode="hidden",eo.call(e,t,"cuechange",function(){return Zo.updateCues.call(e)})}),(s&&this.language!==r||!t.includes(a))&&(Zo.setLanguage.call(this,r),Zo.toggle.call(this,i&&s)),vo(this.elements.container,this.config.classNames.captions.enabled,!$r.empty(t)),(this.config.controls||[]).includes("settings")&&this.config.settings.includes("captions")&&Jo.setCaptionsMenu.call(this)},toggle:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(this.supported.ui){var n=this.captions.toggled,i=this.config.classNames.captions.active,r=$r.nullOrUndefined(e)?!n:e;if(r!==n){if(t||(this.captions.active=r,this.storage.set({captions:r})),!this.language&&r&&!t){var o=Zo.getTracks.call(this),a=Zo.findTrack.call(this,[this.captions.language].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(this.captions.languages)),!0);return this.captions.language=a.language,void Zo.set.call(this,o.indexOf(a))}this.elements.buttons.captions&&(this.elements.buttons.captions.pressed=r),vo(this.elements.container,i,r),this.captions.toggled=r,Jo.updateSetting.call(this,"captions"),io.call(this,this.media,r?"captionsenabled":"captionsdisabled")}}},set:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=Zo.getTracks.call(this);if(-1!==e)if($r.number(e))if(e in n){if(this.captions.currentTrack!==e){this.captions.currentTrack=e;var i=n[e],r=(i||{}).language;this.captions.currentTrackNode=i,Jo.updateSetting.call(this,"captions"),t||(this.captions.language=r,this.storage.set({language:r})),this.isVimeo&&this.embed.enableTextTrack(r),io.call(this,this.media,"languagechange")}Zo.toggle.call(this,!0,t),this.isHTML5&&this.isVideo&&Zo.updateCues.call(this)}else this.debug.warn("Track not found",e);else this.debug.warn("Invalid caption argument",e);else Zo.toggle.call(this,!1,t)},setLanguage:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if($r.string(e)){var n=e.toLowerCase();this.captions.language=n;var i=Zo.getTracks.call(this),r=Zo.findTrack.call(this,[n]);Zo.set.call(this,i.indexOf(r),t)}else this.debug.warn("Invalid language argument",e)},getTracks:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return Array.from((this.media||{}).textTracks||[]).filter(function(n){return!e.isHTML5||t||e.captions.meta.has(n)}).filter(function(e){return["captions","subtitles"].includes(e.kind)})},findTrack:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=Zo.getTracks.call(this),r=function(e){return Number((t.captions.meta.get(e)||{}).default)},o=Array.from(i).sort(function(e,t){return r(t)-r(e)}),a=void 0;return e.every(function(e){return!(a=o.find(function(t){return t.language===e}))}),a||(n?o[0]:void 0)},getCurrentTrack:function(){return Zo.getTracks.call(this)[this.currentTrack]},getLabel:function(e){var t=e;return!$r.track(t)&&Oo.textTracks&&this.captions.toggled&&(t=Zo.getCurrentTrack.call(this)),$r.track(t)?$r.empty(t.label)?$r.empty(t.language)?Vo("enabled",this.config):e.language.toUpperCase():t.label:Vo("disabled",this.config)},updateCues:function(e){if(this.supported.ui)if($r.element(this.elements.captions))if($r.nullOrUndefined(e)||Array.isArray(e)){var t=e;if(!t){var n=Zo.getCurrentTrack.call(this);t=Array.from((n||{}).activeCues||[]).map(function(e){return e.getCueAsHTML()}).map(Do)}var i=t.map(function(e){return e.trim()}).join("\n");if(i!==this.elements.captions.innerHTML){po(this.elements.captions);var r=uo("span",go(this.config.selectors.caption));r.innerHTML=i,this.elements.captions.appendChild(r),io.call(this,this.media,"cuechange")}}else this.debug.warn("updateCues: Invalid input",e);else this.debug.warn("No captions element to render to")}},ea={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,playsinline:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.3.12/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240,"default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:"auto",update:!1},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime}s",play:"Play",pause:"Pause",fastForward:"Forward {seektime}s",seek:"Seek",seekLabel:"{currentTime} of {duration}",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",menuBack:"Go back to previous menu",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad",qualityBadge:{2160:"4K",1440:"HD",1080:"HD",720:"HD",576:"SD",480:"SD"}},urls:{vimeo:{sdk:"https://player.vimeo.com/api/player.js",iframe:"https://player.vimeo.com/video/{0}?{1}",api:"https://vimeo.com/api/v2/video/{0}.json"},youtube:{sdk:"https://www.youtube.com/iframe_api",api:"https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet"},googleIMA:{sdk:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adscontentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress__buffer",loop:".plyr__progress__loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",caption:".plyr__caption",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{type:"plyr--{0}",provider:"plyr--{0}",video:"plyr__video-wrapper",embed:"plyr__video-embed",embedContainer:"plyr__video-embed__container",poster:"plyr__poster",posterEnabled:"plyr__poster-enabled",ads:"plyr__ads",control:"plyr__control",controlPressed:"plyr__control--pressed",playing:"plyr--playing",paused:"plyr--paused",stopped:"plyr--stopped",loading:"plyr--loading",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",display:{time:"plyr__time"},menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:""}},ta={html5:"html5",youtube:"youtube",vimeo:"vimeo"},na={audio:"audio",video:"video"};var ia=function(){},ra=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];ro(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return oo(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):ia}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):ia}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):ia}}]),e}();function oa(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;$r.element(e)&&(e.pressed=this.active),io.call(this.player,this.target,this.active?"enterfullscreen":"exitfullscreen",!0),Co.isIos||function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if($r.element(e)){var n=ko.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),i=n[0],r=n[n.length-1];Zr.call(this,this.elements.container,"keydown",function(e){if("Tab"===e.key&&9===e.keyCode){var t=document.activeElement;t!==r||e.shiftKey?t===i&&e.shiftKey&&(r.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}},t,!1)}}.call(this.player,this.target,this.active)}}function aa(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",vo(this.target,this.player.config.classNames.fullscreen.fallback,e),oa.call(this)}var sa=function(){function e(t){var n=this;ro(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},eo.call(this.player,document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){oa.call(n)}),eo.call(this.player,this.player.elements.container,"dblclick",function(e){$r.element(n.player.elements.controls)&&n.player.elements.controls.contains(e.target)||n.toggle()}),this.update()}return oo(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),vo(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(Co.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?$r.empty(this.prefix)||this.target[this.prefix+"Request"+this.property]():this.target.requestFullscreen():aa.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(Co.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!$r.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.property]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else aa.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[""+this.prefix+this.property+"Element"]:document.fullscreenElement)===this.target:bo(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return Co.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if($r.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!$r.function(document[t+"ExitFullscreen"])&&!$r.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}();function la(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Promise(function(n,i){var r=new Image,o=function(){delete r.onload,delete r.onerror,(r.naturalWidth>=t?n:i)(r)};Object.assign(r,{onload:o,onerror:o,src:e})})}var ca={addStyleHook:function(){vo(this.elements.container,this.config.selectors.container.replace(".",""),!0),vo(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void ca.toggleNativeControls.call(this,!0);$r.element(this.elements.controls)||(Jo.inject.call(this),this.listeners.controls()),ca.toggleNativeControls.call(this),this.isHTML5&&Zo.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,Jo.updateVolume.call(this),Jo.timeUpdate.call(this),ca.checkPlaying.call(this),vo(this.elements.container,this.config.classNames.pip.supported,Oo.pip&&this.isHTML5&&this.isVideo),vo(this.elements.container,this.config.classNames.airplay.supported,Oo.airplay&&this.isHTML5),vo(this.elements.container,this.config.classNames.isIos,Co.isIos),vo(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){io.call(e,e.media,"ready")},0),ca.setTitle.call(this),this.poster&&ca.setPoster.call(this,this.poster,!1).catch(function(){}),this.config.duration&&Jo.durationUpdate.call(this)},setTitle:function(){var e=Vo("play",this.config);if($r.string(this.config.title)&&!$r.empty(this.config.title)&&(e+=", "+this.config.title),Array.from(this.elements.buttons.play||[]).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=To.call(this,"iframe");if(!$r.element(t))return;var n=$r.empty(this.config.title)?"video":this.config.title,i=Vo("frameTitle",this.config);t.setAttribute("title",i.replace("{title}",n))}},togglePoster:function(e){vo(this.elements.container,this.config.classNames.posterEnabled,e)},setPoster:function(e){var t=this;return arguments.length>1&&void 0!==arguments[1]&&!arguments[1]||!this.poster?(this.media.setAttribute("poster",e),function(){var e=this;return new Promise(function(t){return e.ready?setTimeout(t,0):eo.call(e,e.elements.container,"ready",t)}).then(function(){})}.call(this).then(function(){return la(e)}).catch(function(n){throw e===t.poster&&ca.togglePoster.call(t,!1),n}).then(function(){if(e!==t.poster)throw new Error("setPoster cancelled by later call to setPoster")}).then(function(){return Object.assign(t.elements.poster.style,{backgroundImage:"url('"+e+"')",backgroundSize:""}),ca.togglePoster.call(t,!0),e})):Promise.reject(new Error("Poster already set"))},checkPlaying:function(e){var t=this;vo(this.elements.container,this.config.classNames.playing,this.playing),vo(this.elements.container,this.config.classNames.paused,this.paused),vo(this.elements.container,this.config.classNames.stopped,this.stopped),Array.from(this.elements.buttons.play||[]).forEach(function(e){e.pressed=t.playing}),$r.event(e)&&"timeupdate"===e.type||ca.toggleControls.call(this)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){vo(t.elements.container,t.config.classNames.loading,t.loading),ca.toggleControls.call(t)},this.loading?250:0)},toggleControls:function(e){var t=this.elements.controls;t&&this.config.hideControls&&this.toggleControls(Boolean(e||this.loading||this.paused||t.pressed||t.hover))}},ua=function(){function e(t){ro(this,e),this.player=t,this.lastKey=null,this.focusTimer=null,this.lastKeyDown=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.setTabFocus=this.setTabFocus.bind(this),this.firstTouch=this.firstTouch.bind(this)}return oo(e,[{key:"handleKey",value:function(e){var t=this.player,n=e.keyCode?e.keyCode:e.which,i="keydown"===e.type,r=i&&n===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&$r.number(n)){if(i){var o=document.activeElement;if($r.element(o)){var a=t.config.selectors.editable;if(o!==t.elements.inputs.seek&&wo(o,a))return;if(32===e.which&&wo(o,'button, [role^="menuitem"]'))return}switch([32,37,38,39,40,48,49,50,51,52,53,54,56,57,67,70,73,75,76,77,79].includes(n)&&(e.preventDefault(),e.stopPropagation()),n){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:r||(t.currentTime=t.duration/10*(n-48));break;case 32:case 75:r||t.togglePlay();break;case 38:t.increaseVolume(.1);break;case 40:t.decreaseVolume(.1);break;case 77:r||(t.muted=!t.muted);break;case 39:t.forward();break;case 37:t.rewind();break;case 70:t.fullscreen.toggle();break;case 67:r||t.toggleCaptions();break;case 76:t.loop=!t.loop}!t.fullscreen.enabled&&t.fullscreen.active&&27===n&&t.fullscreen.toggle(),this.lastKey=n}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){Jo.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){var e=this.player;e.touch=!0,vo(e.elements.container,e.config.classNames.isTouch,!0)}},{key:"setTabFocus",value:function(e){var t=this.player;if(clearTimeout(this.focusTimer),"keydown"!==e.type||"Tab"===e.code){"keydown"===e.type&&(this.lastKeyDown=e.timeStamp);var n,i=e.timeStamp-this.lastKeyDown<=20;if("focus"!==e.type||i)n=t.config.classNames.tabFocus,vo(ko.call(t,"."+n),n,!1),this.focusTimer=setTimeout(function(){var e=document.activeElement;t.elements.container.contains(e)&&vo(document.activeElement,t.config.classNames.tabFocus,!0)},10)}}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=this.player;t.config.keyboard.global&&Zr.call(t,window,"keydown keyup",this.handleKey,e,!1),Zr.call(t,document.body,"click",this.toggleMenu,e),no.call(t,document.body,"touchstart",this.firstTouch),Zr.call(t,document.body,"keydown focus blur",this.setTabFocus,e,!1,!0)}},{key:"container",value:function(){var e=this.player;!e.config.keyboard.global&&e.config.keyboard.focused&&eo.call(e,e.elements.container,"keydown keyup",this.handleKey,!1),eo.call(e,e.elements.container,"mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen",function(t){var n=e.elements.controls;"enterfullscreen"===t.type&&(n.pressed=!1,n.hover=!1);var i=0;["touchstart","touchmove","mousemove"].includes(t.type)&&(ca.toggleControls.call(e,!0),i=e.touch?3e3:2e3),clearTimeout(e.timers.controls),e.timers.controls=setTimeout(function(){return ca.toggleControls.call(e,!1)},i)})}},{key:"media",value:function(){var e=this,t=this.player;if(eo.call(t,t.media,"timeupdate seeking seeked",function(e){return Jo.timeUpdate.call(t,e)}),eo.call(t,t.media,"durationchange loadeddata loadedmetadata",function(e){return Jo.durationUpdate.call(t,e)}),eo.call(t,t.media,"canplay",function(){yo(t.elements.volume,!t.hasAudio),yo(t.elements.buttons.mute,!t.hasAudio)}),eo.call(t,t.media,"ended",function(){t.isHTML5&&t.isVideo&&t.config.resetOnEnd&&t.restart()}),eo.call(t,t.media,"progress playing seeking seeked",function(e){return Jo.updateProgress.call(t,e)}),eo.call(t,t.media,"volumechange",function(e){return Jo.updateVolume.call(t,e)}),eo.call(t,t.media,"playing play pause ended emptied timeupdate",function(e){return ca.checkPlaying.call(t,e)}),eo.call(t,t.media,"waiting canplay seeked playing",function(e){return ca.checkLoading.call(t,e)}),eo.call(t,t.media,"playing",function(){t.ads&&t.ads.enabled&&!t.ads.initialized&&t.ads.managerPromise.then(function(){return t.ads.play()}).catch(function(){return t.play()})}),t.supported.ui&&t.config.clickToPlay&&!t.isAudio){var n=To.call(t,"."+t.config.classNames.video);if(!$r.element(n))return;eo.call(t,n,"click",function(){var n=bo(t.elements.container,e.config.classNames.hideControls);console.warn("click"),t.config.hideControls&&t.touch&&n||(t.ended?(t.restart(),t.play()):e.togglePlay())})}t.supported.ui&&t.config.disableContextMenu&&eo.call(t,t.elements.wrapper,"contextmenu",function(e){e.preventDefault()},!1),eo.call(t,t.media,"volumechange",function(){t.storage.set({volume:t.volume,muted:t.muted})}),eo.call(t,t.media,"ratechange",function(){Jo.updateSetting.call(t,"speed"),t.storage.set({speed:t.speed})}),eo.call(t,t.media,"qualityrequested",function(e){t.storage.set({quality:e.detail.quality})}),eo.call(t,t.media,"qualitychange",function(e){Jo.updateSetting.call(t,"quality",null,e.detail.quality)});var i=t.config.events.concat(["keyup","keydown"]).join(" ");eo.call(t,t.media,i,function(e){var n=e.detail,i=void 0===n?{}:n;"error"===e.type&&(i=t.media.error),io.call(t,t.elements.container,e.type,!0,i)})}},{key:"proxy",value:function(e,t,n){var i=this.player,r=i.config.listeners[n],o=!0;$r.function(r)&&(o=r.call(i,e)),o&&$r.function(t)&&t.call(i,e)}},{key:"bind",value:function(e,t,n,i){var r=this,o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=this.player,s=a.config.listeners[i],l=$r.function(s);eo.call(a,e,t,function(e){return r.proxy(e,n,i)},o&&!l)}},{key:"controls",value:function(){var e=this,t=this.player,n=Co.isIE?"change":"input";t.elements.buttons.play&&Array.from(t.elements.buttons.play).forEach(function(n){e.bind(n,"click",t.togglePlay,"play")}),this.bind(t.elements.buttons.restart,"click",t.restart,"restart"),this.bind(t.elements.buttons.rewind,"click",t.rewind,"rewind"),this.bind(t.elements.buttons.fastForward,"click",t.forward,"fastForward"),this.bind(t.elements.buttons.mute,"click",function(){t.muted=!t.muted},"mute"),this.bind(t.elements.buttons.captions,"click",function(){return t.toggleCaptions()}),this.bind(t.elements.buttons.fullscreen,"click",function(){t.fullscreen.toggle()},"fullscreen"),this.bind(t.elements.buttons.pip,"click",function(){t.pip="toggle"},"pip"),this.bind(t.elements.buttons.airplay,"click",t.airplay,"airplay"),this.bind(t.elements.buttons.settings,"click",function(e){Jo.toggleMenu.call(t,e)}),this.bind(t.elements.buttons.settings,"keydown",function(e){32===e.which&&(e.preventDefault(),e.stopPropagation(),Jo.toggleMenu.call(t,e))},null,!1),this.bind(t.elements.inputs.seek,"mousedown mousemove",function(e){var n=t.elements.progress.getBoundingClientRect(),i=100/n.width*(e.pageX-n.left);e.currentTarget.setAttribute("seek-value",i)}),this.bind(t.elements.inputs.seek,"mousedown mouseup keydown keyup touchstart touchend",function(e){var n=e.currentTarget,i=e.keyCode?e.keyCode:e.which,r=e.type;if("keydown"!==r&&"keyup"!==r||39===i||37===i){var o=n.hasAttribute("play-on-seeked"),a=["mouseup","touchend","keyup"].includes(e.type);o&&a?(n.removeAttribute("play-on-seeked"),t.play()):!a&&t.playing&&(n.setAttribute("play-on-seeked",""),t.pause())}}),this.bind(t.elements.inputs.seek,n,function(e){var n=e.currentTarget,i=n.getAttribute("seek-value");$r.empty(i)&&(i=n.value),n.removeAttribute("seek-value"),Co.isIos&&Mo(n),t.currentTime=i/n.max*t.duration},"seek"),t.config.toggleInvert&&!$r.element(t.elements.display.duration)&&this.bind(t.elements.display.currentTime,"click",function(){0!==t.currentTime&&(t.config.invertTime=!t.config.invertTime,Jo.timeUpdate.call(t))}),this.bind(t.elements.inputs.volume,n,function(e){t.volume=e.target.value},"volume"),Co.isWebkit&&Array.from(ko.call(t,'input[type="range"]')).forEach(function(n){e.bind(n,"input",function(e){return Jo.updateRangeFill.call(t,e.target)})}),this.bind(t.elements.progress,"mouseenter mouseleave mousemove",function(e){return Jo.updateSeekTooltip.call(t,e)}),this.bind(t.elements.controls,"mouseenter mouseleave",function(e){t.elements.controls.hover=!t.touch&&"mouseenter"===e.type}),this.bind(t.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(e){t.elements.controls.pressed=["mousedown","touchstart"].includes(e.type)}),this.bind(t.elements.controls,"focusin focusout",function(n){var i=t.config,r=t.elements,o=t.timers,a="focusin"===n.type;if(vo(r.controls,i.classNames.noTransition,a),ca.toggleControls.call(t,a),a){setTimeout(function(){vo(r.controls,i.classNames.noTransition,!1)},0);var s=e.touch?3e3:4e3;clearTimeout(o.controls),o.controls=setTimeout(function(){return ca.toggleControls.call(t,!1)},s)}}),this.bind(t.elements.inputs.volume,"wheel",function(e){var n=e.webkitDirectionInvertedFromDevice,i=[e.deltaX,-e.deltaY].map(function(e){return n?-e:e}),r=so(i,2),o=r[0],a=r[1],s=Math.sign(Math.abs(o)>Math.abs(a)?o:a);t.increaseVolume(s/50);var l=t.media.volume;(1===s&&l<1||-1===s&&l>0)&&e.preventDefault()},"volume",!1)}}]),e}(),fa=t(function(e,t){var n;n=function(){var e=function(){},t={},n={},i={};function r(e,t){if(e){var r=i[e];if(n[e]=t,r)for(;r.length;)r[0](e,t),r.splice(0,1)}}function o(t,n){t.call&&(t={success:t}),n.length?(t.error||e)(n):(t.success||e)(t)}function a(t,n,i,r){var o,s,l=document,c=i.async,u=(i.numRetries||0)+1,f=i.before||e,h=t.replace(/^(css|img)!/,"");r=r||0,/(^css!|\.css$)/.test(t)?(o=!0,(s=l.createElement("link")).rel="stylesheet",s.href=h):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(s=l.createElement("img")).src=h:((s=l.createElement("script")).src=t,s.async=void 0===c||c),s.onload=s.onerror=s.onbeforeload=function(e){var l=e.type[0];if(o&&"hideFocus"in s)try{s.sheet.cssText.length||(l="e")}catch(e){l="e"}if("e"==l&&(r+=1)<u)return a(t,n,i,r);n(t,l,e.defaultPrevented)},!1!==f(t,s)&&l.head.appendChild(s)}function s(e,n,i){var s,l;if(n&&n.trim&&(s=n),l=(s?i:n)||{},s){if(s in t)throw"LoadJS";t[s]=!0}!function(e,t,n){var i,r,o=(e=e.push?e:[e]).length,s=o,l=[];for(i=function(e,n,i){if("e"==n&&l.push(e),"b"==n){if(!i)return;l.push(e)}--o||t(l)},r=0;r<s;r++)a(e[r],i,n)}(e,function(e){o(l,e),r(s,e)},l)}return s.ready=function(e,t){return function(e,t){e=e.push?e:[e];var r,o,a,s=[],l=e.length,c=l;for(r=function(e,n){n.length&&s.push(e),--c||t(s)};l--;)o=e[l],(a=n[o])?r(o,a):(i[o]=i[o]||[]).push(r)}(e,function(e){o(t,e)}),s},s.done=function(e){r(e,[])},s.reset=function(){t={},n={},i={}},s.isDefined=function(e){return e in t},s},e.exports=n()});function ha(e){return new Promise(function(t,n){fa(e,{success:t,error:n})})}function da(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,io.call(this,this.media,e?"play":"pause"))}var pa={setup:function(){var e=this;vo(this.elements.wrapper,this.config.classNames.embed,!0),pa.setAspectRatio.call(this),$r.object(window.Vimeo)?pa.ready.call(this):ha(this.config.urls.vimeo.sdk).then(function(){pa.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=($r.string(e)?e:this.config.ratio).split(":"),n=so(t,2),i=100/n[0]*n[1];if(this.elements.wrapper.style.paddingBottom=i+"%",this.supported.ui){var r=(240-i)/4.8;this.media.style.transform="translateY(-"+r+"%)"}},ready:function(){var e=this,t=this,n=Xo({loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative}),i=t.media.getAttribute("src");$r.empty(i)&&(i=t.media.getAttribute(t.config.attributes.embed.id));var r,o=(r=i,$r.empty(r)?null:$r.number(Number(r))?r:r.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:r),a=uo("iframe"),s=Fo(t.config.urls.vimeo.iframe,o,n);a.setAttribute("src",s),a.setAttribute("allowfullscreen",""),a.setAttribute("allowtransparency",""),a.setAttribute("allow","autoplay");var l=uo("div",{poster:t.poster,class:t.config.classNames.embedContainer});l.appendChild(a),t.media=mo(l,t.media),Wo(Fo(t.config.urls.vimeo.api,o),"json").then(function(e){if(!$r.empty(e)){var n=new URL(e[0].thumbnail_large);n.pathname=n.pathname.split("_")[0]+".jpg",ca.setPoster.call(t,n.href).catch(function(){})}}),t.embed=new window.Vimeo.Player(a,{autopause:t.config.autopause,muted:t.muted}),t.media.paused=!0,t.media.currentTime=0,t.supported.ui&&t.embed.disableTextTrack(),t.media.play=function(){return da.call(t,!0),t.embed.play()},t.media.pause=function(){return da.call(t,!1),t.embed.pause()},t.media.stop=function(){t.pause(),t.currentTime=0};var c=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return c},set:function(e){var n=t.embed,i=t.media,r=t.paused,o=t.volume,a=r&&!n.hasPlayed;i.seeking=!0,io.call(t,i,"seeking"),Promise.resolve(a&&n.setVolume(0)).then(function(){return n.setCurrentTime(e)}).then(function(){return a&&n.pause()}).then(function(){return a&&n.setVolume(o)}).catch(function(){})}});var u=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return u},set:function(e){t.embed.setPlaybackRate(e).then(function(){u=e,io.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&Jo.setSpeedMenu.call(t,[])})}});var f=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return f},set:function(e){t.embed.setVolume(e).then(function(){f=e,io.call(t,t.media,"volumechange")})}});var h=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return h},set:function(e){var n=!!$r.boolean(e)&&e;t.embed.setVolume(n?0:t.config.volume).then(function(){h=n,io.call(t,t.media,"volumechange")})}});var d=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return d},set:function(e){var n=$r.boolean(e)?e:t.config.loop.active;t.embed.setLoop(n).then(function(){d=n})}});var p=void 0;t.embed.getVideoUrl().then(function(e){p=e}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return p}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var n=function(e,t){var n=function e(t,n){return 0===n?t:e(n,t%n)}(e,t);return e/n+":"+t/n}(t[0],t[1]);pa.setAspectRatio.call(e,n)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(n){t.config.title=n,ca.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,io.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,io.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,Zo.setup.call(t)}),t.embed.on("cuechange",function(e){var n=e.cues,i=(void 0===n?[]:n).map(function(e){return t=e.text,n=document.createDocumentFragment(),i=document.createElement("div"),n.appendChild(i),i.innerHTML=t,n.firstChild.innerText;var t,n,i});Zo.updateCues.call(t,i)}),t.embed.on("loaded",function(){(t.embed.getPaused().then(function(e){da.call(t,!e),e||io.call(t,t.media,"playing")}),$r.element(t.embed.element)&&t.supported.ui)&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){da.call(t,!0),io.call(t,t.media,"playing")}),t.embed.on("pause",function(){da.call(t,!1)}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,io.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,io.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&io.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,io.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,io.call(t,t.media,"seeked")}),t.embed.on("ended",function(){t.media.paused=!0,io.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,io.call(t,t.media,"error")}),setTimeout(function(){return ca.build.call(t)},0)}};function ma(e){var t=Object.entries({hd2160:2160,hd1440:1440,hd1080:1080,hd720:720,large:480,medium:360,small:240,tiny:144}).find(function(t){return t.includes(e)});return t?t.find(function(t){return t!==e}):"default"}function ga(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,io.call(this,this.media,e?"play":"pause"))}var ya,va={setup:function(){var e=this;vo(this.elements.wrapper,this.config.classNames.embed,!0),va.setAspectRatio.call(this),$r.object(window.YT)&&$r.function(window.YT.Player)?va.ready.call(this):(ha(this.config.urls.youtube.sdk).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){va.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if($r.function(this.embed.getVideoData)){var n=this.embed.getVideoData().title;if($r.empty(n))return this.config.title=n,void ca.setTitle.call(this)}var i=this.config.keys.google;$r.string(i)&&!$r.empty(i)&&Wo(Fo(this.config.urls.youtube.api,e,i)).then(function(e){$r.object(e)&&(t.config.title=e.items[0].snippet.title,ca.setTitle.call(t))}).catch(function(){})},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if($r.empty(t)||!t.startsWith("youtube-")){var n=e.media.getAttribute("src");$r.empty(n)&&(n=e.media.getAttribute(this.config.attributes.embed.id));var i,r=(i=n,$r.empty(i)?null:i.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:i),o=e.provider+"-"+Math.floor(1e4*Math.random()),a=uo("div",{id:o,poster:e.poster});e.media=mo(a,e.media);var s=function(e){return"https://img.youtube.com/vi/"+r+"/"+e+"default.jpg"};la(s("maxres"),121).catch(function(){return la(s("sd"),121)}).catch(function(){return la(s("hq"))}).then(function(t){return ca.setPoster.call(e,t.src)}).then(function(t){t.includes("maxres")||(e.elements.poster.style.backgroundSize="cover")}).catch(function(){}),e.embed=new window.YT.Player(o,{videoId:r,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!e.media.error){var n=t.data,i={2:"The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.",5:"The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.",100:"The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.",101:"The owner of the requested video does not allow it to be played in embedded players.",150:"The owner of the requested video does not allow it to be played in embedded players."}[n]||"An unknown error occured";e.media.error={code:n,message:i},io.call(e,e.media,"error")}},onPlaybackQualityChange:function(){io.call(e,e.media,"qualitychange",!1,{quality:e.media.quality})},onPlaybackRateChange:function(t){var n=t.target;e.media.playbackRate=n.getPlaybackRate(),io.call(e,e.media,"ratechange")},onReady:function(t){var n=t.target;va.getTitle.call(e,r),e.media.play=function(){ga.call(e,!0),n.playVideo()},e.media.pause=function(){ga.call(e,!1),n.pauseVideo()},e.media.stop=function(){n.stopVideo()},e.media.duration=n.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(n.getCurrentTime())},set:function(t){e.paused&&!e.embed.hasPlayed&&e.embed.mute(),e.media.seeking=!0,io.call(e,e.media,"seeking"),n.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return n.getPlaybackRate()},set:function(e){n.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return ma(n.getPlaybackQuality())},set:function(e){n.setPlaybackQuality(ma(e))}});var i=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return i},set:function(t){i=t,n.setVolume(100*i),io.call(e,e.media,"volumechange")}});var o=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return o},set:function(t){var i=$r.boolean(t)?t:o;o=i,n[i?"mute":"unMute"](),io.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return n.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=n.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),io.call(e,e.media,"timeupdate"),io.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=n.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&io.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),io.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return ca.build.call(e)},50)},onStateChange:function(t){var n,i=t.target;switch(clearInterval(e.timers.playing),e.media.seeking&&[1,2].includes(t.data)&&(e.media.seeking=!1,io.call(e,e.media,"seeked")),t.data){case-1:io.call(e,e.media,"timeupdate"),e.media.buffered=i.getVideoLoadedFraction(),io.call(e,e.media,"progress");break;case 0:ga.call(e,!1),e.media.loop?(i.stopVideo(),i.playVideo()):io.call(e,e.media,"ended");break;case 1:e.media.paused&&!e.embed.hasPlayed?e.media.pause():(ga.call(e,!0),io.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){io.call(e,e.media,"timeupdate")},50),e.media.duration!==i.getDuration()&&(e.media.duration=i.getDuration(),io.call(e,e.media,"durationchange")),Jo.setQualityMenu.call(e,(n=i.getAvailableQualityLevels(),$r.empty(n)?n:Uo(n.map(function(e){return ma(e)})))));break;case 2:e.muted||e.embed.unMute(),ga.call(e,!1)}io.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},ba={setup:function(){this.media?(vo(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),vo(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&vo(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.isVideo&&(this.elements.wrapper=uo("div",{class:this.config.classNames.video}),lo(this.media,this.elements.wrapper),this.elements.poster=uo("div",{class:this.config.classNames.poster}),this.elements.wrapper.appendChild(this.elements.poster)),this.isHTML5?No.extend.call(this):this.isYouTube?va.setup.call(this):this.isVimeo&&pa.setup.call(this)):this.debug.warn("No media element found!")}},wa=function(){function e(t){var n=this;ro(this,e),this.player=t,this.publisherId=t.config.ads.publisherId,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){n.on("loaded",e),n.on("error",t)}),this.load()}return oo(e,[{key:"load",value:function(){var e=this;this.enabled&&($r.object(window.google)&&$r.object(window.google.ima)?this.ready():ha(this.player.config.urls.googleIMA.sdk).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=uo("div",{class:this.player.config.classNames.ads}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var n=new google.ima.AdsRequest;n.adTagUrl=this.tagUrl,n.linearAdSlotWidth=t.offsetWidth,n.linearAdSlotHeight=t.offsetHeight,n.nonLinearAdSlotWidth=t.offsetWidth,n.nonLinearAdSlotHeight=t.offsetHeight,n.forceNonLinearFullSlot=!1,n.setAdWillPlayMuted(!this.player.muted),this.loader.requestAds(n)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=Qo(Math.max(e.manager.getRemainingTime(),0)),n=Vo("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",n)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),$r.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var n=t.player.elements.progress;if($r.element(n)){var i=100/t.player.duration*e,r=uo("span",{class:t.player.config.classNames.cues});r.style.left=i.toString()+"%",n.appendChild(r)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,n=this.player.elements.container,i=e.getAd(),r=function(e){var n="ads"+e.replace(/_/g,"").toLowerCase();io.call(t.player,t.player.media,n)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),r(e.type),this.pollCountdown(!0),i.isLinear()||(i.width=n.offsetWidth,i.height=n.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:r(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:r(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:r(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:r(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,n=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return n=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;$r.empty(e.cuePoints)||e.cuePoints.forEach(function(i,r){n<i&&i<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(r,1))})}),window.addEventListener("resize",function(){e.manager&&e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("error"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,n=arguments.length,i=Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];var o=this.events[e];$r.array(o)&&o.forEach(function(e){$r.function(e)&&e.apply(t,i)})}},{key:"on",value:function(e,t){return $r.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var n=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){n.cancel(),n.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){$r.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"enabled",get:function(){return this.player.isHTML5&&this.player.isVideo&&this.player.config.ads.enabled&&!$r.empty(this.publisherId)}},{key:"tagUrl",get:function(){return"https://go.aniview.com/api/adserver6/vast/?"+Xo({AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:window.location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId})}}]),e}(),ka={insertElements:function(e,t){var n=this;$r.string(t)?fo(e,this.media,{src:t}):$r.array(t)&&t.forEach(function(t){fo(e,n.media,t)})},change:function(e){var t=this;jo(e,"sources.length")?(No.cancelRequests.call(this),this.destroy.call(this,function(){t.options.quality=[],ho(t.media),t.media=null,$r.element(t.elements.container)&&t.elements.container.removeAttribute("class");var n=e.sources,i=e.type,r=so(n,1)[0],o=r.provider,a=void 0===o?ta.html5:o,s=r.src,l="html5"===a?i:"div",c="html5"===a?{}:{src:s};Object.assign(t,{provider:a,type:i,supported:Oo.check(i,a,t.config.playsinline),media:uo(l,c)}),t.elements.container.appendChild(t.media),$r.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),$r.empty(e.poster)||(t.poster=e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.playsinline&&t.media.setAttribute("playsinline","")),ca.addStyleHook.call(t),t.isHTML5&&ka.insertElements.call(t,"source",n),t.config.title=e.title,ba.setup.call(t),t.isHTML5&&("tracks"in e&&ka.insertElements.call(t,"track",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&ca.build.call(t),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}},Ta=function(){function e(t,n){var i=this;if(ro(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=Oo.touch,this.media=t,$r.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||$r.nodeList(this.media)||$r.array(this.media))&&(this.media=this.media[0]),this.config=Io({},ea,e.defaults,n||{},function(){try{return JSON.parse(i.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,captions:null,buttons:{},display:{},progress:{},inputs:{},settings:{popup:null,menu:null,panels:{},buttons:{}}},this.captions={active:null,currentTrack:-1,meta:new WeakMap},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new ra(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",Oo),!$r.nullOrUndefined(this.media)&&$r.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(Oo.check().api){var r=this.media.cloneNode(!0);r.autoplay=!1,this.elements.original=r;var o=this.media.tagName.toLowerCase(),a=null,s=null;switch(o){case"div":if(a=this.media.querySelector("iframe"),$r.element(a)){if(s=$o(a.getAttribute("src")),this.provider=function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?ta.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{0,9}(?=\b|\/)/.test(e)?ta.vimeo:null}(s.toString()),this.elements.container=this.media,this.media=a,this.elements.container.className="",s.searchParams.length){var l=["1","true"];l.includes(s.searchParams.get("autoplay"))&&(this.config.autoplay=!0),l.includes(s.searchParams.get("loop"))&&(this.config.loop.active=!0),this.isYouTube?this.config.playsinline=l.includes(s.searchParams.get("playsinline")):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if($r.empty(this.provider)||!Object.keys(ta).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=na.video;break;case"video":case"audio":this.type=o,this.provider=ta.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),(this.media.hasAttribute("playsinline")||this.media.hasAttribute("webkit-playsinline"))&&(this.config.playsinline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=Oo.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.eventListeners=[],this.listeners=new ua(this),this.storage=new Ho(this),this.media.plyr=this,$r.element(this.elements.container)||(this.elements.container=uo("div"),lo(this.media,this.elements.container)),ca.addStyleHook.call(this),ba.setup.call(this),this.config.debug&&eo.call(this,this.elements.container,this.config.events.join(" "),function(e){i.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&ca.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new sa(this),this.config.ads.enabled&&(this.ads=new wa(this)),this.config.autoplay&&this.play()):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return oo(e,[{key:"play",value:function(){return $r.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&$r.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){($r.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?(this.pause(),this.restart()):$r.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-($r.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+($r.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+($r.number(e)?e:0)}},{key:"decreaseVolume",value:function(e){this.increaseVolume(-e)}},{key:"toggleCaptions",value:function(e){Zo.toggle.call(this,e,!1)}},{key:"airplay",value:function(){Oo.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){if(this.supported.ui&&!this.isAudio){var t=bo(this.elements.container,this.config.classNames.hideControls),n=void 0===e?void 0:!e,i=vo(this.elements.container,this.config.classNames.hideControls,n);if(i&&this.config.controls.includes("settings")&&!$r.empty(this.config.settings)&&Jo.toggleMenu.call(this,!1),i!==t){var r=i?"controlshidden":"controlsshown";io.call(this,this.media,r)}return!i}return!1}},{key:"on",value:function(e,t){eo.call(this,this.elements.container,e,t)}},{key:"once",value:function(e,t){no.call(this,this.elements.container,e,t)}},{key:"off",value:function(e,t){to(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var i=function(){document.body.style.overflow="",t.embed=null,n?(Object.keys(t.elements).length&&(ho(t.elements.buttons.play),ho(t.elements.captions),ho(t.elements.controls),ho(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),$r.function(e)&&e()):(function(){this&&this.eventListeners&&(this.eventListeners.forEach(function(e){var t=e.element,n=e.type,i=e.callback,r=e.options;t.removeEventListener(n,i,r)}),this.eventListeners=[])}.call(t),mo(t.elements.original,t.elements.container),io.call(t,t.elements.original,"destroyed",!0),$r.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};this.stop(),this.isHTML5?(clearTimeout(this.timers.loading),ca.toggleNativeControls.call(this,!0),i()):this.isYouTube?(clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&$r.function(this.embed.destroy)&&this.embed.destroy(),i()):this.isVimeo&&(null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200))}}},{key:"supports",value:function(e){return Oo.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===ta.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===ta.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===ta.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===na.video)}},{key:"isAudio",get:function(){return Boolean(this.type===na.audio)}},{key:"playing",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"stopped",get:function(){return Boolean(this.paused&&0===this.currentTime)}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){if(this.duration){var t=$r.number(e)&&e>0;this.media.currentTime=t?Math.min(e,this.duration):0,this.debug.log("Seeking to "+this.currentTime+" seconds")}},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return $r.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseFloat(this.config.duration),t=(this.media||{}).duration,n=$r.number(t)&&t!==1/0?t:0;return e||n}},{key:"volume",set:function(e){var t=e;$r.string(t)&&(t=Number(t)),$r.number(t)||(t=this.storage.get("volume")),$r.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!$r.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;$r.boolean(t)||(t=this.storage.get("muted")),$r.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;$r.number(e)&&(t=e),$r.number(t)||(t=this.storage.get("speed")),$r.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=this.config.quality,n=this.options.quality;if(n.length){var i=[!$r.empty(e)&&Number(e),this.storage.get("quality"),t.selected,t.default].find($r.number);if(!n.includes(i)){var r=function(e,t){return $r.array(e)&&e.length?e.reduce(function(e,n){return Math.abs(n-t)<Math.abs(e-t)?n:e}):null}(n,i);this.debug.warn("Unsupported quality option: "+i+", using "+r+" instead"),i=r}io.call(this,this.media,"qualityrequested",!1,{quality:i}),t.selected=i,this.media.quality=i}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=$r.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){ka.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isVideo?ca.setPoster.call(this,e,!1).catch(function(){}):this.debug.warn("Poster can only be set for video")},get:function(){return this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=$r.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"currentTrack",set:function(e){Zo.set.call(this,e,!1)},get:function(){var e=this.captions,t=e.toggled,n=e.currentTrack;return t?n:-1}},{key:"language",set:function(e){Zo.setLanguage.call(this,e,!1)},get:function(){return(Zo.getCurrentTrack.call(this)||{}).language}},{key:"pip",set:function(e){var t="picture-in-picture",n="inline";if(Oo.pip){var i=$r.boolean(e)?e:this.pip===n;this.media.webkitSetPresentationMode(i?t:n)}},get:function(){return Oo.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,n){return Oo.check(e,t,n)}},{key:"loadSprite",value:function(e,t){return zo(e,t)}},{key:"setup",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=null;return $r.string(t)?i=Array.from(document.querySelectorAll(t)):$r.nodeList(t)?i=Array.from(t):$r.array(t)&&(i=t.filter($r.element)),$r.empty(i)?null:i.map(function(t){return new e(t,n)})}}]),e}();return Ta.defaults=(ya=ea,JSON.parse(JSON.stringify(ya))),Ta});
//# sourceMappingURL=plyr.polyfilled.min.js.map
diff --git a/dist/plyr.polyfilled.min.js.map b/dist/plyr.polyfilled.min.js.map
index 497884d6..e03f8baf 100644
--- a/dist/plyr.polyfilled.min.js.map
+++ b/dist/plyr.polyfilled.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["node_modules/core-js/modules/_global.js","node_modules/core-js/modules/_core.js","node_modules/core-js/modules/_is-object.js","node_modules/core-js/modules/_an-object.js","node_modules/core-js/modules/_fails.js","node_modules/core-js/modules/_descriptors.js","node_modules/core-js/modules/_dom-create.js","node_modules/core-js/modules/_ie8-dom-define.js","node_modules/core-js/modules/_to-primitive.js","node_modules/core-js/modules/_object-dp.js","node_modules/core-js/modules/_property-desc.js","node_modules/core-js/modules/_hide.js","node_modules/core-js/modules/_has.js","node_modules/core-js/modules/_uid.js","node_modules/core-js/modules/_redefine.js","node_modules/core-js/modules/_a-function.js","node_modules/core-js/modules/_ctx.js","node_modules/core-js/modules/_export.js","node_modules/core-js/modules/_typed.js","node_modules/core-js/modules/_redefine-all.js","node_modules/core-js/modules/_an-instance.js","node_modules/core-js/modules/_to-integer.js","node_modules/core-js/modules/_to-length.js","node_modules/core-js/modules/_to-index.js","node_modules/core-js/modules/_cof.js","node_modules/core-js/modules/_iobject.js","node_modules/core-js/modules/_defined.js","node_modules/core-js/modules/_to-iobject.js","node_modules/core-js/modules/_to-absolute-index.js","node_modules/core-js/modules/_array-includes.js","node_modules/core-js/modules/_shared.js","node_modules/core-js/modules/_shared-key.js","node_modules/core-js/modules/_object-keys-internal.js","node_modules/core-js/modules/_enum-bug-keys.js","node_modules/core-js/modules/_object-gopn.js","node_modules/core-js/modules/_to-object.js","node_modules/core-js/modules/_array-fill.js","node_modules/core-js/modules/_wks.js","node_modules/core-js/modules/_set-to-string-tag.js","node_modules/core-js/modules/_typed-buffer.js","node_modules/core-js/modules/_species-constructor.js","node_modules/core-js/modules/_set-species.js","node_modules/core-js/modules/es6.typed.array-buffer.js","node_modules/core-js/modules/_classof.js","node_modules/core-js/modules/_iterators.js","node_modules/core-js/modules/_is-array-iter.js","node_modules/core-js/modules/_object-keys.js","node_modules/core-js/modules/_object-dps.js","node_modules/core-js/modules/_html.js","node_modules/core-js/modules/_object-create.js","node_modules/core-js/modules/_object-gpo.js","node_modules/core-js/modules/core.get-iterator-method.js","node_modules/core-js/modules/_is-array.js","node_modules/core-js/modules/_array-species-constructor.js","node_modules/core-js/modules/_array-species-create.js","node_modules/core-js/modules/_array-methods.js","node_modules/core-js/modules/_add-to-unscopables.js","node_modules/core-js/modules/_iter-step.js","node_modules/core-js/modules/_iter-create.js","node_modules/core-js/modules/_iter-define.js","node_modules/core-js/modules/es6.array.iterator.js","node_modules/core-js/modules/_iter-detect.js","node_modules/core-js/modules/_array-copy-within.js","node_modules/core-js/modules/_object-pie.js","node_modules/core-js/modules/_object-gopd.js","node_modules/core-js/modules/_typed-array.js","node_modules/core-js/modules/es6.typed.int8-array.js","node_modules/core-js/modules/es6.typed.uint8-array.js","node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","node_modules/core-js/modules/es6.typed.int16-array.js","node_modules/core-js/modules/es6.typed.uint16-array.js","node_modules/core-js/modules/es6.typed.int32-array.js","node_modules/core-js/modules/es6.typed.uint32-array.js","node_modules/core-js/modules/es6.typed.float32-array.js","node_modules/core-js/modules/es6.typed.float64-array.js","node_modules/core-js/modules/_iter-call.js","node_modules/core-js/modules/_for-of.js","node_modules/core-js/modules/_meta.js","node_modules/core-js/modules/_validate-collection.js","node_modules/core-js/modules/_collection-strong.js","node_modules/core-js/modules/_set-proto.js","node_modules/core-js/modules/_inherit-if-required.js","node_modules/core-js/modules/_collection.js","node_modules/core-js/modules/es6.map.js","node_modules/core-js/modules/es6.set.js","node_modules/core-js/modules/_object-gops.js","node_modules/core-js/modules/_object-assign.js","node_modules/core-js/modules/_collection-weak.js","node_modules/core-js/modules/es6.weak-map.js","node_modules/core-js/modules/es6.weak-set.js","node_modules/core-js/modules/es6.reflect.apply.js","node_modules/core-js/modules/_invoke.js","node_modules/core-js/modules/_bind.js","node_modules/core-js/modules/es6.reflect.construct.js","node_modules/core-js/modules/es6.reflect.define-property.js","node_modules/core-js/modules/es6.reflect.delete-property.js","node_modules/core-js/modules/es6.reflect.get.js","node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","node_modules/core-js/modules/es6.reflect.get-prototype-of.js","node_modules/core-js/modules/es6.reflect.has.js","node_modules/core-js/modules/es6.reflect.is-extensible.js","node_modules/core-js/modules/_own-keys.js","node_modules/core-js/modules/es6.reflect.own-keys.js","node_modules/core-js/modules/es6.reflect.prevent-extensions.js","node_modules/core-js/modules/es6.reflect.set.js","node_modules/core-js/modules/es6.reflect.set-prototype-of.js","node_modules/core-js/modules/_task.js","node_modules/core-js/modules/_microtask.js","node_modules/core-js/modules/_new-promise-capability.js","node_modules/core-js/modules/es6.promise.js","node_modules/core-js/modules/_perform.js","node_modules/core-js/modules/_promise-resolve.js","node_modules/core-js/modules/_wks-ext.js","node_modules/core-js/modules/_wks-define.js","node_modules/core-js/modules/_object-gopn-ext.js","node_modules/core-js/modules/es6.symbol.js","node_modules/core-js/modules/_enum-keys.js","node_modules/core-js/modules/_object-sap.js","node_modules/core-js/modules/es6.object.freeze.js","node_modules/core-js/modules/es6.object.seal.js","node_modules/core-js/modules/es6.object.prevent-extensions.js","node_modules/core-js/modules/es6.object.is-frozen.js","node_modules/core-js/modules/es6.object.is-sealed.js","node_modules/core-js/modules/es6.object.is-extensible.js","node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","node_modules/core-js/modules/es6.object.get-prototype-of.js","node_modules/core-js/modules/es6.object.keys.js","node_modules/core-js/modules/es6.object.get-own-property-names.js","node_modules/core-js/modules/es6.object.assign.js","node_modules/core-js/modules/_same-value.js","node_modules/core-js/modules/es6.object.is.js","node_modules/core-js/modules/es6.function.name.js","node_modules/core-js/modules/es6.string.raw.js","node_modules/core-js/modules/es6.string.from-code-point.js","node_modules/core-js/modules/_string-at.js","node_modules/core-js/modules/es6.string.code-point-at.js","node_modules/core-js/modules/_string-repeat.js","node_modules/core-js/modules/es6.string.repeat.js","node_modules/core-js/modules/_is-regexp.js","node_modules/core-js/modules/_string-context.js","node_modules/core-js/modules/_fails-is-regexp.js","node_modules/core-js/modules/es6.string.starts-with.js","node_modules/core-js/modules/es6.string.ends-with.js","node_modules/core-js/modules/es6.string.includes.js","node_modules/core-js/modules/es6.regexp.flags.js","node_modules/core-js/modules/_flags.js","node_modules/core-js/modules/_fix-re-wks.js","node_modules/core-js/modules/es6.regexp.match.js","node_modules/core-js/modules/es6.regexp.replace.js","node_modules/core-js/modules/es6.regexp.split.js","node_modules/core-js/modules/es6.regexp.search.js","node_modules/core-js/modules/_create-property.js","node_modules/core-js/modules/es6.array.from.js","node_modules/core-js/modules/es6.array.of.js","node_modules/core-js/modules/es6.array.copy-within.js","node_modules/core-js/modules/es6.array.find.js","node_modules/core-js/modules/es6.array.find-index.js","node_modules/core-js/modules/es6.array.fill.js","node_modules/core-js/modules/es6.number.is-finite.js","node_modules/core-js/modules/_is-integer.js","node_modules/core-js/modules/es6.number.is-integer.js","node_modules/core-js/modules/es6.number.is-safe-integer.js","node_modules/core-js/modules/es6.number.is-nan.js","node_modules/core-js/modules/es6.number.epsilon.js","node_modules/core-js/modules/es6.number.min-safe-integer.js","node_modules/core-js/modules/es6.number.max-safe-integer.js","node_modules/core-js/modules/_math-log1p.js","node_modules/core-js/modules/es6.math.acosh.js","node_modules/core-js/modules/es6.math.asinh.js","node_modules/core-js/modules/es6.math.atanh.js","node_modules/core-js/modules/_math-sign.js","node_modules/core-js/modules/es6.math.cbrt.js","node_modules/core-js/modules/es6.math.clz32.js","node_modules/core-js/modules/es6.math.cosh.js","node_modules/core-js/modules/_math-expm1.js","node_modules/core-js/modules/es6.math.expm1.js","node_modules/core-js/modules/_math-fround.js","node_modules/core-js/modules/es6.math.fround.js","node_modules/core-js/modules/es6.math.hypot.js","node_modules/core-js/modules/es6.math.imul.js","node_modules/core-js/modules/es6.math.log1p.js","node_modules/core-js/modules/es6.math.log10.js","node_modules/core-js/modules/es6.math.log2.js","node_modules/core-js/modules/es6.math.sign.js","node_modules/core-js/modules/es6.math.sinh.js","node_modules/core-js/modules/es6.math.tanh.js","node_modules/core-js/modules/es6.math.trunc.js","node_modules/core-js/modules/es7.array.includes.js","node_modules/core-js/modules/_object-to-array.js","node_modules/core-js/modules/es7.object.values.js","node_modules/core-js/modules/es7.object.entries.js","node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","node_modules/core-js/modules/_string-pad.js","node_modules/core-js/modules/_user-agent.js","node_modules/core-js/modules/es7.string.pad-start.js","node_modules/core-js/modules/es7.string.pad-end.js","node_modules/core-js/modules/web.timers.js","node_modules/core-js/modules/web.immediate.js","node_modules/core-js/modules/web.dom.iterable.js","node_modules/regenerator-runtime/runtime.js","node_modules/custom-event-polyfill/custom-event-polyfill.js","node_modules/url-polyfill/url-polyfill.js","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/objects.js","src/js/utils/strings.js","src/js/i18n.js","src/js/utils/arrays.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","src/js/utils/loadImage.js","src/js/ui.js","src/js/listeners.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils/loadScript.js","src/js/plugins/vimeo.js","src/js/plugins/youtube.js","src/js/media.js","src/js/plugins/ads.js","src/js/source.js","src/js/plyr.js"],"names":["global","module","exports","window","Math","self","Function","__g","core","version","__e","_isObject","it","_anObject","isObject","TypeError","_fails","exec","e","_descriptors","require$$0","Object","defineProperty","get","a","document","is","createElement","_domCreate","_ie8DomDefine","require$$1","require$$2","_toPrimitive","S","fn","val","toString","call","valueOf","dP","O","P","Attributes","anObject","toPrimitive","IE8_DOM_DEFINE","value","_propertyDesc","bitmap","enumerable","configurable","writable","_hide","object","key","f","createDesc","hasOwnProperty","_has","id","px","random","_uid","concat","undefined","SRC","$toString","TPL","split","inspectSource","safe","isFunction","has","hide","join","String","prototype","this","_aFunction","_ctx","that","length","aFunction","b","c","apply","arguments","$export","type","name","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","IS_PROTO","IS_BIND","B","target","expProto","ctx","redefine","U","W","R","Typed","_export","TYPED","uid","VIEW","ABV","ArrayBuffer","DataView","CONSTR","i","TypedArrayConstructors","_typed","_redefineAll","src","_anInstance","Constructor","forbiddenField","ceil","floor","_toInteger","isNaN","min","_toLength","toInteger","_toIndex","number","toLength","RangeError","_cof","slice","_iobject","propertyIsEnumerable","cof","_defined","_toIobject","IObject","defined","max","_toAbsoluteIndex","index","_arrayIncludes","IS_INCLUDES","$this","el","fromIndex","toIObject","toAbsoluteIndex","store","_shared","shared","_sharedKey","arrayIndexOf","IE_PROTO","_objectKeysInternal","names","result","push","_enumBugKeys","hiddenKeys","getOwnPropertyNames","$keys","_toObject","_arrayFill","toObject","aLen","end","endPos","Symbol","USE_SYMBOL","def","TAG","_setToStringTag","tag","stat","gOPN","PROTOTYPE","WRONG_INDEX","$ArrayBuffer","$DataView","Infinity","BaseBuffer","abs","pow","log","LN2","$BUFFER","DESCRIPTORS","$LENGTH","$OFFSET","packIEEE754","mLen","nBytes","m","buffer","Array","eLen","eMax","eBias","rt","s","unpackIEEE754","nBits","NaN","unpackI32","bytes","packI8","packI16","packI32","packF64","packF32","addGetter","C","internal","view","isLittleEndian","intIndex","toIndex","_b","start","pack","reverse","set","conversion","$typed","fails","ArrayBufferProto","anInstance","keys","j","constructor","$setInt8","setInt8","getInt8","redefineAll","byteOffset","setUint8","byteLength","arrayFill","bufferLength","offset","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","setToStringTag","SPECIES","_speciesConstructor","D","_setSpecies","KEY","$isView","isView","$slice","len","first","final","speciesConstructor","viewS","viewT","ARG","_classof","T","tryGet","callee","_iterators","ITERATOR","ArrayProto","_isArrayIter","Iterators","_objectKeys","enumBugKeys","_objectDps","defineProperties","Properties","getKeys","_html","documentElement","Empty","createDict","iframeDocument","iframe","style","display","appendChild","contentWindow","open","write","lt","close","_objectCreate","create","dPs","ObjectProto","_objectGpo","getPrototypeOf","core_getIteratorMethod","getIteratorMethod","classof","_isArray","isArray","arg","_arraySpeciesCreate","original","_arrayMethods","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","asc","callbackfn","res","UNSCOPABLES","_addToUnscopables","_iterStep","done","IteratorPrototype","_iterCreate","NAME","next","descriptor","BUGGY","returnThis","_iterDefine","Base","DEFAULT","IS_SET","FORCED","$iterCreate","methods","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","es6_array_iterator","iterated","_t","_i","_k","step","Arguments","addToUnscopables","SAFE_CLOSING","_iterDetect","skipClosing","arr","iter","_arrayCopyWithin","copyWithin","to","from","count","inc","gOPD","getOwnPropertyDescriptor","pIE","require$$3","require$$4","require$$5","$buffer","require$$6","require$$7","require$$8","propertyDesc","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","require$$26","wks","require$$27","createArrayMethod","require$$28","createArrayIncludes","require$$29","require$$30","ArrayIterators","require$$31","require$$32","$iterDetect","require$$33","setSpecies","require$$34","require$$35","arrayCopyWithin","require$$36","$DP","require$$37","$GOPD","require$$38","Uint8Array","arrayForEach","arrayFilter","arraySome","arrayEvery","arrayFind","arrayFindIndex","arrayIncludes","arrayValues","arrayKeys","arrayEntries","arrayLastIndexOf","lastIndexOf","arrayReduce","reduce","arrayReduceRight","reduceRight","arrayJoin","arraySort","sort","arraySlice","arrayToString","arrayToLocaleString","toLocaleString","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","TYPED_ARRAY","$map","allocate","LITTLE_ENDIAN","Uint16Array","FORCED_SET","toOffset","BYTES","validate","speciesFromList","list","fromList","_d","$from","iterator","mapfn","mapping","iterFn","$of","TO_LOCALE_BUG","$toLocaleString","every","fill","filter","find","predicate","findIndex","forEach","indexOf","searchElement","includes","separator","map","middle","some","comparefn","subarray","begin","$begin","BYTES_PER_ELEMENT","$set","arrayLike","$iterators","isTAIndex","$getDesc","$setDesc","desc","$TypedArrayPrototype$","wrapper","CLAMPED","GETTER","SETTER","TypedArray","TAC","TypedArrayPrototype","addElement","data","v","o","getter","round","setter","$offset","$length","klass","$len","l","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","init","_iterCall","ret","BREAK","RETURN","iterable","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","_validateCollection","SIZE","getEntry","entry","_f","n","k","_collectionStrong","getConstructor","ADDER","_l","forOf","clear","r","p","delete","prev","setStrong","$iterDefine","check","_setProto","setPrototypeOf","test","buggy","__proto__","_collection","common","IS_WEAK","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","inheritIfRequired","strong","add","getOwnPropertySymbols","$assign","assign","_objectAssign","A","K","getSymbols","gOPS","isEnum","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","splice","_collectionWeak","$has","ufstore","InternalMap","each","weak","tmp","$WeakMap","freeze","method","rApply","Reflect","fApply","thisArgument","argumentsList","L","_invoke","args","un","factories","_bind","bind","partArgs","bound","construct","invoke","rConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","propertyKey","attributes","deleteProperty","receiver","getProto","$isExtensible","_ownKeys","ownKeys","$preventExtensions","V","existingDescriptor","ownDesc","setProto","defer","channel","port","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","event","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","cel","html","removeChild","setTimeout","_task","macrotask","Observer","MutationObserver","WebKitMutationObserver","Promise","isNode","PromiseCapability","resolve","reject","promise","$$resolve","$$reject","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","_perform","task","microtask","head","last","notify","flush","parent","domain","exit","enter","navigator","standalone","then","toggle","node","createTextNode","observe","characterData","$Promise","empty","newPromiseCapability","newPromiseCapabilityModule","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","handler","fail","_h","onHandleUnhandled","onUnhandled","console","unhandled","isUnhandled","perform","emit","onunhandledrejection","reason","error","_a","onrejectionhandled","$reject","_w","$resolve","executor","err","onFulfilled","onRejected","catch","capability","x","promiseCapability","promiseResolve","all","remaining","$index","alreadyCalled","race","_wksDefine","$Symbol","_global","charAt","wksExt","windowNames","getWindowNames","gOPNExt","$JSON","JSON","_stringify","stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","QObject","findChild","setSymbolDesc","$fails","_create","protoDesc","wrap","sym","isSymbol","$defineProperty","$defineProperties","symbols","enumKeys","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","wksDefine","for","keyFor","useSetter","useSimple","replacer","$replacer","_objectSap","$freeze","$seal","$isFrozen","$isSealed","$getPrototypeOf","_sameValue","y","FProto","nameRE","match","raw","callSite","tpl","fromCharCode","$fromCodePoint","fromCodePoint","code","TO_STRING","$at","pos","charCodeAt","codePointAt","_stringRepeat","str","repeat","MATCH","_isRegexp","isRegExp","_stringContext","searchString","_failsIsRegexp","re","$startsWith","startsWith","context","search","$endsWith","endsWith","endPosition","flags","RegExp","ignoreCase","multiline","unicode","sticky","_fixReWks","SYMBOL","fns","strfn","rxfn","string","$match","regexp","REPLACE","$replace","searchValue","replaceValue","SPLIT","$split","_split","$push","NPCG","limit","separator2","lastIndex","lastLength","output","lastLastIndex","splitLimit","separatorCopy","replace","SEARCH","$search","_createProperty","createProperty","$find","forced","_isFinite","isFinite","_isInteger","isInteger","isSafeInteger","EPSILON","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","_mathLog1p","log1p","sqrt","$acosh","acosh","Number","MAX_VALUE","$asinh","asinh","$atanh","atanh","_mathSign","sign","cbrt","clz32","LOG2E","cosh","$expm1","expm1","_mathExpm1","EPSILON32","MAX32","MIN32","_mathFround","fround","$abs","$sign","hypot","value1","value2","div","sum","larg","$imul","imul","xn","yn","xl","yl","log10","LOG10E","log2","sinh","tanh","trunc","$includes","_objectToArray","isEntries","$values","getOwnPropertyDescriptors","getDesc","_stringPad","maxLength","fillString","left","stringLength","fillStr","intMaxLength","fillLen","stringFiller","_userAgent","userAgent","padStart","$pad","padEnd","MSIE","time","boundArgs","setInterval","$task","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","Op","hasOwn","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","runtime","regeneratorRuntime","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","NativeIteratorPrototype","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","__await","defineIteratorMethods","AsyncIterator","async","innerFn","outerFn","tryLocsList","pop","Context","reset","skipTempReset","sent","_sent","delegate","tryEntries","resetTryEntry","stop","rootRecord","completion","rval","dispatchException","exception","handle","loc","caught","record","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","Error","abrupt","finallyEntry","complete","afterLoc","finish","thrown","delegateYield","resultName","nextLoc","protoGenerator","generator","state","doneResult","delegateResult","maybeInvokeDelegate","tryCatch","makeInvokeMethod","obj","unwrapped","previousPromise","callInvokeWithMethodAndArg","return","info","pushTryEntry","locs","iteratorMethod","ce","CustomEvent","preventDefault","defaultPrevented","params","evt","origPrevent","bubbles","cancelable","detail","createEvent","initCustomEvent","Event","iteratorSupported","checkIfIteratorIsSupported","createIterator","items","shift","serializeParam","encodeURIComponent","deserializeParam","decodeURIComponent","URLSearchParams","attribute","append","_this","_entries","getAll","callback","thisArg","polyfillURLSearchParams","u","URL","pathname","href","searchParams","checkIfURLIsSupported","_URL","url","base","doc","implementation","createHTMLDocument","baseElement","anchorElement","body","protocol","attributeName","_anchorElement","linkURLWithAnchorAttribute","origin","expectedPort","http:","https:","ftp:","addPortToOrigin","hostname","password","username","methodName","createObjectURL","blob","revokeObjectURL","polyfillURL","location","getOrigin","input","instanceOf","Boolean","isNullOrUndefined","isString","isNodeList","isEmpty","is$1","nullOrUndefined","boolean","function","array","weakMap","WeakMap","nodeList","element","Element","textNode","Text","cue","TextTrackCue","VTTCue","track","TextTrack","supportsPassiveListeners","supported","options","removeEventListener","toggleListener","passive","capture","events","eventListeners","on","off","once","onceCallback","_len","_key","triggerEvent","plyr","dispatchEvent","elements","targets","child","cloneNode","parentNode","sibling","nextSibling","insertBefore","setAttributes","_ref","slicedToArray","_ref3","_ref4","setAttribute","text","innerText","insertElement","removeElement","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","selector","trim","className","parts","class","toggleHidden","hidden","hasAttribute","removeAttribute","toggleClass","force","classList","contains","hasClass","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelectorAll","getElements","container","getElement","querySelector","setFocus","tabFocus","focus","config","classNames","transitionEndEvent","WebkitTransition","MozTransition","OTransition","transition","range","browser","isIE","documentMode","isWebkit","isIPhone","platform","isIos","defaultCodecs","audio/ogg","audio/wav","video/webm","video/mp4","video/ogg","support","audio","video","provider","playsinline","canPlayInline","api","ui","rangeInput","pip","webkitSetPresentationMode","airplay","WebKitPlaybackTargetAvailabilityEvent","mime","inputType","_inputType$split","mediaType","isHTML5","media","canPlayType","textTracks","touch","transitions","reducedMotion","matchMedia","html5","getSources","getAttribute","getQualityOptions","extend","player","_player$media","currentTime","paused","preload","readyState","play","load","quality","cancelRequests","blankVideo","debug","getDeep","path","sources","defineProperty$1","format","replaceAll","toTitleCase","toUpperCase","substr","toLowerCase","toCamelCase","toPascalCase","getHTML","innerHTML","i18n","{seektime}","seekTime","{title}","title","_ref2","dedupe","item","Storage","classCallCheck","enabled","storage","localStorage","getItem","json","parse","setItem","removeItem","fetch","responseType","request","XMLHttpRequest","responseText","response","status","send","loadSprite","hasId","exists","getElementById","update","insertAdjacentElement","useStorage","cached","prefix","content","getHours","parseInt","getMinutes","getSeconds","formatTime","displayHours","inverted","hours","mins","secs","controls","getIconUrl","cors","iconUrl","host","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","duration","seekTooltip","tooltip","warn","toggleNativeControls","createIcon","iconPath","iconPrefix","icon","createElementNS","role","focusable","use","setAttributeNS","createLabel","attr","createBadge","badge","menu","createButton","buttonType","button","label","labelPressed","iconPressed","control","controlPressed","pressed","createRange","autocomplete","aria-label","aria-valuemin","aria-valuemax","aria-valuenow","updateRangeFill","createProgress","aria-hidden","suffixKey","played","suffix","createTime","bindMenuItemShortcuts","menuItem","which","stopPropagation","isRadioButton","showMenuPanel","nextElementSibling","firstElementChild","previousElementSibling","lastElementChild","createMenuItem","_this2","_ref$badge","_ref$checked","checked","aria-checked","flex","children","listeners","currentTrack","speed","parseFloat","updateTimeDisplay","updateVolume","setRange","muted","updateProgress","_this3","current","toFixed","getElementsByTagName","nodeValue","setProgress","buffered","percent","setProperty","updateSeekTooltip","_this4","tooltips","clientRect","getBoundingClientRect","visible","_toggle","width","pageX","timeUpdate","invert","invertTime","seeking","durationUpdate","hasDuration","displayDuration","toggleMenuButton","setting","updateSetting","pane","panels","default","getLabel","setQualityMenu","_this5","checkMenu","sorting","getBadge","setCaptionsMenu","_this6","tracks","getTracks","toggled","language","unshift","setSpeedMenu","_this7","isVimeo","toggleMenu","popup","show","isMenuItem","isButton","firstItem","getMenuSize","tab","clone","position","opacity","scrollWidth","height","scrollHeight","_this8","size","restore","propertyName","_this9","aria-haspopup","aria-controls","aria-expanded","aria-labelled-by","inner","home","backButton","inject","_this10","props","seektime","insertAdjacentHTML","offsetHeight","_config","labels","parseUrl","parser","buildUrlParams","setup","isVideo","isYouTube","languages","userLanguage","active","trackEvents","_captions","currentTrackNode","languageExists","mode","updateCues","setLanguage","activeClass","findTrack","toConsumableArray","embed","enableTextTrack","sortIsDefault","sorted","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","caption","defaults","autoplay","autopause","toggleInvert","ratio","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","focused","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","disabled","advertisement","qualityBadge","2160","1440","1080","720","576","480","urls","vimeo","sdk","youtube","googleIMA","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","google","publisherId","providers","types","noop","Console","onChange","keyCode","activeElement","shiftKey","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","overflow","Fullscreen","property","native","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","loadImage","minWidth","image","Image","onload","onerror","naturalWidth","addStyleHook","build","checkPlaying","ready","setTitle","setPoster","isEmbed","togglePoster","enable","backgroundImage","backgroundSize","toggleControls","checkLoading","clearTimeout","timers","Listeners","lastKey","focusTimer","lastKeyDown","handleKey","setTabFocus","firstTouch","altKey","ctrlKey","metaKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","timeStamp","wasKeyDown","delay","hasAudio","initialized","managerPromise","isAudio","ended","proxyEvents","_event$detail","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","proxy","inputEvent","currentTarget","eventType","seekTo","_player","webkitDirectionInvertedFromDevice","_map","deltaX","deltaY","_map2","direction","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","executeCallbacks","depsNotFound","success","loadFile","callbackFn","numTries","isCss","maxTries","numRetries","beforeCallbackFn","before","pathStripped","rel","onbeforeload","ev","sheet","cssText","loadjs","paths","arg1","arg2","numWaiting","loadFiles","deps","bundleIds","subscribe","isDefined","loadScript","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","_split2","padding","paddingBottom","transform","byline","portrait","transparent","gesture","$2","thumbnail_large","Player","disableTextTrack","restorePause","setVolume","setCurrentTime","setPlaybackRate","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","getRatio","h","getAspectRatio","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","_ref$cues","strippedCues","fragment","createDocumentFragment","firstChild","getPaused","seconds","mapQualityUnit","hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","snippet","currentId","posterSrc","format$$1","playerVars","showinfo","iv_load_policy","modestbranding","disablekb","widget_referrer","cc_load_policy","cc_lang_pref","onError","message","2","5","100","101","150","onPlaybackQualityChange","onPlaybackRateChange","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","clearInterval","buffering","getVideoLoadedFraction","lastBuffered","onStateChange","levels","getAvailableQualityLevels","level","unMute","Ads","displayContainer","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","adError","zIndex","destroy","_this11","handlers","_this12","AV_PUBLISHERID","AV_CHANNELID","AV_URL","cb","Date","AV_WIDTH","AV_HEIGHT","AV_CDIM2","insertElements","change","_sources$","_sources$$provider","tagName","crossorigin","Plyr","failed","jQuery","getProviderByUrl","truthy","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","curr","closest","states","webkitPresentationMode","inline","t"],"mappings":"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ACI,aAGA,OAEA,WACA,eACA,OACA,SACA,WACA,WACA,MACA,UACA,cAEJc,UAAW,WAAY,UAAW,SAGlC5D,MACIwD,QAAS,UACTC,OAAQ,qBACR7E,KAAM,OACN2E,MAAO,QACPG,YAAa,sBACbO,KAAM,OACNmM,UAAW,8BACX3J,OAAQ,SACRoC,SAAU,WACVrK,YAAa,eACb2F,SAAU,WACVD,OAAQ,SACRP,KAAM,OACN0M,OAAQ,SACRC,eAAgB,kBAChBC,gBAAiB,mBACjBC,gBAAiB,mBACjBC,eAAgB,kBAChBC,WAAY,qBACZ7M,SAAU,WACVD,SAAU,WACV+M,SAAU,2BACV3I,MAAO,QACP4I,OAAQ,SACR9R,QAAS,UACTgR,KAAM,OACNh0C,MAAO,QACPrD,IAAK,MACLikB,IAAK,MACLqR,MAAO,QACP8iB,SAAU,WACVnQ,QAAS,UACToQ,cAAe,KACfC,cACIC,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,IAAK,KACLC,IAAK,KACLC,IAAK,OAKbC,MACIC,OACIC,IAAK,yCACLnxC,OAAQ,yCACRy8B,IAAK,2CAET2U,SACID,IAAK,qCACL1U,IACI,yGAER4U,WACIF,IAAK,uDAKb1J,WACI7D,KAAM,KACNrF,KAAM,KACN2E,MAAO,KACPC,QAAS,KACTC,OAAQ,KACRC,YAAa,KACbC,KAAM,KACNO,OAAQ,KACRL,SAAU,KACVC,WAAY,KACZ7G,IAAK,KACLE,QAAS,KACT6K,MAAO,KACPlJ,QAAS,KACTgR,KAAM,KACN7E,SAAU,MAIdhU,QAGI,QACA,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,YAGA,kBACA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,QAGA,cACA,gBACA,mBAGA,YACA,kBACA,mBACA,YACA,cACA,cACA,iBACA,gBACA,YAKJoM,WACIsO,SAAU,6CACV9W,UAAW,QACXiI,UACIjI,UAAW,KACXttB,QAAS,mBAEbggC,OAAQ,cACRjK,SACI1E,KAAM,qBACN2E,MAAO,sBACPC,QAAS,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","file":"plyr.polyfilled.min.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","(function(global) {\r\n /**\r\n * Polyfill URLSearchParams\r\n *\r\n * Inspired from : https://github.com/WebReflection/url-search-params/blob/master/src/url-search-params.js\r\n */\r\n\r\n var checkIfIteratorIsSupported = function() {\r\n try {\r\n return !!Symbol.iterator;\r\n } catch(error) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var iteratorSupported = checkIfIteratorIsSupported();\r\n\r\n var createIterator = function(items) {\r\n var iterator = {\r\n next: function() {\r\n var value = items.shift();\r\n return { done: value === void 0, value: value };\r\n }\r\n };\r\n\r\n if(iteratorSupported) {\r\n iterator[Symbol.iterator] = function() {\r\n return iterator;\r\n };\r\n }\r\n\r\n return iterator;\r\n };\r\n\r\n /**\r\n * Search param name and values should be encoded according to https://url.spec.whatwg.org/#urlencoded-serializing\r\n * encodeURIComponent() produces the same result except encoding spaces as `%20` instead of `+`.\r\n */\r\n var serializeParam = function(value) {\r\n return encodeURIComponent(value).replace(/%20/g, '+');\r\n };\r\n\r\n var deserializeParam = function(value) {\r\n return decodeURIComponent(value).replace(/\\+/g, ' ');\r\n };\r\n\r\n var polyfillURLSearchParams= function() {\r\n\r\n var URLSearchParams = function(searchString) {\r\n Object.defineProperty(this, '_entries', { value: {} });\r\n\r\n if(typeof searchString === 'string') {\r\n if(searchString !== '') {\r\n searchString = searchString.replace(/^\\?/, '');\r\n var attributes = searchString.split('&');\r\n var attribute;\r\n for(var i = 0; i < attributes.length; i++) {\r\n attribute = attributes[i].split('=');\r\n this.append(\r\n deserializeParam(attribute[0]),\r\n (attribute.length > 1) ? deserializeParam(attribute[1]) : ''\r\n );\r\n }\r\n }\r\n } else if(searchString instanceof URLSearchParams) {\r\n var _this = this;\r\n searchString.forEach(function(value, name) {\r\n _this.append(value, name);\r\n });\r\n }\r\n };\r\n\r\n var proto = URLSearchParams.prototype;\r\n\r\n proto.append = function(name, value) {\r\n if(name in this._entries) {\r\n this._entries[name].push(value.toString());\r\n } else {\r\n this._entries[name] = [value.toString()];\r\n }\r\n };\r\n\r\n proto.delete = function(name) {\r\n delete this._entries[name];\r\n };\r\n\r\n proto.get = function(name) {\r\n return (name in this._entries) ? this._entries[name][0] : null;\r\n };\r\n\r\n proto.getAll = function(name) {\r\n return (name in this._entries) ? this._entries[name].slice(0) : [];\r\n };\r\n\r\n proto.has = function(name) {\r\n return (name in this._entries);\r\n };\r\n\r\n proto.set = function(name, value) {\r\n this._entries[name] = [value.toString()];\r\n };\r\n\r\n proto.forEach = function(callback, thisArg) {\r\n var entries;\r\n for(var name in this._entries) {\r\n if(this._entries.hasOwnProperty(name)) {\r\n entries = this._entries[name];\r\n for(var i = 0; i < entries.length; i++) {\r\n callback.call(thisArg, entries[i], name, this);\r\n }\r\n }\r\n }\r\n };\r\n\r\n proto.keys = function() {\r\n var items = [];\r\n this.forEach(function(value, name) { items.push(name); });\r\n return createIterator(items);\r\n };\r\n\r\n proto.values = function() {\r\n var items = [];\r\n this.forEach(function(value) { items.push(value); });\r\n return createIterator(items);\r\n };\r\n\r\n proto.entries = function() {\r\n var items = [];\r\n this.forEach(function(value, name) { items.push([name, value]); });\r\n return createIterator(items);\r\n };\r\n\r\n if(iteratorSupported) {\r\n proto[Symbol.iterator] = proto.entries;\r\n }\r\n\r\n proto.toString = function() {\r\n var searchString = '';\r\n this.forEach(function(value, name) {\r\n if(searchString.length > 0) searchString+= '&';\r\n searchString += serializeParam(name) + '=' + serializeParam(value);\r\n });\r\n return searchString;\r\n };\r\n\r\n global.URLSearchParams = URLSearchParams;\r\n };\r\n\r\n if(!('URLSearchParams' in global) || (new URLSearchParams('?a=1').toString() !== 'a=1')) {\r\n polyfillURLSearchParams();\r\n }\r\n\r\n // HTMLAnchorElement\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n\r\n(function(global) {\r\n /**\r\n * Polyfill URL\r\n *\r\n * Inspired from : https://github.com/arv/DOM-URL-Polyfill/blob/master/src/url.js\r\n */\r\n\r\n var checkIfURLIsSupported = function() {\r\n try {\r\n var u = new URL('b', 'http://a');\r\n u.pathname = 'c%20d';\r\n return (u.href === 'http://a/c%20d') && u.searchParams;\r\n } catch(e) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var polyfillURL = function() {\r\n var _URL = global.URL;\r\n\r\n var URL = function(url, base) {\r\n if(typeof url !== 'string') url = String(url);\r\n\r\n var doc = document.implementation.createHTMLDocument('');\r\n window.doc = doc;\r\n if(base) {\r\n var baseElement = doc.createElement('base');\r\n baseElement.href = base;\r\n doc.head.appendChild(baseElement);\r\n }\r\n\r\n var anchorElement = doc.createElement('a');\r\n anchorElement.href = url;\r\n doc.body.appendChild(anchorElement);\r\n anchorElement.href = anchorElement.href; // force href to refresh\r\n\r\n if(anchorElement.protocol === ':' || !/:/.test(anchorElement.href)) {\r\n throw new TypeError('Invalid URL');\r\n }\r\n\r\n Object.defineProperty(this, '_anchorElement', {\r\n value: anchorElement\r\n });\r\n };\r\n\r\n var proto = URL.prototype;\r\n\r\n var linkURLWithAnchorAttribute = function(attributeName) {\r\n Object.defineProperty(proto, attributeName, {\r\n get: function() {\r\n return this._anchorElement[attributeName];\r\n },\r\n set: function(value) {\r\n this._anchorElement[attributeName] = value;\r\n },\r\n enumerable: true\r\n });\r\n };\r\n\r\n ['hash', 'host', 'hostname', 'port', 'protocol', 'search']\r\n .forEach(function(attributeName) {\r\n linkURLWithAnchorAttribute(attributeName);\r\n });\r\n\r\n Object.defineProperties(proto, {\r\n\r\n 'toString': {\r\n get: function() {\r\n var _this = this;\r\n return function() {\r\n return _this.href;\r\n };\r\n }\r\n },\r\n\r\n 'href' : {\r\n get: function() {\r\n return this._anchorElement.href.replace(/\\?$/,'');\r\n },\r\n set: function(value) {\r\n this._anchorElement.href = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'pathname' : {\r\n get: function() {\r\n return this._anchorElement.pathname.replace(/(^\\/?)/,'/');\r\n },\r\n set: function(value) {\r\n this._anchorElement.pathname = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'origin': {\r\n get: function() {\r\n // get expected port from protocol\r\n var expectedPort = {'http:': 80, 'https:': 443, 'ftp:': 21}[this._anchorElement.protocol];\r\n // add port to origin if, expected port is different than actual port\r\n // and it is not empty f.e http://foo:8080\r\n // 8080 != 80 && 8080 != ''\r\n var addPortToOrigin = this._anchorElement.port != expectedPort &&\r\n this._anchorElement.port !== ''\r\n\r\n return this._anchorElement.protocol +\r\n '//' +\r\n this._anchorElement.hostname +\r\n (addPortToOrigin ? (':' + this._anchorElement.port) : '');\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'password': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'username': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'searchParams': {\r\n get: function() {\r\n var searchParams = new URLSearchParams(this.search);\r\n var _this = this;\r\n ['append', 'delete', 'set'].forEach(function(methodName) {\r\n var method = searchParams[methodName];\r\n searchParams[methodName] = function() {\r\n method.apply(searchParams, arguments);\r\n _this.search = searchParams.toString();\r\n };\r\n });\r\n return searchParams;\r\n },\r\n enumerable: true\r\n }\r\n });\r\n\r\n URL.createObjectURL = function(blob) {\r\n return _URL.createObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n URL.revokeObjectURL = function(url) {\r\n return _URL.revokeObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n global.URL = URL;\r\n\r\n };\r\n\r\n if(!checkIfURLIsSupported()) {\r\n polyfillURL();\r\n }\r\n\r\n if((global.location !== void 0) && !('origin' in global.location)) {\r\n var getOrigin = function() {\r\n return global.location.protocol + '//' + global.location.hostname + (global.location.port ? (':' + global.location.port) : '');\r\n };\r\n\r\n try {\r\n Object.defineProperty(global.location, 'origin', {\r\n get: getOrigin,\r\n enumerable: true\r\n });\r\n } catch(e) {\r\n setInterval(function() {\r\n global.location.origin = getOrigin();\r\n }, 100);\r\n }\r\n }\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n","// ==========================================================================\n// 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 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 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(\n element,\n event,\n callback,\n toggle = false,\n passive = true,\n capture = false,\n) {\n // Bail if no element, event, or callback\n if (\n !element ||\n !('addEventListener' in element) ||\n is.empty(event) ||\n !is.function(callback)\n ) {\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (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'](\n type,\n callback,\n options,\n );\n });\n}\n\n// Bind event handler\nexport function on(\n element,\n events = '',\n callback,\n passive = true,\n capture = false,\n) {\n toggleListener.call(\n this,\n element,\n events,\n callback,\n true,\n passive,\n capture,\n );\n}\n\n// Unbind event handler\nexport function off(\n element,\n events = '',\n callback,\n passive = true,\n capture = false,\n) {\n toggleListener.call(\n this,\n element,\n events,\n callback,\n false,\n passive,\n capture,\n );\n}\n\n// Bind once-only event handler\nexport function once(\n element,\n events = '',\n callback,\n passive = true,\n capture = false,\n) {\n function onceCallback(...args) {\n off(element, events, onceCallback, passive, capture);\n callback.apply(this, args);\n }\n\n toggleListener.call(\n this,\n element,\n events,\n onceCallback,\n true,\n passive,\n capture,\n );\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 =>\n this.ready\n ? setTimeout(resolve, 0)\n : 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 (\n !is.element(oldChild) ||\n !is.element(oldChild.parentNode) ||\n !is.element(newChild)\n ) {\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.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n}\n\n// Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\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(\n this,\n 'button:not(:disabled), input:not(:disabled), [tabindex]',\n );\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(\n this,\n this.elements.container,\n 'keydown',\n trap,\n toggle,\n false,\n );\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 toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n toggleHidden(element, false);\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 });\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// Object utils\n// ==========================================================================\n\nimport is from './is';\n\n// Clone nested objects\nexport function cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n}\n\n// Get a nested value in an object\nexport function getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n}\n\n// Deep extend destination object with N more objects\nexport function extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return extend(target, ...sources);\n}\n","// ==========================================================================\n// String utils\n// ==========================================================================\n\nimport is from './is';\n\n// Generate a random ID\nexport function generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n}\n\n// Format string\nexport function format(input, ...args) {\n if (is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => args[i].toString());\n}\n\n// Get percentage\nexport function getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n}\n\n// Replace all occurances of a string in a string\nexport function replaceAll(input = '', find = '', replace = '') {\n return input.replace(\n new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'),\n replace.toString(),\n );\n}\n\n// Convert to title case\nexport function toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n}\n\n// Convert string to pascalCase\nexport function toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = toTitleCase(string);\n\n // Convert to pascal case\n return replaceAll(string, ' ', '');\n}\n\n// Convert string to pascalCase\nexport function toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n// Remove HTML from a string\nexport function stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n}\n\n// Like outerHTML, but also works for DocumentFragment\nexport function getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n}\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport is from './utils/is';\nimport { getDeep } from './utils/objects';\nimport { replaceAll } from './utils/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// 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// 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 i18n from './i18n';\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 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(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n } 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 // Toggle classname when pressed property is set\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 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 bindMenuItemShortcuts(menuItem, type) {\n // Handle space or -> to open menu\n on(menuItem, 'keydown', 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 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);\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 }, false);\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 keydown',\n event => {\n if (event.type === 'keydown' && 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');\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}%`);\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 // 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 const show = is.boolean(input) ? input : is.element(popup) && popup.hasAttribute('hidden');\n\n if (is.event(input)) {\n const isMenuItem = is.element(popup) && popup.contains(input.target);\n const isButton = input.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n input.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n // Show the actual popup\n if (is.element(popup)) {\n toggleHidden(popup, !show);\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n // Focus the first item if key interaction\n if (show && is.event(input) && input.type === 'keydown') {\n const pane = Object.values(this.elements.settings.panels).find(pane => !pane.hidden);\n const firstItem = pane.querySelector('[role^=\"menuitem\"]');\n setFocus.call(this, firstItem, true);\n }\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 = '') {\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 const firstItem = target.querySelector('[role^=\"menuitem\"]');\n setFocus.call(this, firstItem, true);\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (is.empty(this.config.controls)) {\n return null;\n }\n\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 // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n 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 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 id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const popup = createElement('div', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\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);\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(pane, 'keydown', 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');\n }, false);\n\n // Go back via button click\n on(backButton, 'click', () => {\n controls.showMenuPanel.call(this, 'home');\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 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 (is.string(this.config.controls) || is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([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\n if (is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n 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 i18n from './i18n';\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 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 languages = dedupe(\n Array.from(navigator.languages || navigator.language || navigator.userLanguage).map(language => language.split('-')[0]),\n );\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: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [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 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress__buffer',\n loop: '.plyr__progress__loop', // Used later\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n caption: '.plyr__caption',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n 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// ==========================================================================\n\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 // 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 if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Load image avoiding xhr/fetch CORS issues\n// Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded\n// By default it checks if it is at least 1px, but you can add a second argument to change this\n// ==========================================================================\n\nexport default function loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n\n Object.assign(image, { onload: handler, onerror: handler, src });\n });\n}\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\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 browser from './utils/browser';\nimport {\n getElement,\n getElements,\n matches,\n toggleClass,\n toggleHidden,\n} 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 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 this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // 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 } = this.player.config.selectors;\n const { seek } = this.player.elements.inputs;\n\n if (focused !== seek && matches(focused, editable)) {\n return;\n }\n\n if (\n event.which === 32 &&\n matches(focused, 'button, [role^=\"menuitem\"]')\n ) {\n return;\n }\n }\n\n // Which keycodes should we prevent default\n const preventDefault = [\n 32,\n 37,\n 38,\n 39,\n 40,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 67,\n 70,\n 73,\n 75,\n 76,\n 77,\n 79,\n ];\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (\n !this.player.fullscreen.enabled &&\n this.player.fullscreen.active &&\n code === 27\n ) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n toggleClass(\n this.player.elements.container,\n this.player.config.classNames.isTouch,\n true,\n );\n }\n\n setTabFocus(event) {\n clearTimeout(this.focusTimer);\n\n // Ignore any key other than tab\n if (event.type === 'keydown' && event.code !== 'Tab') {\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 = this.player.config.classNames.tabFocus;\n const current = getElements.call(this.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\n this.focusTimer = setTimeout(() => {\n const focused = document.activeElement;\n\n // Ignore if current focus element isn't inside the player\n if (!this.player.elements.container.contains(focused)) {\n return;\n }\n\n toggleClass(\n document.activeElement,\n this.player.config.classNames.tabFocus,\n true,\n );\n }, 10);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n toggleListener.call(\n this.player,\n window,\n 'keydown keyup',\n this.handleKey,\n toggle,\n false,\n );\n }\n\n // Click anywhere closes menu\n toggleListener.call(\n this.player,\n document.body,\n 'click',\n this.toggleMenu,\n toggle,\n );\n\n // Detect touch by events\n once.call(this.player, document.body, 'touchstart', this.firstTouch);\n\n // Tab focus detection\n toggleListener.call(\n this.player,\n document.body,\n 'keydown focus blur',\n this.setTabFocus,\n toggle,\n false,\n true,\n );\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (\n !this.player.config.keyboard.global &&\n this.player.config.keyboard.focused\n ) {\n on.call(\n this.player,\n this.player.elements.container,\n 'keydown keyup',\n this.handleKey,\n false,\n );\n }\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n this.player,\n this.player.elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = ['touchstart', 'touchmove', 'mousemove'].includes(\n event.type,\n );\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n\n // Set new timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(\n () => ui.toggleControls.call(this.player, false),\n delay,\n );\n },\n );\n }\n\n // Listen for media events\n media() {\n // Time change on media\n on.call(\n this.player,\n this.player.media,\n 'timeupdate seeking seeked',\n event => controls.timeUpdate.call(this.player, event),\n );\n\n // Display duration\n on.call(\n this.player,\n this.player.media,\n 'durationchange loadeddata loadedmetadata',\n event => controls.durationUpdate.call(this.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(this.player, this.player.media, 'canplay', () => {\n toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n toggleHidden(\n this.player.elements.buttons.mute,\n !this.player.hasAudio,\n );\n });\n\n // Handle the media finishing\n on.call(this.player, this.player.media, 'ended', () => {\n // Show poster on end\n if (\n this.player.isHTML5 &&\n this.player.isVideo &&\n this.player.config.resetOnEnd\n ) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n on.call(\n this.player,\n this.player.media,\n 'progress playing seeking seeked',\n event => controls.updateProgress.call(this.player, event),\n );\n\n // Handle volume changes\n on.call(this.player, this.player.media, 'volumechange', event =>\n controls.updateVolume.call(this.player, event),\n );\n\n // Handle play/pause\n on.call(\n this.player,\n this.player.media,\n 'playing play pause ended emptied timeupdate',\n event => ui.checkPlaying.call(this.player, event),\n );\n\n // Loading state\n on.call(\n this.player,\n this.player.media,\n 'waiting canplay seeked playing',\n event => ui.checkLoading.call(this.player, event),\n );\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(this.player, this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise\n .then(() => this.player.ads.play())\n .catch(() => this.player.play());\n }\n });\n\n // Click video\n if (\n this.player.supported.ui &&\n this.player.config.clickToPlay &&\n !this.player.isAudio\n ) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(\n this.player,\n `.${this.player.config.classNames.video}`,\n );\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(this.player, wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (\n this.player.config.hideControls &&\n this.player.touch &&\n !this.player.paused\n ) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n on.call(\n this.player,\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n on.call(this.player, this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({\n volume: this.player.volume,\n muted: this.player.muted,\n });\n });\n\n // Speed change\n on.call(this.player, this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n on.call(this.player, this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n on.call(this.player, this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(\n this.player,\n 'quality',\n null,\n event.detail.quality,\n );\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = this.player.config.events\n .concat(['keyup', 'keydown'])\n .join(' ');\n\n on.call(this.player, this.player.media, proxyEvents, event => {\n let { detail = {} } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n triggerEvent.call(\n this.player,\n this.player.elements.container,\n event.type,\n true,\n detail,\n );\n });\n }\n\n // Run default and custom handlers\n proxy(event, defaultHandler, customHandlerKey) {\n const customHandler = this.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(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n }\n\n // Trigger custom and default handlers\n bind(element, type, defaultHandler, customHandlerKey, passive = true) {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n\n on.call(\n this.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 // 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 (this.player.elements.buttons.play) {\n Array.from(this.player.elements.buttons.play).forEach(button => {\n this.bind(button, 'click', this.player.togglePlay, 'play');\n });\n }\n\n // Pause\n this.bind(\n this.player.elements.buttons.restart,\n 'click',\n this.player.restart,\n 'restart',\n );\n\n // Rewind\n this.bind(\n this.player.elements.buttons.rewind,\n 'click',\n this.player.rewind,\n 'rewind',\n );\n\n // Rewind\n this.bind(\n this.player.elements.buttons.fastForward,\n 'click',\n this.player.forward,\n 'fastForward',\n );\n\n // Mute toggle\n this.bind(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n this.bind(this.player.elements.buttons.captions, 'click', () =>\n this.player.toggleCaptions(),\n );\n\n // Fullscreen toggle\n this.bind(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n this.bind(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n this.bind(\n this.player.elements.buttons.airplay,\n 'click',\n this.player.airplay,\n 'airplay',\n );\n\n // Settings menu - click toggle\n this.bind(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu - keyboard toggle\n this.bind(\n this.player.elements.buttons.settings,\n 'keydown',\n event => {\n // We only care about space\n if (event.which !== 32) {\n return;\n }\n\n // Prevent scroll\n event.preventDefault();\n\n // Prevent playing video\n event.stopPropagation();\n\n // Toggle menu\n controls.toggleMenu.call(this.player, event);\n },\n null,\n false,\n );\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n this.bind(\n this.player.elements.inputs.seek,\n 'mousedown mousemove',\n event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent =\n 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n },\n );\n\n // Pause while seeking\n this.bind(\n this.player.elements.inputs.seek,\n 'mousedown mouseup keydown keyup touchstart touchend',\n event => {\n const seek = event.currentTarget;\n\n const code = event.keyCode ? event.keyCode : event.which;\n const eventType = event.type;\n\n if (\n (eventType === 'keydown' || eventType === 'keyup') &&\n (code !== 39 && code !== 37)\n ) {\n return;\n }\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\n\n // Done seeking\n const done = ['mouseup', 'touchend', 'keyup'].includes(\n event.type,\n );\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n },\n );\n\n // Seek\n this.bind(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n this.player.currentTime =\n seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (\n this.player.config.toggleInvert &&\n !is.element(this.player.elements.display.duration)\n ) {\n this.bind(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n this.bind(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n Array.from(\n getElements.call(this.player, 'input[type=\"range\"]'),\n ).forEach(element => {\n this.bind(element, 'input', event =>\n controls.updateRangeFill.call(this.player, event.target),\n );\n });\n }\n\n // Seek tooltip\n this.bind(\n this.player.elements.progress,\n 'mouseenter mouseleave mousemove',\n event => controls.updateSeekTooltip.call(this.player, event),\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(\n this.player.elements.controls,\n 'mouseenter mouseleave',\n event => {\n this.player.elements.controls.hover =\n !this.player.touch && event.type === 'mouseenter';\n },\n );\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(\n this.player.elements.controls,\n 'mousedown mouseup touchstart touchend touchcancel',\n event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n },\n );\n\n // Focus in/out on controls\n this.bind(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(\n elements.controls,\n config.classNames.noTransition,\n event.type === 'focusin',\n );\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\n // Restore transition\n setTimeout(() => {\n toggleClass(\n elements.controls,\n config.classNames.noTransition,\n false,\n );\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(\n () => ui.toggleControls.call(this.player, false),\n delay,\n );\n }\n });\n\n // Mouse wheel for volume\n this.bind(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n\n // Get delta from event. Invert if `inverted` is true\n const [x, y] = [event.deltaX, -event.deltaY].map(\n value => (inverted ? -value : value),\n );\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 this.player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const { volume } = this.player.media;\n if (\n (direction === 1 && volume < 1) ||\n (direction === -1 && volume > 0)\n ) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n}\n\nexport default Listeners;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Load an external script\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nexport default function loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n}\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from '../captions';\nimport controls from '../controls';\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { format, stripHTML } from '../utils/strings';\nimport { buildUrlParams } from '../utils/urls';\n\n// Parse Vimeo ID from URL\nfunction parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n\n if (is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n}\n\n// Get aspect ratio for dimensions\nfunction getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!is.object(window.Vimeo)) {\n loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const [x, y] = (is.string(input) ? input : this.config.ratio).split(':');\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 controls from '../controls';\nimport ui from '../ui';\nimport { dedupe } from '../utils/arrays';\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// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n const qualities = {\n hd2160: 2160,\n hd1440: 1440,\n hd1080: 1080,\n hd720: 720,\n large: 480,\n medium: 360,\n small: 240,\n tiny: 144,\n };\n\n const entry = Object.entries(qualities).find(entry => entry.includes(input));\n\n if (entry) {\n // Get the match corresponding to the input\n return entry.find(value => value !== input);\n }\n\n return 'default';\n}\n\nfunction mapQualityUnits(levels) {\n if (is.empty(levels)) {\n return levels;\n }\n\n return dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n 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 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 onPlaybackQualityChange() {\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n triggerEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // If paused 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 // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n instance.setPlaybackQuality(mapQualityUnit(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 // Get quality\n controls.setQualityMenu.call(\n player,\n mapQualityUnits(instance.getAvailableQualityLevels()),\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 i18n from '../i18n';\nimport { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\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 // 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 // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n 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.3.22\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.searchParams.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 } 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')) {\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 this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n\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 // Trigger request event\n triggerEvent.call(this, this.media, 'qualityrequested', false, { quality });\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 // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n triggerEvent.call(this, this.media, eventName);\n }\n return !hiding;\n }\n return false;\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n on.call(this, this.elements.container, event, callback);\n }\n\n /**\n * Add event listeners once\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n once(event, callback) {\n once.call(this, this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n removeElement(this.elements.buttons.play);\n removeElement(this.elements.captions);\n removeElement(this.elements.controls);\n removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n unbindListeners.call(this);\n\n // Replace the container with the original element provided\n replaceElement(this.elements.original, this.elements.container);\n\n // Event\n triggerEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Provider specific stuff\n if (this.isHTML5) {\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n } else if (this.isYouTube) {\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n } else if (this.isVimeo) {\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (is.array(selector)) {\n targets = selector.filter(is.element);\n }\n\n if (is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = cloneDeep(defaults);\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["node_modules/core-js/modules/_global.js","node_modules/core-js/modules/_core.js","node_modules/core-js/modules/_is-object.js","node_modules/core-js/modules/_an-object.js","node_modules/core-js/modules/_fails.js","node_modules/core-js/modules/_descriptors.js","node_modules/core-js/modules/_dom-create.js","node_modules/core-js/modules/_ie8-dom-define.js","node_modules/core-js/modules/_to-primitive.js","node_modules/core-js/modules/_object-dp.js","node_modules/core-js/modules/_property-desc.js","node_modules/core-js/modules/_hide.js","node_modules/core-js/modules/_has.js","node_modules/core-js/modules/_uid.js","node_modules/core-js/modules/_redefine.js","node_modules/core-js/modules/_a-function.js","node_modules/core-js/modules/_ctx.js","node_modules/core-js/modules/_export.js","node_modules/core-js/modules/_typed.js","node_modules/core-js/modules/_redefine-all.js","node_modules/core-js/modules/_an-instance.js","node_modules/core-js/modules/_to-integer.js","node_modules/core-js/modules/_to-length.js","node_modules/core-js/modules/_to-index.js","node_modules/core-js/modules/_cof.js","node_modules/core-js/modules/_iobject.js","node_modules/core-js/modules/_defined.js","node_modules/core-js/modules/_to-iobject.js","node_modules/core-js/modules/_to-absolute-index.js","node_modules/core-js/modules/_array-includes.js","node_modules/core-js/modules/_shared.js","node_modules/core-js/modules/_shared-key.js","node_modules/core-js/modules/_object-keys-internal.js","node_modules/core-js/modules/_enum-bug-keys.js","node_modules/core-js/modules/_object-gopn.js","node_modules/core-js/modules/_to-object.js","node_modules/core-js/modules/_array-fill.js","node_modules/core-js/modules/_wks.js","node_modules/core-js/modules/_set-to-string-tag.js","node_modules/core-js/modules/_typed-buffer.js","node_modules/core-js/modules/_species-constructor.js","node_modules/core-js/modules/_set-species.js","node_modules/core-js/modules/es6.typed.array-buffer.js","node_modules/core-js/modules/_classof.js","node_modules/core-js/modules/_iterators.js","node_modules/core-js/modules/_is-array-iter.js","node_modules/core-js/modules/_object-keys.js","node_modules/core-js/modules/_object-dps.js","node_modules/core-js/modules/_html.js","node_modules/core-js/modules/_object-create.js","node_modules/core-js/modules/_object-gpo.js","node_modules/core-js/modules/core.get-iterator-method.js","node_modules/core-js/modules/_is-array.js","node_modules/core-js/modules/_array-species-constructor.js","node_modules/core-js/modules/_array-species-create.js","node_modules/core-js/modules/_array-methods.js","node_modules/core-js/modules/_add-to-unscopables.js","node_modules/core-js/modules/_iter-step.js","node_modules/core-js/modules/_iter-create.js","node_modules/core-js/modules/_iter-define.js","node_modules/core-js/modules/es6.array.iterator.js","node_modules/core-js/modules/_iter-detect.js","node_modules/core-js/modules/_array-copy-within.js","node_modules/core-js/modules/_object-pie.js","node_modules/core-js/modules/_object-gopd.js","node_modules/core-js/modules/_typed-array.js","node_modules/core-js/modules/es6.typed.int8-array.js","node_modules/core-js/modules/es6.typed.uint8-array.js","node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","node_modules/core-js/modules/es6.typed.int16-array.js","node_modules/core-js/modules/es6.typed.uint16-array.js","node_modules/core-js/modules/es6.typed.int32-array.js","node_modules/core-js/modules/es6.typed.uint32-array.js","node_modules/core-js/modules/es6.typed.float32-array.js","node_modules/core-js/modules/es6.typed.float64-array.js","node_modules/core-js/modules/_iter-call.js","node_modules/core-js/modules/_for-of.js","node_modules/core-js/modules/_meta.js","node_modules/core-js/modules/_validate-collection.js","node_modules/core-js/modules/_collection-strong.js","node_modules/core-js/modules/_set-proto.js","node_modules/core-js/modules/_inherit-if-required.js","node_modules/core-js/modules/_collection.js","node_modules/core-js/modules/es6.map.js","node_modules/core-js/modules/es6.set.js","node_modules/core-js/modules/_object-gops.js","node_modules/core-js/modules/_object-assign.js","node_modules/core-js/modules/_collection-weak.js","node_modules/core-js/modules/es6.weak-map.js","node_modules/core-js/modules/es6.weak-set.js","node_modules/core-js/modules/es6.reflect.apply.js","node_modules/core-js/modules/_invoke.js","node_modules/core-js/modules/_bind.js","node_modules/core-js/modules/es6.reflect.construct.js","node_modules/core-js/modules/es6.reflect.define-property.js","node_modules/core-js/modules/es6.reflect.delete-property.js","node_modules/core-js/modules/es6.reflect.get.js","node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","node_modules/core-js/modules/es6.reflect.get-prototype-of.js","node_modules/core-js/modules/es6.reflect.has.js","node_modules/core-js/modules/es6.reflect.is-extensible.js","node_modules/core-js/modules/_own-keys.js","node_modules/core-js/modules/es6.reflect.own-keys.js","node_modules/core-js/modules/es6.reflect.prevent-extensions.js","node_modules/core-js/modules/es6.reflect.set.js","node_modules/core-js/modules/es6.reflect.set-prototype-of.js","node_modules/core-js/modules/_task.js","node_modules/core-js/modules/_microtask.js","node_modules/core-js/modules/_new-promise-capability.js","node_modules/core-js/modules/es6.promise.js","node_modules/core-js/modules/_perform.js","node_modules/core-js/modules/_promise-resolve.js","node_modules/core-js/modules/_wks-ext.js","node_modules/core-js/modules/_wks-define.js","node_modules/core-js/modules/_object-gopn-ext.js","node_modules/core-js/modules/es6.symbol.js","node_modules/core-js/modules/_enum-keys.js","node_modules/core-js/modules/_object-sap.js","node_modules/core-js/modules/es6.object.freeze.js","node_modules/core-js/modules/es6.object.seal.js","node_modules/core-js/modules/es6.object.prevent-extensions.js","node_modules/core-js/modules/es6.object.is-frozen.js","node_modules/core-js/modules/es6.object.is-sealed.js","node_modules/core-js/modules/es6.object.is-extensible.js","node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","node_modules/core-js/modules/es6.object.get-prototype-of.js","node_modules/core-js/modules/es6.object.keys.js","node_modules/core-js/modules/es6.object.get-own-property-names.js","node_modules/core-js/modules/es6.object.assign.js","node_modules/core-js/modules/_same-value.js","node_modules/core-js/modules/es6.object.is.js","node_modules/core-js/modules/es6.function.name.js","node_modules/core-js/modules/es6.string.raw.js","node_modules/core-js/modules/es6.string.from-code-point.js","node_modules/core-js/modules/_string-at.js","node_modules/core-js/modules/es6.string.code-point-at.js","node_modules/core-js/modules/_string-repeat.js","node_modules/core-js/modules/es6.string.repeat.js","node_modules/core-js/modules/_is-regexp.js","node_modules/core-js/modules/_string-context.js","node_modules/core-js/modules/_fails-is-regexp.js","node_modules/core-js/modules/es6.string.starts-with.js","node_modules/core-js/modules/es6.string.ends-with.js","node_modules/core-js/modules/es6.string.includes.js","node_modules/core-js/modules/es6.regexp.flags.js","node_modules/core-js/modules/_flags.js","node_modules/core-js/modules/_fix-re-wks.js","node_modules/core-js/modules/es6.regexp.match.js","node_modules/core-js/modules/es6.regexp.replace.js","node_modules/core-js/modules/es6.regexp.split.js","node_modules/core-js/modules/es6.regexp.search.js","node_modules/core-js/modules/_create-property.js","node_modules/core-js/modules/es6.array.from.js","node_modules/core-js/modules/es6.array.of.js","node_modules/core-js/modules/es6.array.copy-within.js","node_modules/core-js/modules/es6.array.find.js","node_modules/core-js/modules/es6.array.find-index.js","node_modules/core-js/modules/es6.array.fill.js","node_modules/core-js/modules/es6.number.is-finite.js","node_modules/core-js/modules/_is-integer.js","node_modules/core-js/modules/es6.number.is-integer.js","node_modules/core-js/modules/es6.number.is-safe-integer.js","node_modules/core-js/modules/es6.number.is-nan.js","node_modules/core-js/modules/es6.number.epsilon.js","node_modules/core-js/modules/es6.number.min-safe-integer.js","node_modules/core-js/modules/es6.number.max-safe-integer.js","node_modules/core-js/modules/_math-log1p.js","node_modules/core-js/modules/es6.math.acosh.js","node_modules/core-js/modules/es6.math.asinh.js","node_modules/core-js/modules/es6.math.atanh.js","node_modules/core-js/modules/_math-sign.js","node_modules/core-js/modules/es6.math.cbrt.js","node_modules/core-js/modules/es6.math.clz32.js","node_modules/core-js/modules/es6.math.cosh.js","node_modules/core-js/modules/_math-expm1.js","node_modules/core-js/modules/es6.math.expm1.js","node_modules/core-js/modules/_math-fround.js","node_modules/core-js/modules/es6.math.fround.js","node_modules/core-js/modules/es6.math.hypot.js","node_modules/core-js/modules/es6.math.imul.js","node_modules/core-js/modules/es6.math.log1p.js","node_modules/core-js/modules/es6.math.log10.js","node_modules/core-js/modules/es6.math.log2.js","node_modules/core-js/modules/es6.math.sign.js","node_modules/core-js/modules/es6.math.sinh.js","node_modules/core-js/modules/es6.math.tanh.js","node_modules/core-js/modules/es6.math.trunc.js","node_modules/core-js/modules/es7.array.includes.js","node_modules/core-js/modules/_object-to-array.js","node_modules/core-js/modules/es7.object.values.js","node_modules/core-js/modules/es7.object.entries.js","node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","node_modules/core-js/modules/_string-pad.js","node_modules/core-js/modules/_user-agent.js","node_modules/core-js/modules/es7.string.pad-start.js","node_modules/core-js/modules/es7.string.pad-end.js","node_modules/core-js/modules/web.timers.js","node_modules/core-js/modules/web.immediate.js","node_modules/core-js/modules/web.dom.iterable.js","node_modules/regenerator-runtime/runtime.js","node_modules/custom-event-polyfill/custom-event-polyfill.js","node_modules/url-polyfill/url-polyfill.js","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/objects.js","src/js/utils/strings.js","src/js/i18n.js","src/js/utils/arrays.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","src/js/utils/loadImage.js","src/js/ui.js","src/js/listeners.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils/loadScript.js","src/js/plugins/vimeo.js","src/js/plugins/youtube.js","src/js/media.js","src/js/plugins/ads.js","src/js/source.js","src/js/plyr.js"],"names":["global","module","exports","window","Math","self","Function","__g","core","version","__e","_isObject","it","_anObject","isObject","TypeError","_fails","exec","e","_descriptors","require$$0","Object","defineProperty","get","a","document","is","createElement","_domCreate","_ie8DomDefine","require$$1","require$$2","_toPrimitive","S","fn","val","toString","call","valueOf","dP","O","P","Attributes","anObject","toPrimitive","IE8_DOM_DEFINE","value","_propertyDesc","bitmap","enumerable","configurable","writable","_hide","object","key","f","createDesc","hasOwnProperty","_has","id","px","random","_uid","concat","undefined","SRC","$toString","TPL","split","inspectSource","safe","isFunction","has","hide","join","String","prototype","this","_aFunction","_ctx","that","length","aFunction","b","c","apply","arguments","$export","type","name","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","IS_PROTO","IS_BIND","B","target","expProto","ctx","redefine","U","W","R","Typed","_export","TYPED","uid","VIEW","ABV","ArrayBuffer","DataView","CONSTR","i","TypedArrayConstructors","_typed","_redefineAll","src","_anInstance","Constructor","forbiddenField","ceil","floor","_toInteger","isNaN","min","_toLength","toInteger","_toIndex","number","toLength","RangeError","_cof","slice","_iobject","propertyIsEnumerable","cof","_defined","_toIobject","IObject","defined","max","_toAbsoluteIndex","index","_arrayIncludes","IS_INCLUDES","$this","el","fromIndex","toIObject","toAbsoluteIndex","store","_shared","shared","_sharedKey","arrayIndexOf","IE_PROTO","_objectKeysInternal","names","result","push","_enumBugKeys","hiddenKeys","getOwnPropertyNames","$keys","_toObject","_arrayFill","toObject","aLen","end","endPos","Symbol","USE_SYMBOL","def","TAG","_setToStringTag","tag","stat","gOPN","PROTOTYPE","WRONG_INDEX","$ArrayBuffer","$DataView","Infinity","BaseBuffer","abs","pow","log","LN2","$BUFFER","DESCRIPTORS","$LENGTH","$OFFSET","packIEEE754","mLen","nBytes","m","buffer","Array","eLen","eMax","eBias","rt","s","unpackIEEE754","nBits","NaN","unpackI32","bytes","packI8","packI16","packI32","packF64","packF32","addGetter","C","internal","view","isLittleEndian","intIndex","toIndex","_b","start","pack","reverse","set","conversion","$typed","fails","ArrayBufferProto","anInstance","keys","j","constructor","$setInt8","setInt8","getInt8","redefineAll","byteOffset","setUint8","byteLength","arrayFill","bufferLength","offset","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","setToStringTag","SPECIES","_speciesConstructor","D","_setSpecies","KEY","$isView","isView","$slice","len","first","final","speciesConstructor","viewS","viewT","ARG","_classof","T","tryGet","callee","_iterators","ITERATOR","ArrayProto","_isArrayIter","Iterators","_objectKeys","enumBugKeys","_objectDps","defineProperties","Properties","getKeys","_html","documentElement","Empty","createDict","iframeDocument","iframe","style","display","appendChild","contentWindow","open","write","lt","close","_objectCreate","create","dPs","ObjectProto","_objectGpo","getPrototypeOf","core_getIteratorMethod","getIteratorMethod","classof","_isArray","isArray","arg","_arraySpeciesCreate","original","_arrayMethods","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","asc","callbackfn","res","UNSCOPABLES","_addToUnscopables","_iterStep","done","IteratorPrototype","_iterCreate","NAME","next","descriptor","BUGGY","returnThis","_iterDefine","Base","DEFAULT","IS_SET","FORCED","$iterCreate","methods","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","es6_array_iterator","iterated","_t","_i","_k","step","Arguments","addToUnscopables","SAFE_CLOSING","_iterDetect","skipClosing","arr","iter","_arrayCopyWithin","copyWithin","to","from","count","inc","gOPD","getOwnPropertyDescriptor","pIE","require$$3","require$$4","require$$5","$buffer","require$$6","require$$7","require$$8","propertyDesc","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","require$$26","wks","require$$27","createArrayMethod","require$$28","createArrayIncludes","require$$29","require$$30","ArrayIterators","require$$31","require$$32","$iterDetect","require$$33","setSpecies","require$$34","require$$35","arrayCopyWithin","require$$36","$DP","require$$37","$GOPD","require$$38","Uint8Array","arrayForEach","arrayFilter","arraySome","arrayEvery","arrayFind","arrayFindIndex","arrayIncludes","arrayValues","arrayKeys","arrayEntries","arrayLastIndexOf","lastIndexOf","arrayReduce","reduce","arrayReduceRight","reduceRight","arrayJoin","arraySort","sort","arraySlice","arrayToString","arrayToLocaleString","toLocaleString","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","TYPED_ARRAY","$map","allocate","LITTLE_ENDIAN","Uint16Array","FORCED_SET","toOffset","BYTES","validate","speciesFromList","list","fromList","_d","$from","iterator","mapfn","mapping","iterFn","$of","TO_LOCALE_BUG","$toLocaleString","every","fill","filter","find","predicate","findIndex","forEach","indexOf","searchElement","includes","separator","map","middle","some","comparefn","subarray","begin","$begin","BYTES_PER_ELEMENT","$set","arrayLike","$iterators","isTAIndex","$getDesc","$setDesc","desc","$TypedArrayPrototype$","wrapper","CLAMPED","GETTER","SETTER","TypedArray","TAC","TypedArrayPrototype","addElement","data","v","o","getter","round","setter","$offset","$length","klass","$len","l","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","init","_iterCall","ret","BREAK","RETURN","iterable","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","_validateCollection","SIZE","getEntry","entry","_f","n","k","_collectionStrong","getConstructor","ADDER","_l","forOf","clear","r","p","delete","prev","setStrong","$iterDefine","check","_setProto","setPrototypeOf","test","buggy","__proto__","_collection","common","IS_WEAK","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","inheritIfRequired","strong","add","getOwnPropertySymbols","$assign","assign","_objectAssign","A","K","getSymbols","gOPS","isEnum","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","splice","_collectionWeak","$has","ufstore","InternalMap","each","weak","tmp","$WeakMap","freeze","method","rApply","Reflect","fApply","thisArgument","argumentsList","L","_invoke","args","un","factories","_bind","bind","partArgs","bound","construct","invoke","rConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","propertyKey","attributes","deleteProperty","receiver","getProto","$isExtensible","_ownKeys","ownKeys","$preventExtensions","V","existingDescriptor","ownDesc","setProto","defer","channel","port","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","event","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","cel","html","removeChild","setTimeout","_task","macrotask","Observer","MutationObserver","WebKitMutationObserver","Promise","isNode","PromiseCapability","resolve","reject","promise","$$resolve","$$reject","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","_perform","task","microtask","head","last","notify","flush","parent","domain","exit","enter","navigator","standalone","then","toggle","node","createTextNode","observe","characterData","$Promise","empty","newPromiseCapability","newPromiseCapabilityModule","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","handler","fail","_h","onHandleUnhandled","onUnhandled","console","unhandled","isUnhandled","perform","emit","onunhandledrejection","reason","error","_a","onrejectionhandled","$reject","_w","$resolve","executor","err","onFulfilled","onRejected","catch","capability","x","promiseCapability","promiseResolve","all","remaining","$index","alreadyCalled","race","_wksDefine","$Symbol","_global","charAt","wksExt","windowNames","getWindowNames","gOPNExt","$JSON","JSON","_stringify","stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","QObject","findChild","setSymbolDesc","$fails","_create","protoDesc","wrap","sym","isSymbol","$defineProperty","$defineProperties","symbols","enumKeys","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","wksDefine","for","keyFor","useSetter","useSimple","replacer","$replacer","_objectSap","$freeze","$seal","$isFrozen","$isSealed","$getPrototypeOf","_sameValue","y","FProto","nameRE","match","raw","callSite","tpl","fromCharCode","$fromCodePoint","fromCodePoint","code","TO_STRING","$at","pos","charCodeAt","codePointAt","_stringRepeat","str","repeat","MATCH","_isRegexp","isRegExp","_stringContext","searchString","_failsIsRegexp","re","$startsWith","startsWith","context","search","$endsWith","endsWith","endPosition","flags","RegExp","ignoreCase","multiline","unicode","sticky","_fixReWks","SYMBOL","fns","strfn","rxfn","string","$match","regexp","REPLACE","$replace","searchValue","replaceValue","SPLIT","$split","_split","$push","NPCG","limit","separator2","lastIndex","lastLength","output","lastLastIndex","splitLimit","separatorCopy","replace","SEARCH","$search","_createProperty","createProperty","$find","forced","_isFinite","isFinite","_isInteger","isInteger","isSafeInteger","EPSILON","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","_mathLog1p","log1p","sqrt","$acosh","acosh","Number","MAX_VALUE","$asinh","asinh","$atanh","atanh","_mathSign","sign","cbrt","clz32","LOG2E","cosh","$expm1","expm1","_mathExpm1","EPSILON32","MAX32","MIN32","_mathFround","fround","$abs","$sign","hypot","value1","value2","div","sum","larg","$imul","imul","xn","yn","xl","yl","log10","LOG10E","log2","sinh","tanh","trunc","$includes","_objectToArray","isEntries","$values","getOwnPropertyDescriptors","getDesc","_stringPad","maxLength","fillString","left","stringLength","fillStr","intMaxLength","fillLen","stringFiller","_userAgent","userAgent","padStart","$pad","padEnd","MSIE","time","boundArgs","setInterval","$task","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","Op","hasOwn","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","runtime","regeneratorRuntime","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","NativeIteratorPrototype","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","__await","defineIteratorMethods","AsyncIterator","async","innerFn","outerFn","tryLocsList","pop","Context","reset","skipTempReset","sent","_sent","delegate","tryEntries","resetTryEntry","stop","rootRecord","completion","rval","dispatchException","exception","handle","loc","caught","record","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","Error","abrupt","finallyEntry","complete","afterLoc","finish","thrown","delegateYield","resultName","nextLoc","protoGenerator","generator","state","doneResult","delegateResult","maybeInvokeDelegate","tryCatch","makeInvokeMethod","obj","unwrapped","previousPromise","callInvokeWithMethodAndArg","return","info","pushTryEntry","locs","iteratorMethod","ce","CustomEvent","preventDefault","defaultPrevented","params","evt","origPrevent","bubbles","cancelable","detail","createEvent","initCustomEvent","Event","iteratorSupported","checkIfIteratorIsSupported","createIterator","items","shift","serializeParam","encodeURIComponent","deserializeParam","decodeURIComponent","URLSearchParams","attribute","append","_this","_entries","getAll","callback","thisArg","polyfillURLSearchParams","u","URL","pathname","href","searchParams","checkIfURLIsSupported","_URL","url","base","doc","implementation","createHTMLDocument","baseElement","anchorElement","body","protocol","attributeName","_anchorElement","linkURLWithAnchorAttribute","origin","expectedPort","http:","https:","ftp:","addPortToOrigin","hostname","password","username","methodName","createObjectURL","blob","revokeObjectURL","polyfillURL","location","getOrigin","input","instanceOf","Boolean","isNullOrUndefined","isString","isNodeList","isEmpty","is$1","nullOrUndefined","boolean","function","array","weakMap","WeakMap","nodeList","element","Element","textNode","Text","cue","TextTrackCue","VTTCue","track","TextTrack","supportsPassiveListeners","supported","options","removeEventListener","toggleListener","passive","capture","events","eventListeners","on","off","once","onceCallback","_len","_key","triggerEvent","plyr","dispatchEvent","elements","targets","child","cloneNode","parentNode","sibling","nextSibling","insertBefore","setAttributes","_ref","slicedToArray","_ref3","_ref4","setAttribute","text","innerText","insertElement","removeElement","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","selector","trim","className","parts","class","toggleHidden","hidden","hasAttribute","removeAttribute","toggleClass","force","classList","contains","hasClass","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelectorAll","getElements","container","getElement","querySelector","setFocus","tabFocus","focus","config","classNames","transitionEndEvent","WebkitTransition","MozTransition","OTransition","transition","repaint","offsetHeight","range","browser","isIE","documentMode","isWebkit","isIPhone","platform","isIos","defaultCodecs","audio/ogg","audio/wav","video/webm","video/mp4","video/ogg","support","audio","video","provider","playsinline","canPlayInline","api","ui","rangeInput","pip","webkitSetPresentationMode","airplay","WebKitPlaybackTargetAvailabilityEvent","mime","inputType","_inputType$split","mediaType","isHTML5","media","canPlayType","textTracks","touch","transitions","reducedMotion","matchMedia","html5","getSources","getAttribute","getQualityOptions","extend","player","_player$media","currentTime","paused","preload","readyState","play","load","quality","cancelRequests","blankVideo","debug","getDeep","path","sources","defineProperty$1","format","replaceAll","toTitleCase","toUpperCase","substr","toLowerCase","toCamelCase","toPascalCase","getHTML","innerHTML","i18n","{seektime}","seekTime","{title}","title","_ref2","dedupe","item","Storage","classCallCheck","enabled","storage","localStorage","getItem","json","parse","setItem","removeItem","fetch","responseType","request","XMLHttpRequest","responseText","response","status","send","loadSprite","hasId","exists","getElementById","update","insertAdjacentElement","useStorage","cached","prefix","content","getHours","parseInt","getMinutes","getSeconds","formatTime","displayHours","inverted","hours","mins","secs","controls","getIconUrl","cors","iconUrl","host","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","duration","seekTooltip","tooltip","warn","toggleNativeControls","createIcon","iconPath","iconPrefix","icon","createElementNS","role","focusable","use","setAttributeNS","createLabel","attr","createBadge","badge","menu","createButton","buttonType","button","label","labelPressed","iconPressed","control","controlPressed","pressed","createRange","autocomplete","aria-label","aria-valuemin","aria-valuemax","aria-valuenow","updateRangeFill","createProgress","aria-hidden","suffixKey","played","suffix","createTime","bindMenuItemShortcuts","menuItem","which","stopPropagation","isRadioButton","showMenuPanel","nextElementSibling","firstElementChild","previousElementSibling","lastElementChild","createMenuItem","_this2","_ref$badge","_ref$checked","checked","aria-checked","flex","children","listeners","currentTrack","speed","parseFloat","updateTimeDisplay","updateVolume","setRange","muted","updateProgress","_this3","current","toFixed","getElementsByTagName","nodeValue","setProgress","buffered","percent","setProperty","updateSeekTooltip","_this4","tooltips","clientRect","getBoundingClientRect","visible","_toggle","width","pageX","timeUpdate","invert","invertTime","seeking","durationUpdate","hasDuration","displayDuration","toggleMenuButton","setting","updateSetting","pane","panels","default","getLabel","setQualityMenu","_this5","checkMenu","sorting","getBadge","setCaptionsMenu","_this6","tracks","getTracks","toggled","language","unshift","setSpeedMenu","_this7","isVimeo","toggleMenu","popup","show","isMenuItem","isButton","firstItem","getMenuSize","tab","clone","position","opacity","scrollWidth","height","scrollHeight","_this8","size","restore","propertyName","_this9","aria-haspopup","aria-controls","aria-expanded","aria-labelled-by","inner","home","backButton","inject","_this10","props","seektime","insertAdjacentHTML","_config","labels","parseUrl","parser","buildUrlParams","setup","isVideo","isYouTube","languages","userLanguage","active","trackEvents","_captions","currentTrackNode","languageExists","mode","updateCues","setLanguage","activeClass","findTrack","toConsumableArray","embed","enableTextTrack","sortIsDefault","sorted","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","caption","defaults","autoplay","autopause","toggleInvert","ratio","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","focused","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","disabled","advertisement","qualityBadge","2160","1440","1080","720","576","480","urls","vimeo","sdk","youtube","googleIMA","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","google","publisherId","providers","types","noop","Console","onChange","keyCode","activeElement","shiftKey","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","overflow","Fullscreen","property","native","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","loadImage","minWidth","image","Image","onload","onerror","naturalWidth","addStyleHook","build","checkPlaying","ready","setTitle","setPoster","isEmbed","togglePoster","enable","backgroundImage","backgroundSize","toggleControls","checkLoading","clearTimeout","timers","Listeners","lastKey","focusTimer","lastKeyDown","handleKey","setTabFocus","firstTouch","altKey","ctrlKey","metaKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","timeStamp","wasKeyDown","delay","hasAudio","initialized","managerPromise","isAudio","controlsHidden","ended","proxyEvents","_event$detail","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","proxy","inputEvent","currentTarget","eventType","seekTo","isFocusIn","webkitDirectionInvertedFromDevice","_map","deltaX","deltaY","_map2","direction","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","executeCallbacks","depsNotFound","success","loadFile","callbackFn","numTries","isCss","maxTries","numRetries","beforeCallbackFn","before","pathStripped","rel","onbeforeload","ev","sheet","cssText","loadjs","paths","arg1","arg2","numWaiting","loadFiles","deps","bundleIds","subscribe","isDefined","loadScript","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","_split2","padding","paddingBottom","transform","byline","portrait","transparent","gesture","$2","thumbnail_large","Player","disableTextTrack","restorePause","setVolume","setCurrentTime","setPlaybackRate","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","getRatio","h","getAspectRatio","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","_ref$cues","strippedCues","fragment","createDocumentFragment","firstChild","getPaused","seconds","mapQualityUnit","hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","snippet","currentId","posterSrc","format$$1","playerVars","showinfo","iv_load_policy","modestbranding","disablekb","widget_referrer","cc_load_policy","cc_lang_pref","onError","message","2","5","100","101","150","onPlaybackQualityChange","onPlaybackRateChange","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","clearInterval","buffering","getVideoLoadedFraction","lastBuffered","onStateChange","levels","getAvailableQualityLevels","level","unMute","Ads","displayContainer","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","adError","zIndex","destroy","_this11","handlers","_this12","AV_PUBLISHERID","AV_CHANNELID","AV_URL","cb","Date","AV_WIDTH","AV_HEIGHT","AV_CDIM2","insertElements","change","_sources$","_sources$$provider","tagName","crossorigin","Plyr","failed","jQuery","getProviderByUrl","truthy","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","curr","closest","states","webkitPresentationMode","inline","t"],"mappings":"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","file":"plyr.polyfilled.min.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","(function(global) {\r\n /**\r\n * Polyfill URLSearchParams\r\n *\r\n * Inspired from : https://github.com/WebReflection/url-search-params/blob/master/src/url-search-params.js\r\n */\r\n\r\n var checkIfIteratorIsSupported = function() {\r\n try {\r\n return !!Symbol.iterator;\r\n } catch(error) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var iteratorSupported = checkIfIteratorIsSupported();\r\n\r\n var createIterator = function(items) {\r\n var iterator = {\r\n next: function() {\r\n var value = items.shift();\r\n return { done: value === void 0, value: value };\r\n }\r\n };\r\n\r\n if(iteratorSupported) {\r\n iterator[Symbol.iterator] = function() {\r\n return iterator;\r\n };\r\n }\r\n\r\n return iterator;\r\n };\r\n\r\n /**\r\n * Search param name and values should be encoded according to https://url.spec.whatwg.org/#urlencoded-serializing\r\n * encodeURIComponent() produces the same result except encoding spaces as `%20` instead of `+`.\r\n */\r\n var serializeParam = function(value) {\r\n return encodeURIComponent(value).replace(/%20/g, '+');\r\n };\r\n\r\n var deserializeParam = function(value) {\r\n return decodeURIComponent(value).replace(/\\+/g, ' ');\r\n };\r\n\r\n var polyfillURLSearchParams= function() {\r\n\r\n var URLSearchParams = function(searchString) {\r\n Object.defineProperty(this, '_entries', { value: {} });\r\n\r\n if(typeof searchString === 'string') {\r\n if(searchString !== '') {\r\n searchString = searchString.replace(/^\\?/, '');\r\n var attributes = searchString.split('&');\r\n var attribute;\r\n for(var i = 0; i < attributes.length; i++) {\r\n attribute = attributes[i].split('=');\r\n this.append(\r\n deserializeParam(attribute[0]),\r\n (attribute.length > 1) ? deserializeParam(attribute[1]) : ''\r\n );\r\n }\r\n }\r\n } else if(searchString instanceof URLSearchParams) {\r\n var _this = this;\r\n searchString.forEach(function(value, name) {\r\n _this.append(value, name);\r\n });\r\n }\r\n };\r\n\r\n var proto = URLSearchParams.prototype;\r\n\r\n proto.append = function(name, value) {\r\n if(name in this._entries) {\r\n this._entries[name].push(value.toString());\r\n } else {\r\n this._entries[name] = [value.toString()];\r\n }\r\n };\r\n\r\n proto.delete = function(name) {\r\n delete this._entries[name];\r\n };\r\n\r\n proto.get = function(name) {\r\n return (name in this._entries) ? this._entries[name][0] : null;\r\n };\r\n\r\n proto.getAll = function(name) {\r\n return (name in this._entries) ? this._entries[name].slice(0) : [];\r\n };\r\n\r\n proto.has = function(name) {\r\n return (name in this._entries);\r\n };\r\n\r\n proto.set = function(name, value) {\r\n this._entries[name] = [value.toString()];\r\n };\r\n\r\n proto.forEach = function(callback, thisArg) {\r\n var entries;\r\n for(var name in this._entries) {\r\n if(this._entries.hasOwnProperty(name)) {\r\n entries = this._entries[name];\r\n for(var i = 0; i < entries.length; i++) {\r\n callback.call(thisArg, entries[i], name, this);\r\n }\r\n }\r\n }\r\n };\r\n\r\n proto.keys = function() {\r\n var items = [];\r\n this.forEach(function(value, name) { items.push(name); });\r\n return createIterator(items);\r\n };\r\n\r\n proto.values = function() {\r\n var items = [];\r\n this.forEach(function(value) { items.push(value); });\r\n return createIterator(items);\r\n };\r\n\r\n proto.entries = function() {\r\n var items = [];\r\n this.forEach(function(value, name) { items.push([name, value]); });\r\n return createIterator(items);\r\n };\r\n\r\n if(iteratorSupported) {\r\n proto[Symbol.iterator] = proto.entries;\r\n }\r\n\r\n proto.toString = function() {\r\n var searchString = '';\r\n this.forEach(function(value, name) {\r\n if(searchString.length > 0) searchString+= '&';\r\n searchString += serializeParam(name) + '=' + serializeParam(value);\r\n });\r\n return searchString;\r\n };\r\n\r\n global.URLSearchParams = URLSearchParams;\r\n };\r\n\r\n if(!('URLSearchParams' in global) || (new URLSearchParams('?a=1').toString() !== 'a=1')) {\r\n polyfillURLSearchParams();\r\n }\r\n\r\n // HTMLAnchorElement\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n\r\n(function(global) {\r\n /**\r\n * Polyfill URL\r\n *\r\n * Inspired from : https://github.com/arv/DOM-URL-Polyfill/blob/master/src/url.js\r\n */\r\n\r\n var checkIfURLIsSupported = function() {\r\n try {\r\n var u = new URL('b', 'http://a');\r\n u.pathname = 'c%20d';\r\n return (u.href === 'http://a/c%20d') && u.searchParams;\r\n } catch(e) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var polyfillURL = function() {\r\n var _URL = global.URL;\r\n\r\n var URL = function(url, base) {\r\n if(typeof url !== 'string') url = String(url);\r\n\r\n var doc = document.implementation.createHTMLDocument('');\r\n window.doc = doc;\r\n if(base) {\r\n var baseElement = doc.createElement('base');\r\n baseElement.href = base;\r\n doc.head.appendChild(baseElement);\r\n }\r\n\r\n var anchorElement = doc.createElement('a');\r\n anchorElement.href = url;\r\n doc.body.appendChild(anchorElement);\r\n anchorElement.href = anchorElement.href; // force href to refresh\r\n\r\n if(anchorElement.protocol === ':' || !/:/.test(anchorElement.href)) {\r\n throw new TypeError('Invalid URL');\r\n }\r\n\r\n Object.defineProperty(this, '_anchorElement', {\r\n value: anchorElement\r\n });\r\n };\r\n\r\n var proto = URL.prototype;\r\n\r\n var linkURLWithAnchorAttribute = function(attributeName) {\r\n Object.defineProperty(proto, attributeName, {\r\n get: function() {\r\n return this._anchorElement[attributeName];\r\n },\r\n set: function(value) {\r\n this._anchorElement[attributeName] = value;\r\n },\r\n enumerable: true\r\n });\r\n };\r\n\r\n ['hash', 'host', 'hostname', 'port', 'protocol', 'search']\r\n .forEach(function(attributeName) {\r\n linkURLWithAnchorAttribute(attributeName);\r\n });\r\n\r\n Object.defineProperties(proto, {\r\n\r\n 'toString': {\r\n get: function() {\r\n var _this = this;\r\n return function() {\r\n return _this.href;\r\n };\r\n }\r\n },\r\n\r\n 'href' : {\r\n get: function() {\r\n return this._anchorElement.href.replace(/\\?$/,'');\r\n },\r\n set: function(value) {\r\n this._anchorElement.href = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'pathname' : {\r\n get: function() {\r\n return this._anchorElement.pathname.replace(/(^\\/?)/,'/');\r\n },\r\n set: function(value) {\r\n this._anchorElement.pathname = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'origin': {\r\n get: function() {\r\n // get expected port from protocol\r\n var expectedPort = {'http:': 80, 'https:': 443, 'ftp:': 21}[this._anchorElement.protocol];\r\n // add port to origin if, expected port is different than actual port\r\n // and it is not empty f.e http://foo:8080\r\n // 8080 != 80 && 8080 != ''\r\n var addPortToOrigin = this._anchorElement.port != expectedPort &&\r\n this._anchorElement.port !== ''\r\n\r\n return this._anchorElement.protocol +\r\n '//' +\r\n this._anchorElement.hostname +\r\n (addPortToOrigin ? (':' + this._anchorElement.port) : '');\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'password': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'username': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'searchParams': {\r\n get: function() {\r\n var searchParams = new URLSearchParams(this.search);\r\n var _this = this;\r\n ['append', 'delete', 'set'].forEach(function(methodName) {\r\n var method = searchParams[methodName];\r\n searchParams[methodName] = function() {\r\n method.apply(searchParams, arguments);\r\n _this.search = searchParams.toString();\r\n };\r\n });\r\n return searchParams;\r\n },\r\n enumerable: true\r\n }\r\n });\r\n\r\n URL.createObjectURL = function(blob) {\r\n return _URL.createObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n URL.revokeObjectURL = function(url) {\r\n return _URL.revokeObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n global.URL = URL;\r\n\r\n };\r\n\r\n if(!checkIfURLIsSupported()) {\r\n polyfillURL();\r\n }\r\n\r\n if((global.location !== void 0) && !('origin' in global.location)) {\r\n var getOrigin = function() {\r\n return global.location.protocol + '//' + global.location.hostname + (global.location.port ? (':' + global.location.port) : '');\r\n };\r\n\r\n try {\r\n Object.defineProperty(global.location, 'origin', {\r\n get: getOrigin,\r\n enumerable: true\r\n });\r\n } catch(e) {\r\n setInterval(function() {\r\n global.location.origin = getOrigin();\r\n }, 100);\r\n }\r\n }\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n","// ==========================================================================\n// 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 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 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(\n element,\n event,\n callback,\n toggle = false,\n passive = true,\n capture = false,\n) {\n // Bail if no element, event, or callback\n if (\n !element ||\n !('addEventListener' in element) ||\n is.empty(event) ||\n !is.function(callback)\n ) {\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (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'](\n type,\n callback,\n options,\n );\n });\n}\n\n// Bind event handler\nexport function on(\n element,\n events = '',\n callback,\n passive = true,\n capture = false,\n) {\n toggleListener.call(\n this,\n element,\n events,\n callback,\n true,\n passive,\n capture,\n );\n}\n\n// Unbind event handler\nexport function off(\n element,\n events = '',\n callback,\n passive = true,\n capture = false,\n) {\n toggleListener.call(\n this,\n element,\n events,\n callback,\n false,\n passive,\n capture,\n );\n}\n\n// Bind once-only event handler\nexport function once(\n element,\n events = '',\n callback,\n passive = true,\n capture = false,\n) {\n function onceCallback(...args) {\n off(element, events, onceCallback, passive, capture);\n callback.apply(this, args);\n }\n\n toggleListener.call(\n this,\n element,\n events,\n onceCallback,\n true,\n passive,\n capture,\n );\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 =>\n this.ready\n ? setTimeout(resolve, 0)\n : 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 (\n !is.element(oldChild) ||\n !is.element(oldChild.parentNode) ||\n !is.element(newChild)\n ) {\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.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n}\n\n// Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\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(\n this,\n 'button:not(:disabled), input:not(:disabled), [tabindex]',\n );\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(\n this,\n this.elements.container,\n 'keydown',\n trap,\n toggle,\n false,\n );\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(\n event => element.style[event] !== undefined,\n );\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 =\n browser.isIPhone && playsinline && support.playsinline;\n const api = support[type] || provider !== 'html5';\n const ui =\n api &&\n support.rangeInput &&\n (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: (() =>\n !browser.isIPhone &&\n 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(\n type && this.media.canPlayType(type).replace(/no/, ''),\n );\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:\n 'matchMedia' in window &&\n 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 });\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// Object utils\n// ==========================================================================\n\nimport is from './is';\n\n// Clone nested objects\nexport function cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n}\n\n// Get a nested value in an object\nexport function getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n}\n\n// Deep extend destination object with N more objects\nexport function extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return extend(target, ...sources);\n}\n","// ==========================================================================\n// String utils\n// ==========================================================================\n\nimport is from './is';\n\n// Generate a random ID\nexport function generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n}\n\n// Format string\nexport function format(input, ...args) {\n if (is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => args[i].toString());\n}\n\n// Get percentage\nexport function getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n}\n\n// Replace all occurances of a string in a string\nexport function replaceAll(input = '', find = '', replace = '') {\n return input.replace(\n new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'),\n replace.toString(),\n );\n}\n\n// Convert to title case\nexport function toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n}\n\n// Convert string to pascalCase\nexport function toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = toTitleCase(string);\n\n // Convert to pascal case\n return replaceAll(string, ' ', '');\n}\n\n// Convert string to pascalCase\nexport function toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n// Remove HTML from a string\nexport function stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n}\n\n// Like outerHTML, but also works for DocumentFragment\nexport function getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n}\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport is from './utils/is';\nimport { getDeep } from './utils/objects';\nimport { replaceAll } from './utils/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// 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// 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 i18n from './i18n';\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 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(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n } 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 // Toggle classname when pressed property is set\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 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 bindMenuItemShortcuts(menuItem, type) {\n // Handle space or -> to open menu\n on(menuItem, 'keydown', 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 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 }, false);\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 keydown',\n event => {\n if (event.type === 'keydown' && 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', event.type === 'keydown');\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}%`);\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 // 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 const show = is.boolean(input) ? input : is.element(popup) && popup.hasAttribute('hidden');\n\n if (is.event(input)) {\n const isMenuItem = is.element(popup) && popup.contains(input.target);\n const isButton = input.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n input.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n // Show the actual popup\n if (is.element(popup)) {\n toggleHidden(popup, !show);\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n // Focus the first item if key interaction\n if (show && is.event(input) && input.type === 'keydown') {\n const pane = Object.values(this.elements.settings.panels).find(pane => !pane.hidden);\n const firstItem = pane.querySelector('[role^=\"menuitem\"]');\n setFocus.call(this, firstItem, true);\n }\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 const firstItem = target.querySelector('[role^=\"menuitem\"]');\n setFocus.call(this, firstItem, tabFocus);\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (is.empty(this.config.controls)) {\n return null;\n }\n\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 // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n 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 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 id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const popup = createElement('div', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\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(pane, 'keydown', 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 }, false);\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 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 (is.string(this.config.controls) || is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([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\n if (is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n 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 i18n from './i18n';\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 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 languages = dedupe(\n Array.from(navigator.languages || navigator.language || navigator.userLanguage).map(language => language.split('-')[0]),\n );\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: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [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 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress__buffer',\n loop: '.plyr__progress__loop', // Used later\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n caption: '.plyr__caption',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n 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// ==========================================================================\n\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 // 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 if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Load image avoiding xhr/fetch CORS issues\n// Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded\n// By default it checks if it is at least 1px, but you can add a second argument to change this\n// ==========================================================================\n\nexport default function loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n\n Object.assign(image, { onload: handler, onerror: handler, src });\n });\n}\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\nimport is from './utils/is';\nimport loadImage from './utils/loadImage';\n\nconst ui = {\n addStyleHook() {\n toggleClass(\n this.elements.container,\n this.config.selectors.container.replace('.', ''),\n true,\n );\n toggleClass(\n this.elements.container,\n this.config.classNames.uiSupported,\n this.supported.ui,\n );\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(\n `Basic support only for ${this.provider} ${this.type}`,\n );\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(\n this.elements.container,\n this.config.classNames.airplay.supported,\n support.airplay && this.isHTML5,\n );\n\n // Add iOS class\n toggleClass(\n this.elements.container,\n this.config.classNames.isIos,\n browser.isIos,\n );\n\n // Add touch class\n toggleClass(\n this.elements.container,\n this.config.classNames.isTouch,\n this.touch,\n );\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)\n ? this.config.title\n : '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(\n this.elements.container,\n this.config.classNames.posterEnabled,\n enable,\n );\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(\n 'setPoster cancelled by later call to setPoster',\n );\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(\n this.elements.container,\n this.config.classNames.playing,\n this.playing,\n );\n toggleClass(\n this.elements.container,\n this.config.classNames.paused,\n this.paused,\n );\n toggleClass(\n this.elements.container,\n this.config.classNames.stopped,\n this.stopped,\n );\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(\n this.elements.container,\n this.config.classNames.loading,\n this.loading,\n );\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(\n Boolean(\n force ||\n this.loading ||\n this.paused ||\n controls.pressed ||\n controls.hover,\n ),\n );\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 {\n getElement,\n getElements,\n hasClass,\n matches,\n toggleClass,\n toggleHidden,\n} 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 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 } = player.elements.inputs;\n\n if (focused !== seek && matches(focused, editable)) {\n return;\n }\n\n if (\n event.which === 32 &&\n matches(focused, 'button, [role^=\"menuitem\"]')\n ) {\n return;\n }\n }\n\n // Which keycodes should we prevent default\n const preventDefault = [\n 32,\n 37,\n 38,\n 39,\n 40,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 67,\n 70,\n 73,\n 75,\n 76,\n 77,\n 79,\n ];\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n 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 (\n !player.fullscreen.enabled &&\n player.fullscreen.active &&\n code === 27\n ) {\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\n player.touch = true;\n\n // Add touch class\n toggleClass(\n player.elements.container,\n player.config.classNames.isTouch,\n true,\n );\n }\n\n setTabFocus(event) {\n const { player } = this;\n\n clearTimeout(this.focusTimer);\n\n // Ignore any key other than tab\n if (event.type === 'keydown' && event.code !== 'Tab') {\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 (!player.elements.container.contains(focused)) {\n return;\n }\n\n toggleClass(\n document.activeElement,\n player.config.classNames.tabFocus,\n true,\n );\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(\n player,\n window,\n 'keydown keyup',\n this.handleKey,\n toggle,\n false,\n );\n }\n\n // Click anywhere closes menu\n toggleListener.call(\n player,\n document.body,\n 'click',\n this.toggleMenu,\n toggle,\n );\n\n // Detect touch by events\n once.call(player, document.body, 'touchstart', this.firstTouch);\n\n // Tab focus detection\n toggleListener.call(\n player,\n document.body,\n 'keydown focus blur',\n this.setTabFocus,\n toggle,\n false,\n true,\n );\n }\n\n // Container listeners\n container() {\n const { player } = this;\n\n // Keyboard shortcuts\n if (!player.config.keyboard.global && player.config.keyboard.focused) {\n on.call(\n player,\n player.elements.container,\n 'keydown keyup',\n this.handleKey,\n false,\n );\n }\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n player,\n player.elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = player.elements;\n\n // Remove button states for fullscreen\n if (event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = ['touchstart', 'touchmove', 'mousemove'].includes(\n event.type,\n );\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(\n () => ui.toggleControls.call(player, false),\n delay,\n );\n },\n );\n }\n\n // Listen for media events\n media() {\n const { player } = this;\n\n // Time change on media\n on.call(player, player.media, 'timeupdate seeking seeked', event =>\n controls.timeUpdate.call(player, event),\n );\n\n // Display duration\n on.call(\n player,\n player.media,\n 'durationchange loadeddata loadedmetadata',\n event => 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(player.elements.volume, !player.hasAudio);\n toggleHidden(player.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(\n player,\n player.media,\n 'progress playing seeking seeked',\n event => controls.updateProgress.call(player, event),\n );\n\n // Handle volume changes\n on.call(player, player.media, 'volumechange', event =>\n controls.updateVolume.call(player, event),\n );\n\n // Handle play/pause\n on.call(\n player,\n player.media,\n 'playing play pause ended emptied timeupdate',\n event => ui.checkPlaying.call(player, event),\n );\n\n // Loading state\n on.call(player, player.media, 'waiting canplay seeked playing', event =>\n ui.checkLoading.call(player, event),\n );\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\n .then(() => player.ads.play())\n .catch(() => player.play());\n }\n });\n\n // Click video\n if (\n player.supported.ui &&\n player.config.clickToPlay &&\n !player.isAudio\n ) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(\n player,\n `.${player.config.classNames.video}`,\n );\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, wrapper, 'click', () => {\n const controlsHidden = hasClass(\n player.elements.container,\n this.config.classNames.hideControls,\n );\n\n console.warn('click');\n\n // Touch devices will just show controls (if we're hiding controls)\n if (\n player.config.hideControls &&\n player.touch &&\n controlsHidden\n ) {\n return;\n }\n\n if (player.ended) {\n player.restart();\n player.play();\n } else {\n this.togglePlay();\n }\n });\n }\n\n // Disable right click\n if (player.supported.ui && player.config.disableContextMenu) {\n on.call(\n player,\n player.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 request\n on.call(player, player.media, 'qualityrequested', event => {\n // Save to storage\n player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n on.call(player, player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(\n player,\n 'quality',\n null,\n event.detail.quality,\n );\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = player.config.events\n .concat(['keyup', 'keydown'])\n .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(\n player,\n player.elements.container,\n event.type,\n true,\n detail,\n );\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\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 (player.elements.buttons.play) {\n Array.from(player.elements.buttons.play).forEach(button => {\n this.bind(button, 'click', player.togglePlay, 'play');\n });\n }\n\n // Pause\n this.bind(\n player.elements.buttons.restart,\n 'click',\n player.restart,\n 'restart',\n );\n\n // Rewind\n this.bind(\n player.elements.buttons.rewind,\n 'click',\n player.rewind,\n 'rewind',\n );\n\n // Rewind\n this.bind(\n player.elements.buttons.fastForward,\n 'click',\n player.forward,\n 'fastForward',\n );\n\n // Mute toggle\n this.bind(\n player.elements.buttons.mute,\n 'click',\n () => {\n player.muted = !player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n this.bind(player.elements.buttons.captions, 'click', () =>\n player.toggleCaptions(),\n );\n\n // Fullscreen toggle\n this.bind(\n player.elements.buttons.fullscreen,\n 'click',\n () => {\n player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n this.bind(\n player.elements.buttons.pip,\n 'click',\n () => {\n player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n this.bind(\n player.elements.buttons.airplay,\n 'click',\n player.airplay,\n 'airplay',\n );\n\n // Settings menu - click toggle\n this.bind(player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(player, event);\n });\n\n // Settings menu - keyboard toggle\n this.bind(\n player.elements.buttons.settings,\n 'keydown',\n event => {\n // We only care about space\n if (event.which !== 32) {\n return;\n }\n\n // Prevent scroll\n event.preventDefault();\n\n // Prevent playing video\n event.stopPropagation();\n\n // Toggle menu\n controls.toggleMenu.call(player, event);\n },\n null,\n false,\n );\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n this.bind(player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = player.elements.progress.getBoundingClientRect();\n const percent =\n 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n this.bind(\n player.elements.inputs.seek,\n 'mousedown mouseup keydown keyup touchstart touchend',\n event => {\n const seek = event.currentTarget;\n const code = event.keyCode ? event.keyCode : event.which;\n const eventType = event.type;\n const attribute = 'play-on-seeked';\n\n if (\n (eventType === 'keydown' || eventType === 'keyup') &&\n (code !== 39 && code !== 37)\n ) {\n return;\n }\n // Was playing before?\n const play = seek.hasAttribute(attribute);\n\n // Done seeking\n const done = ['mouseup', 'touchend', 'keyup'].includes(\n event.type,\n );\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\n // Seek\n this.bind(\n player.elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\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 repaint(seek);\n }\n\n player.currentTime = seekTo / seek.max * player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (\n player.config.toggleInvert &&\n !is.element(player.elements.display.duration)\n ) {\n this.bind(player.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 player.elements.inputs.volume,\n inputEvent,\n event => {\n player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n Array.from(getElements.call(player, 'input[type=\"range\"]')).forEach(\n element => {\n this.bind(element, 'input', event =>\n controls.updateRangeFill.call(player, event.target),\n );\n },\n );\n }\n\n // Seek tooltip\n this.bind(\n player.elements.progress,\n 'mouseenter mouseleave mousemove',\n event => controls.updateSeekTooltip.call(player, event),\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(player.elements.controls, 'mouseenter mouseleave', event => {\n player.elements.controls.hover =\n !player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(\n player.elements.controls,\n 'mousedown mouseup touchstart touchend touchcancel',\n event => {\n player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n },\n );\n\n // Focus in/out on controls\n this.bind(player.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(\n elements.controls,\n config.classNames.noTransition,\n isFocusIn,\n );\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(\n elements.controls,\n config.classNames.noTransition,\n false,\n );\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(\n () => ui.toggleControls.call(player, false),\n delay,\n );\n }\n });\n\n // Mouse wheel for volume\n this.bind(\n player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n\n // Get delta from event. Invert if `inverted` is true\n const [x, y] = [event.deltaX, -event.deltaY].map(\n value => (inverted ? -value : value),\n );\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 (\n (direction === 1 && volume < 1) ||\n (direction === -1 && volume > 0)\n ) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n}\n\nexport default Listeners;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Load an external script\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nexport default function loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n}\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from '../captions';\nimport controls from '../controls';\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { format, stripHTML } from '../utils/strings';\nimport { buildUrlParams } from '../utils/urls';\n\n// Parse Vimeo ID from URL\nfunction parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n\n if (is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n}\n\n// Get aspect ratio for dimensions\nfunction getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!is.object(window.Vimeo)) {\n loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const [x, y] = (is.string(input) ? input : this.config.ratio).split(':');\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 controls from '../controls';\nimport ui from '../ui';\nimport { dedupe } from '../utils/arrays';\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// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n const qualities = {\n hd2160: 2160,\n hd1440: 1440,\n hd1080: 1080,\n hd720: 720,\n large: 480,\n medium: 360,\n small: 240,\n tiny: 144,\n };\n\n const entry = Object.entries(qualities).find(entry => entry.includes(input));\n\n if (entry) {\n // Get the match corresponding to the input\n return entry.find(value => value !== input);\n }\n\n return 'default';\n}\n\nfunction mapQualityUnits(levels) {\n if (is.empty(levels)) {\n return levels;\n }\n\n return dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n 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 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 onPlaybackQualityChange() {\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n triggerEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n instance.playVideo();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // If paused 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 // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n instance.setPlaybackQuality(mapQualityUnit(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 // Get quality\n controls.setQualityMenu.call(\n player,\n mapQualityUnits(instance.getAvailableQualityLevels()),\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 i18n from '../i18n';\nimport { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\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 // 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 // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n 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.3.22\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 (\n (window.jQuery && this.media instanceof jQuery) ||\n is.nodeList(this.media) ||\n is.array(this.media)\n ) {\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(\n this.media.getAttribute('data-plyr-config'),\n );\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.searchParams.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(\n url.searchParams.get('playsinline'),\n );\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(\n this.config.attributes.embed.provider,\n );\n\n // Remove attribute\n this.media.removeAttribute(\n this.config.attributes.embed.provider,\n );\n }\n\n // Unsupported or missing provider\n if (\n is.empty(this.provider) ||\n !Object.keys(providers).includes(this.provider)\n ) {\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 (\n this.media.hasAttribute('playsinline') ||\n this.media.hasAttribute('webkit-playsinline')\n ) {\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(\n this.type,\n this.provider,\n this.config.playsinline,\n );\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(\n this,\n this.elements.container,\n this.config.events.join(' '),\n event => {\n this.debug.log(`event: ${event.type}`);\n },\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 =\n this.currentTime -\n (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 =\n this.currentTime +\n (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\n ? Math.min(input, this.duration)\n : 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 =\n !is.number(realDuration) || realDuration === Infinity\n ? 0\n : 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(\n `Unsupported quality option: ${quality}, using ${value} instead`,\n );\n quality = value;\n }\n\n // Trigger request event\n triggerEvent.call(this, this.media, 'qualityrequested', false, {\n quality,\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(\n toggle ? states.pip : states.inline,\n );\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n 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(\n this.elements.container,\n this.config.classNames.hideControls,\n );\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(\n this.elements.container,\n this.config.classNames.hideControls,\n force,\n );\n\n // Close menu\n if (\n hiding &&\n this.config.controls.includes('settings') &&\n !is.empty(this.config.settings)\n ) {\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(\n this,\n this.elements.original,\n 'destroyed',\n true,\n );\n\n // Callback\n if (is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Provider specific stuff\n if (this.isHTML5) {\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n } else if (this.isYouTube) {\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n } else if (this.isVimeo) {\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return loadSprite(url, id);\n }\n\n /**\n * Setup multiple instances\n * @param {*} selector\n * @param {object} options\n */\n static setup(selector, options = {}) {\n let targets = null;\n\n if (is.string(selector)) {\n targets = Array.from(document.querySelectorAll(selector));\n } else if (is.nodeList(selector)) {\n targets = Array.from(selector);\n } else if (is.array(selector)) {\n targets = selector.filter(is.element);\n }\n\n if (is.empty(targets)) {\n return null;\n }\n\n return targets.map(t => new Plyr(t, options));\n }\n}\n\nPlyr.defaults = cloneDeep(defaults);\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/package.json b/package.json
index ed942065..101329b9 100644
--- a/package.json
+++ b/package.json
@@ -42,7 +42,7 @@
"babel-plugin-external-helpers": "^6.22.0",
"babel-preset-env": "^1.7.0",
"del": "^3.0.0",
- "eslint": "^5.1.0",
+ "eslint": "^5.2.0",
"eslint-config-airbnb-base": "^13.0.0",
"eslint-config-prettier": "^2.9.0",
"eslint-plugin-import": "^2.13.0",
@@ -57,7 +57,7 @@
"gulp-header": "^2.0.5",
"gulp-open": "^3.0.1",
"gulp-postcss": "^7.0.1",
- "gulp-rename": "^1.3.0",
+ "gulp-rename": "^1.4.0",
"gulp-replace": "^1.0.0",
"gulp-s3": "^0.11.0",
"gulp-sass": "^4.0.1",
@@ -81,15 +81,15 @@
"stylelint-config-recommended": "^2.1.0",
"stylelint-config-sass-guidelines": "^5.0.0",
"stylelint-order": "^0.8.1",
- "stylelint-scss": "^3.1.3",
+ "stylelint-scss": "^3.2.0",
"stylelint-selector-bem-pattern": "^2.0.0",
"through2": "^2.0.3"
},
"dependencies": {
"babel-polyfill": "^6.26.0",
- "custom-event-polyfill": "^0.3.0",
+ "custom-event-polyfill": "^1.0.2",
"loadjs": "^3.5.4",
- "raven-js": "^3.26.3",
+ "raven-js": "^3.26.4",
"url-polyfill": "^1.0.13"
}
}
diff --git a/readme.md b/readme.md
index 2ca9ed53..b8bfbcfd 100644
--- a/readme.md
+++ b/readme.md
@@ -162,9 +162,9 @@ reference, the CDN hosted SVG sprite can be found at `https://cdn.plyr.io/3.3.22
## Ads
-Plyr has partnered up with [vi.ai](http://vi.ai/publisher-video-monetization/?aid=plyrio) to offer monetization options for your videos. Getting setup is easy:
+Plyr has partnered up with [vi.ai](https://vi.ai/publisher-video-monetization/?aid=plyrio) to offer monetization options for your videos. Getting setup is easy:
-* [Sign up for a vi.ai account](http://vi.ai/publisher-video-monetization/?aid=plyrio)
+* [Sign up for a vi.ai account](https://vi.ai/publisher-video-monetization/?aid=plyrio)
* Grab your publisher ID from the code snippet
* Enable ads in the [config options](#options) and enter your publisher ID
diff --git a/src/js/controls.js b/src/js/controls.js
index da404441..27611b2f 100644
--- a/src/js/controls.js
+++ b/src/js/controls.js
@@ -378,7 +378,7 @@ const controls = {
// Show the respective menu
if (!isRadioButton && [32,39].includes(event.which)) {
- controls.showMenuPanel.call(this, type);
+ controls.showMenuPanel.call(this, type, true);
} else {
let target;
@@ -477,7 +477,7 @@ const controls = {
break;
}
- controls.showMenuPanel.call(this, 'home');
+ controls.showMenuPanel.call(this, 'home', event.type === 'keydown');
},
type,
false,
@@ -1118,7 +1118,7 @@ const controls = {
},
// Show a panel in the menu
- showMenuPanel(type = '') {
+ showMenuPanel(type = '', tabFocus = false) {
const target = document.getElementById(`plyr-settings-${this.id}-${type}`);
// Nothing to show, bail
@@ -1170,7 +1170,7 @@ const controls = {
// Focus the first item
const firstItem = target.querySelector('[role^="menuitem"]');
- setFocus.call(this, firstItem, true);
+ setFocus.call(this, firstItem, tabFocus);
},
// Build the default HTML
@@ -1344,7 +1344,7 @@ const controls = {
// Show menu on click
on(menuItem, 'click', () => {
- controls.showMenuPanel.call(this, type);
+ controls.showMenuPanel.call(this, type, false);
});
const flex = createElement('span', null, i18n.get(type, this.config));
@@ -1406,12 +1406,12 @@ const controls = {
event.stopPropagation();
// Show the respective menu
- controls.showMenuPanel.call(this, 'home');
+ controls.showMenuPanel.call(this, 'home', true);
}, false);
// Go back via button click
on(backButton, 'click', () => {
- controls.showMenuPanel.call(this, 'home');
+ controls.showMenuPanel.call(this, 'home', false);
});
// Add to pane
diff --git a/src/js/listeners.js b/src/js/listeners.js
index 0b803454..e19894ba 100644
--- a/src/js/listeners.js
+++ b/src/js/listeners.js
@@ -4,10 +4,12 @@
import controls from './controls';
import ui from './ui';
+import { repaint } from './utils/animation';
import browser from './utils/browser';
import {
getElement,
getElements,
+ hasClass,
matches,
toggleClass,
toggleHidden,
@@ -30,6 +32,7 @@ class Listeners {
// Handle key presses
handleKey(event) {
+ const { player } = this;
const code = event.keyCode ? event.keyCode : event.which;
const pressed = event.type === 'keydown';
const repeat = pressed && code === this.lastKey;
@@ -48,7 +51,7 @@ class Listeners {
// Seek by the number keys
const seekByKey = () => {
// Divide the max duration into 10th's and times by the number value
- this.player.currentTime = this.player.duration / 10 * (code - 48);
+ player.currentTime = player.duration / 10 * (code - 48);
};
// Handle the key on keydown
@@ -59,8 +62,8 @@ class Listeners {
// and any that accept key input http://webaim.org/techniques/keyboard/
const focused = document.activeElement;
if (is.element(focused)) {
- const { editable } = this.player.config.selectors;
- const { seek } = this.player.elements.inputs;
+ const { editable } = player.config.selectors;
+ const { seek } = player.elements.inputs;
if (focused !== seek && matches(focused, editable)) {
return;
@@ -126,52 +129,52 @@ class Listeners {
case 75:
// Space and K key
if (!repeat) {
- this.player.togglePlay();
+ player.togglePlay();
}
break;
case 38:
// Arrow up
- this.player.increaseVolume(0.1);
+ player.increaseVolume(0.1);
break;
case 40:
// Arrow down
- this.player.decreaseVolume(0.1);
+ player.decreaseVolume(0.1);
break;
case 77:
// M key
if (!repeat) {
- this.player.muted = !this.player.muted;
+ player.muted = !player.muted;
}
break;
case 39:
// Arrow forward
- this.player.forward();
+ player.forward();
break;
case 37:
// Arrow back
- this.player.rewind();
+ player.rewind();
break;
case 70:
// F key
- this.player.fullscreen.toggle();
+ player.fullscreen.toggle();
break;
case 67:
// C key
if (!repeat) {
- this.player.toggleCaptions();
+ player.toggleCaptions();
}
break;
case 76:
// L key
- this.player.loop = !this.player.loop;
+ player.loop = !player.loop;
break;
/* case 73:
@@ -193,11 +196,11 @@ class Listeners {
// Escape is handle natively when in full screen
// So we only need to worry about non native
if (
- !this.player.fullscreen.enabled &&
- this.player.fullscreen.active &&
+ !player.fullscreen.enabled &&
+ player.fullscreen.active &&
code === 27
) {
- this.player.fullscreen.toggle();
+ player.fullscreen.toggle();
}
// Store last code for next cycle
@@ -214,17 +217,21 @@ class Listeners {
// Device is touch enabled
firstTouch() {
- this.player.touch = true;
+ const { player } = this;
+
+ player.touch = true;
// Add touch class
toggleClass(
- this.player.elements.container,
- this.player.config.classNames.isTouch,
+ player.elements.container,
+ player.config.classNames.isTouch,
true,
);
}
setTabFocus(event) {
+ const { player } = this;
+
clearTimeout(this.focusTimer);
// Ignore any key other than tab
@@ -239,8 +246,8 @@ class Listeners {
// Remove current classes
const removeCurrent = () => {
- const className = this.player.config.classNames.tabFocus;
- const current = getElements.call(this.player, `.${className}`);
+ const className = player.config.classNames.tabFocus;
+ const current = getElements.call(player, `.${className}`);
toggleClass(current, className, false);
};
@@ -257,18 +264,17 @@ class Listeners {
// Delay the adding of classname until the focus has changed
// This event fires before the focusin event
-
this.focusTimer = setTimeout(() => {
const focused = document.activeElement;
// Ignore if current focus element isn't inside the player
- if (!this.player.elements.container.contains(focused)) {
+ if (!player.elements.container.contains(focused)) {
return;
}
toggleClass(
document.activeElement,
- this.player.config.classNames.tabFocus,
+ player.config.classNames.tabFocus,
true,
);
}, 10);
@@ -276,10 +282,12 @@ class Listeners {
// Global window & document listeners
global(toggle = true) {
+ const { player } = this;
+
// Keyboard shortcuts
- if (this.player.config.keyboard.global) {
+ if (player.config.keyboard.global) {
toggleListener.call(
- this.player,
+ player,
window,
'keydown keyup',
this.handleKey,
@@ -290,7 +298,7 @@ class Listeners {
// Click anywhere closes menu
toggleListener.call(
- this.player,
+ player,
document.body,
'click',
this.toggleMenu,
@@ -298,11 +306,11 @@ class Listeners {
);
// Detect touch by events
- once.call(this.player, document.body, 'touchstart', this.firstTouch);
+ once.call(player, document.body, 'touchstart', this.firstTouch);
// Tab focus detection
toggleListener.call(
- this.player,
+ player,
document.body,
'keydown focus blur',
this.setTabFocus,
@@ -314,14 +322,13 @@ class Listeners {
// Container listeners
container() {
+ const { player } = this;
+
// Keyboard shortcuts
- if (
- !this.player.config.keyboard.global &&
- this.player.config.keyboard.focused
- ) {
+ if (!player.config.keyboard.global && player.config.keyboard.focused) {
on.call(
- this.player,
- this.player.elements.container,
+ player,
+ player.elements.container,
'keydown keyup',
this.handleKey,
false,
@@ -330,11 +337,11 @@ class Listeners {
// Toggle controls on mouse events and entering fullscreen
on.call(
- this.player,
- this.player.elements.container,
+ player,
+ player.elements.container,
'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',
event => {
- const { controls } = this.player.elements;
+ const { controls } = player.elements;
// Remove button states for fullscreen
if (event.type === 'enterfullscreen') {
@@ -350,17 +357,17 @@ class Listeners {
let delay = 0;
if (show) {
- ui.toggleControls.call(this.player, true);
+ ui.toggleControls.call(player, true);
// Use longer timeout for touch devices
- delay = this.player.touch ? 3000 : 2000;
+ delay = player.touch ? 3000 : 2000;
}
// Clear timer
- clearTimeout(this.player.timers.controls);
+ clearTimeout(player.timers.controls);
// Set new timer to prevent flicker when seeking
- this.player.timers.controls = setTimeout(
- () => ui.toggleControls.call(this.player, false),
+ player.timers.controls = setTimeout(
+ () => ui.toggleControls.call(player, false),
delay,
);
},
@@ -369,100 +376,89 @@ class Listeners {
// Listen for media events
media() {
+ const { player } = this;
+
// Time change on media
- on.call(
- this.player,
- this.player.media,
- 'timeupdate seeking seeked',
- event => controls.timeUpdate.call(this.player, event),
+ on.call(player, player.media, 'timeupdate seeking seeked', event =>
+ controls.timeUpdate.call(player, event),
);
// Display duration
on.call(
- this.player,
- this.player.media,
+ player,
+ player.media,
'durationchange loadeddata loadedmetadata',
- event => controls.durationUpdate.call(this.player, event),
+ event => controls.durationUpdate.call(player, event),
);
// Check for audio tracks on load
// We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point
- on.call(this.player, this.player.media, 'canplay', () => {
- toggleHidden(this.player.elements.volume, !this.player.hasAudio);
- toggleHidden(
- this.player.elements.buttons.mute,
- !this.player.hasAudio,
- );
+ on.call(player, player.media, 'canplay', () => {
+ toggleHidden(player.elements.volume, !player.hasAudio);
+ toggleHidden(player.elements.buttons.mute, !player.hasAudio);
});
// Handle the media finishing
- on.call(this.player, this.player.media, 'ended', () => {
+ on.call(player, player.media, 'ended', () => {
// Show poster on end
- if (
- this.player.isHTML5 &&
- this.player.isVideo &&
- this.player.config.resetOnEnd
- ) {
+ if (player.isHTML5 && player.isVideo && player.config.resetOnEnd) {
// Restart
- this.player.restart();
+ player.restart();
}
});
// Check for buffer progress
on.call(
- this.player,
- this.player.media,
+ player,
+ player.media,
'progress playing seeking seeked',
- event => controls.updateProgress.call(this.player, event),
+ event => controls.updateProgress.call(player, event),
);
// Handle volume changes
- on.call(this.player, this.player.media, 'volumechange', event =>
- controls.updateVolume.call(this.player, event),
+ on.call(player, player.media, 'volumechange', event =>
+ controls.updateVolume.call(player, event),
);
// Handle play/pause
on.call(
- this.player,
- this.player.media,
+ player,
+ player.media,
'playing play pause ended emptied timeupdate',
- event => ui.checkPlaying.call(this.player, event),
+ event => ui.checkPlaying.call(player, event),
);
// Loading state
- on.call(
- this.player,
- this.player.media,
- 'waiting canplay seeked playing',
- event => ui.checkLoading.call(this.player, event),
+ on.call(player, player.media, 'waiting canplay seeked playing', event =>
+ ui.checkLoading.call(player, event),
);
// If autoplay, then load advertisement if required
// TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows
- on.call(this.player, this.player.media, 'playing', () => {
- if (!this.player.ads) {
+ on.call(player, player.media, 'playing', () => {
+ if (!player.ads) {
return;
}
// If ads are enabled, wait for them first
- if (this.player.ads.enabled && !this.player.ads.initialized) {
+ if (player.ads.enabled && !player.ads.initialized) {
// Wait for manager response
- this.player.ads.managerPromise
- .then(() => this.player.ads.play())
- .catch(() => this.player.play());
+ player.ads.managerPromise
+ .then(() => player.ads.play())
+ .catch(() => player.play());
}
});
// Click video
if (
- this.player.supported.ui &&
- this.player.config.clickToPlay &&
- !this.player.isAudio
+ player.supported.ui &&
+ player.config.clickToPlay &&
+ !player.isAudio
) {
// Re-fetch the wrapper
const wrapper = getElement.call(
- this.player,
- `.${this.player.config.classNames.video}`,
+ player,
+ `.${player.config.classNames.video}`,
);
// Bail if there's no wrapper (this should never happen)
@@ -471,32 +467,49 @@ class Listeners {
}
// On click play, pause ore restart
- on.call(this.player, wrapper, 'click', () => {
- // Touch devices will just show controls (if we're hiding controls)
- if (
- this.player.config.hideControls &&
- this.player.touch &&
- !this.player.paused
- ) {
- return;
- }
+ on.call(
+ player,
+ player.elements.container,
+ 'click touchstart',
+ event => {
+ const targets = [player.elements.container, wrapper];
+
+ // Ignore if click if not container or in video wrapper
+ if (
+ !targets.includes(event.target) &&
+ !wrapper.contains(event.target)
+ ) {
+ return;
+ }
- if (this.player.paused) {
- this.player.play();
- } else if (this.player.ended) {
- this.player.restart();
- this.player.play();
- } else {
- this.player.pause();
- }
- });
+ // First touch on touch devices will just show controls (if we're hiding controls)
+ // If controls are shown then it'll toggle like a pointer device
+ if (
+ player.config.hideControls &&
+ player.touch &&
+ hasClass(
+ player.elements.container,
+ player.config.classNames.hideControls,
+ )
+ ) {
+ return;
+ }
+
+ if (player.ended) {
+ player.restart();
+ player.play();
+ } else {
+ player.togglePlay();
+ }
+ },
+ );
}
// Disable right click
- if (this.player.supported.ui && this.player.config.disableContextMenu) {
+ if (player.supported.ui && player.config.disableContextMenu) {
on.call(
- this.player,
- this.player.elements.wrapper,
+ player,
+ player.elements.wrapper,
'contextmenu',
event => {
event.preventDefault();
@@ -506,34 +519,34 @@ class Listeners {
}
// Volume change
- on.call(this.player, this.player.media, 'volumechange', () => {
+ on.call(player, player.media, 'volumechange', () => {
// Save to storage
- this.player.storage.set({
- volume: this.player.volume,
- muted: this.player.muted,
+ player.storage.set({
+ volume: player.volume,
+ muted: player.muted,
});
});
// Speed change
- on.call(this.player, this.player.media, 'ratechange', () => {
+ on.call(player, player.media, 'ratechange', () => {
// Update UI
- controls.updateSetting.call(this.player, 'speed');
+ controls.updateSetting.call(player, 'speed');
// Save to storage
- this.player.storage.set({ speed: this.player.speed });
+ player.storage.set({ speed: player.speed });
});
// Quality request
- on.call(this.player, this.player.media, 'qualityrequested', event => {
+ on.call(player, player.media, 'qualityrequested', event => {
// Save to storage
- this.player.storage.set({ quality: event.detail.quality });
+ player.storage.set({ quality: event.detail.quality });
});
// Quality change
- on.call(this.player, this.player.media, 'qualitychange', event => {
+ on.call(player, player.media, 'qualitychange', event => {
// Update UI
controls.updateSetting.call(
- this.player,
+ player,
'quality',
null,
event.detail.quality,
@@ -542,21 +555,21 @@ class Listeners {
// Proxy events to container
// Bubble up key events for Edge
- const proxyEvents = this.player.config.events
+ const proxyEvents = player.config.events
.concat(['keyup', 'keydown'])
.join(' ');
- on.call(this.player, this.player.media, proxyEvents, event => {
+ on.call(player, player.media, proxyEvents, event => {
let { detail = {} } = event;
// Get error details from media
if (event.type === 'error') {
- detail = this.player.media.error;
+ detail = player.media.error;
}
triggerEvent.call(
- this.player,
- this.player.elements.container,
+ player,
+ player.elements.container,
event.type,
true,
detail,
@@ -566,28 +579,30 @@ class Listeners {
// Run default and custom handlers
proxy(event, defaultHandler, customHandlerKey) {
- const customHandler = this.player.config.listeners[customHandlerKey];
+ const { player } = this;
+ const customHandler = player.config.listeners[customHandlerKey];
const hasCustomHandler = is.function(customHandler);
let returned = true;
// Execute custom handler
if (hasCustomHandler) {
- returned = customHandler.call(this.player, event);
+ returned = customHandler.call(player, event);
}
// Only call default handler if not prevented in custom handler
if (returned && is.function(defaultHandler)) {
- defaultHandler.call(this.player, event);
+ defaultHandler.call(player, event);
}
}
// Trigger custom and default handlers
bind(element, type, defaultHandler, customHandlerKey, passive = true) {
- const customHandler = this.player.config.listeners[customHandlerKey];
+ const { player } = this;
+ const customHandler = player.config.listeners[customHandlerKey];
const hasCustomHandler = is.function(customHandler);
on.call(
- this.player,
+ player,
element,
type,
event => this.proxy(event, defaultHandler, customHandlerKey),
@@ -597,91 +612,93 @@ class Listeners {
// Listen for control events
controls() {
+ const { player } = this;
+
// IE doesn't support input event, so we fallback to change
const inputEvent = browser.isIE ? 'change' : 'input';
// Play/pause toggle
- if (this.player.elements.buttons.play) {
- Array.from(this.player.elements.buttons.play).forEach(button => {
- this.bind(button, 'click', this.player.togglePlay, 'play');
+ if (player.elements.buttons.play) {
+ Array.from(player.elements.buttons.play).forEach(button => {
+ this.bind(button, 'click', player.togglePlay, 'play');
});
}
// Pause
this.bind(
- this.player.elements.buttons.restart,
+ player.elements.buttons.restart,
'click',
- this.player.restart,
+ player.restart,
'restart',
);
// Rewind
this.bind(
- this.player.elements.buttons.rewind,
+ player.elements.buttons.rewind,
'click',
- this.player.rewind,
+ player.rewind,
'rewind',
);
// Rewind
this.bind(
- this.player.elements.buttons.fastForward,
+ player.elements.buttons.fastForward,
'click',
- this.player.forward,
+ player.forward,
'fastForward',
);
// Mute toggle
this.bind(
- this.player.elements.buttons.mute,
+ player.elements.buttons.mute,
'click',
() => {
- this.player.muted = !this.player.muted;
+ player.muted = !player.muted;
},
'mute',
);
// Captions toggle
- this.bind(this.player.elements.buttons.captions, 'click', () =>
- this.player.toggleCaptions(),
+ this.bind(player.elements.buttons.captions, 'click', () =>
+ player.toggleCaptions(),
);
// Fullscreen toggle
this.bind(
- this.player.elements.buttons.fullscreen,
+ player.elements.buttons.fullscreen,
'click',
() => {
- this.player.fullscreen.toggle();
+ player.fullscreen.toggle();
},
'fullscreen',
);
// Picture-in-Picture
this.bind(
- this.player.elements.buttons.pip,
+ player.elements.buttons.pip,
'click',
() => {
- this.player.pip = 'toggle';
+ player.pip = 'toggle';
},
'pip',
);
// Airplay
this.bind(
- this.player.elements.buttons.airplay,
+ player.elements.buttons.airplay,
'click',
- this.player.airplay,
+ player.airplay,
'airplay',
);
// Settings menu - click toggle
- this.bind(this.player.elements.buttons.settings, 'click', event => {
- controls.toggleMenu.call(this.player, event);
+ this.bind(player.elements.buttons.settings, 'click', event => {
+ controls.toggleMenu.call(player, event);
});
// Settings menu - keyboard toggle
this.bind(
- this.player.elements.buttons.settings,
+ player.elements.buttons.settings,
'keydown',
event => {
// We only care about space
@@ -696,33 +713,28 @@ class Listeners {
event.stopPropagation();
// Toggle menu
- controls.toggleMenu.call(this.player, event);
+ controls.toggleMenu.call(player, event);
},
null,
false,
);
// Set range input alternative "value", which matches the tooltip time (#954)
- this.bind(
- this.player.elements.inputs.seek,
- 'mousedown mousemove',
- event => {
- const clientRect = this.player.elements.progress.getBoundingClientRect();
- const percent =
- 100 / clientRect.width * (event.pageX - clientRect.left);
- event.currentTarget.setAttribute('seek-value', percent);
- },
- );
+ this.bind(player.elements.inputs.seek, 'mousedown mousemove', event => {
+ const rect = player.elements.progress.getBoundingClientRect();
+ const percent = 100 / rect.width * (event.pageX - rect.left);
+ event.currentTarget.setAttribute('seek-value', percent);
+ });
// Pause while seeking
this.bind(
- this.player.elements.inputs.seek,
+ player.elements.inputs.seek,
'mousedown mouseup keydown keyup touchstart touchend',
event => {
const seek = event.currentTarget;
-
const code = event.keyCode ? event.keyCode : event.which;
const eventType = event.type;
+ const attribute = 'play-on-seeked';
if (
(eventType === 'keydown' || eventType === 'keyup') &&
@@ -731,7 +743,7 @@ class Listeners {
return;
}
// Was playing before?
- const play = seek.hasAttribute('play-on-seeked');
+ const play = seek.hasAttribute(attribute);
// Done seeking
const done = ['mouseup', 'touchend', 'keyup'].includes(
@@ -740,18 +752,18 @@ class Listeners {
// If we're done seeking and it was playing, resume playback
if (play && done) {
- seek.removeAttribute('play-on-seeked');
- this.player.play();
- } else if (!done && this.player.playing) {
- seek.setAttribute('play-on-seeked', '');
- this.player.pause();
+ seek.removeAttribute(attribute);
+ player.play();
+ } else if (!done && player.playing) {
+ seek.setAttribute(attribute, '');
+ player.pause();
}
},
);
// Seek
this.bind(
- this.player.elements.inputs.seek,
+ player.elements.inputs.seek,
inputEvent,
event => {
const seek = event.currentTarget;
@@ -765,8 +777,13 @@ class Listeners {
seek.removeAttribute('seek-value');
- this.player.currentTime =
- seekTo / seek.max * this.player.duration;
+ // Super weird iOS bug where after you interact with an <input type="range">,
+ // it takes over further interactions on the page. This is a hack
+ if (browser.isIos) {
+ repaint(seek);
+ }
+
+ player.currentTime = seekTo / seek.max * player.duration;
},
'seek',
);
@@ -774,65 +791,61 @@ class Listeners {
// Current time invert
// Only if one time element is used for both currentTime and duration
if (
- this.player.config.toggleInvert &&
- !is.element(this.player.elements.display.duration)
+ player.config.toggleInvert &&
+ !is.element(player.elements.display.duration)
) {
- this.bind(this.player.elements.display.currentTime, 'click', () => {
+ this.bind(player.elements.display.currentTime, 'click', () => {
// Do nothing if we're at the start
- if (this.player.currentTime === 0) {
+ if (player.currentTime === 0) {
return;
}
- this.player.config.invertTime = !this.player.config.invertTime;
+ player.config.invertTime = !player.config.invertTime;
- controls.timeUpdate.call(this.player);
+ controls.timeUpdate.call(player);
});
}
// Volume
this.bind(
- this.player.elements.inputs.volume,
+ player.elements.inputs.volume,
inputEvent,
event => {
- this.player.volume = event.target.value;
+ player.volume = event.target.value;
},
'volume',
);
// Polyfill for lower fill in <input type="range"> for webkit
if (browser.isWebkit) {
- Array.from(
- getElements.call(this.player, 'input[type="range"]'),
- ).forEach(element => {
- this.bind(element, 'input', event =>
- controls.updateRangeFill.call(this.player, event.target),
- );
- });
+ Array.from(getElements.call(player, 'input[type="range"]')).forEach(
+ element => {
+ this.bind(element, 'input', event =>
+ controls.updateRangeFill.call(player, event.target),
+ );
+ },
+ );
}
// Seek tooltip
this.bind(
- this.player.elements.progress,
+ player.elements.progress,
'mouseenter mouseleave mousemove',
- event => controls.updateSeekTooltip.call(this.player, event),
+ event => controls.updateSeekTooltip.call(player, event),
);
// Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)
- this.bind(
- this.player.elements.controls,
- 'mouseenter mouseleave',
- event => {
- this.player.elements.controls.hover =
- !this.player.touch && event.type === 'mouseenter';
- },
- );
+ this.bind(player.elements.controls, 'mouseenter mouseleave', event => {
+ player.elements.controls.hover =
+ !player.touch && event.type === 'mouseenter';
+ });
// Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)
this.bind(
- this.player.elements.controls,
+ player.elements.controls,
'mousedown mouseup touchstart touchend touchcancel',
event => {
- this.player.elements.controls.pressed = [
+ player.elements.controls.pressed = [
'mousedown',
'touchstart',
].includes(event.type);
@@ -840,21 +853,22 @@ class Listeners {
);
// Focus in/out on controls
- this.bind(this.player.elements.controls, 'focusin focusout', event => {
- const { config, elements, timers } = this.player;
+ this.bind(player.elements.controls, 'focusin focusout', event => {
+ const { config, elements, timers } = player;
+ const isFocusIn = event.type === 'focusin';
// Skip transition to prevent focus from scrolling the parent element
toggleClass(
elements.controls,
config.classNames.noTransition,
- event.type === 'focusin',
+ isFocusIn,
);
// Toggle
- ui.toggleControls.call(this.player, event.type === 'focusin');
+ ui.toggleControls.call(player, isFocusIn);
// If focusin, hide again after delay
- if (event.type === 'focusin') {
+ if (isFocusIn) {
// Restore transition
setTimeout(() => {
toggleClass(
@@ -872,7 +886,7 @@ class Listeners {
// Hide
timers.controls = setTimeout(
- () => ui.toggleControls.call(this.player, false),
+ () => ui.toggleControls.call(player, false),
delay,
);
}
@@ -880,7 +894,7 @@ class Listeners {
// Mouse wheel for volume
this.bind(
- this.player.elements.inputs.volume,
+ player.elements.inputs.volume,
'wheel',
event => {
// Detect "natural" scroll - suppored on OS X Safari only
@@ -896,10 +910,10 @@ class Listeners {
const direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y);
// Change the volume by 2%
- this.player.increaseVolume(direction / 50);
+ player.increaseVolume(direction / 50);
// Don't break page scrolling at max and min
- const { volume } = this.player.media;
+ const { volume } = player.media;
if (
(direction === 1 && volume < 1) ||
(direction === -1 && volume > 0)
diff --git a/src/js/plyr.js b/src/js/plyr.js
index ab1f7866..b4c54ca8 100644
--- a/src/js/plyr.js
+++ b/src/js/plyr.js
@@ -52,7 +52,11 @@ class Plyr {
}
// jQuery, NodeList or Array passed, use first element
- if ((window.jQuery && this.media instanceof jQuery) || is.nodeList(this.media) || is.array(this.media)) {
+ if (
+ (window.jQuery && this.media instanceof jQuery) ||
+ is.nodeList(this.media) ||
+ is.array(this.media)
+ ) {
// eslint-disable-next-line
this.media = this.media[0];
}
@@ -65,7 +69,9 @@ class Plyr {
options || {},
(() => {
try {
- return JSON.parse(this.media.getAttribute('data-plyr-config'));
+ return JSON.parse(
+ this.media.getAttribute('data-plyr-config'),
+ );
} catch (e) {
return {};
}
@@ -185,21 +191,30 @@ class Plyr {
// TODO: replace fullscreen.iosNative with this playsinline config option
// YouTube requires the playsinline in the URL
if (this.isYouTube) {
- this.config.playsinline = truthy.includes(url.searchParams.get('playsinline'));
+ this.config.playsinline = truthy.includes(
+ url.searchParams.get('playsinline'),
+ );
} else {
this.config.playsinline = true;
}
}
} else {
// <div> with attributes
- this.provider = this.media.getAttribute(this.config.attributes.embed.provider);
+ this.provider = this.media.getAttribute(
+ this.config.attributes.embed.provider,
+ );
// Remove attribute
- this.media.removeAttribute(this.config.attributes.embed.provider);
+ this.media.removeAttribute(
+ this.config.attributes.embed.provider,
+ );
}
// Unsupported or missing provider
- if (is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {
+ if (
+ is.empty(this.provider) ||
+ !Object.keys(providers).includes(this.provider)
+ ) {
this.debug.error('Setup failed: Invalid provider');
return;
}
@@ -221,7 +236,10 @@ class Plyr {
if (this.media.hasAttribute('autoplay')) {
this.config.autoplay = true;
}
- if (this.media.hasAttribute('playsinline')) {
+ if (
+ this.media.hasAttribute('playsinline') ||
+ this.media.hasAttribute('webkit-playsinline')
+ ) {
this.config.playsinline = true;
}
if (this.media.hasAttribute('muted')) {
@@ -239,7 +257,11 @@ class Plyr {
}
// Check for support again but with type
- this.supported = support.check(this.type, this.provider, this.config.playsinline);
+ this.supported = support.check(
+ this.type,
+ this.provider,
+ this.config.playsinline,
+ );
// If no support for even API, bail
if (!this.supported.api) {
@@ -272,9 +294,14 @@ class Plyr {
// Listen for events if debugging
if (this.config.debug) {
- on.call(this, this.elements.container, this.config.events.join(' '), event => {
- this.debug.log(`event: ${event.type}`);
- });
+ on.call(
+ this,
+ this.elements.container,
+ this.config.events.join(' '),
+ event => {
+ this.debug.log(`event: ${event.type}`);
+ },
+ );
}
// Setup interface
@@ -293,7 +320,9 @@ class Plyr {
this.fullscreen = new Fullscreen(this);
// Setup ads if provided
- this.ads = new Ads(this);
+ if (this.config.ads.enabled) {
+ this.ads = new Ads(this);
+ }
// Autoplay if required
if (this.config.autoplay) {
@@ -422,7 +451,9 @@ class Plyr {
* @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime
*/
rewind(seekTime) {
- this.currentTime = this.currentTime - (is.number(seekTime) ? seekTime : this.config.seekTime);
+ this.currentTime =
+ this.currentTime -
+ (is.number(seekTime) ? seekTime : this.config.seekTime);
}
/**
@@ -430,7 +461,9 @@ class Plyr {
* @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime
*/
forward(seekTime) {
- this.currentTime = this.currentTime + (is.number(seekTime) ? seekTime : this.config.seekTime);
+ this.currentTime =
+ this.currentTime +
+ (is.number(seekTime) ? seekTime : this.config.seekTime);
}
/**
@@ -447,7 +480,9 @@ class Plyr {
const inputIsValid = is.number(input) && input > 0;
// Set
- this.media.currentTime = inputIsValid ? Math.min(input, this.duration) : 0;
+ this.media.currentTime = inputIsValid
+ ? Math.min(input, this.duration)
+ : 0;
// Logging
this.debug.log(`Seeking to ${this.currentTime} seconds`);
@@ -497,7 +532,10 @@ class Plyr {
// Media duration can be NaN or Infinity before the media has loaded
const realDuration = (this.media || {}).duration;
- const duration = !is.number(realDuration) || realDuration === Infinity ? 0 : realDuration;
+ const duration =
+ !is.number(realDuration) || realDuration === Infinity
+ ? 0
+ : realDuration;
// If config duration is funky, use regular duration
return fauxDuration || duration;
@@ -691,12 +729,16 @@ class Plyr {
if (!options.includes(quality)) {
const value = closest(options, quality);
- this.debug.warn(`Unsupported quality option: ${quality}, using ${value} instead`);
+ this.debug.warn(
+ `Unsupported quality option: ${quality}, using ${value} instead`,
+ );
quality = value;
}
// Trigger request event
- triggerEvent.call(this, this.media, 'qualityrequested', false, { quality });
+ triggerEvent.call(this, this.media, 'qualityrequested', false, {
+ quality,
+ });
// Update config
config.selected = quality;
@@ -888,7 +930,9 @@ class Plyr {
const toggle = is.boolean(input) ? input : this.pip === states.inline;
// Toggle based on current state
- this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);
+ this.media.webkitSetPresentationMode(
+ toggle ? states.pip : states.inline,
+ );
}
/**
@@ -921,25 +965,39 @@ class Plyr {
// Don't toggle if missing UI support or if it's audio
if (this.supported.ui && !this.isAudio) {
// Get state before change
- const isHidden = hasClass(this.elements.container, this.config.classNames.hideControls);
+ const isHidden = hasClass(
+ this.elements.container,
+ this.config.classNames.hideControls,
+ );
// Negate the argument if not undefined since adding the class to hides the controls
const force = typeof toggle === 'undefined' ? undefined : !toggle;
// Apply and get updated state
- const hiding = toggleClass(this.elements.container, this.config.classNames.hideControls, force);
+ const hiding = toggleClass(
+ this.elements.container,
+ this.config.classNames.hideControls,
+ force,
+ );
// Close menu
- if (hiding && this.config.controls.includes('settings') && !is.empty(this.config.settings)) {
+ if (
+ hiding &&
+ this.config.controls.includes('settings') &&
+ !is.empty(this.config.settings)
+ ) {
controls.toggleMenu.call(this, false);
}
+
// Trigger event on change
if (hiding !== isHidden) {
const eventName = hiding ? 'controlshidden' : 'controlsshown';
triggerEvent.call(this, this.media, eventName);
}
+
return !hiding;
}
+
return false;
}
@@ -1017,7 +1075,12 @@ class Plyr {
replaceElement(this.elements.original, this.elements.container);
// Event
- triggerEvent.call(this, this.elements.original, 'destroyed', true);
+ triggerEvent.call(
+ this,
+ this.elements.original,
+ 'destroyed',
+ true,
+ );
// Callback
if (is.function(callback)) {
diff --git a/src/js/support.js b/src/js/support.js
index 6395293f..4681f5c7 100644
--- a/src/js/support.js
+++ b/src/js/support.js
@@ -25,9 +25,13 @@ const support = {
// Check for support
// Basic functionality vs full UI
check(type, provider, playsinline) {
- const canPlayInline = browser.isIPhone && playsinline && support.playsinline;
+ const canPlayInline =
+ browser.isIPhone && playsinline && support.playsinline;
const api = support[type] || provider !== 'html5';
- const ui = api && support.rangeInput && (type !== 'video' || !browser.isIPhone || canPlayInline);
+ const ui =
+ api &&
+ support.rangeInput &&
+ (type !== 'video' || !browser.isIPhone || canPlayInline);
return {
api,
@@ -37,7 +41,9 @@ const support = {
// Picture-in-picture support
// Safari only currently
- pip: (() => !browser.isIPhone && is.function(createElement('video').webkitSetPresentationMode))(),
+ pip: (() =>
+ !browser.isIPhone &&
+ is.function(createElement('video').webkitSetPresentationMode))(),
// Airplay support
// Safari only currently
@@ -69,7 +75,9 @@ const support = {
}
try {
- return Boolean(type && this.media.canPlayType(type).replace(/no/, ''));
+ return Boolean(
+ type && this.media.canPlayType(type).replace(/no/, ''),
+ );
} catch (err) {
return false;
}
@@ -94,7 +102,9 @@ const support = {
// Reduced motion iOS & MacOS setting
// https://webkit.org/blog/7551/responsive-design-for-motion/
- reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,
+ reducedMotion:
+ 'matchMedia' in window &&
+ window.matchMedia('(prefers-reduced-motion)').matches,
};
export default support;
diff --git a/src/js/ui.js b/src/js/ui.js
index 34fe7e82..8c61d805 100644
--- a/src/js/ui.js
+++ b/src/js/ui.js
@@ -14,8 +14,16 @@ import loadImage from './utils/loadImage';
const ui = {
addStyleHook() {
- toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);
- toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);
+ toggleClass(
+ this.elements.container,
+ this.config.selectors.container.replace('.', ''),
+ true,
+ );
+ toggleClass(
+ this.elements.container,
+ this.config.classNames.uiSupported,
+ this.supported.ui,
+ );
},
// Toggle native HTML5 media controls
@@ -35,7 +43,9 @@ const ui = {
// Don't setup interface if no support
if (!this.supported.ui) {
- this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);
+ this.debug.warn(
+ `Basic support only for ${this.provider} ${this.type}`,
+ );
// Restore native controls
ui.toggleNativeControls.call(this, true);
@@ -93,13 +103,25 @@ const ui = {
);
// Check for airplay support
- toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);
+ toggleClass(
+ this.elements.container,
+ this.config.classNames.airplay.supported,
+ support.airplay && this.isHTML5,
+ );
// Add iOS class
- toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);
+ toggleClass(
+ this.elements.container,
+ this.config.classNames.isIos,
+ browser.isIos,
+ );
// Add touch class
- toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);
+ toggleClass(
+ this.elements.container,
+ this.config.classNames.isTouch,
+ this.touch,
+ );
// Ready for API calls
this.ready = true;
@@ -149,7 +171,9 @@ const ui = {
}
// Default to media type
- const title = !is.empty(this.config.title) ? this.config.title : 'video';
+ const title = !is.empty(this.config.title)
+ ? this.config.title
+ : 'video';
const format = i18n.get('frameTitle', this.config);
iframe.setAttribute('title', format.replace('{title}', title));
@@ -158,7 +182,11 @@ const ui = {
// Toggle poster
togglePoster(enable) {
- toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);
+ toggleClass(
+ this.elements.container,
+ this.config.classNames.posterEnabled,
+ enable,
+ );
},
// Set the poster image (async)
@@ -189,7 +217,9 @@ const ui = {
.then(() => {
// Prevent race conditions
if (poster !== this.poster) {
- throw new Error('setPoster cancelled by later call to setPoster');
+ throw new Error(
+ 'setPoster cancelled by later call to setPoster',
+ );
}
})
.then(() => {
@@ -207,9 +237,21 @@ const ui = {
// Check playing state
checkPlaying(event) {
// Class hooks
- toggleClass(this.elements.container, this.config.classNames.playing, this.playing);
- toggleClass(this.elements.container, this.config.classNames.paused, this.paused);
- toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);
+ toggleClass(
+ this.elements.container,
+ this.config.classNames.playing,
+ this.playing,
+ );
+ toggleClass(
+ this.elements.container,
+ this.config.classNames.paused,
+ this.paused,
+ );
+ toggleClass(
+ this.elements.container,
+ this.config.classNames.stopped,
+ this.stopped,
+ );
// Set state
Array.from(this.elements.buttons.play || []).forEach(target => {
@@ -235,7 +277,11 @@ const ui = {
// Timer to prevent flicker when seeking
this.timers.loading = setTimeout(() => {
// Update progress bar loading class state
- toggleClass(this.elements.container, this.config.classNames.loading, this.loading);
+ toggleClass(
+ this.elements.container,
+ this.config.classNames.loading,
+ this.loading,
+ );
// Update controls visibility
ui.toggleControls.call(this);
@@ -248,7 +294,15 @@ const ui = {
if (controls && this.config.hideControls) {
// Show controls if force, loading, paused, or button interaction, otherwise hide
- this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover));
+ this.toggleControls(
+ Boolean(
+ force ||
+ this.loading ||
+ this.paused ||
+ controls.pressed ||
+ controls.hover,
+ ),
+ );
}
},
};
diff --git a/src/js/utils/animation.js b/src/js/utils/animation.js
index 95e39f03..49bc0b8c 100644
--- a/src/js/utils/animation.js
+++ b/src/js/utils/animation.js
@@ -15,7 +15,9 @@ export const transitionEndEvent = (() => {
transition: 'transitionend',
};
- const type = Object.keys(events).find(event => element.style[event] !== undefined);
+ const type = Object.keys(events).find(
+ event => element.style[event] !== undefined,
+ );
return is.string(type) ? events[type] : false;
})();
@@ -23,8 +25,12 @@ export const transitionEndEvent = (() => {
// Force repaint of element
export function repaint(element) {
setTimeout(() => {
- toggleHidden(element, true);
- element.offsetHeight; // eslint-disable-line
- toggleHidden(element, false);
+ try {
+ toggleHidden(element, true);
+ element.offsetHeight; // eslint-disable-line
+ toggleHidden(element, false);
+ } catch (e) {
+ // Do nothing
+ }
}, 0);
}
diff --git a/src/sass/components/poster.scss b/src/sass/components/poster.scss
index 9bf7398d..15e87257 100644
--- a/src/sass/components/poster.scss
+++ b/src/sass/components/poster.scss
@@ -7,17 +7,16 @@
background-position: 50% 50%;
background-repeat: no-repeat;
background-size: contain;
+ display: none;
height: 100%;
left: 0;
- opacity: 0;
+ pointer-events: none;
position: absolute;
top: 0;
- transition: opacity 0.3s ease;
width: 100%;
z-index: 1;
}
.plyr--stopped.plyr__poster-enabled .plyr__poster {
- opacity: 1;
- pointer-events: none;
+ display: block;
}
diff --git a/src/sass/components/progress.scss b/src/sass/components/progress.scss
index eddd32ab..16992808 100644
--- a/src/sass/components/progress.scss
+++ b/src/sass/components/progress.scss
@@ -3,7 +3,6 @@
// --------------------------------------------------------------
.plyr__progress {
- display: flex;
flex: 1;
left: $plyr-range-thumb-height / 2;
margin-right: $plyr-range-thumb-height;
diff --git a/src/sass/lib/mixins.scss b/src/sass/lib/mixins.scss
index 2aec702c..e6afe046 100644
--- a/src/sass/lib/mixins.scss
+++ b/src/sass/lib/mixins.scss
@@ -36,7 +36,6 @@
border: 0;
border-radius: 100%;
box-shadow: $plyr-range-thumb-shadow;
- box-sizing: border-box;
height: $plyr-range-thumb-height;
position: relative;
transition: all 0.2s ease;