From 061859da251643642dd3a1fd368257f511dbfd06 Mon Sep 17 00:00:00 2001 From: Bruno Torres Date: Fri, 8 Feb 2019 19:26:15 -0200 Subject: [PATCH] chore: bump version --- dist/clappr-chromecast-plugin.js | 77 +++++++++++++++++++----- dist/clappr-chromecast-plugin.min.js | 2 +- dist/clappr-chromecast-plugin.min.js.map | 2 +- package.json | 2 +- 4 files changed, 66 insertions(+), 17 deletions(-) diff --git a/dist/clappr-chromecast-plugin.js b/dist/clappr-chromecast-plugin.js index e9c4a11..47d70d6 100644 --- a/dist/clappr-chromecast-plugin.js +++ b/dist/clappr-chromecast-plugin.js @@ -131,7 +131,7 @@ return /******/ (function(modules) { // webpackBootstrap _createClass(ChromecastPlugin, [{ key: 'version', get: function get() { - return ("0.1.0"); + return ("0.1.1"); } }, { key: 'name', @@ -147,7 +147,8 @@ return /******/ (function(modules) { // webpackBootstrap key: 'attributes', get: function get() { return { - 'class': 'chromecast-button' + 'class': 'chromecast-button', + 'type': 'button' }; } }, { @@ -165,7 +166,12 @@ return /******/ (function(modules) { // webpackBootstrap }, { key: 'container', get: function get() { - return this.core.activeContainer; + return this.core.getCurrentContainer ? this.core.getCurrentContainer() : this.core.activeContainer; // Clappr 0.3.0 or greater + } + }, { + key: 'playback', + get: function get() { + return this.core.getCurrentPlayback ? this.core.getCurrentPlayback() : this.core.activePlayback; // Clappr 0.3.0 or greater } }], [{ key: 'Movie', @@ -185,7 +191,7 @@ return /******/ (function(modules) { // webpackBootstrap }, { key: 'version', get: function get() { - return ("0.1.0"); + return ("0.1.1"); } }]); @@ -198,7 +204,7 @@ return /******/ (function(modules) { // webpackBootstrap this.bootMaxTryCount = this.options.bootMaxTryCount || 6; // Default is 6 attempts (3 seconds) this.bootTryCount = 0; - if (_clappr.Browser.isChrome) { + if (this.isBootable()) { this.appId = this.options.appId || DEFAULT_CLAPPR_APP_ID; this.deviceState = DEVICE_STATE.IDLE; this.embedScript(); @@ -211,13 +217,43 @@ return /******/ (function(modules) { // webpackBootstrap key: 'bindEvents', value: function bindEvents() { this.listenTo(this.core.mediaControl, _clappr.Events.MEDIACONTROL_RENDERED, this.render); - this.listenTo(this.core, _clappr.Events.CORE_ACTIVE_CONTAINER_CHANGED, this.containerChanged); + + if (_clappr.Events.CORE_ACTIVE_CONTAINER_CHANGED) { + // Clappr 0.3.0 or greater + this.listenTo(this.core, _clappr.Events.CORE_ACTIVE_CONTAINER_CHANGED, this.containerChanged); + } else { + this.listenTo(this.core.mediaControl, _clappr.Events.MEDIACONTROL_CONTAINERCHANGED, this.containerChanged); + } + if (this.container) { this.listenTo(this.container, _clappr.Events.CONTAINER_TIMEUPDATE, this.containerTimeUpdate); this.listenTo(this.container, _clappr.Events.CONTAINER_PLAY, this.containerPlay); this.listenTo(this.container, _clappr.Events.CONTAINER_ENDED, this.sessionStopped); } } + }, { + key: 'isBootable', + value: function isBootable() { + // Browser must be Chrome + if (!_clappr.Browser.isChrome) { + return false; + } + + // Chrome lesser than or equals to 71 + // does not require secure page + if (_clappr.Browser.version <= 71) { + return true; + } + + // Chrome greater than or equals to 72 + // require secure page + return this.isSecure(); + } + }, { + key: 'isSecure', + value: function isSecure() { + return window.location.protocol === 'https:'; + } }, { key: 'enable', value: function enable() { @@ -350,23 +386,24 @@ return /******/ (function(modules) { // webpackBootstrap value: function loadMediaSuccess(how, mediaSession) { _clappr.Log.debug(this.name, 'new media session', mediaSession, '(', how, ')'); - this.originalPlayback = this.core.activePlayback; + this.originalPlayback = this.playback; var options = (0, _lodashAssign2['default'])({}, this.originalPlayback.options, { currentMedia: mediaSession, mediaControl: this.core.mediaControl, - poster: this.core.options.poster, + poster: this.options.poster || this.core.options.poster, settings: this.originalPlayback.settings }); this.src = this.originalPlayback.src; this.playbackProxy = new _chromecast_playback2['default'](options); this.playbackProxy.render(); + this.core.$el.addClass('chromecast-active'); this.mediaSession = mediaSession; this.originalPlayback.$el.remove(); - var container = this.core.activeContainer; + var container = this.container; container.$el.append(this.playbackProxy.$el); container.stopListening(); container.playback = this.playbackProxy; @@ -406,9 +443,10 @@ return /******/ (function(modules) { // webpackBootstrap this.mediaSession = null; } + this.core.$el.removeClass('chromecast-active'); this.core.load(this.src || this.core.options.sources); - var container = this.core.activeContainer; + var container = this.container; if (this.playbackProxy) { if (this.playbackProxy.isPlaying() || playerState === 'PAUSED') { @@ -431,7 +469,9 @@ return /******/ (function(modules) { // webpackBootstrap var mediaInfo = this.createMediaInfo(src); var request = new chrome.cast.media.LoadRequest(mediaInfo); request.autoplay = true; - request.currentTime = this.currentTime || 0; + if (this.currentTime) { + request.currentTime = this.currentTime; + } this.session.loadMedia(request, function (mediaSession) { return _this5.loadMediaSuccess('loadMedia', mediaSession); }, function (e) { @@ -474,6 +514,9 @@ return /******/ (function(modules) { // webpackBootstrap return new chrome.cast.Image(url); }); } + if (!metadata.images && this.options.poster) { + metadata.images = [new chrome.cast.Image(this.options.poster)]; + } if (!metadata.images && this.core.options.poster) { metadata.images = [new chrome.cast.Image(this.core.options.poster)]; } @@ -506,6 +549,7 @@ return /******/ (function(modules) { // webpackBootstrap value: function click() { var _this6 = this; + this.currentTime = this.container.getCurrentTime(); this.container.pause(); chrome.cast.requestSession(function (session) { return _this6.launchSuccess(session); @@ -530,7 +574,6 @@ return /******/ (function(modules) { // webpackBootstrap value: function containerChanged() { this.stopListening(); this.bindEvents(); - this.currentTime = 0; } }, { key: 'containerTimeUpdate', @@ -542,7 +585,6 @@ return /******/ (function(modules) { // webpackBootstrap value: function containerPlay() { if (this.session && (!this.mediaSession || this.mediaSession.playerState === 'IDLE' || this.mediaSession.playerState === 'PAUSED')) { _clappr.Log.debug(this.name, 'load media'); - this.currentTime = this.currentTime || 0; this.loadMedia(); } } @@ -685,6 +727,9 @@ return /******/ (function(modules) { // webpackBootstrap value: function pause() { this.stopTimer(); this.currentMedia.pause(); + if (this.getPlaybackType() === _clappr.Playback.LIVE) { + this.trigger(_clappr.Events.PLAYBACK_DVR, true); + } } }, { key: 'stop', @@ -705,6 +750,10 @@ return /******/ (function(modules) { // webpackBootstrap }, function () { return _clappr.Log.warn('seek failed'); }); + if (this.getPlaybackType() === _clappr.Playback.LIVE) { + // assume live if time within 30 seconds of end of live stream + this.trigger(_clappr.Events.PLAYBACK_DVR, time < this.getDuration() - 30); + } } }, { key: 'seekPercentage', @@ -742,7 +791,7 @@ return /******/ (function(modules) { // webpackBootstrap }, { key: 'getPlaybackType', value: function getPlaybackType() { - return this.currentMedia.streamType == 'LIVE' ? _clappr.Playback.LIVE : _clappr.Playback.VOD; + return !!this.currentMedia.liveSeekableRange ? _clappr.Playback.LIVE : _clappr.Playback.VOD; } }, { key: 'onMediaStatusUpdate', diff --git a/dist/clappr-chromecast-plugin.min.js b/dist/clappr-chromecast-plugin.min.js index 0f97a0c..a52b889 100644 --- a/dist/clappr-chromecast-plugin.min.js +++ b/dist/clappr-chromecast-plugin.min.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("clappr")):"function"==typeof define&&define.amd?define(["clappr"],e):"object"==typeof exports?exports.ChromecastPlugin=e(require("clappr")):t.ChromecastPlugin=e(t.Clappr)}(this,function(t){return function(t){function e(i){if(n[i])return n[i].exports;var r=n[i]={exports:{},id:i,loaded:!1};return t[i].call(r.exports,r,r.exports,e),r.loaded=!0,r.exports}var n={};return e.m=t,e.c=n,e.p="/",e(0)}([function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){for(var n=0;nthis.bootMaxTryCount?(this.bootTryCount=0,c.Log.warn("GCastApi bootstrap timeout"),void this.disable()):void(window.chrome?(this.bootTryCount=0,window.chrome.cast&&window.chrome.cast.isAvailable?(this.appId=this.appId||C,this.initializeCastApi()):window.__onGCastApiAvailable=function(e,n){e?(t.appId=t.appId||C,t.initializeCastApi()):(c.Log.warn("GCastApi error",n),t.disable())}):setTimeout(function(){t.bootstrapCastApi()},this.bootTryDelay))}},{key:"initializeCastApi",value:function(){var t=this,e=chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED,n=new chrome.cast.SessionRequest(this.appId),i=new chrome.cast.ApiConfig(n,function(e){return t.sessionListener(e)},function(e){return t.receiverListener(e)},e);chrome.cast.initialize(i,function(){return c.Log.debug(t.name,"init success")},function(){return c.Log.warn(t.name,"init error")})}},{key:"sessionListener",value:function(t){c.Log.debug(this.name,"new session id:"+t.sessionId),this.newSession(t)}},{key:"sessionUpdateListener",value:function(){this.session&&(c.Log.debug(this.name,this.session.status),this.session.status===chrome.cast.SessionStatus.STOPPED&&(this.sessionStopped(),this.session=null))}},{key:"receiverListener",value:function(t){t===chrome.cast.ReceiverAvailability.AVAILABLE?(c.Log.debug(this.name,"receiver found"),this.show()):(c.Log.debug(this.name,"receiver list empty"),this.hide())}},{key:"launchSuccess",value:function(t){this.renderConnected(),clearInterval(this.connectAnimInterval),this.core.mediaControl.resetKeepVisible(),c.Log.debug(this.name,"launch success - session: "+t.sessionId),this.newSession(t)}},{key:"launchError",value:function(t){c.Log.debug(this.name,"error on launch",t),this.renderDisconnected(),clearInterval(this.connectAnimInterval),this.core.mediaControl.resetKeepVisible(),this.container.play()}},{key:"loadMediaSuccess",value:function(t,e){c.Log.debug(this.name,"new media session",e,"(",t,")"),this.originalPlayback=this.core.activePlayback;var n=(0,f.default)({},this.originalPlayback.options,{currentMedia:e,mediaControl:this.core.mediaControl,poster:this.core.options.poster,settings:this.originalPlayback.settings});this.src=this.originalPlayback.src,this.playbackProxy=new l.default(n),this.playbackProxy.render(),this.mediaSession=e,this.originalPlayback.$el.remove();var i=this.core.activeContainer;i.$el.append(this.playbackProxy.$el),i.stopListening(),i.playback=this.playbackProxy,i.bindEvents(),i.settingsUpdate()}},{key:"loadMediaError",value:function(t){c.Log.warn(this.name,"media error",t)}},{key:"newSession",value:function(t){var e=this;this.session=t,this.deviceState=_.ACTIVE,this.renderConnected(),t.addUpdateListener(function(){return e.sessionUpdateListener()}),this.containerPlay()}},{key:"sessionStopped",value:function(){this.renderDisconnected();var t=this.currentTime,e=void 0;this.mediaSession&&(e=this.mediaSession.playerState,this.mediaSession=null),this.core.load(this.src||this.core.options.sources);var n=this.core.activeContainer;this.playbackProxy&&((this.playbackProxy.isPlaying()||"PAUSED"===e)&&n.once(c.Events.CONTAINER_READY,function(){n.play(),n.playback.seek(100*t/n.getDuration())}),this.playbackProxy.stop())}},{key:"loadMedia",value:function(){var t=this;this.container.pause();var e=this.container.options.src;c.Log.debug(this.name,"loading... "+e);var n=this.createMediaInfo(e),i=new chrome.cast.media.LoadRequest(n);i.autoplay=!0,i.currentTime=this.currentTime||0,this.session.loadMedia(i,function(e){return t.loadMediaSuccess("loadMedia",e)},function(e){return t.loadMediaError(e)})}},{key:"createMediaInfo",value:function(t){var n=e.mimeTypeFor(t),i=new chrome.cast.media.MediaInfo(t);i.contentType=this.options.contentType||n,i.customData=this.options.customData;var r=this.createMediaMetadata();return i.metadata=r,i}},{key:"createMediaMetadata",value:function(){this.options.media||(this.options.media={});var t=this.options.media.type,n=this.createCastMediaMetadata(t);return n.title=this.options.media.title,n.subtitle=this.options.media.subtitle,n.releaseDate=this.options.media.releaseDate,t===e.TvShow?(n.episode=this.options.media.episode,n.originalAirdate=this.options.media.originalAirdate,n.season=this.options.media.season,n.seriesTitle=this.options.media.seriesTitle):t===e.Movie&&(n.studio=this.options.media.studio),this.options.media.images&&(n.images=this.options.media.images.map(function(t){return new chrome.cast.Image(t)})),!n.images&&this.core.options.poster&&(n.images=[new chrome.cast.Image(this.core.options.poster)]),n}},{key:"createCastMediaMetadata",value:function(t){switch(t){case e.Movie:return new chrome.cast.media.MovieMediaMetadata;case e.TvShow:return new chrome.cast.media.TvShowMediaMetadata;default:return new chrome.cast.media.GenericMediaMetadata}}},{key:"show",value:function(){this.$el.show()}},{key:"hide",value:function(){this.$el.hide()}},{key:"click",value:function(){var t=this;this.container.pause(),chrome.cast.requestSession(function(e){return t.launchSuccess(e)},function(e){return t.launchError(e)}),this.session||!function(){var e=0,n=[m.default,k.default,M.default];clearInterval(t.connectAnimInterval),t.connectAnimInterval=setInterval(function(){t.$el.html(n[e]),e=(e+1)%3},600),t.core.mediaControl.setKeepVisible()}()}},{key:"containerChanged",value:function(){this.stopListening(),this.bindEvents(),this.currentTime=0}},{key:"containerTimeUpdate",value:function(t){this.currentTime=t.current}},{key:"containerPlay",value:function(){!this.session||this.mediaSession&&"IDLE"!==this.mediaSession.playerState&&"PAUSED"!==this.mediaSession.playerState||(c.Log.debug(this.name,"load media"),this.currentTime=this.currentTime||0,this.loadMedia())}},{key:"renderConnected",value:function(){this.$el.html(E.default)}},{key:"renderDisconnected",value:function(){this.$el.html(y.default)}},{key:"render",value:function(){return this.session?this.renderConnected():this.renderDisconnected(),this.core.mediaControl.$el.find(".media-control-right-panel[data-media-control]").append(this.$el),this.$style&&this.$style.remove(),this.$style=c.Styler.getStyleFor(p.default,{baseUrl:this.core.options.baseUrl}),this.core.$el.append(this.$style),this}}],[{key:"mimeTypeFor",value:function(t){var e=(t.split("?")[0].match(/.*\.(.*)$/)||[])[1];return A[e]?A[e]:t.indexOf(".ism")>-1?"application/vnd.ms-sstr+xml":void 0}}]),e}(c.UICorePlugin);e.default=x,t.exports=e.default},function(e,n){e.exports=t},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){for(var n=0;n=0&&t<=100){var e=this.getDuration();this.seek(t*e/100)}}},{key:"startTimer",value:function(){var t=this;this.timer=setInterval(function(){return t.updateMediaControl()},h)}},{key:"stopTimer",value:function(){clearInterval(this.timer),this.timer=null}},{key:"getDuration",value:function(){return this.currentMedia.media.duration}},{key:"isPlaying",value:function(){return"PLAYING"===this.currentMedia.playerState||"BUFFERING"===this.currentMedia.playerState}},{key:"getPlaybackType",value:function(){return"LIVE"==this.currentMedia.streamType?c.Playback.LIVE:c.Playback.VOD}},{key:"onMediaStatusUpdate",value:function(){this.mediaControl.changeTogglePlay(),this.isPlaying()&&!this.timer&&this.startTimer(),"BUFFERING"===this.currentMedia.playerState?(this.isBuffering=!0,this.trigger(c.Events.PLAYBACK_BUFFERING,this.name)):"PLAYING"===this.currentMedia.playerState?(this.isBuffering&&(this.isBuffering=!1,this.trigger(c.Events.PLAYBACK_BUFFERFULL,this.name)),this.prevState!==this.currentMedia.playerState&&this.trigger(c.Events.PLAYBACK_PLAY,this.name)):"IDLE"===this.currentMedia.playerState?(this.isBuffering&&(this.isBuffering=!1,this.trigger(c.Events.PLAYBACK_BUFFERFULL,this.name)),this.trigger(c.Events.PLAYBACK_ENDED,this.name)):"PAUSED"===this.currentMedia.playerState&&this.prevState!==this.currentMedia.playerState&&this.trigger(c.Events.PLAYBACK_PAUSE,this.name),this.prevState=this.currentMedia.playerState}},{key:"updateMediaControl",value:function(){var t=this.currentMedia.getEstimatedTime(),e=this.currentMedia.media.duration;this.trigger(c.Events.PLAYBACK_TIMEUPDATE,{current:t,total:e},this.name)}},{key:"show",value:function(){this.$el.show()}},{key:"hide",value:function(){this.$el.hide()}}]),e}(c.Playback);e.default=p,t.exports=e.default},function(t,e){t.exports="
"},function(t,e,n){e=t.exports=n(5)(),e.push([t.id,".chromecast-playback{height:100%;width:100%}.chromecast-playback .chromecast-playback-background,.chromecast-playback .chromecast-playback-overlay{position:absolute;height:100%;width:100%}.chromecast-playback .chromecast-playback-background{background-size:contain}.chromecast-playback .chromecast-playback-overlay{background-color:#000;opacity:.4}.chromecast-button{background:transparent;border:0;width:32px;height:32px;font-size:22px;line-height:32px;letter-spacing:0;margin:0 6px;color:#fff;opacity:.5;vertical-align:middle;text-align:left;cursor:pointer;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transition:all .1s ease}.chromecast-button:hover{opacity:.75;text-shadow:hsla(0,0%,100%,.8) 0 0 5px}.chromecast-button:focus{outline:none}.chromecast-button svg{width:24px;height:24px}.chromecast-button svg #cast,.chromecast-button svg #cast-on,.chromecast-button svg #Path{fill:#fff;stroke:#fff;stroke-width:.5px}",""])},function(t,e){t.exports=function(){var t=[];return t.toString=function(){for(var t=[],e=0;e-1&&t%1==0&&t-1&&t%1==0&&t<=g}function s(t){for(var e=u(t),n=e.length,i=n&&t.length,r=!!i&&a(i)&&(p(t)||h(t)),s=-1,c=[];++s0;++i-1&&t%1==0&&t<=u}function s(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function c(t){return!!t&&"object"==typeof t}var u=9007199254740991,l="[object Arguments]",h="[object Function]",p="[object GeneratorFunction]",d=Object.prototype,f=d.hasOwnProperty,v=d.toString,y=d.propertyIsEnumerable;t.exports=n},function(t,e){function n(t){return!!t&&"object"==typeof t}function i(t,e){var n=null==t?void 0:t[e];return s(n)?n:void 0}function r(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=g}function o(t){return a(t)&&f.call(t)==u}function a(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function s(t){return null!=t&&(o(t)?v.test(p.call(t)):n(t)&&l.test(t))}var c="[object Array]",u="[object Function]",l=/^\[object .+?Constructor\]$/,h=Object.prototype,p=Function.prototype.toString,d=h.hasOwnProperty,f=h.toString,v=RegExp("^"+p.call(d).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),y=i(Array,"isArray"),g=9007199254740991,m=y||function(t){return n(t)&&r(t.length)&&f.call(t)==c};t.exports=m},function(t,e,n){function i(t){return a(function(e,n){var i=-1,a=null==e?0:n.length,s=a>2?n[a-2]:void 0,c=a>2?n[2]:void 0,u=a>1?n[a-1]:void 0;for("function"==typeof s?(s=r(s,u,5),a-=2):(s="function"==typeof u?u:void 0,a-=s?1:0),c&&o(n[0],n[1],c)&&(s=a<3?void 0:s,a=1);++i-1&&t%1==0&&t-1&&t%1==0&&t<=u}function s(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}var c=/^\d+$/,u=9007199254740991,l=n("length");t.exports=o},function(t,e){function n(t,e){if("function"!=typeof t)throw new TypeError(i);return e=r(void 0===e?t.length-1:+e||0,0),function(){for(var n=arguments,i=-1,o=r(n.length-e,0),a=Array(o);++i'},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''}])}); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("clappr")):"function"==typeof define&&define.amd?define(["clappr"],e):"object"==typeof exports?exports.ChromecastPlugin=e(require("clappr")):t.ChromecastPlugin=e(t.Clappr)}(this,function(t){return function(t){function e(i){if(n[i])return n[i].exports;var r=n[i]={exports:{},id:i,loaded:!1};return t[i].call(r.exports,r,r.exports,e),r.loaded=!0,r.exports}var n={};return e.m=t,e.c=n,e.p="/",e(0)}([function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){for(var n=0;nthis.bootMaxTryCount?(this.bootTryCount=0,c.Log.warn("GCastApi bootstrap timeout"),void this.disable()):void(window.chrome?(this.bootTryCount=0,window.chrome.cast&&window.chrome.cast.isAvailable?(this.appId=this.appId||A,this.initializeCastApi()):window.__onGCastApiAvailable=function(e,n){e?(t.appId=t.appId||A,t.initializeCastApi()):(c.Log.warn("GCastApi error",n),t.disable())}):setTimeout(function(){t.bootstrapCastApi()},this.bootTryDelay))}},{key:"initializeCastApi",value:function(){var t=this,e=chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED,n=new chrome.cast.SessionRequest(this.appId),i=new chrome.cast.ApiConfig(n,function(e){return t.sessionListener(e)},function(e){return t.receiverListener(e)},e);chrome.cast.initialize(i,function(){return c.Log.debug(t.name,"init success")},function(){return c.Log.warn(t.name,"init error")})}},{key:"sessionListener",value:function(t){c.Log.debug(this.name,"new session id:"+t.sessionId),this.newSession(t)}},{key:"sessionUpdateListener",value:function(){this.session&&(c.Log.debug(this.name,this.session.status),this.session.status===chrome.cast.SessionStatus.STOPPED&&(this.sessionStopped(),this.session=null))}},{key:"receiverListener",value:function(t){t===chrome.cast.ReceiverAvailability.AVAILABLE?(c.Log.debug(this.name,"receiver found"),this.show()):(c.Log.debug(this.name,"receiver list empty"),this.hide())}},{key:"launchSuccess",value:function(t){this.renderConnected(),clearInterval(this.connectAnimInterval),this.core.mediaControl.resetKeepVisible(),c.Log.debug(this.name,"launch success - session: "+t.sessionId),this.newSession(t)}},{key:"launchError",value:function(t){c.Log.debug(this.name,"error on launch",t),this.renderDisconnected(),clearInterval(this.connectAnimInterval),this.core.mediaControl.resetKeepVisible(),this.container.play()}},{key:"loadMediaSuccess",value:function(t,e){c.Log.debug(this.name,"new media session",e,"(",t,")"),this.originalPlayback=this.playback;var n=(0,f.default)({},this.originalPlayback.options,{currentMedia:e,mediaControl:this.core.mediaControl,poster:this.options.poster||this.core.options.poster,settings:this.originalPlayback.settings});this.src=this.originalPlayback.src,this.playbackProxy=new l.default(n),this.playbackProxy.render(),this.core.$el.addClass("chromecast-active"),this.mediaSession=e,this.originalPlayback.$el.remove();var i=this.container;i.$el.append(this.playbackProxy.$el),i.stopListening(),i.playback=this.playbackProxy,i.bindEvents(),i.settingsUpdate()}},{key:"loadMediaError",value:function(t){c.Log.warn(this.name,"media error",t)}},{key:"newSession",value:function(t){var e=this;this.session=t,this.deviceState=E.ACTIVE,this.renderConnected(),t.addUpdateListener(function(){return e.sessionUpdateListener()}),this.containerPlay()}},{key:"sessionStopped",value:function(){this.renderDisconnected();var t=this.currentTime,e=void 0;this.mediaSession&&(e=this.mediaSession.playerState,this.mediaSession=null),this.core.$el.removeClass("chromecast-active"),this.core.load(this.src||this.core.options.sources);var n=this.container;this.playbackProxy&&((this.playbackProxy.isPlaying()||"PAUSED"===e)&&n.once(c.Events.CONTAINER_READY,function(){n.play(),n.playback.seek(100*t/n.getDuration())}),this.playbackProxy.stop())}},{key:"loadMedia",value:function(){var t=this;this.container.pause();var e=this.container.options.src;c.Log.debug(this.name,"loading... "+e);var n=this.createMediaInfo(e),i=new chrome.cast.media.LoadRequest(n);i.autoplay=!0,this.currentTime&&(i.currentTime=this.currentTime),this.session.loadMedia(i,function(e){return t.loadMediaSuccess("loadMedia",e)},function(e){return t.loadMediaError(e)})}},{key:"createMediaInfo",value:function(t){var n=e.mimeTypeFor(t),i=new chrome.cast.media.MediaInfo(t);i.contentType=this.options.contentType||n,i.customData=this.options.customData;var r=this.createMediaMetadata();return i.metadata=r,i}},{key:"createMediaMetadata",value:function(){this.options.media||(this.options.media={});var t=this.options.media.type,n=this.createCastMediaMetadata(t);return n.title=this.options.media.title,n.subtitle=this.options.media.subtitle,n.releaseDate=this.options.media.releaseDate,t===e.TvShow?(n.episode=this.options.media.episode,n.originalAirdate=this.options.media.originalAirdate,n.season=this.options.media.season,n.seriesTitle=this.options.media.seriesTitle):t===e.Movie&&(n.studio=this.options.media.studio),this.options.media.images&&(n.images=this.options.media.images.map(function(t){return new chrome.cast.Image(t)})),!n.images&&this.options.poster&&(n.images=[new chrome.cast.Image(this.options.poster)]),!n.images&&this.core.options.poster&&(n.images=[new chrome.cast.Image(this.core.options.poster)]),n}},{key:"createCastMediaMetadata",value:function(t){switch(t){case e.Movie:return new chrome.cast.media.MovieMediaMetadata;case e.TvShow:return new chrome.cast.media.TvShowMediaMetadata;default:return new chrome.cast.media.GenericMediaMetadata}}},{key:"show",value:function(){this.$el.show()}},{key:"hide",value:function(){this.$el.hide()}},{key:"click",value:function(){var t=this;this.currentTime=this.container.getCurrentTime(),this.container.pause(),chrome.cast.requestSession(function(e){return t.launchSuccess(e)},function(e){return t.launchError(e)}),this.session||!function(){var e=0,n=[m.default,k.default,P.default];clearInterval(t.connectAnimInterval),t.connectAnimInterval=setInterval(function(){t.$el.html(n[e]),e=(e+1)%3},600),t.core.mediaControl.setKeepVisible()}()}},{key:"containerChanged",value:function(){this.stopListening(),this.bindEvents()}},{key:"containerTimeUpdate",value:function(t){this.currentTime=t.current}},{key:"containerPlay",value:function(){!this.session||this.mediaSession&&"IDLE"!==this.mediaSession.playerState&&"PAUSED"!==this.mediaSession.playerState||(c.Log.debug(this.name,"load media"),this.loadMedia())}},{key:"renderConnected",value:function(){this.$el.html(M.default)}},{key:"renderDisconnected",value:function(){this.$el.html(g.default)}},{key:"render",value:function(){return this.session?this.renderConnected():this.renderDisconnected(),this.core.mediaControl.$el.find(".media-control-right-panel[data-media-control]").append(this.$el),this.$style&&this.$style.remove(),this.$style=c.Styler.getStyleFor(p.default,{baseUrl:this.core.options.baseUrl}),this.core.$el.append(this.$style),this}}],[{key:"mimeTypeFor",value:function(t){var e=(t.split("?")[0].match(/.*\.(.*)$/)||[])[1];return _[e]?_[e]:t.indexOf(".ism")>-1?"application/vnd.ms-sstr+xml":void 0}}]),e}(c.UICorePlugin);e.default=T,t.exports=e.default},function(e,n){e.exports=t},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){for(var n=0;n=0&&t<=100){var e=this.getDuration();this.seek(t*e/100)}}},{key:"startTimer",value:function(){var t=this;this.timer=setInterval(function(){return t.updateMediaControl()},h)}},{key:"stopTimer",value:function(){clearInterval(this.timer),this.timer=null}},{key:"getDuration",value:function(){return this.currentMedia.media.duration}},{key:"isPlaying",value:function(){return"PLAYING"===this.currentMedia.playerState||"BUFFERING"===this.currentMedia.playerState}},{key:"getPlaybackType",value:function(){return this.currentMedia.liveSeekableRange?c.Playback.LIVE:c.Playback.VOD}},{key:"onMediaStatusUpdate",value:function(){this.mediaControl.changeTogglePlay(),this.isPlaying()&&!this.timer&&this.startTimer(),"BUFFERING"===this.currentMedia.playerState?(this.isBuffering=!0,this.trigger(c.Events.PLAYBACK_BUFFERING,this.name)):"PLAYING"===this.currentMedia.playerState?(this.isBuffering&&(this.isBuffering=!1,this.trigger(c.Events.PLAYBACK_BUFFERFULL,this.name)),this.prevState!==this.currentMedia.playerState&&this.trigger(c.Events.PLAYBACK_PLAY,this.name)):"IDLE"===this.currentMedia.playerState?(this.isBuffering&&(this.isBuffering=!1,this.trigger(c.Events.PLAYBACK_BUFFERFULL,this.name)),this.trigger(c.Events.PLAYBACK_ENDED,this.name)):"PAUSED"===this.currentMedia.playerState&&this.prevState!==this.currentMedia.playerState&&this.trigger(c.Events.PLAYBACK_PAUSE,this.name),this.prevState=this.currentMedia.playerState}},{key:"updateMediaControl",value:function(){var t=this.currentMedia.getEstimatedTime(),e=this.currentMedia.media.duration;this.trigger(c.Events.PLAYBACK_TIMEUPDATE,{current:t,total:e},this.name)}},{key:"show",value:function(){this.$el.show()}},{key:"hide",value:function(){this.$el.hide()}}]),e}(c.Playback);e.default=p,t.exports=e.default},function(t,e){t.exports="
"},function(t,e,n){e=t.exports=n(5)(),e.push([t.id,".chromecast-playback{height:100%;width:100%}.chromecast-playback .chromecast-playback-background,.chromecast-playback .chromecast-playback-overlay{position:absolute;height:100%;width:100%}.chromecast-playback .chromecast-playback-background{background-size:contain}.chromecast-playback .chromecast-playback-overlay{background-color:#000;opacity:.4}.chromecast-button{background:transparent;border:0;width:32px;height:32px;font-size:22px;line-height:32px;letter-spacing:0;margin:0 6px;color:#fff;opacity:.5;vertical-align:middle;text-align:left;cursor:pointer;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transition:all .1s ease}.chromecast-button:hover{opacity:.75;text-shadow:hsla(0,0%,100%,.8) 0 0 5px}.chromecast-button:focus{outline:none}.chromecast-button svg{width:24px;height:24px}.chromecast-button svg #cast,.chromecast-button svg #cast-on,.chromecast-button svg #Path{fill:#fff;stroke:#fff;stroke-width:.5px}",""])},function(t,e){t.exports=function(){var t=[];return t.toString=function(){for(var t=[],e=0;e-1&&t%1==0&&t-1&&t%1==0&&t<=y}function s(t){for(var e=u(t),n=e.length,i=n&&t.length,r=!!i&&a(i)&&(p(t)||h(t)),s=-1,c=[];++s0;++i-1&&t%1==0&&t<=u}function s(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function c(t){return!!t&&"object"==typeof t}var u=9007199254740991,l="[object Arguments]",h="[object Function]",p="[object GeneratorFunction]",d=Object.prototype,f=d.hasOwnProperty,v=d.toString,g=d.propertyIsEnumerable;t.exports=n},function(t,e){function n(t){return!!t&&"object"==typeof t}function i(t,e){var n=null==t?void 0:t[e];return s(n)?n:void 0}function r(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=y}function o(t){return a(t)&&f.call(t)==u}function a(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function s(t){return null!=t&&(o(t)?v.test(p.call(t)):n(t)&&l.test(t))}var c="[object Array]",u="[object Function]",l=/^\[object .+?Constructor\]$/,h=Object.prototype,p=Function.prototype.toString,d=h.hasOwnProperty,f=h.toString,v=RegExp("^"+p.call(d).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),g=i(Array,"isArray"),y=9007199254740991,m=g||function(t){return n(t)&&r(t.length)&&f.call(t)==c};t.exports=m},function(t,e,n){function i(t){return a(function(e,n){var i=-1,a=null==e?0:n.length,s=a>2?n[a-2]:void 0,c=a>2?n[2]:void 0,u=a>1?n[a-1]:void 0;for("function"==typeof s?(s=r(s,u,5),a-=2):(s="function"==typeof u?u:void 0,a-=s?1:0),c&&o(n[0],n[1],c)&&(s=a<3?void 0:s,a=1);++i-1&&t%1==0&&t-1&&t%1==0&&t<=u}function s(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}var c=/^\d+$/,u=9007199254740991,l=n("length");t.exports=o},function(t,e){function n(t,e){if("function"!=typeof t)throw new TypeError(i);return e=r(void 0===e?t.length-1:+e||0,0),function(){for(var n=arguments,i=-1,o=r(n.length-e,0),a=Array(o);++i'},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''}])}); //# sourceMappingURL=clappr-chromecast-plugin.min.js.map \ No newline at end of file diff --git a/dist/clappr-chromecast-plugin.min.js.map b/dist/clappr-chromecast-plugin.min.js.map index 04316ee..4dd2fe2 100644 --- a/dist/clappr-chromecast-plugin.min.js.map +++ b/dist/clappr-chromecast-plugin.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///clappr-chromecast-plugin.min.js","webpack:///webpack/bootstrap c888eeef53c884680cd6","webpack:///./src/chromecast.js","webpack:///external {\"amd\":\"clappr\",\"commonjs\":\"clappr\",\"commonjs2\":\"clappr\",\"root\":\"Clappr\"}","webpack:///./src/chromecast_playback.js","webpack:///./src/public/chromecast.html","webpack:///./src/public/style.scss","webpack:///./~/css-loader/lib/css-base.js","webpack:///./~/lodash.assign/index.js","webpack:///./~/lodash._baseassign/index.js","webpack:///./~/lodash._basecopy/index.js","webpack:///./~/lodash.keys/index.js","webpack:///./~/lodash._getnative/index.js","webpack:///./~/lodash.isarguments/index.js","webpack:///./~/lodash.isarray/index.js","webpack:///./~/lodash._createassigner/index.js","webpack:///./~/lodash._bindcallback/index.js","webpack:///./~/lodash._isiterateecall/index.js","webpack:///./~/lodash.restparam/index.js","webpack:///./src/public/ic_cast_24dp.svg","webpack:///./src/public/ic_cast0_24dp.svg","webpack:///./src/public/ic_cast1_24dp.svg","webpack:///./src/public/ic_cast2_24dp.svg","webpack:///./src/public/ic_cast_connected_24dp.svg"],"names":["root","factory","exports","module","require","define","amd","ChromecastPlugin","Clappr","this","__WEBPACK_EXTERNAL_MODULE_1__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_interopRequireDefault","obj","__esModule","default","_classCallCheck","instance","Constructor","TypeError","_inherits","subClass","superClass","prototype","Object","create","constructor","value","enumerable","writable","configurable","setPrototypeOf","__proto__","defineProperty","_createClass","defineProperties","target","props","i","length","descriptor","key","protoProps","staticProps","_get","_x","_x2","_x3","_again","object","property","receiver","Function","desc","getOwnPropertyDescriptor","undefined","getter","get","parent","getPrototypeOf","_clappr","_chromecast_playback","_chromecast_playback2","_publicStyleScss","_publicStyleScss2","_lodashAssign","_lodashAssign2","_publicIc_cast_24dpSvg","_publicIc_cast_24dpSvg2","_publicIc_cast0_24dpSvg","_publicIc_cast0_24dpSvg2","_publicIc_cast1_24dpSvg","_publicIc_cast1_24dpSvg2","_publicIc_cast2_24dpSvg","_publicIc_cast2_24dpSvg2","_publicIc_cast_connected_24dpSvg","_publicIc_cast_connected_24dpSvg2","DEVICE_STATE","IDLE","ACTIVE","WARNING","ERROR","DEFAULT_CLAPPR_APP_ID","MIMETYPES","mp4","ogg","3gpp","webm","mkv","m3u8","mpd","ogv","_UICorePlugin","core","bootTryDelay","options","bootMaxTryCount","bootTryCount","Browser","isChrome","appId","deviceState","embedScript","disable","class","click","chromecast","activeContainer","listenTo","mediaControl","Events","MEDIACONTROL_RENDERED","render","CORE_ACTIVE_CONTAINER_CHANGED","containerChanged","container","CONTAINER_TIMEUPDATE","containerTimeUpdate","CONTAINER_PLAY","containerPlay","CONTAINER_ENDED","sessionStopped","_this","window","chrome","cast","isAvailable","bootstrapCastApi","script","document","createElement","setAttribute","onload","body","appendChild","_this2","Log","warn","initializeCastApi","__onGCastApiAvailable","errorInfo","setTimeout","_this3","autoJoinPolicy","AutoJoinPolicy","ORIGIN_SCOPED","sessionRequest","SessionRequest","apiConfig","ApiConfig","session","sessionListener","e","receiverListener","initialize","debug","name","sessionId","newSession","status","SessionStatus","STOPPED","ReceiverAvailability","AVAILABLE","show","hide","renderConnected","clearInterval","connectAnimInterval","resetKeepVisible","renderDisconnected","play","how","mediaSession","originalPlayback","activePlayback","currentMedia","poster","settings","src","playbackProxy","$el","remove","append","stopListening","playback","bindEvents","settingsUpdate","_this4","addUpdateListener","sessionUpdateListener","time","currentTime","playerState","load","sources","isPlaying","once","CONTAINER_READY","seek","getDuration","stop","_this5","pause","mediaInfo","createMediaInfo","request","media","LoadRequest","autoplay","loadMedia","loadMediaSuccess","loadMediaError","mimeType","mimeTypeFor","MediaInfo","contentType","customData","metadata","createMediaMetadata","type","createCastMediaMetadata","title","subtitle","releaseDate","TvShow","episode","originalAirdate","season","seriesTitle","Movie","studio","images","map","url","Image","MovieMediaMetadata","TvShowMediaMetadata","GenericMediaMetadata","_this6","requestSession","launchSuccess","launchError","position","connectingIcons","setInterval","html","setKeepVisible","timeProgress","current","find","$style","Styler","getStyleFor","baseUrl","srcUrl","extension","split","match","indexOf","UICorePlugin","_publicChromecastHtml","_publicChromecastHtml2","TICK_INTERVAL","ChromecastPlayback","_Playback","onMediaStatusUpdate","noVolume","filter","left","right","template","$","css","stopTimer","SeekRequest","startTimer","percentage","duration","timer","updateMediaControl","streamType","Playback","LIVE","VOD","changeTogglePlay","isBuffering","trigger","PLAYBACK_BUFFERING","PLAYBACK_BUFFERFULL","prevState","PLAYBACK_PLAY","PLAYBACK_ENDED","PLAYBACK_PAUSE","getEstimatedTime","PLAYBACK_TIMEUPDATE","total","push","list","toString","result","item","join","mediaQuery","alreadyImportedModules","assignWith","source","customizer","index","keys","baseAssign","createAssigner","assign","baseCopy","baseProperty","isArrayLike","isLength","getLength","isIndex","reIsUint","test","MAX_SAFE_INTEGER","shimKeys","keysIn","propsLength","allowIndexes","isArray","isArguments","hasOwnProperty","isObject","Ctor","isProto","Array","skipIndexes","getNative","objectProto","nativeKeys","isObjectLike","isNative","isFunction","objToString","funcTag","reIsNative","fnToString","reIsHostCtor","RegExp","replace","isArrayLikeObject","propertyIsEnumerable","objectToString","argsTag","tag","genTag","arrayTag","nativeIsArray","assigner","restParam","guard","thisArg","bindCallback","isIterateeCall","func","argCount","identity","collection","accumulator","other","apply","arguments","start","FUNC_ERROR_TEXT","nativeMax","args","rest","otherArgs","Math","max"],"mappings":"CAAA,SAAAA,EAAAC,GACA,gBAAAC,UAAA,gBAAAC,QACAA,OAAAD,QAAAD,EAAAG,QAAA,WACA,kBAAAC,gBAAAC,IACAD,QAAA,UAAAJ,GACA,gBAAAC,SACAA,QAAAK,iBAAAN,EAAAG,QAAA,WAEAJ,EAAAO,iBAAAN,EAAAD,EAAAQ,SACCC,KAAA,SAAAC,GACD,MCAgB,UAAUC,GCN1B,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAX,OAGA,IAAAC,GAAAW,EAAAD,IACAX,WACAa,GAAAF,EACAG,UAUA,OANAL,GAAAE,GAAAI,KAAAd,EAAAD,QAAAC,IAAAD,QAAAU,GAGAT,EAAAa,UAGAb,EAAAD,QAvBA,GAAAY,KAqCA,OATAF,GAAAM,EAAAP,EAGAC,EAAAO,EAAAL,EAGAF,EAAAQ,EAAA,IAGAR,EAAA,KDmBM,SAAUT,EAAQD,EAASU,GAEhC,YAUA,SAASS,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAEzF,QAASG,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIH,WAAU,iEAAoEG,GAAeD,GAASE,UAAYC,OAAOC,OAAOH,GAAcA,EAAWC,WAAaG,aAAeC,MAAON,EAAUO,cAAmBC,YAAgBC,mBAA6BR,IAAYE,OAAOO,eAAiBP,OAAOO,eAAeV,EAAUC,GAAcD,EAASW,UAAYV,GAZjeE,OAAOS,eAAexC,EAAS,cAC7BkC,UAGF,IAAIO,GAAe,WAAe,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIC,GAAI,EAAGA,EAAID,EAAME,OAAQD,IAAK,CAAE,GAAIE,GAAaH,EAAMC,EAAIE,GAAWZ,WAAaY,EAAWZ,eAAqBY,EAAWV,gBAAyB,SAAWU,KAAYA,EAAWX,aAAiBL,OAAOS,eAAeG,EAAQI,EAAWC,IAAKD,IAAiB,MAAO,UAAUtB,EAAawB,EAAYC,GAAiJ,MAA9HD,IAAYP,EAAiBjB,EAAYK,UAAWmB,GAAiBC,GAAaR,EAAiBjB,EAAayB,GAAqBzB,MAE7hB0B,EAAO,SAAaC,EAAIC,EAAKC,GAAqC,IAA9B,GAAIC,MAAiCA,GAAQ,CAAE,GAAIC,GAASJ,EAAIK,EAAWJ,EAAKK,EAAWJ,CAAKC,MAA+B,OAAXC,IAAiBA,EAASG,SAAS7B,UAAW,IAAI8B,GAAO7B,OAAO8B,yBAAyBL,EAAQC,EAAW,IAAaK,SAATF,EAAJ,CAA4O,GAAI,SAAWA,GAAQ,MAAOA,GAAK1B,KAAgB,IAAI6B,GAASH,EAAKI,GAAK,IAAeF,SAAXC,EAAwB,MAAoB,OAAOA,GAAOhD,KAAK2C,GAA/V,GAAIO,GAASlC,OAAOmC,eAAeV,EAAS,IAAe,OAAXS,EAAmB,MAA2Bb,GAAKa,EAAQZ,EAAMI,EAAUH,EAAMI,EAAUH,KAAeK,EAAOK,EAASH,SAQxcK,EAAUzD,EE3E0C,GF6EpD0D,EAAuB1D,EE5EG,GF8E1B2D,EAAwBlD,EAAuBiD,GAE/CE,EAAmB5D,EE/EI,GFiFvB6D,EAAoBpD,EAAuBmD,GAE3CE,EAAgB9D,EElFF,GFoFd+D,EAAiBtD,EAAuBqD,GAExCE,EAAyBhE,EErFN,IFuFnBiE,EAA0BxD,EAAuBuD,GAEjDE,EAA0BlE,EExFA,IF0F1BmE,EAA2B1D,EAAuByD,GAElDE,EAA0BpE,EE3FA,IF6F1BqE,EAA2B5D,EAAuB2D,GAElDE,EAA0BtE,EE9FA,IFgG1BuE,EAA2B9D,EAAuB6D,GAElDE,EAAmCxE,EEjGX,IFmGxByE,EAAoChE,EAAuB+D,GEjG1DE,GACJC,KAAS,EACTC,OAAW,EACXC,QAAY,EACZC,MAAU,GAGNC,EAAwB,WAExBC,GACJC,IAAO,YACPC,IAAO,YACPC,OAAQ,aACRC,KAAQ,aACRC,IAAO,mBACPC,KAAQ,wBACRC,IAAO,uBAETP,GAAeQ,IAAIR,EAAeE,IAClCF,EAAU,OAASA,EAAU,OFqG5B,IEnGoBrF,GAAgB,SAAA8F,GAuBxB,QAvBQ9F,GAuBP+F,GF6IT7E,EAAgBhB,KEpKAF,GAwBjB8C,EAAApB,OAAAmC,eAxBiB7D,EAAgByB,WAAA,cAAAvB,MAAAQ,KAAAR,KAwB3B6F,GAEN7F,KAAK8F,aAAe9F,KAAK+F,QAAQD,cAAgB,IACjD9F,KAAKgG,gBAAkBhG,KAAK+F,QAAQC,iBAAmB,EACvDhG,KAAKiG,aAAe,EAEhBrC,EAAAsC,QAAQC,UACVnG,KAAKoG,MAAQpG,KAAK+F,QAAQK,OAASlB,EACnClF,KAAKqG,YAAcxB,EAAaC,KAChC9E,KAAKsG,eAELtG,KAAKuG,UFqgBR,MApcAnF,GEpGkBtB,EAAgB8F,GFsGlC1D,EEtGkBpC,IFuGhB2C,IAAK,UACLgB,IElGQ,WAAK,MAAO,WFsGpBhB,IAAK,OACLgB,IErGK,WAAK,MAAO,gBFyGjBhB,IAAK,UACLgB,IEzGQ,WAAK,MAAO,YF6GpBhB,IAAK,aACLgB,IE7GW,WACZ,OACE+C,MAAU,wBFiHX/D,IAAK,SACLgB,IE/GO,WACR,OACEgD,MAAS,YFmHVhE,IAAK,UACLgB,IEjHQ,WAAK,MAAOzD,MAAK6F,KAAKE,QAAQW,aAAe1G,KAAK6F,KAAKE,QAAQW,kBFqHvEjE,IAAK,YACLgB,IErHU,WAAK,MAAOzD,MAAK6F,KAAKc,qBFyHhClE,IAAK,QACLgB,IE9Ia,WAAK,MAAO,WFkJzBhB,IAAK,SACLgB,IElJc,WAAK,MAAO,aFsJ1BhB,IAAK,UACLgB,IEtJe,WAAK,MAAO,UF0J3BhB,IAAK,UACLgB,IEzJe,WAAK,MAAO,YFgL7BvB,EErLkBpC,IFsLhB2C,IAAK,aACLd,MEhJO,WACR3B,KAAK4G,SAAS5G,KAAK6F,KAAKgB,aAAcjD,EAAAkD,OAAOC,sBAAuB/G,KAAKgH,QACzEhH,KAAK4G,SAAS5G,KAAK6F,KAAMjC,EAAAkD,OAAOG,8BAA+BjH,KAAKkH,kBAChElH,KAAKmH,YACPnH,KAAK4G,SAAS5G,KAAKmH,UAAWvD,EAAAkD,OAAOM,qBAAsBpH,KAAKqH,qBAChErH,KAAK4G,SAAS5G,KAAKmH,UAAWvD,EAAAkD,OAAOQ,eAAgBtH,KAAKuH,eAC1DvH,KAAK4G,SAAS5G,KAAKmH,UAAWvD,EAAAkD,OAAOU,gBAAiBxH,KAAKyH,oBFoJ5DhF,IAAK,SACLd,MEjJG,WACJiB,EAAApB,OAAAmC,eAlDiB7D,EAAgByB,WAAA,SAAAvB,MAAAQ,KAAAR,MAmDjCA,KAAKgH,SACLhH,KAAKsG,iBFoJJ7D,IAAK,cACLd,MElJQ,WFmJN,GAAI+F,GAAQ1H,IElJf,IAAK2H,OAAOC,QAAWD,OAAOC,OAAOC,MAASF,OAAOC,OAAOC,KAAKC,YAQ/D9H,KAAK+H,uBARuE,CAC5E,GAAIC,GAASC,SAASC,cAAc,SACpCF,GAAOG,aAAa,OAAQ,mBAC5BH,EAAOG,aAAa,QAAS,SAC7BH,EAAOG,aAAa,MAAO,0DAC3BH,EAAOI,OAAS,WFqJX,MErJiBV,GAAKK,oBAC3BE,SAASI,KAAKC,YAAYN,OF4J3BvF,IAAK,mBACLd,MEvJa,WFwJX,GAAI4G,GAASvI,IErJhB,OAFAA,MAAKiG,eAEDjG,KAAKiG,aAAejG,KAAKgG,iBAC3BhG,KAAKiG,aAAe,EACpBrC,EAAA4E,IAAIC,KAAK,kCACTzI,MAAKuG,gBAKHoB,OAAOC,QACT5H,KAAKiG,aAAe,EAEhB0B,OAAOC,OAAOC,MAAQF,OAAOC,OAAOC,KAAKC,aAC3C9H,KAAKoG,MAAQpG,KAAKoG,OAASlB,EAC3BlF,KAAK0I,qBAELf,OAA8BgB,sBAAI,SAACpI,EAAQqI,GACrCrI,GACFgI,EAAKnC,MAAQmC,EAAKnC,OAASlB,EAC3BqD,EAAKG,sBAEL9E,EAAA4E,IAAIC,KAAK,iBAAkBG,GAC3BL,EAAKhC,aAKXsC,WAAW,WAAQN,EAAKR,oBAAsB/H,KAAK8F,kBF+JpDrD,IAAK,oBACLd,ME5Jc,WF6JZ,GAAImH,GAAS9I,KE5JZ+I,EAAiBnB,OAAOC,KAAKmB,eAAeC,cAC5CC,EAAiB,GAAItB,QAAOC,KAAKsB,eAAenJ,KAAKoG,OACrDgD,EAAY,GAAIxB,QAAOC,KAAKwB,UAAUH,EACxC,SAACI,GF8JE,ME9JUR,GAAKS,gBAAgBD,IAAU,SAACE,GFgK1C,MEhKgDV,GAAKW,iBAAiBD,IAAIT,EAC/EnB,QAAOC,KAAK6B,WAAWN,EAAW,WFkK7B,MElKmCxF,GAAA4E,IAAImB,MAAMb,EAAKc,KAAM,iBAAiB,WFoKzE,MEpK+EhG,GAAA4E,IAAIC,KAAKK,EAAKc,KAAM,mBFwKvGnH,IAAK,kBACLd,MEtKY,SAAC2H,GACd1F,EAAA4E,IAAImB,MAAM3J,KAAK4J,KAAM,kBAAoBN,EAAQO,WACjD7J,KAAK8J,WAAWR,MFyKf7G,IAAK,wBACLd,MEvKkB,WACf3B,KAAKsJ,UACP1F,EAAA4E,IAAImB,MAAM3J,KAAK4J,KAAM5J,KAAKsJ,QAAQS,QAC9B/J,KAAKsJ,QAAQS,SAAWnC,OAAOC,KAAKmC,cAAcC,UACpDjK,KAAKyH,iBACLzH,KAAKsJ,QAAU,UF4KlB7G,IAAK,mBACLd,MExKa,SAAC6H,GACVA,IAAM5B,OAAOC,KAAKqC,qBAAqBC,WAC1CvG,EAAA4E,IAAImB,MAAM3J,KAAK4J,KAAM,kBACrB5J,KAAKoK,SAELxG,EAAA4E,IAAImB,MAAM3J,KAAK4J,KAAM,uBACrB5J,KAAKqK,WF4KN5H,IAAK,gBACLd,MEzKU,SAAC2H,GACZtJ,KAAKsK,kBACLC,cAAcvK,KAAKwK,qBACnBxK,KAAK6F,KAAKgB,aAAa4D,mBACvB7G,EAAA4E,IAAImB,MAAM3J,KAAK4J,KAAM,6BAA+BN,EAAQO,WAC5D7J,KAAK8J,WAAWR,MF4Kf7G,IAAK,cACLd,ME1KQ,SAAC6H,GACV5F,EAAA4E,IAAImB,MAAM3J,KAAK4J,KAAM,kBAAmBJ,GACxCxJ,KAAK0K,qBACLH,cAAcvK,KAAKwK,qBACnBxK,KAAK6F,KAAKgB,aAAa4D,mBACvBzK,KAAKmH,UAAUwD,UF6KdlI,IAAK,mBACLd,ME3Ka,SAACiJ,EAAKC,GACpBjH,EAAA4E,IAAImB,MAAM3J,KAAK4J,KAAM,oBAAqBiB,EAAc,IAAKD,EAAM,KAEnE5K,KAAK8K,iBAAmB9K,KAAK6F,KAAKkF,cAElC,IAAIhF,MAAU7B,EAAAnD,YAAWf,KAAK8K,iBAAiB/E,SAC7CiF,aAAcH,EACdhE,aAAc7G,KAAK6F,KAAKgB,aACxBoE,OAAQjL,KAAK6F,KAAKE,QAAQkF,OAC1BC,SAAUlL,KAAK8K,iBAAiBI,UAElClL,MAAKmL,IAAMnL,KAAK8K,iBAAiBK,IACjCnL,KAAKoL,cAAgB,GAAAtH,GAAA/C,QAAuBgF,GAC5C/F,KAAKoL,cAAcpE,SAEnBhH,KAAK6K,aAAeA,EAEpB7K,KAAK8K,iBAAiBO,IAAIC,QAE1B,IAAInE,GAAYnH,KAAK6F,KAAKc,eAC1BQ,GAAUkE,IAAIE,OAAOvL,KAAKoL,cAAcC,KACxClE,EAAUqE,gBACVrE,EAAUsE,SAAWzL,KAAKoL,cAC1BjE,EAAUuE,aACVvE,EAAUwE,oBF8KTlJ,IAAK,iBACLd,ME5KW,SAAC6H,GACb5F,EAAA4E,IAAIC,KAAKzI,KAAK4J,KAAM,cAAeJ,MF+KlC/G,IAAK,aACLd,ME7KO,SAAC2H,GF8KN,GAAIsC,GAAS5L,IE7KhBA,MAAKsJ,QAAUA,EACftJ,KAAKqG,YAAcxB,EAAaE,OAChC/E,KAAKsK,kBAELhB,EAAQuC,kBAAkB,WFgLrB,MEhL2BD,GAAKE,0BAErC9L,KAAKuH,mBFoLJ9E,IAAK,iBACLd,MElLW,WACZ3B,KAAK0K,oBAEL,IAAIqB,GAAO/L,KAAKgM,YAEZC,EAAc1I,MACdvD,MAAK6K,eACPoB,EAAcjM,KAAK6K,aAAaoB,YAChCjM,KAAK6K,aAAe,MAGtB7K,KAAK6F,KAAKqG,KAAKlM,KAAKmL,KAAOnL,KAAK6F,KAAKE,QAAQoG,QAE7C,IAAIhF,GAAYnH,KAAK6F,KAAKc,eAEtB3G,MAAKoL,iBACHpL,KAAKoL,cAAcgB,aAA+B,WAAhBH,IACpC9E,EAAUkF,KAAKzI,EAAAkD,OAAOwF,gBAAiB,WACrCnF,EAAUwD,OACVxD,EAAUsE,SAASc,KAAK,IAAMR,EAAO5E,EAAUqF,iBAGnDxM,KAAKoL,cAAcqB,WFsLpBhK,IAAK,YACLd,MEnLM,WFoLJ,GAAI+K,GAAS1M,IEnLhBA,MAAKmH,UAAUwF,OACf,IAAIxB,GAAMnL,KAAKmH,UAAUpB,QAAQoF,GACjCvH,GAAA4E,IAAImB,MAAM3J,KAAK4J,KAAM,cAAgBuB,EACrC,IAAIyB,GAAY5M,KAAK6M,gBAAgB1B,GACjC2B,EAAU,GAAIlF,QAAOC,KAAKkF,MAAMC,YAAYJ,EAChDE,GAAQG,YACRH,EAAQd,YAAchM,KAAKgM,aAAe,EAC1ChM,KAAKsJ,QAAQ4D,UAAUJ,EAAS,SAACjC,GFsL5B,MEtL6C6B,GAAKS,iBAAiB,YAAatC,IAAe,SAACrB,GFwLhG,MExLsGkD,GAAKU,eAAe5D,QF4L9H/G,IAAK,kBACLd,ME1LY,SAACwJ,GACd,GAAIkC,GAAWvN,EAAiBwN,YAAYnC,GACxCyB,EAAY,GAAIhF,QAAOC,KAAKkF,MAAMQ,UAAUpC,EAChDyB,GAAUY,YAAcxN,KAAK+F,QAAQyH,aAAeH,EACpDT,EAAUa,WAAazN,KAAK+F,QAAQ0H,UACpC,IAAIC,GAAW1N,KAAK2N,qBAEpB,OADAf,GAAUc,SAAWA,EACdd,KF6LNnK,IAAK,sBACLd,ME3LgB,WACjB3B,KAAK+F,QAAQgH,QAAU/M,KAAK+F,QAAQgH,SACpC,IAAIa,GAAO5N,KAAK+F,QAAQgH,MAAMa,KAE1BF,EAAW1N,KAAK6N,wBAAwBD,EAoB5C,OAnBAF,GAASI,MAAQ9N,KAAK+F,QAAQgH,MAAMe,MACpCJ,EAASK,SAAW/N,KAAK+F,QAAQgH,MAAMgB,SACvCL,EAASM,YAAchO,KAAK+F,QAAQgH,MAAMiB,YAEtCJ,IAAS9N,EAAiBmO,QAC5BP,EAASQ,QAAUlO,KAAK+F,QAAQgH,MAAMmB,QACtCR,EAASS,gBAAkBnO,KAAK+F,QAAQgH,MAAMoB,gBAC9CT,EAASU,OAASpO,KAAK+F,QAAQgH,MAAMqB,OACrCV,EAASW,YAAcrO,KAAK+F,QAAQgH,MAAMsB,aACjCT,IAAS9N,EAAiBwO,QACnCZ,EAASa,OAASvO,KAAK+F,QAAQgH,MAAMwB,QAGnCvO,KAAK+F,QAAQgH,MAAMyB,SACrBd,EAASc,OAASxO,KAAK+F,QAAQgH,MAAMyB,OAAOC,IAAI,SAACC,GF4L5C,ME5LoD,IAAI9G,QAAOC,KAAK8G,MAAMD,OAE5EhB,EAASc,QAAUxO,KAAK6F,KAAKE,QAAQkF,SACxCyC,EAASc,QAAU,GAAI5G,QAAOC,KAAK8G,MAAM3O,KAAK6F,KAAKE,QAAQkF,UAEtDyC,KFgMNjL,IAAK,0BACLd,ME9LoB,SAACiM,GACtB,OAAQA,GACR,IAAK9N,GAAiBwO,MAAO,MAAO,IAAI1G,QAAOC,KAAKkF,MAAM6B,kBAC1D,KAAK9O,GAAiBmO,OAAQ,MAAO,IAAIrG,QAAOC,KAAKkF,MAAM8B,mBAC3D,SAAS,MAAO,IAAIjH,QAAOC,KAAKkF,MAAM+B,yBFqMrCrM,IAAK,OACLd,MElMC,WACF3B,KAAKqL,IAAIjB,UFqMR3H,IAAK,OACLd,MEnMC,WACF3B,KAAKqL,IAAIhB,UFsMR5H,IAAK,QACLd,MEpME,WFqMA,GAAIoN,GAAS/O,IEpMhBA,MAAKmH,UAAUwF,QACf/E,OAAOC,KAAKmH,eAAe,SAAC1F,GFuMvB,MEvMmCyF,GAAKE,cAAc3F,IAAU,SAACE,GFyMjE,MEzMuEuF,GAAKG,YAAY1F,KACxFxJ,KAAKsJ,UF2ML,WE1MH,GAAI6F,GAAW,EACXC,GAAkB9K,EAAAvD,QAAAyD,EAAAzD,QAAA2D,EAAA3D,QACtBwJ,eAAcwE,EAAKvE,qBACnBuE,EAAKvE,oBAAsB6E,YAAY,WACrCN,EAAK1D,IAAIiE,KAAKF,EAAgBD,IAC9BA,GAAYA,EAAW,GAAK,GAC3B,KACHJ,EAAKlJ,KAAKgB,aAAa0I,uBFgNxB9M,IAAK,mBACLd,ME7Ma,WACd3B,KAAKwL,gBACLxL,KAAK0L,aACL1L,KAAKgM,YAAc,KFgNlBvJ,IAAK,sBACLd,ME9MgB,SAAC6N,GAClBxP,KAAKgM,YAAcwD,EAAaC,WFiN/BhN,IAAK,gBACLd,ME/MU,YACP3B,KAAKsJ,SAAatJ,KAAK6K,cAAkD,SAAlC7K,KAAK6K,aAAaoB,aAA4D,WAAlCjM,KAAK6K,aAAaoB,cACvGrI,EAAA4E,IAAImB,MAAM3J,KAAK4J,KAAM,cACrB5J,KAAKgM,YAAchM,KAAKgM,aAAe,EACvChM,KAAKkN,gBFmNNzK,IAAK,kBACLd,MEhNY,WACb3B,KAAKqL,IAAIiE,KAAI1K,EAAA7D,YFmNZ0B,IAAK,qBACLd,MEjNe,WAChB3B,KAAKqL,IAAIiE,KAAIlL,EAAArD,YFoNZ0B,IAAK,SACLd,MElNG,WAMJ,MALA3B,MAAKsJ,QAAUtJ,KAAKsK,kBAAoBtK,KAAK0K,qBAC7C1K,KAAK6F,KAAKgB,aAAawE,IAAIqE,KAAK,kDAAkDnE,OAAOvL,KAAKqL,KAC9FrL,KAAK2P,QAAU3P,KAAK2P,OAAOrE,SAC3BtL,KAAK2P,OAAS/L,EAAAgM,OAAOC,YAAW7L,EAAAjD,SAAmB+O,QAAS9P,KAAK6F,KAAKE,QAAQ+J,UAC9E9P,KAAK6F,KAAKwF,IAAIE,OAAOvL,KAAK2P,QACnB3P,UFqNNyC,IAAK,cACLd,MEnNe,SAACoO,GACjB,GAAIC,IAAaD,EAAOE,MAAM,KAAK,GAAGC,MAAM,kBAAoB,EAChE,OAAI/K,GAAU6K,GACL7K,EAAU6K,GACRD,EAAOI,QAAQ,WACjB,8BADF,WA/UUrQ,GFyiBjB8D,EAAQwM,aAEX3Q,GAAiBsB,QE3iBGjB,EF4iBpBJ,EAAOD,QAAUA,EAAiBsB,SAO7B,SAAUrB,EAAQD,GGllBxBC,EAAAD,QAAAQ,GH2lBM,SAAUP,EAAQD,EAASU,GAEhC,YAUA,SAASS,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAEzF,QAASG,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIH,WAAU,iEAAoEG,GAAeD,GAASE,UAAYC,OAAOC,OAAOH,GAAcA,EAAWC,WAAaG,aAAeC,MAAON,EAAUO,cAAmBC,YAAgBC,mBAA6BR,IAAYE,OAAOO,eAAiBP,OAAOO,eAAeV,EAAUC,GAAcD,EAASW,UAAYV,GAZjeE,OAAOS,eAAexC,EAAS,cAC7BkC,UAGF,IAAIO,GAAe,WAAe,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIC,GAAI,EAAGA,EAAID,EAAME,OAAQD,IAAK,CAAE,GAAIE,GAAaH,EAAMC,EAAIE,GAAWZ,WAAaY,EAAWZ,eAAqBY,EAAWV,gBAAyB,SAAWU,KAAYA,EAAWX,aAAiBL,OAAOS,eAAeG,EAAQI,EAAWC,IAAKD,IAAiB,MAAO,UAAUtB,EAAawB,EAAYC,GAAiJ,MAA9HD,IAAYP,EAAiBjB,EAAYK,UAAWmB,GAAiBC,GAAaR,EAAiBjB,EAAayB,GAAqBzB,MAE7hB0B,EAAO,SAAaC,EAAIC,EAAKC,GAAqC,IAA9B,GAAIC,MAAiCA,GAAQ,CAAE,GAAIC,GAASJ,EAAIK,EAAWJ,EAAKK,EAAWJ,CAAKC,MAA+B,OAAXC,IAAiBA,EAASG,SAAS7B,UAAW,IAAI8B,GAAO7B,OAAO8B,yBAAyBL,EAAQC,EAAW,IAAaK,SAATF,EAAJ,CAA4O,GAAI,SAAWA,GAAQ,MAAOA,GAAK1B,KAAgB,IAAI6B,GAASH,EAAKI,GAAK,IAAeF,SAAXC,EAAwB,MAAoB,OAAOA,GAAOhD,KAAK2C,GAA/V,GAAIO,GAASlC,OAAOmC,eAAeV,EAAS,IAAe,OAAXS,EAAmB,MAA2Bb,GAAKa,EAAQZ,EAAMI,EAAUH,EAAMI,EAAUH,KAAeK,EAAOK,EAASH,SAQxcK,EAAUzD,EI7mB+B,GJ+mBzCkQ,EAAwBlQ,EI9mBF,GJgnBtBmQ,EAAyB1P,EAAuByP,GI9mB/CE,EAAgB,IAEDC,EAAkB,SAAAC,GAQ1B,QARQD,GAQPzK,GJkoBT,GAAI2B,GAAQ1H,IAEZgB,GAAgBhB,KI5oBAwQ,GASjB5N,EAAApB,OAAAmC,eATiB6M,EAAkBjP,WAAA,cAAAvB,MAAAQ,KAAAR,KAS7B+F,GACN/F,KAAKmL,IAAMpF,EAAQoF,IACnBnL,KAAKgL,aAAejF,EAAQiF,aAC5BhL,KAAK6G,aAAed,EAAQc,aAC5B7G,KAAKgL,aAAaa,kBAAkB,WJsoBjC,MItoBuCnE,GAAKgJ,wBAC/C1Q,KAAKkL,SAAWnF,EAAQmF,QACxB,IAAIyF,GAAW,SAAC/G,GJwoBb,MIxoB8B,UAARA,EACzB5J,MAAKkL,SAAQnK,UAAaf,KAAKkL,SAAQnK,QAAWf,KAAKkL,SAAQnK,QAAS6P,OAAOD,IAC/E3Q,KAAKkL,SAAS2F,OAAS7Q,KAAKkL,SAAS2F,KAAO7Q,KAAKkL,SAAS2F,KAAKD,OAAOD,IACtE3Q,KAAKkL,SAAS4F,QAAU9Q,KAAKkL,SAAS4F,MAAQ9Q,KAAKkL,SAAS4F,MAAMF,OAAOD,IJgxB1E,MAjLAvP,GIjnBkBoP,EAAkBC,GJmnBpCvO,EInnBkBsO,IJonBhB/N,IAAK,OACLgB,IInnBK,WAAK,MAAO,yBJunBjBhB,IAAK,WACLgB,IIvnBS,WAAK,SAAOG,EAAAmN,UAAAT,EAAAvP,YJ2nBrB0B,IAAK,aACLgB,II3nBW,WAAK,OAAS+C,MAAO,0BJ+nBhC/D,IAAK,UACLgB,II9nBQ,WAAK,aJwpBfvB,EI9pBkBsO,IJ+pBhB/N,IAAK,SACLd,MI3oBG,WACJ,GAAIoP,GAAW/Q,KAAK+Q,UACpB/Q,MAAKqL,IAAIiE,KAAKyB,GACV/Q,KAAK+F,QAAQkF,OACfjL,KAAKgR,EAAE,mCAAmCC,IAAI,mBAAoB,OAASjR,KAAK+F,QAAQkF,OAAS,KAEjGjL,KAAKgR,EAAE,mCAAmCC,IAAI,mBAAoB,WJ+oBnExO,IAAK,OACLd,MI5oBC,WACF3B,KAAKgL,aAAaL,UJ+oBjBlI,IAAK,QACLd,MI7oBE,WACH3B,KAAKkR,YACLlR,KAAKgL,aAAa2B,WJgpBjBlK,IAAK,OACLd,MI9oBC,WACF3B,KAAKkR,YACLlR,KAAKgL,aAAa2B,WJipBjBlK,IAAK,OACLd,MI/oBC,SAACoK,GJgpBA,GAAIxD,GAASvI,II/oBhBA,MAAKkR,WACL,IAAIpE,GAAU,GAAIlF,QAAOC,KAAKkF,MAAMoE,WACpCrE,GAAQd,YAAcD,EACtB/L,KAAKgL,aAAauB,KAAKO,EACrB,WJipBG,MIjpBGvE,GAAK6I,cAAc,WJmpBtB,MInpB4BxN,GAAA4E,IAAIC,KAAK,oBJupBzChG,IAAK,iBACLd,MIrpBW,SAAC0P,GACb,GAAIA,GAAc,GAAKA,GAAc,IAAK,CACxC,GAAIC,GAAWtR,KAAKwM,aACpBxM,MAAKuM,KAAK8E,EAAaC,EAAW,SJypBnC7O,IAAK,aACLd,MItpBO,WJupBL,GAAImH,GAAS9I,IItpBhBA,MAAKuR,MAAQlC,YAAY,WJypBpB,MIzpB0BvG,GAAK0I,sBAAsBjB,MJ6pBzD9N,IAAK,YACLd,MI3pBM,WACP4I,cAAcvK,KAAKuR,OACnBvR,KAAKuR,MAAQ,QJ8pBZ9O,IAAK,cACLd,MI5pBQ,WACT,MAAO3B,MAAKgL,aAAa+B,MAAMuE,YJ+pB9B7O,IAAK,YACLd,MI7pBM,WACP,MAAyC,YAAlC3B,KAAKgL,aAAaiB,aAA+D,cAAlCjM,KAAKgL,aAAaiB,eJgqBvExJ,IAAK,kBACLd,MI9pBY,WACb,MAAuC,QAAhC3B,KAAKgL,aAAayG,WAAuB7N,EAAA8N,SAASC,KAAO/N,EAAA8N,SAASE,OJiqBxEnP,IAAK,sBACLd,MI/pBgB,WACjB3B,KAAK6G,aAAagL,mBACd7R,KAAKoM,cAAgBpM,KAAKuR,OAC5BvR,KAAKoR,aAG+B,cAAlCpR,KAAKgL,aAAaiB,aACpBjM,KAAK8R,eACL9R,KAAK+R,QAAQnO,EAAAkD,OAAOkL,mBAAoBhS,KAAK4J,OACF,YAAlC5J,KAAKgL,aAAaiB,aACvBjM,KAAK8R,cACP9R,KAAK8R,eACL9R,KAAK+R,QAAQnO,EAAAkD,OAAOmL,oBAAqBjS,KAAK4J,OAE5C5J,KAAKkS,YAAclS,KAAKgL,aAAaiB,aACvCjM,KAAK+R,QAAQnO,EAAAkD,OAAOqL,cAAenS,KAAK4J,OAEC,SAAlC5J,KAAKgL,aAAaiB,aACvBjM,KAAK8R,cACP9R,KAAK8R,eACL9R,KAAK+R,QAAQnO,EAAAkD,OAAOmL,oBAAqBjS,KAAK4J,OAEhD5J,KAAK+R,QAAQnO,EAAAkD,OAAOsL,eAAgBpS,KAAK4J,OACE,WAAlC5J,KAAKgL,aAAaiB,aACvBjM,KAAKkS,YAAclS,KAAKgL,aAAaiB,aACvCjM,KAAK+R,QAAQnO,EAAAkD,OAAOuL,eAAgBrS,KAAK4J,MAI7C5J,KAAKkS,UAAYlS,KAAKgL,aAAaiB,eJkqBlCxJ,IAAK,qBACLd,MIhqBe,WAChB,GAAIwN,GAAWnP,KAAKgL,aAAasH,mBAC7BhB,EAAWtR,KAAKgL,aAAa+B,MAAMuE,QACvCtR,MAAK+R,QAAQnO,EAAAkD,OAAOyL,qBAAsB9C,QAASN,EAAUqD,MAAOlB,GAAWtR,KAAK4J,SJmqBnFnH,IAAK,OACLd,MIjqBC,WACF3B,KAAKqL,IAAIjB,UJoqBR3H,IAAK,OACLd,MIlqBC,WACF3B,KAAKqL,IAAIhB,WA5HQmG,GJmyBjB5M,EAAQ8N,SAEXjS,GAAiBsB,QIryBGyP,EJsyBpB9Q,EAAOD,QAAUA,EAAiBsB,SAO7B,SAAUrB,EAAQD,GKlzBxBC,EAAAD,QAAA,iGL2zBM,SAAUC,EAAQD,EAASU,GM3zBjCV,EAAAC,EAAAD,QAAAU,EAAA,KAKAV,EAAAgT,MAAA/S,EAAAY,GAAA,i7BAAw8B,MNu0Bl8B,SAAUZ,EAAQD,GOv0BxBC,EAAAD,QAAA,WACA,GAAAiT,KA0CA,OAvCAA,GAAAC,SAAA,WAEA,OADAC,MACAtQ,EAAA,EAAgBA,EAAAtC,KAAAuC,OAAiBD,IAAA,CACjC,GAAAuQ,GAAA7S,KAAAsC,EACAuQ,GAAA,GACAD,EAAAH,KAAA,UAAAI,EAAA,OAAwCA,EAAA,QAExCD,EAAAH,KAAAI,EAAA,IAGA,MAAAD,GAAAE,KAAA,KAIAJ,EAAApQ,EAAA,SAAApC,EAAA6S,GACA,gBAAA7S,KACAA,IAAA,KAAAA,EAAA,KAEA,QADA8S,MACA1Q,EAAA,EAAgBA,EAAAtC,KAAAuC,OAAiBD,IAAA,CACjC,GAAAhC,GAAAN,KAAAsC,GAAA,EACA,iBAAAhC,KACA0S,EAAA1S,OAEA,IAAAgC,EAAA,EAAYA,EAAApC,EAAAqC,OAAoBD,IAAA,CAChC,GAAAuQ,GAAA3S,EAAAoC,EAKA,iBAAAuQ,GAAA,IAAAG,EAAAH,EAAA,MACAE,IAAAF,EAAA,GACAA,EAAA,GAAAE,EACKA,IACLF,EAAA,OAAAA,EAAA,aAAAE,EAAA,KAEAL,EAAAD,KAAAI,MAIAH,IPu1BM,SAAUhT,EAAQD,EAASU,GQh3BjC,QAAA8S,GAAAhQ,EAAAiQ,EAAAC,GAKA,IAJA,GAAAC,MACA/Q,EAAAgR,EAAAH,GACA3Q,EAAAF,EAAAE,SAEA6Q,EAAA7Q,GAAA,CACA,GAAAE,GAAAJ,EAAA+Q,GACAzR,EAAAsB,EAAAR,GACAmQ,EAAAO,EAAAxR,EAAAuR,EAAAzQ,KAAAQ,EAAAiQ,IAEAN,UAAAjR,WACA4B,SAAA5B,GAAAc,IAAAQ,MACAA,EAAAR,GAAAmQ,GAGA,MAAA3P,GA9BA,GAAAqQ,GAAAnT,EAAA,GACAoT,EAAApT,EAAA,IACAkT,EAAAlT,EAAA,GA+DAqT,EAAAD,EAAA,SAAAtQ,EAAAiQ,EAAAC,GACA,MAAAA,GACAF,EAAAhQ,EAAAiQ,EAAAC,GACAG,EAAArQ,EAAAiQ,IAGAxT,GAAAD,QAAA+T,GRi5BM,SAAU9T,EAAQD,EAASU,GS58BjC,QAAAmT,GAAArQ,EAAAiQ,GACA,aAAAA,EACAjQ,EACAwQ,EAAAP,EAAAG,EAAAH,GAAAjQ,GAfA,GAAAwQ,GAAAtT,EAAA,GACAkT,EAAAlT,EAAA,EAiBAT,GAAAD,QAAA6T,GT0+BM,SAAU5T,EAAQD,GUl/BxB,QAAAgU,GAAAP,EAAA7Q,EAAAY,GACAA,SAKA,KAHA,GAAAmQ,MACA7Q,EAAAF,EAAAE,SAEA6Q,EAAA7Q,GAAA,CACA,GAAAE,GAAAJ,EAAA+Q,EACAnQ,GAAAR,GAAAyQ,EAAAzQ,GAEA,MAAAQ,GAGAvD,EAAAD,QAAAgU,GV8gCM,SAAU/T,EAAQD,EAASU,GWxgCjC,QAAAuT,GAAAjR,GACA,gBAAAQ,GACA,aAAAA,EAAAM,OAAAN,EAAAR,IAuBA,QAAAkR,GAAAhS,GACA,aAAAA,GAAAiS,EAAAC,EAAAlS,IAWA,QAAAmS,GAAAnS,EAAAY,GAGA,MAFAZ,GAAA,gBAAAA,IAAAoS,EAAAC,KAAArS,SACAY,EAAA,MAAAA,EAAA0R,EAAA1R,EACAZ,QAAA,MAAAA,EAAAY,EAYA,QAAAqR,GAAAjS,GACA,sBAAAA,YAAA,MAAAA,GAAAsS,EAWA,QAAAC,GAAAjR,GAWA,IAVA,GAAAZ,GAAA8R,EAAAlR,GACAmR,EAAA/R,EAAAE,OACAA,EAAA6R,GAAAnR,EAAAV,OAEA8R,IAAA9R,GAAAqR,EAAArR,KACA+R,EAAArR,IAAAsR,EAAAtR,IAEAmQ,KACAR,OAEAQ,EAAAgB,GAAA,CACA,GAAA3R,GAAAJ,EAAA+Q,IACAiB,GAAAP,EAAArR,EAAAF,IAAAiS,EAAAhU,KAAAyC,EAAAR,KACAmQ,EAAAH,KAAAhQ,GAGA,MAAAmQ,GAuBA,QAAA6B,GAAA9S,GAGA,GAAAiM,SAAAjM,EACA,SAAAA,IAAA,UAAAiM,GAAA,YAAAA,GA6DA,QAAAuG,GAAAlR,GACA,SAAAA,EACA,QAEAwR,GAAAxR,KACAA,EAAAzB,OAAAyB,GAEA,IAAAV,GAAAU,EAAAV,MACAA,MAAAqR,EAAArR,KACA+R,EAAArR,IAAAsR,EAAAtR,KAAAV,GAAA,CAQA,KANA,GAAAmS,GAAAzR,EAAAvB,YACA0R,KACAuB,EAAA,kBAAAD,MAAAnT,YAAA0B,EACA2P,EAAAgC,MAAArS,GACAsS,EAAAtS,EAAA,IAEA6Q,EAAA7Q,GACAqQ,EAAAQ,KAAA,EAEA,QAAA3Q,KAAAQ,GACA4R,GAAAf,EAAArR,EAAAF,IACA,eAAAE,IAAAkS,IAAAH,EAAAhU,KAAAyC,EAAAR,KACAmQ,EAAAH,KAAAhQ,EAGA,OAAAmQ,GAhOA,GAAAkC,GAAA3U,EAAA,IACAoU,EAAApU,EAAA,IACAmU,EAAAnU,EAAA,IAGA4T,EAAA,QAGAgB,EAAAvT,OAAAD,UAGAiT,EAAAO,EAAAP,eAGAQ,EAAAF,EAAAtT,OAAA,QAMAyS,EAAA,iBAyBAJ,EAAAH,EAAA,UA0HAL,EAAA2B,EAAA,SAAA/R,GACA,GAAAyR,GAAA,MAAAzR,EAAAM,OAAAN,EAAAvB,WACA,yBAAAgT,MAAAnT,YAAA0B,GACA,kBAAAA,IAAA0Q,EAAA1Q,GACAiR,EAAAjR,GAEAwR,EAAAxR,GAAA+R,EAAA/R,OANAiR,CA4DAxU,GAAAD,QAAA4T,GXujCM,SAAU3T,EAAQD,GY5wCxB,QAAAwV,GAAAtT,GACA,QAAAA,GAAA,gBAAAA,GAgCA,QAAAmT,GAAA7R,EAAAR,GACA,GAAAd,GAAA,MAAAsB,EAAAM,OAAAN,EAAAR,EACA,OAAAyS,GAAAvT,KAAA4B,OAmBA,QAAA4R,GAAAxT,GAIA,MAAA8S,GAAA9S,IAAAyT,EAAA5U,KAAAmB,IAAA0T,EAuBA,QAAAZ,GAAA9S,GAGA,GAAAiM,SAAAjM,EACA,SAAAA,IAAA,UAAAiM,GAAA,YAAAA,GAmBA,QAAAsH,GAAAvT,GACA,aAAAA,IAGAwT,EAAAxT,GACA2T,EAAAtB,KAAAuB,EAAA/U,KAAAmB,IAEAsT,EAAAtT,IAAA6T,EAAAxB,KAAArS,IA3HA,GAAA0T,GAAA,oBAGAG,EAAA,8BAcAT,EAAAvT,OAAAD,UAGAgU,EAAAnS,SAAA7B,UAAAoR,SAGA6B,EAAAO,EAAAP,eAMAY,EAAAL,EAAApC,SAGA2C,EAAAG,OAAA,IACAF,EAAA/U,KAAAgU,GAAAkB,QAAA,sBAA2D,QAC3DA,QAAA,sEA4FAhW,GAAAD,QAAAqV,GZ4yCM,SAAUpV,EAAQD,Gaj4CxB,QAAA8U,GAAA5S,GAEA,MAAAgU,GAAAhU,IAAA6S,EAAAhU,KAAAmB,EAAA,aACAiU,EAAApV,KAAAmB,EAAA,WAAAkU,EAAArV,KAAAmB,IAAAmU,GA4BA,QAAAnC,GAAAhS,GACA,aAAAA,GAAAiS,EAAAjS,EAAAY,UAAA4S,EAAAxT,GA4BA,QAAAgU,GAAAhU,GACA,MAAAsT,GAAAtT,IAAAgS,EAAAhS,GAoBA,QAAAwT,GAAAxT,GAGA,GAAAoU,GAAAtB,EAAA9S,GAAAkU,EAAArV,KAAAmB,GAAA,EACA,OAAAoU,IAAAV,GAAAU,GAAAC,EA6BA,QAAApC,GAAAjS,GACA,sBAAAA,IACAA,QAAA,MAAAA,GAAAsS,EA4BA,QAAAQ,GAAA9S,GACA,GAAAiM,SAAAjM,EACA,SAAAA,IAAA,UAAAiM,GAAA,YAAAA,GA2BA,QAAAqH,GAAAtT,GACA,QAAAA,GAAA,gBAAAA,GAvNA,GAAAsS,GAAA,iBAGA6B,EAAA,qBACAT,EAAA,oBACAW,EAAA,6BAGAjB,EAAAvT,OAAAD,UAGAiT,EAAAO,EAAAP,eAOAqB,EAAAd,EAAApC,SAGAiD,EAAAb,EAAAa,oBAqMAlW,GAAAD,QAAA8U,Gb87CM,SAAU7U,EAAQD,Gc3oDxB,QAAAwV,GAAAtT,GACA,QAAAA,GAAA,gBAAAA,GAyCA,QAAAmT,GAAA7R,EAAAR,GACA,GAAAd,GAAA,MAAAsB,EAAAM,OAAAN,EAAAR,EACA,OAAAyS,GAAAvT,KAAA4B,OAYA,QAAAqQ,GAAAjS,GACA,sBAAAA,YAAA,MAAAA,GAAAsS,EAuCA,QAAAkB,GAAAxT,GAIA,MAAA8S,GAAA9S,IAAAyT,EAAA5U,KAAAmB,IAAA0T,EAuBA,QAAAZ,GAAA9S,GAGA,GAAAiM,SAAAjM,EACA,SAAAA,IAAA,UAAAiM,GAAA,YAAAA,GAmBA,QAAAsH,GAAAvT,GACA,aAAAA,IAGAwT,EAAAxT,GACA2T,EAAAtB,KAAAuB,EAAA/U,KAAAmB,IAEAsT,EAAAtT,IAAA6T,EAAAxB,KAAArS,IAtKA,GAAAsU,GAAA,iBACAZ,EAAA,oBAGAG,EAAA,8BAcAT,EAAAvT,OAAAD,UAGAgU,EAAAnS,SAAA7B,UAAAoR,SAGA6B,EAAAO,EAAAP,eAMAY,EAAAL,EAAApC,SAGA2C,EAAAG,OAAA,IACAF,EAAA/U,KAAAgU,GAAAkB,QAAA,sBAA2D,QAC3DA,QAAA,uEAIAQ,EAAApB,EAAAF,MAAA,WAMAX,EAAA,iBA4CAK,EAAA4B,GAAA,SAAAvU,GACA,MAAAsT,GAAAtT,IAAAiS,EAAAjS,EAAAY,SAAA6S,EAAA5U,KAAAmB,IAAAsU,EA+EAvW,GAAAD,QAAA6U,Gd4qDM,SAAU5U,EAAQD,EAASU,Gez0DjC,QAAAoT,GAAA4C,GACA,MAAAC,GAAA,SAAAnT,EAAAkJ,GACA,GAAAiH,MACA7Q,EAAA,MAAAU,EAAA,EAAAkJ,EAAA5J,OACA4Q,EAAA5Q,EAAA,EAAA4J,EAAA5J,EAAA,GAAAgB,OACA8S,EAAA9T,EAAA,EAAA4J,EAAA,GAAA5I,OACA+S,EAAA/T,EAAA,EAAA4J,EAAA5J,EAAA,GAAAgB,MAaA,KAXA,kBAAA4P,IACAA,EAAAoD,EAAApD,EAAAmD,EAAA,GACA/T,GAAA,IAEA4Q,EAAA,kBAAAmD,KAAA/S,OACAhB,GAAA4Q,EAAA,KAEAkD,GAAAG,EAAArK,EAAA,GAAAA,EAAA,GAAAkK,KACAlD,EAAA5Q,EAAA,EAAAgB,OAAA4P,EACA5Q,EAAA,KAEA6Q,EAAA7Q,GAAA,CACA,GAAA2Q,GAAA/G,EAAAiH,EACAF,IACAiD,EAAAlT,EAAAiQ,EAAAC,GAGA,MAAAlQ,KAvCA,GAAAsT,GAAApW,EAAA,IACAqW,EAAArW,EAAA,IACAiW,EAAAjW,EAAA,GAyCAT,GAAAD,QAAA8T,Gfy2DM,SAAU7T,EAAQD,GgBz4DxB,QAAA8W,GAAAE,EAAAH,EAAAI,GACA,qBAAAD,GACA,MAAAE,EAEA,IAAApT,SAAA+S,EACA,MAAAG,EAEA,QAAAC,GACA,uBAAA/U,GACA,MAAA8U,GAAAjW,KAAA8V,EAAA3U,GAEA,wBAAAA,EAAAyR,EAAAwD,GACA,MAAAH,GAAAjW,KAAA8V,EAAA3U,EAAAyR,EAAAwD,GAEA,wBAAAC,EAAAlV,EAAAyR,EAAAwD,GACA,MAAAH,GAAAjW,KAAA8V,EAAAO,EAAAlV,EAAAyR,EAAAwD,GAEA,wBAAAjV,EAAAmV,EAAArU,EAAAQ,EAAAiQ,GACA,MAAAuD,GAAAjW,KAAA8V,EAAA3U,EAAAmV,EAAArU,EAAAQ,EAAAiQ,IAGA,kBACA,MAAAuD,GAAAM,MAAAT,EAAAU,YAmBA,QAAAL,GAAAhV,GACA,MAAAA,GAGAjC,EAAAD,QAAA8W,GhBs6DM,SAAU7W,EAAQD,GiB78DxB,QAAAiU,GAAAjR,GACA,gBAAAQ,GACA,aAAAA,EAAAM,OAAAN,EAAAR,IAuBA,QAAAkR,GAAAhS,GACA,aAAAA,GAAAiS,EAAAC,EAAAlS,IAWA,QAAAmS,GAAAnS,EAAAY,GAGA,MAFAZ,GAAA,gBAAAA,IAAAoS,EAAAC,KAAArS,SACAY,EAAA,MAAAA,EAAA0R,EAAA1R,EACAZ,QAAA,MAAAA,EAAAY,EAYA,QAAAiU,GAAA7U,EAAAyR,EAAAnQ,GACA,IAAAwR,EAAAxR,GACA,QAEA,IAAA2K,SAAAwF,EACA,cAAAxF,EACA+F,EAAA1Q,IAAA6Q,EAAAV,EAAAnQ,EAAAV,QACA,UAAAqL,GAAAwF,IAAAnQ,GAAA,CACA,GAAA6T,GAAA7T,EAAAmQ,EACA,OAAAzR,WAAAmV,QAEA,SAYA,QAAAlD,GAAAjS,GACA,sBAAAA,YAAA,MAAAA,GAAAsS,EAuBA,QAAAQ,GAAA9S,GAGA,GAAAiM,SAAAjM,EACA,SAAAA,IAAA,UAAAiM,GAAA,YAAAA,GAtHA,GAAAmG,GAAA,QAMAE,EAAA,iBAyBAJ,EAAAH,EAAA,SA0FAhU,GAAAD,QAAA+W,GjBg/DM,SAAU9W,EAAQD,GkB9kExB,QAAA2W,GAAAK,EAAAQ,GACA,qBAAAR,GACA,SAAAtV,WAAA+V,EAGA,OADAD,GAAAE,EAAA5T,SAAA0T,EAAAR,EAAAlU,OAAA,GAAA0U,GAAA,KACA,WAMA,IALA,GAAAG,GAAAJ,UACA5D,KACA7Q,EAAA4U,EAAAC,EAAA7U,OAAA0U,EAAA,GACAI,EAAAzC,MAAArS,KAEA6Q,EAAA7Q,GACA8U,EAAAjE,GAAAgE,EAAAH,EAAA7D,EAEA,QAAA6D,GACA,aAAAR,GAAAjW,KAAAR,KAAAqX,EACA,cAAAZ,GAAAjW,KAAAR,KAAAoX,EAAA,GAAAC,EACA,cAAAZ,GAAAjW,KAAAR,KAAAoX,EAAA,GAAAA,EAAA,GAAAC,GAEA,GAAAC,GAAA1C,MAAAqC,EAAA,EAEA,KADA7D,OACAA,EAAA6D,GACAK,EAAAlE,GAAAgE,EAAAhE,EAGA,OADAkE,GAAAL,GAAAI,EACAZ,EAAAM,MAAA/W,KAAAsX,IApDA,GAAAJ,GAAA,sBAGAC,EAAAI,KAAAC,GAqDA9X,GAAAD,QAAA2W,GlB6nEM,SAAU1W,EAAQD,GmB/rExBC,EAAAD,QAAA,mcnBwsEM,SAAUC,EAAQD,GoBxsExBC,EAAAD,QAAA,wlBpBitEM,SAAUC,EAAQD,GqBjtExBC,EAAAD,QAAA,wlBrB0tEM,SAAUC,EAAQD,GsB1tExBC,EAAAD,QAAA,miBtBmuEM,SAAUC,EAAQD,GuBnuExBC,EAAAD,QAAA","file":"clappr-chromecast-plugin.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"clappr\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"clappr\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ChromecastPlugin\"] = factory(require(\"clappr\"));\n\telse\n\t\troot[\"ChromecastPlugin\"] = factory(root[\"Clappr\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"clappr\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"clappr\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ChromecastPlugin\"] = factory(require(\"clappr\"));\n\telse\n\t\troot[\"ChromecastPlugin\"] = factory(root[\"Clappr\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!***************************!*\\\n !*** ./src/chromecast.js ***!\n \\***************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\tvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\t\n\tvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\t\n\tfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\t\n\tvar _clappr = __webpack_require__(/*! clappr */ 1);\n\t\n\tvar _chromecast_playback = __webpack_require__(/*! ./chromecast_playback */ 2);\n\t\n\tvar _chromecast_playback2 = _interopRequireDefault(_chromecast_playback);\n\t\n\tvar _publicStyleScss = __webpack_require__(/*! ./public/style.scss */ 4);\n\t\n\tvar _publicStyleScss2 = _interopRequireDefault(_publicStyleScss);\n\t\n\tvar _lodashAssign = __webpack_require__(/*! lodash.assign */ 6);\n\t\n\tvar _lodashAssign2 = _interopRequireDefault(_lodashAssign);\n\t\n\tvar _publicIc_cast_24dpSvg = __webpack_require__(/*! ./public/ic_cast_24dp.svg */ 17);\n\t\n\tvar _publicIc_cast_24dpSvg2 = _interopRequireDefault(_publicIc_cast_24dpSvg);\n\t\n\tvar _publicIc_cast0_24dpSvg = __webpack_require__(/*! ./public/ic_cast0_24dp.svg */ 18);\n\t\n\tvar _publicIc_cast0_24dpSvg2 = _interopRequireDefault(_publicIc_cast0_24dpSvg);\n\t\n\tvar _publicIc_cast1_24dpSvg = __webpack_require__(/*! ./public/ic_cast1_24dp.svg */ 19);\n\t\n\tvar _publicIc_cast1_24dpSvg2 = _interopRequireDefault(_publicIc_cast1_24dpSvg);\n\t\n\tvar _publicIc_cast2_24dpSvg = __webpack_require__(/*! ./public/ic_cast2_24dp.svg */ 20);\n\t\n\tvar _publicIc_cast2_24dpSvg2 = _interopRequireDefault(_publicIc_cast2_24dpSvg);\n\t\n\tvar _publicIc_cast_connected_24dpSvg = __webpack_require__(/*! ./public/ic_cast_connected_24dp.svg */ 21);\n\t\n\tvar _publicIc_cast_connected_24dpSvg2 = _interopRequireDefault(_publicIc_cast_connected_24dpSvg);\n\t\n\tvar DEVICE_STATE = {\n\t 'IDLE': 0,\n\t 'ACTIVE': 1,\n\t 'WARNING': 2,\n\t 'ERROR': 3\n\t};\n\t\n\tvar DEFAULT_CLAPPR_APP_ID = '9DFB77C0';\n\t\n\tvar MIMETYPES = {\n\t 'mp4': 'video/mp4',\n\t 'ogg': 'video/ogg',\n\t '3gpp': 'video/3gpp',\n\t 'webm': 'video/webm',\n\t 'mkv': 'video/x-matroska',\n\t 'm3u8': 'application/x-mpegurl',\n\t 'mpd': 'application/dash+xml'\n\t};\n\tMIMETYPES['ogv'] = MIMETYPES['ogg'];\n\tMIMETYPES['3gp'] = MIMETYPES['3gpp'];\n\t\n\tvar ChromecastPlugin = (function (_UICorePlugin) {\n\t _inherits(ChromecastPlugin, _UICorePlugin);\n\t\n\t _createClass(ChromecastPlugin, [{\n\t key: 'version',\n\t get: function get() {\n\t return (\"0.1.0\");\n\t }\n\t }, {\n\t key: 'name',\n\t get: function get() {\n\t return 'chromecast';\n\t }\n\t }, {\n\t key: 'tagName',\n\t get: function get() {\n\t return 'button';\n\t }\n\t }, {\n\t key: 'attributes',\n\t get: function get() {\n\t return {\n\t 'class': 'chromecast-button'\n\t };\n\t }\n\t }, {\n\t key: 'events',\n\t get: function get() {\n\t return {\n\t 'click': 'click'\n\t };\n\t }\n\t }, {\n\t key: 'options',\n\t get: function get() {\n\t return this.core.options.chromecast || (this.core.options.chromecast = {});\n\t }\n\t }, {\n\t key: 'container',\n\t get: function get() {\n\t return this.core.activeContainer;\n\t }\n\t }], [{\n\t key: 'Movie',\n\t get: function get() {\n\t return 'movie';\n\t }\n\t }, {\n\t key: 'TvShow',\n\t get: function get() {\n\t return 'tv_show';\n\t }\n\t }, {\n\t key: 'Generic',\n\t get: function get() {\n\t return 'none';\n\t }\n\t }, {\n\t key: 'version',\n\t get: function get() {\n\t return (\"0.1.0\");\n\t }\n\t }]);\n\t\n\t function ChromecastPlugin(core) {\n\t _classCallCheck(this, ChromecastPlugin);\n\t\n\t _get(Object.getPrototypeOf(ChromecastPlugin.prototype), 'constructor', this).call(this, core);\n\t\n\t this.bootTryDelay = this.options.bootTryDelay || 500; // Default is 500 milliseconds between each attempt\n\t this.bootMaxTryCount = this.options.bootMaxTryCount || 6; // Default is 6 attempts (3 seconds)\n\t this.bootTryCount = 0;\n\t\n\t if (_clappr.Browser.isChrome) {\n\t this.appId = this.options.appId || DEFAULT_CLAPPR_APP_ID;\n\t this.deviceState = DEVICE_STATE.IDLE;\n\t this.embedScript();\n\t } else {\n\t this.disable();\n\t }\n\t }\n\t\n\t _createClass(ChromecastPlugin, [{\n\t key: 'bindEvents',\n\t value: function bindEvents() {\n\t this.listenTo(this.core.mediaControl, _clappr.Events.MEDIACONTROL_RENDERED, this.render);\n\t this.listenTo(this.core, _clappr.Events.CORE_ACTIVE_CONTAINER_CHANGED, this.containerChanged);\n\t if (this.container) {\n\t this.listenTo(this.container, _clappr.Events.CONTAINER_TIMEUPDATE, this.containerTimeUpdate);\n\t this.listenTo(this.container, _clappr.Events.CONTAINER_PLAY, this.containerPlay);\n\t this.listenTo(this.container, _clappr.Events.CONTAINER_ENDED, this.sessionStopped);\n\t }\n\t }\n\t }, {\n\t key: 'enable',\n\t value: function enable() {\n\t _get(Object.getPrototypeOf(ChromecastPlugin.prototype), 'enable', this).call(this);\n\t this.render();\n\t this.embedScript();\n\t }\n\t }, {\n\t key: 'embedScript',\n\t value: function embedScript() {\n\t var _this = this;\n\t\n\t if (!window.chrome || !window.chrome.cast || !window.chrome.cast.isAvailable) {\n\t var script = document.createElement('script');\n\t script.setAttribute('type', 'text/javascript');\n\t script.setAttribute('async', 'async');\n\t script.setAttribute('src', 'https://www.gstatic.com/cv/js/sender/v1/cast_sender.js');\n\t script.onload = function () {\n\t return _this.bootstrapCastApi();\n\t };\n\t document.body.appendChild(script);\n\t } else {\n\t this.bootstrapCastApi();\n\t }\n\t }\n\t }, {\n\t key: 'bootstrapCastApi',\n\t value: function bootstrapCastApi() {\n\t var _this2 = this;\n\t\n\t this.bootTryCount++;\n\t\n\t if (this.bootTryCount > this.bootMaxTryCount) {\n\t this.bootTryCount = 0;\n\t _clappr.Log.warn('GCastApi bootstrap timeout');\n\t this.disable();\n\t return;\n\t }\n\t\n\t // The \"chrome\" property may not be available immediately on some iOS devices\n\t if (window.chrome) {\n\t this.bootTryCount = 0;\n\t\n\t if (window.chrome.cast && window.chrome.cast.isAvailable) {\n\t this.appId = this.appId || DEFAULT_CLAPPR_APP_ID;\n\t this.initializeCastApi();\n\t } else {\n\t window['__onGCastApiAvailable'] = function (loaded, errorInfo) {\n\t if (loaded) {\n\t _this2.appId = _this2.appId || DEFAULT_CLAPPR_APP_ID;\n\t _this2.initializeCastApi();\n\t } else {\n\t _clappr.Log.warn('GCastApi error', errorInfo);\n\t _this2.disable();\n\t }\n\t };\n\t }\n\t } else {\n\t setTimeout(function () {\n\t _this2.bootstrapCastApi();\n\t }, this.bootTryDelay);\n\t }\n\t }\n\t }, {\n\t key: 'initializeCastApi',\n\t value: function initializeCastApi() {\n\t var _this3 = this;\n\t\n\t var autoJoinPolicy = chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED;\n\t var sessionRequest = new chrome.cast.SessionRequest(this.appId);\n\t var apiConfig = new chrome.cast.ApiConfig(sessionRequest, function (session) {\n\t return _this3.sessionListener(session);\n\t }, function (e) {\n\t return _this3.receiverListener(e);\n\t }, autoJoinPolicy);\n\t chrome.cast.initialize(apiConfig, function () {\n\t return _clappr.Log.debug(_this3.name, 'init success');\n\t }, function () {\n\t return _clappr.Log.warn(_this3.name, 'init error');\n\t });\n\t }\n\t }, {\n\t key: 'sessionListener',\n\t value: function sessionListener(session) {\n\t _clappr.Log.debug(this.name, 'new session id:' + session.sessionId);\n\t this.newSession(session);\n\t }\n\t }, {\n\t key: 'sessionUpdateListener',\n\t value: function sessionUpdateListener() {\n\t if (this.session) {\n\t _clappr.Log.debug(this.name, this.session.status);\n\t if (this.session.status === chrome.cast.SessionStatus.STOPPED) {\n\t this.sessionStopped();\n\t this.session = null;\n\t }\n\t }\n\t }\n\t }, {\n\t key: 'receiverListener',\n\t value: function receiverListener(e) {\n\t if (e === chrome.cast.ReceiverAvailability.AVAILABLE) {\n\t _clappr.Log.debug(this.name, 'receiver found');\n\t this.show();\n\t } else {\n\t _clappr.Log.debug(this.name, 'receiver list empty');\n\t this.hide();\n\t }\n\t }\n\t }, {\n\t key: 'launchSuccess',\n\t value: function launchSuccess(session) {\n\t this.renderConnected();\n\t clearInterval(this.connectAnimInterval);\n\t this.core.mediaControl.resetKeepVisible();\n\t _clappr.Log.debug(this.name, 'launch success - session: ' + session.sessionId);\n\t this.newSession(session);\n\t }\n\t }, {\n\t key: 'launchError',\n\t value: function launchError(e) {\n\t _clappr.Log.debug(this.name, 'error on launch', e);\n\t this.renderDisconnected();\n\t clearInterval(this.connectAnimInterval);\n\t this.core.mediaControl.resetKeepVisible();\n\t this.container.play();\n\t }\n\t }, {\n\t key: 'loadMediaSuccess',\n\t value: function loadMediaSuccess(how, mediaSession) {\n\t _clappr.Log.debug(this.name, 'new media session', mediaSession, '(', how, ')');\n\t\n\t this.originalPlayback = this.core.activePlayback;\n\t\n\t var options = (0, _lodashAssign2['default'])({}, this.originalPlayback.options, {\n\t currentMedia: mediaSession,\n\t mediaControl: this.core.mediaControl,\n\t poster: this.core.options.poster,\n\t settings: this.originalPlayback.settings\n\t });\n\t this.src = this.originalPlayback.src;\n\t this.playbackProxy = new _chromecast_playback2['default'](options);\n\t this.playbackProxy.render();\n\t\n\t this.mediaSession = mediaSession;\n\t\n\t this.originalPlayback.$el.remove();\n\t\n\t var container = this.core.activeContainer;\n\t container.$el.append(this.playbackProxy.$el);\n\t container.stopListening();\n\t container.playback = this.playbackProxy;\n\t container.bindEvents();\n\t container.settingsUpdate();\n\t }\n\t }, {\n\t key: 'loadMediaError',\n\t value: function loadMediaError(e) {\n\t _clappr.Log.warn(this.name, 'media error', e);\n\t }\n\t }, {\n\t key: 'newSession',\n\t value: function newSession(session) {\n\t var _this4 = this;\n\t\n\t this.session = session;\n\t this.deviceState = DEVICE_STATE.ACTIVE;\n\t this.renderConnected();\n\t\n\t session.addUpdateListener(function () {\n\t return _this4.sessionUpdateListener();\n\t });\n\t\n\t this.containerPlay();\n\t }\n\t }, {\n\t key: 'sessionStopped',\n\t value: function sessionStopped() {\n\t this.renderDisconnected();\n\t\n\t var time = this.currentTime;\n\t\n\t var playerState = undefined;\n\t if (this.mediaSession) {\n\t playerState = this.mediaSession.playerState;\n\t this.mediaSession = null;\n\t }\n\t\n\t this.core.load(this.src || this.core.options.sources);\n\t\n\t var container = this.core.activeContainer;\n\t\n\t if (this.playbackProxy) {\n\t if (this.playbackProxy.isPlaying() || playerState === 'PAUSED') {\n\t container.once(_clappr.Events.CONTAINER_READY, function () {\n\t container.play();\n\t container.playback.seek(100 * time / container.getDuration());\n\t });\n\t }\n\t this.playbackProxy.stop();\n\t }\n\t }\n\t }, {\n\t key: 'loadMedia',\n\t value: function loadMedia() {\n\t var _this5 = this;\n\t\n\t this.container.pause();\n\t var src = this.container.options.src;\n\t _clappr.Log.debug(this.name, 'loading... ' + src);\n\t var mediaInfo = this.createMediaInfo(src);\n\t var request = new chrome.cast.media.LoadRequest(mediaInfo);\n\t request.autoplay = true;\n\t request.currentTime = this.currentTime || 0;\n\t this.session.loadMedia(request, function (mediaSession) {\n\t return _this5.loadMediaSuccess('loadMedia', mediaSession);\n\t }, function (e) {\n\t return _this5.loadMediaError(e);\n\t });\n\t }\n\t }, {\n\t key: 'createMediaInfo',\n\t value: function createMediaInfo(src) {\n\t var mimeType = ChromecastPlugin.mimeTypeFor(src);\n\t var mediaInfo = new chrome.cast.media.MediaInfo(src);\n\t mediaInfo.contentType = this.options.contentType || mimeType;\n\t mediaInfo.customData = this.options.customData;\n\t var metadata = this.createMediaMetadata();\n\t mediaInfo.metadata = metadata;\n\t return mediaInfo;\n\t }\n\t }, {\n\t key: 'createMediaMetadata',\n\t value: function createMediaMetadata() {\n\t this.options.media || (this.options.media = {});\n\t var type = this.options.media.type;\n\t\n\t var metadata = this.createCastMediaMetadata(type);\n\t metadata.title = this.options.media.title;\n\t metadata.subtitle = this.options.media.subtitle;\n\t metadata.releaseDate = this.options.media.releaseDate;\n\t\n\t if (type === ChromecastPlugin.TvShow) {\n\t metadata.episode = this.options.media.episode;\n\t metadata.originalAirdate = this.options.media.originalAirdate;\n\t metadata.season = this.options.media.season;\n\t metadata.seriesTitle = this.options.media.seriesTitle;\n\t } else if (type === ChromecastPlugin.Movie) {\n\t metadata.studio = this.options.media.studio;\n\t }\n\t\n\t if (this.options.media.images) {\n\t metadata.images = this.options.media.images.map(function (url) {\n\t return new chrome.cast.Image(url);\n\t });\n\t }\n\t if (!metadata.images && this.core.options.poster) {\n\t metadata.images = [new chrome.cast.Image(this.core.options.poster)];\n\t }\n\t return metadata;\n\t }\n\t }, {\n\t key: 'createCastMediaMetadata',\n\t value: function createCastMediaMetadata(type) {\n\t switch (type) {\n\t case ChromecastPlugin.Movie:\n\t return new chrome.cast.media.MovieMediaMetadata();\n\t case ChromecastPlugin.TvShow:\n\t return new chrome.cast.media.TvShowMediaMetadata();\n\t default:\n\t return new chrome.cast.media.GenericMediaMetadata();\n\t }\n\t }\n\t }, {\n\t key: 'show',\n\t value: function show() {\n\t this.$el.show();\n\t }\n\t }, {\n\t key: 'hide',\n\t value: function hide() {\n\t this.$el.hide();\n\t }\n\t }, {\n\t key: 'click',\n\t value: function click() {\n\t var _this6 = this;\n\t\n\t this.container.pause();\n\t chrome.cast.requestSession(function (session) {\n\t return _this6.launchSuccess(session);\n\t }, function (e) {\n\t return _this6.launchError(e);\n\t });\n\t if (!this.session) {\n\t (function () {\n\t var position = 0;\n\t var connectingIcons = [_publicIc_cast0_24dpSvg2['default'], _publicIc_cast1_24dpSvg2['default'], _publicIc_cast2_24dpSvg2['default']];\n\t clearInterval(_this6.connectAnimInterval);\n\t _this6.connectAnimInterval = setInterval(function () {\n\t _this6.$el.html(connectingIcons[position]);\n\t position = (position + 1) % 3;\n\t }, 600);\n\t _this6.core.mediaControl.setKeepVisible();\n\t })();\n\t }\n\t }\n\t }, {\n\t key: 'containerChanged',\n\t value: function containerChanged() {\n\t this.stopListening();\n\t this.bindEvents();\n\t this.currentTime = 0;\n\t }\n\t }, {\n\t key: 'containerTimeUpdate',\n\t value: function containerTimeUpdate(timeProgress) {\n\t this.currentTime = timeProgress.current;\n\t }\n\t }, {\n\t key: 'containerPlay',\n\t value: function containerPlay() {\n\t if (this.session && (!this.mediaSession || this.mediaSession.playerState === 'IDLE' || this.mediaSession.playerState === 'PAUSED')) {\n\t _clappr.Log.debug(this.name, 'load media');\n\t this.currentTime = this.currentTime || 0;\n\t this.loadMedia();\n\t }\n\t }\n\t }, {\n\t key: 'renderConnected',\n\t value: function renderConnected() {\n\t this.$el.html(_publicIc_cast_connected_24dpSvg2['default']);\n\t }\n\t }, {\n\t key: 'renderDisconnected',\n\t value: function renderDisconnected() {\n\t this.$el.html(_publicIc_cast_24dpSvg2['default']);\n\t }\n\t }, {\n\t key: 'render',\n\t value: function render() {\n\t this.session ? this.renderConnected() : this.renderDisconnected();\n\t this.core.mediaControl.$el.find('.media-control-right-panel[data-media-control]').append(this.$el);\n\t this.$style && this.$style.remove();\n\t this.$style = _clappr.Styler.getStyleFor(_publicStyleScss2['default'], { baseUrl: this.core.options.baseUrl });\n\t this.core.$el.append(this.$style);\n\t return this;\n\t }\n\t }], [{\n\t key: 'mimeTypeFor',\n\t value: function mimeTypeFor(srcUrl) {\n\t var extension = (srcUrl.split('?')[0].match(/.*\\.(.*)$/) || [])[1];\n\t if (MIMETYPES[extension]) {\n\t return MIMETYPES[extension];\n\t } else if (srcUrl.indexOf('.ism') > -1) {\n\t return 'application/vnd.ms-sstr+xml';\n\t }\n\t }\n\t }]);\n\t\n\t return ChromecastPlugin;\n\t})(_clappr.UICorePlugin);\n\t\n\texports['default'] = ChromecastPlugin;\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 1 */\n/*!******************************************************************************************!*\\\n !*** external {\"amd\":\"clappr\",\"commonjs\":\"clappr\",\"commonjs2\":\"clappr\",\"root\":\"Clappr\"} ***!\n \\******************************************************************************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n/***/ }),\n/* 2 */\n/*!************************************!*\\\n !*** ./src/chromecast_playback.js ***!\n \\************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\tvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\t\n\tvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\t\n\tfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\t\n\tvar _clappr = __webpack_require__(/*! clappr */ 1);\n\t\n\tvar _publicChromecastHtml = __webpack_require__(/*! ./public/chromecast.html */ 3);\n\t\n\tvar _publicChromecastHtml2 = _interopRequireDefault(_publicChromecastHtml);\n\t\n\tvar TICK_INTERVAL = 100;\n\t\n\tvar ChromecastPlayback = (function (_Playback) {\n\t _inherits(ChromecastPlayback, _Playback);\n\t\n\t _createClass(ChromecastPlayback, [{\n\t key: 'name',\n\t get: function get() {\n\t return 'chromecast_playback';\n\t }\n\t }, {\n\t key: 'template',\n\t get: function get() {\n\t return (0, _clappr.template)(_publicChromecastHtml2['default']);\n\t }\n\t }, {\n\t key: 'attributes',\n\t get: function get() {\n\t return { 'class': 'chromecast-playback' };\n\t }\n\t }, {\n\t key: 'isReady',\n\t get: function get() {\n\t return true;\n\t }\n\t }]);\n\t\n\t function ChromecastPlayback(options) {\n\t var _this = this;\n\t\n\t _classCallCheck(this, ChromecastPlayback);\n\t\n\t _get(Object.getPrototypeOf(ChromecastPlayback.prototype), 'constructor', this).call(this, options);\n\t this.src = options.src;\n\t this.currentMedia = options.currentMedia;\n\t this.mediaControl = options.mediaControl;\n\t this.currentMedia.addUpdateListener(function () {\n\t return _this.onMediaStatusUpdate();\n\t });\n\t this.settings = options.settings;\n\t var noVolume = function noVolume(name) {\n\t return name != 'volume';\n\t };\n\t this.settings['default'] && (this.settings['default'] = this.settings['default'].filter(noVolume));\n\t this.settings.left && (this.settings.left = this.settings.left.filter(noVolume));\n\t this.settings.right && (this.settings.right = this.settings.right.filter(noVolume));\n\t }\n\t\n\t _createClass(ChromecastPlayback, [{\n\t key: 'render',\n\t value: function render() {\n\t var template = this.template();\n\t this.$el.html(template);\n\t if (this.options.poster) {\n\t this.$('.chromecast-playback-background').css('background-image', 'url(' + this.options.poster + ')');\n\t } else {\n\t this.$('.chromecast-playback-background').css('background-color', '#666');\n\t }\n\t }\n\t }, {\n\t key: 'play',\n\t value: function play() {\n\t this.currentMedia.play();\n\t }\n\t }, {\n\t key: 'pause',\n\t value: function pause() {\n\t this.stopTimer();\n\t this.currentMedia.pause();\n\t }\n\t }, {\n\t key: 'stop',\n\t value: function stop() {\n\t this.stopTimer();\n\t this.currentMedia.pause(); // FIXME: properly handle media stop\n\t }\n\t }, {\n\t key: 'seek',\n\t value: function seek(time) {\n\t var _this2 = this;\n\t\n\t this.stopTimer();\n\t var request = new chrome.cast.media.SeekRequest();\n\t request.currentTime = time;\n\t this.currentMedia.seek(request, function () {\n\t return _this2.startTimer();\n\t }, function () {\n\t return _clappr.Log.warn('seek failed');\n\t });\n\t }\n\t }, {\n\t key: 'seekPercentage',\n\t value: function seekPercentage(percentage) {\n\t if (percentage >= 0 && percentage <= 100) {\n\t var duration = this.getDuration();\n\t this.seek(percentage * duration / 100);\n\t }\n\t }\n\t }, {\n\t key: 'startTimer',\n\t value: function startTimer() {\n\t var _this3 = this;\n\t\n\t this.timer = setInterval(function () {\n\t return _this3.updateMediaControl();\n\t }, TICK_INTERVAL);\n\t }\n\t }, {\n\t key: 'stopTimer',\n\t value: function stopTimer() {\n\t clearInterval(this.timer);\n\t this.timer = null;\n\t }\n\t }, {\n\t key: 'getDuration',\n\t value: function getDuration() {\n\t return this.currentMedia.media.duration;\n\t }\n\t }, {\n\t key: 'isPlaying',\n\t value: function isPlaying() {\n\t return this.currentMedia.playerState === 'PLAYING' || this.currentMedia.playerState === 'BUFFERING';\n\t }\n\t }, {\n\t key: 'getPlaybackType',\n\t value: function getPlaybackType() {\n\t return this.currentMedia.streamType == 'LIVE' ? _clappr.Playback.LIVE : _clappr.Playback.VOD;\n\t }\n\t }, {\n\t key: 'onMediaStatusUpdate',\n\t value: function onMediaStatusUpdate() {\n\t this.mediaControl.changeTogglePlay();\n\t if (this.isPlaying() && !this.timer) {\n\t this.startTimer();\n\t }\n\t\n\t if (this.currentMedia.playerState === 'BUFFERING') {\n\t this.isBuffering = true;\n\t this.trigger(_clappr.Events.PLAYBACK_BUFFERING, this.name);\n\t } else if (this.currentMedia.playerState === 'PLAYING') {\n\t if (this.isBuffering) {\n\t this.isBuffering = false;\n\t this.trigger(_clappr.Events.PLAYBACK_BUFFERFULL, this.name);\n\t }\n\t if (this.prevState !== this.currentMedia.playerState) {\n\t this.trigger(_clappr.Events.PLAYBACK_PLAY, this.name);\n\t }\n\t } else if (this.currentMedia.playerState === 'IDLE') {\n\t if (this.isBuffering) {\n\t this.isBuffering = false;\n\t this.trigger(_clappr.Events.PLAYBACK_BUFFERFULL, this.name);\n\t }\n\t this.trigger(_clappr.Events.PLAYBACK_ENDED, this.name);\n\t } else if (this.currentMedia.playerState === 'PAUSED') {\n\t if (this.prevState !== this.currentMedia.playerState) {\n\t this.trigger(_clappr.Events.PLAYBACK_PAUSE, this.name);\n\t }\n\t }\n\t\n\t this.prevState = this.currentMedia.playerState;\n\t }\n\t }, {\n\t key: 'updateMediaControl',\n\t value: function updateMediaControl() {\n\t var position = this.currentMedia.getEstimatedTime();\n\t var duration = this.currentMedia.media.duration;\n\t this.trigger(_clappr.Events.PLAYBACK_TIMEUPDATE, { current: position, total: duration }, this.name);\n\t }\n\t }, {\n\t key: 'show',\n\t value: function show() {\n\t this.$el.show();\n\t }\n\t }, {\n\t key: 'hide',\n\t value: function hide() {\n\t this.$el.hide();\n\t }\n\t }]);\n\t\n\t return ChromecastPlayback;\n\t})(_clappr.Playback);\n\t\n\texports['default'] = ChromecastPlayback;\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/public/chromecast.html ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = \"
\";\n\n/***/ }),\n/* 4 */\n/*!*******************************!*\\\n !*** ./src/public/style.scss ***!\n \\*******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\texports = module.exports = __webpack_require__(/*! ../../~/css-loader/lib/css-base.js */ 5)();\n\t// imports\n\t\n\t\n\t// module\n\texports.push([module.id, \".chromecast-playback{height:100%;width:100%}.chromecast-playback .chromecast-playback-background,.chromecast-playback .chromecast-playback-overlay{position:absolute;height:100%;width:100%}.chromecast-playback .chromecast-playback-background{background-size:contain}.chromecast-playback .chromecast-playback-overlay{background-color:#000;opacity:.4}.chromecast-button{background:transparent;border:0;width:32px;height:32px;font-size:22px;line-height:32px;letter-spacing:0;margin:0 6px;color:#fff;opacity:.5;vertical-align:middle;text-align:left;cursor:pointer;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transition:all .1s ease}.chromecast-button:hover{opacity:.75;text-shadow:hsla(0,0%,100%,.8) 0 0 5px}.chromecast-button:focus{outline:none}.chromecast-button svg{width:24px;height:24px}.chromecast-button svg #cast,.chromecast-button svg #cast-on,.chromecast-button svg #Path{fill:#fff;stroke:#fff;stroke-width:.5px}\", \"\"]);\n\t\n\t// exports\n\n\n/***/ }),\n/* 5 */\n/*!**************************************!*\\\n !*** ./~/css-loader/lib/css-base.js ***!\n \\**************************************/\n/***/ (function(module, exports) {\n\n\t/*\r\n\t\tMIT License http://www.opensource.org/licenses/mit-license.php\r\n\t\tAuthor Tobias Koppers @sokra\r\n\t*/\r\n\t// css base code, injected by the css-loader\r\n\tmodule.exports = function() {\r\n\t\tvar list = [];\r\n\t\r\n\t\t// return the list of modules as css string\r\n\t\tlist.toString = function toString() {\r\n\t\t\tvar result = [];\r\n\t\t\tfor(var i = 0; i < this.length; i++) {\r\n\t\t\t\tvar item = this[i];\r\n\t\t\t\tif(item[2]) {\r\n\t\t\t\t\tresult.push(\"@media \" + item[2] + \"{\" + item[1] + \"}\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tresult.push(item[1]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn result.join(\"\");\r\n\t\t};\r\n\t\r\n\t\t// import a list of modules into the list\r\n\t\tlist.i = function(modules, mediaQuery) {\r\n\t\t\tif(typeof modules === \"string\")\r\n\t\t\t\tmodules = [[null, modules, \"\"]];\r\n\t\t\tvar alreadyImportedModules = {};\r\n\t\t\tfor(var i = 0; i < this.length; i++) {\r\n\t\t\t\tvar id = this[i][0];\r\n\t\t\t\tif(typeof id === \"number\")\r\n\t\t\t\t\talreadyImportedModules[id] = true;\r\n\t\t\t}\r\n\t\t\tfor(i = 0; i < modules.length; i++) {\r\n\t\t\t\tvar item = modules[i];\r\n\t\t\t\t// skip already imported module\r\n\t\t\t\t// this implementation is not 100% perfect for weird media query combinations\r\n\t\t\t\t// when a module is imported multiple times with different media queries.\r\n\t\t\t\t// I hope this will never occur (Hey this way we have smaller bundles)\r\n\t\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\r\n\t\t\t\t\tif(mediaQuery && !item[2]) {\r\n\t\t\t\t\t\titem[2] = mediaQuery;\r\n\t\t\t\t\t} else if(mediaQuery) {\r\n\t\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlist.push(item);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\treturn list;\r\n\t};\r\n\n\n/***/ }),\n/* 6 */\n/*!**********************************!*\\\n !*** ./~/lodash.assign/index.js ***!\n \\**********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * lodash 3.2.0 (Custom Build) \n\t * Build: `lodash modern modularize exports=\"npm\" -o ./`\n\t * Copyright 2012-2015 The Dojo Foundation \n\t * Based on Underscore.js 1.8.3 \n\t * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t * Available under MIT license \n\t */\n\tvar baseAssign = __webpack_require__(/*! lodash._baseassign */ 7),\n\t createAssigner = __webpack_require__(/*! lodash._createassigner */ 13),\n\t keys = __webpack_require__(/*! lodash.keys */ 9);\n\t\n\t/**\n\t * A specialized version of `_.assign` for customizing assigned values without\n\t * support for argument juggling, multiple sources, and `this` binding `customizer`\n\t * functions.\n\t *\n\t * @private\n\t * @param {Object} object The destination object.\n\t * @param {Object} source The source object.\n\t * @param {Function} customizer The function to customize assigned values.\n\t * @returns {Object} Returns `object`.\n\t */\n\tfunction assignWith(object, source, customizer) {\n\t var index = -1,\n\t props = keys(source),\n\t length = props.length;\n\t\n\t while (++index < length) {\n\t var key = props[index],\n\t value = object[key],\n\t result = customizer(value, source[key], key, object, source);\n\t\n\t if ((result === result ? (result !== value) : (value === value)) ||\n\t (value === undefined && !(key in object))) {\n\t object[key] = result;\n\t }\n\t }\n\t return object;\n\t}\n\t\n\t/**\n\t * Assigns own enumerable properties of source object(s) to the destination\n\t * object. Subsequent sources overwrite property assignments of previous sources.\n\t * If `customizer` is provided it is invoked to produce the assigned values.\n\t * The `customizer` is bound to `thisArg` and invoked with five arguments:\n\t * (objectValue, sourceValue, key, object, source).\n\t *\n\t * **Note:** This method mutates `object` and is based on\n\t * [`Object.assign`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @alias extend\n\t * @category Object\n\t * @param {Object} object The destination object.\n\t * @param {...Object} [sources] The source objects.\n\t * @param {Function} [customizer] The function to customize assigned values.\n\t * @param {*} [thisArg] The `this` binding of `customizer`.\n\t * @returns {Object} Returns `object`.\n\t * @example\n\t *\n\t * _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' });\n\t * // => { 'user': 'fred', 'age': 40 }\n\t *\n\t * // using a customizer callback\n\t * var defaults = _.partialRight(_.assign, function(value, other) {\n\t * return _.isUndefined(value) ? other : value;\n\t * });\n\t *\n\t * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });\n\t * // => { 'user': 'barney', 'age': 36 }\n\t */\n\tvar assign = createAssigner(function(object, source, customizer) {\n\t return customizer\n\t ? assignWith(object, source, customizer)\n\t : baseAssign(object, source);\n\t});\n\t\n\tmodule.exports = assign;\n\n\n/***/ }),\n/* 7 */\n/*!***************************************!*\\\n !*** ./~/lodash._baseassign/index.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * lodash 3.2.0 (Custom Build) \n\t * Build: `lodash modern modularize exports=\"npm\" -o ./`\n\t * Copyright 2012-2015 The Dojo Foundation \n\t * Based on Underscore.js 1.8.3 \n\t * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t * Available under MIT license \n\t */\n\tvar baseCopy = __webpack_require__(/*! lodash._basecopy */ 8),\n\t keys = __webpack_require__(/*! lodash.keys */ 9);\n\t\n\t/**\n\t * The base implementation of `_.assign` without support for argument juggling,\n\t * multiple sources, and `customizer` functions.\n\t *\n\t * @private\n\t * @param {Object} object The destination object.\n\t * @param {Object} source The source object.\n\t * @returns {Object} Returns `object`.\n\t */\n\tfunction baseAssign(object, source) {\n\t return source == null\n\t ? object\n\t : baseCopy(source, keys(source), object);\n\t}\n\t\n\tmodule.exports = baseAssign;\n\n\n/***/ }),\n/* 8 */\n/*!*************************************!*\\\n !*** ./~/lodash._basecopy/index.js ***!\n \\*************************************/\n/***/ (function(module, exports) {\n\n\t/**\n\t * lodash 3.0.1 (Custom Build) \n\t * Build: `lodash modern modularize exports=\"npm\" -o ./`\n\t * Copyright 2012-2015 The Dojo Foundation \n\t * Based on Underscore.js 1.8.3 \n\t * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t * Available under MIT license \n\t */\n\t\n\t/**\n\t * Copies properties of `source` to `object`.\n\t *\n\t * @private\n\t * @param {Object} source The object to copy properties from.\n\t * @param {Array} props The property names to copy.\n\t * @param {Object} [object={}] The object to copy properties to.\n\t * @returns {Object} Returns `object`.\n\t */\n\tfunction baseCopy(source, props, object) {\n\t object || (object = {});\n\t\n\t var index = -1,\n\t length = props.length;\n\t\n\t while (++index < length) {\n\t var key = props[index];\n\t object[key] = source[key];\n\t }\n\t return object;\n\t}\n\t\n\tmodule.exports = baseCopy;\n\n\n/***/ }),\n/* 9 */\n/*!********************************!*\\\n !*** ./~/lodash.keys/index.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * lodash 3.1.2 (Custom Build) \n\t * Build: `lodash modern modularize exports=\"npm\" -o ./`\n\t * Copyright 2012-2015 The Dojo Foundation \n\t * Based on Underscore.js 1.8.3 \n\t * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t * Available under MIT license \n\t */\n\tvar getNative = __webpack_require__(/*! lodash._getnative */ 10),\n\t isArguments = __webpack_require__(/*! lodash.isarguments */ 11),\n\t isArray = __webpack_require__(/*! lodash.isarray */ 12);\n\t\n\t/** Used to detect unsigned integer values. */\n\tvar reIsUint = /^\\d+$/;\n\t\n\t/** Used for native method references. */\n\tvar objectProto = Object.prototype;\n\t\n\t/** Used to check objects for own properties. */\n\tvar hasOwnProperty = objectProto.hasOwnProperty;\n\t\n\t/* Native method references for those with the same name as other `lodash` methods. */\n\tvar nativeKeys = getNative(Object, 'keys');\n\t\n\t/**\n\t * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n\t * of an array-like value.\n\t */\n\tvar MAX_SAFE_INTEGER = 9007199254740991;\n\t\n\t/**\n\t * The base implementation of `_.property` without support for deep paths.\n\t *\n\t * @private\n\t * @param {string} key The key of the property to get.\n\t * @returns {Function} Returns the new function.\n\t */\n\tfunction baseProperty(key) {\n\t return function(object) {\n\t return object == null ? undefined : object[key];\n\t };\n\t}\n\t\n\t/**\n\t * Gets the \"length\" property value of `object`.\n\t *\n\t * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n\t * that affects Safari on at least iOS 8.1-8.3 ARM64.\n\t *\n\t * @private\n\t * @param {Object} object The object to query.\n\t * @returns {*} Returns the \"length\" value.\n\t */\n\tvar getLength = baseProperty('length');\n\t\n\t/**\n\t * Checks if `value` is array-like.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n\t */\n\tfunction isArrayLike(value) {\n\t return value != null && isLength(getLength(value));\n\t}\n\t\n\t/**\n\t * Checks if `value` is a valid array-like index.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n\t * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n\t */\n\tfunction isIndex(value, length) {\n\t value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n\t length = length == null ? MAX_SAFE_INTEGER : length;\n\t return value > -1 && value % 1 == 0 && value < length;\n\t}\n\t\n\t/**\n\t * Checks if `value` is a valid array-like length.\n\t *\n\t * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n\t */\n\tfunction isLength(value) {\n\t return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n\t}\n\t\n\t/**\n\t * A fallback implementation of `Object.keys` which creates an array of the\n\t * own enumerable property names of `object`.\n\t *\n\t * @private\n\t * @param {Object} object The object to query.\n\t * @returns {Array} Returns the array of property names.\n\t */\n\tfunction shimKeys(object) {\n\t var props = keysIn(object),\n\t propsLength = props.length,\n\t length = propsLength && object.length;\n\t\n\t var allowIndexes = !!length && isLength(length) &&\n\t (isArray(object) || isArguments(object));\n\t\n\t var index = -1,\n\t result = [];\n\t\n\t while (++index < propsLength) {\n\t var key = props[index];\n\t if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n\t result.push(key);\n\t }\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n\t * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n\t * @example\n\t *\n\t * _.isObject({});\n\t * // => true\n\t *\n\t * _.isObject([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isObject(1);\n\t * // => false\n\t */\n\tfunction isObject(value) {\n\t // Avoid a V8 JIT bug in Chrome 19-20.\n\t // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n\t var type = typeof value;\n\t return !!value && (type == 'object' || type == 'function');\n\t}\n\t\n\t/**\n\t * Creates an array of the own enumerable property names of `object`.\n\t *\n\t * **Note:** Non-object values are coerced to objects. See the\n\t * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n\t * for more details.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The object to query.\n\t * @returns {Array} Returns the array of property names.\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = 1;\n\t * this.b = 2;\n\t * }\n\t *\n\t * Foo.prototype.c = 3;\n\t *\n\t * _.keys(new Foo);\n\t * // => ['a', 'b'] (iteration order is not guaranteed)\n\t *\n\t * _.keys('hi');\n\t * // => ['0', '1']\n\t */\n\tvar keys = !nativeKeys ? shimKeys : function(object) {\n\t var Ctor = object == null ? undefined : object.constructor;\n\t if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n\t (typeof object != 'function' && isArrayLike(object))) {\n\t return shimKeys(object);\n\t }\n\t return isObject(object) ? nativeKeys(object) : [];\n\t};\n\t\n\t/**\n\t * Creates an array of the own and inherited enumerable property names of `object`.\n\t *\n\t * **Note:** Non-object values are coerced to objects.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The object to query.\n\t * @returns {Array} Returns the array of property names.\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = 1;\n\t * this.b = 2;\n\t * }\n\t *\n\t * Foo.prototype.c = 3;\n\t *\n\t * _.keysIn(new Foo);\n\t * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n\t */\n\tfunction keysIn(object) {\n\t if (object == null) {\n\t return [];\n\t }\n\t if (!isObject(object)) {\n\t object = Object(object);\n\t }\n\t var length = object.length;\n\t length = (length && isLength(length) &&\n\t (isArray(object) || isArguments(object)) && length) || 0;\n\t\n\t var Ctor = object.constructor,\n\t index = -1,\n\t isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n\t result = Array(length),\n\t skipIndexes = length > 0;\n\t\n\t while (++index < length) {\n\t result[index] = (index + '');\n\t }\n\t for (var key in object) {\n\t if (!(skipIndexes && isIndex(key, length)) &&\n\t !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n\t result.push(key);\n\t }\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = keys;\n\n\n/***/ }),\n/* 10 */\n/*!**************************************!*\\\n !*** ./~/lodash._getnative/index.js ***!\n \\**************************************/\n/***/ (function(module, exports) {\n\n\t/**\n\t * lodash 3.9.1 (Custom Build) \n\t * Build: `lodash modern modularize exports=\"npm\" -o ./`\n\t * Copyright 2012-2015 The Dojo Foundation \n\t * Based on Underscore.js 1.8.3 \n\t * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t * Available under MIT license \n\t */\n\t\n\t/** `Object#toString` result references. */\n\tvar funcTag = '[object Function]';\n\t\n\t/** Used to detect host constructors (Safari > 5). */\n\tvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\t\n\t/**\n\t * Checks if `value` is object-like.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n\t */\n\tfunction isObjectLike(value) {\n\t return !!value && typeof value == 'object';\n\t}\n\t\n\t/** Used for native method references. */\n\tvar objectProto = Object.prototype;\n\t\n\t/** Used to resolve the decompiled source of functions. */\n\tvar fnToString = Function.prototype.toString;\n\t\n\t/** Used to check objects for own properties. */\n\tvar hasOwnProperty = objectProto.hasOwnProperty;\n\t\n\t/**\n\t * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n\t * of values.\n\t */\n\tvar objToString = objectProto.toString;\n\t\n\t/** Used to detect if a method is native. */\n\tvar reIsNative = RegExp('^' +\n\t fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n\t .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n\t);\n\t\n\t/**\n\t * Gets the native function at `key` of `object`.\n\t *\n\t * @private\n\t * @param {Object} object The object to query.\n\t * @param {string} key The key of the method to get.\n\t * @returns {*} Returns the function if it's native, else `undefined`.\n\t */\n\tfunction getNative(object, key) {\n\t var value = object == null ? undefined : object[key];\n\t return isNative(value) ? value : undefined;\n\t}\n\t\n\t/**\n\t * Checks if `value` is classified as a `Function` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n\t * @example\n\t *\n\t * _.isFunction(_);\n\t * // => true\n\t *\n\t * _.isFunction(/abc/);\n\t * // => false\n\t */\n\tfunction isFunction(value) {\n\t // The use of `Object#toString` avoids issues with the `typeof` operator\n\t // in older versions of Chrome and Safari which return 'function' for regexes\n\t // and Safari 8 equivalents which return 'object' for typed array constructors.\n\t return isObject(value) && objToString.call(value) == funcTag;\n\t}\n\t\n\t/**\n\t * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n\t * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n\t * @example\n\t *\n\t * _.isObject({});\n\t * // => true\n\t *\n\t * _.isObject([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isObject(1);\n\t * // => false\n\t */\n\tfunction isObject(value) {\n\t // Avoid a V8 JIT bug in Chrome 19-20.\n\t // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n\t var type = typeof value;\n\t return !!value && (type == 'object' || type == 'function');\n\t}\n\t\n\t/**\n\t * Checks if `value` is a native function.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n\t * @example\n\t *\n\t * _.isNative(Array.prototype.push);\n\t * // => true\n\t *\n\t * _.isNative(_);\n\t * // => false\n\t */\n\tfunction isNative(value) {\n\t if (value == null) {\n\t return false;\n\t }\n\t if (isFunction(value)) {\n\t return reIsNative.test(fnToString.call(value));\n\t }\n\t return isObjectLike(value) && reIsHostCtor.test(value);\n\t}\n\t\n\tmodule.exports = getNative;\n\n\n/***/ }),\n/* 11 */\n/*!***************************************!*\\\n !*** ./~/lodash.isarguments/index.js ***!\n \\***************************************/\n/***/ (function(module, exports) {\n\n\t/**\n\t * lodash (Custom Build) \n\t * Build: `lodash modularize exports=\"npm\" -o ./`\n\t * Copyright jQuery Foundation and other contributors \n\t * Released under MIT license \n\t * Based on Underscore.js 1.8.3 \n\t * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t */\n\t\n\t/** Used as references for various `Number` constants. */\n\tvar MAX_SAFE_INTEGER = 9007199254740991;\n\t\n\t/** `Object#toString` result references. */\n\tvar argsTag = '[object Arguments]',\n\t funcTag = '[object Function]',\n\t genTag = '[object GeneratorFunction]';\n\t\n\t/** Used for built-in method references. */\n\tvar objectProto = Object.prototype;\n\t\n\t/** Used to check objects for own properties. */\n\tvar hasOwnProperty = objectProto.hasOwnProperty;\n\t\n\t/**\n\t * Used to resolve the\n\t * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n\t * of values.\n\t */\n\tvar objectToString = objectProto.toString;\n\t\n\t/** Built-in value references. */\n\tvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\t\n\t/**\n\t * Checks if `value` is likely an `arguments` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n\t * else `false`.\n\t * @example\n\t *\n\t * _.isArguments(function() { return arguments; }());\n\t * // => true\n\t *\n\t * _.isArguments([1, 2, 3]);\n\t * // => false\n\t */\n\tfunction isArguments(value) {\n\t // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n\t return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n\t (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n\t}\n\t\n\t/**\n\t * Checks if `value` is array-like. A value is considered array-like if it's\n\t * not a function and has a `value.length` that's an integer greater than or\n\t * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n\t * @example\n\t *\n\t * _.isArrayLike([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isArrayLike(document.body.children);\n\t * // => true\n\t *\n\t * _.isArrayLike('abc');\n\t * // => true\n\t *\n\t * _.isArrayLike(_.noop);\n\t * // => false\n\t */\n\tfunction isArrayLike(value) {\n\t return value != null && isLength(value.length) && !isFunction(value);\n\t}\n\t\n\t/**\n\t * This method is like `_.isArrayLike` except that it also checks if `value`\n\t * is an object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an array-like object,\n\t * else `false`.\n\t * @example\n\t *\n\t * _.isArrayLikeObject([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isArrayLikeObject(document.body.children);\n\t * // => true\n\t *\n\t * _.isArrayLikeObject('abc');\n\t * // => false\n\t *\n\t * _.isArrayLikeObject(_.noop);\n\t * // => false\n\t */\n\tfunction isArrayLikeObject(value) {\n\t return isObjectLike(value) && isArrayLike(value);\n\t}\n\t\n\t/**\n\t * Checks if `value` is classified as a `Function` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n\t * @example\n\t *\n\t * _.isFunction(_);\n\t * // => true\n\t *\n\t * _.isFunction(/abc/);\n\t * // => false\n\t */\n\tfunction isFunction(value) {\n\t // The use of `Object#toString` avoids issues with the `typeof` operator\n\t // in Safari 8-9 which returns 'object' for typed array and other constructors.\n\t var tag = isObject(value) ? objectToString.call(value) : '';\n\t return tag == funcTag || tag == genTag;\n\t}\n\t\n\t/**\n\t * Checks if `value` is a valid array-like length.\n\t *\n\t * **Note:** This method is loosely based on\n\t * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n\t * @example\n\t *\n\t * _.isLength(3);\n\t * // => true\n\t *\n\t * _.isLength(Number.MIN_VALUE);\n\t * // => false\n\t *\n\t * _.isLength(Infinity);\n\t * // => false\n\t *\n\t * _.isLength('3');\n\t * // => false\n\t */\n\tfunction isLength(value) {\n\t return typeof value == 'number' &&\n\t value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n\t}\n\t\n\t/**\n\t * Checks if `value` is the\n\t * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n\t * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n\t * @example\n\t *\n\t * _.isObject({});\n\t * // => true\n\t *\n\t * _.isObject([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isObject(_.noop);\n\t * // => true\n\t *\n\t * _.isObject(null);\n\t * // => false\n\t */\n\tfunction isObject(value) {\n\t var type = typeof value;\n\t return !!value && (type == 'object' || type == 'function');\n\t}\n\t\n\t/**\n\t * Checks if `value` is object-like. A value is object-like if it's not `null`\n\t * and has a `typeof` result of \"object\".\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n\t * @example\n\t *\n\t * _.isObjectLike({});\n\t * // => true\n\t *\n\t * _.isObjectLike([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isObjectLike(_.noop);\n\t * // => false\n\t *\n\t * _.isObjectLike(null);\n\t * // => false\n\t */\n\tfunction isObjectLike(value) {\n\t return !!value && typeof value == 'object';\n\t}\n\t\n\tmodule.exports = isArguments;\n\n\n/***/ }),\n/* 12 */\n/*!***********************************!*\\\n !*** ./~/lodash.isarray/index.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t/**\n\t * lodash 3.0.4 (Custom Build) \n\t * Build: `lodash modern modularize exports=\"npm\" -o ./`\n\t * Copyright 2012-2015 The Dojo Foundation \n\t * Based on Underscore.js 1.8.3 \n\t * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t * Available under MIT license \n\t */\n\t\n\t/** `Object#toString` result references. */\n\tvar arrayTag = '[object Array]',\n\t funcTag = '[object Function]';\n\t\n\t/** Used to detect host constructors (Safari > 5). */\n\tvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\t\n\t/**\n\t * Checks if `value` is object-like.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n\t */\n\tfunction isObjectLike(value) {\n\t return !!value && typeof value == 'object';\n\t}\n\t\n\t/** Used for native method references. */\n\tvar objectProto = Object.prototype;\n\t\n\t/** Used to resolve the decompiled source of functions. */\n\tvar fnToString = Function.prototype.toString;\n\t\n\t/** Used to check objects for own properties. */\n\tvar hasOwnProperty = objectProto.hasOwnProperty;\n\t\n\t/**\n\t * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n\t * of values.\n\t */\n\tvar objToString = objectProto.toString;\n\t\n\t/** Used to detect if a method is native. */\n\tvar reIsNative = RegExp('^' +\n\t fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n\t .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n\t);\n\t\n\t/* Native method references for those with the same name as other `lodash` methods. */\n\tvar nativeIsArray = getNative(Array, 'isArray');\n\t\n\t/**\n\t * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n\t * of an array-like value.\n\t */\n\tvar MAX_SAFE_INTEGER = 9007199254740991;\n\t\n\t/**\n\t * Gets the native function at `key` of `object`.\n\t *\n\t * @private\n\t * @param {Object} object The object to query.\n\t * @param {string} key The key of the method to get.\n\t * @returns {*} Returns the function if it's native, else `undefined`.\n\t */\n\tfunction getNative(object, key) {\n\t var value = object == null ? undefined : object[key];\n\t return isNative(value) ? value : undefined;\n\t}\n\t\n\t/**\n\t * Checks if `value` is a valid array-like length.\n\t *\n\t * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n\t */\n\tfunction isLength(value) {\n\t return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n\t}\n\t\n\t/**\n\t * Checks if `value` is classified as an `Array` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n\t * @example\n\t *\n\t * _.isArray([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isArray(function() { return arguments; }());\n\t * // => false\n\t */\n\tvar isArray = nativeIsArray || function(value) {\n\t return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n\t};\n\t\n\t/**\n\t * Checks if `value` is classified as a `Function` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n\t * @example\n\t *\n\t * _.isFunction(_);\n\t * // => true\n\t *\n\t * _.isFunction(/abc/);\n\t * // => false\n\t */\n\tfunction isFunction(value) {\n\t // The use of `Object#toString` avoids issues with the `typeof` operator\n\t // in older versions of Chrome and Safari which return 'function' for regexes\n\t // and Safari 8 equivalents which return 'object' for typed array constructors.\n\t return isObject(value) && objToString.call(value) == funcTag;\n\t}\n\t\n\t/**\n\t * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n\t * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n\t * @example\n\t *\n\t * _.isObject({});\n\t * // => true\n\t *\n\t * _.isObject([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isObject(1);\n\t * // => false\n\t */\n\tfunction isObject(value) {\n\t // Avoid a V8 JIT bug in Chrome 19-20.\n\t // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n\t var type = typeof value;\n\t return !!value && (type == 'object' || type == 'function');\n\t}\n\t\n\t/**\n\t * Checks if `value` is a native function.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n\t * @example\n\t *\n\t * _.isNative(Array.prototype.push);\n\t * // => true\n\t *\n\t * _.isNative(_);\n\t * // => false\n\t */\n\tfunction isNative(value) {\n\t if (value == null) {\n\t return false;\n\t }\n\t if (isFunction(value)) {\n\t return reIsNative.test(fnToString.call(value));\n\t }\n\t return isObjectLike(value) && reIsHostCtor.test(value);\n\t}\n\t\n\tmodule.exports = isArray;\n\n\n/***/ }),\n/* 13 */\n/*!*******************************************!*\\\n !*** ./~/lodash._createassigner/index.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * lodash 3.1.1 (Custom Build) \n\t * Build: `lodash modern modularize exports=\"npm\" -o ./`\n\t * Copyright 2012-2015 The Dojo Foundation \n\t * Based on Underscore.js 1.8.3 \n\t * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t * Available under MIT license \n\t */\n\tvar bindCallback = __webpack_require__(/*! lodash._bindcallback */ 14),\n\t isIterateeCall = __webpack_require__(/*! lodash._isiterateecall */ 15),\n\t restParam = __webpack_require__(/*! lodash.restparam */ 16);\n\t\n\t/**\n\t * Creates a function that assigns properties of source object(s) to a given\n\t * destination object.\n\t *\n\t * **Note:** This function is used to create `_.assign`, `_.defaults`, and `_.merge`.\n\t *\n\t * @private\n\t * @param {Function} assigner The function to assign values.\n\t * @returns {Function} Returns the new assigner function.\n\t */\n\tfunction createAssigner(assigner) {\n\t return restParam(function(object, sources) {\n\t var index = -1,\n\t length = object == null ? 0 : sources.length,\n\t customizer = length > 2 ? sources[length - 2] : undefined,\n\t guard = length > 2 ? sources[2] : undefined,\n\t thisArg = length > 1 ? sources[length - 1] : undefined;\n\t\n\t if (typeof customizer == 'function') {\n\t customizer = bindCallback(customizer, thisArg, 5);\n\t length -= 2;\n\t } else {\n\t customizer = typeof thisArg == 'function' ? thisArg : undefined;\n\t length -= (customizer ? 1 : 0);\n\t }\n\t if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n\t customizer = length < 3 ? undefined : customizer;\n\t length = 1;\n\t }\n\t while (++index < length) {\n\t var source = sources[index];\n\t if (source) {\n\t assigner(object, source, customizer);\n\t }\n\t }\n\t return object;\n\t });\n\t}\n\t\n\tmodule.exports = createAssigner;\n\n\n/***/ }),\n/* 14 */\n/*!*****************************************!*\\\n !*** ./~/lodash._bindcallback/index.js ***!\n \\*****************************************/\n/***/ (function(module, exports) {\n\n\t/**\n\t * lodash 3.0.1 (Custom Build) \n\t * Build: `lodash modern modularize exports=\"npm\" -o ./`\n\t * Copyright 2012-2015 The Dojo Foundation \n\t * Based on Underscore.js 1.8.3 \n\t * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t * Available under MIT license \n\t */\n\t\n\t/**\n\t * A specialized version of `baseCallback` which only supports `this` binding\n\t * and specifying the number of arguments to provide to `func`.\n\t *\n\t * @private\n\t * @param {Function} func The function to bind.\n\t * @param {*} thisArg The `this` binding of `func`.\n\t * @param {number} [argCount] The number of arguments to provide to `func`.\n\t * @returns {Function} Returns the callback.\n\t */\n\tfunction bindCallback(func, thisArg, argCount) {\n\t if (typeof func != 'function') {\n\t return identity;\n\t }\n\t if (thisArg === undefined) {\n\t return func;\n\t }\n\t switch (argCount) {\n\t case 1: return function(value) {\n\t return func.call(thisArg, value);\n\t };\n\t case 3: return function(value, index, collection) {\n\t return func.call(thisArg, value, index, collection);\n\t };\n\t case 4: return function(accumulator, value, index, collection) {\n\t return func.call(thisArg, accumulator, value, index, collection);\n\t };\n\t case 5: return function(value, other, key, object, source) {\n\t return func.call(thisArg, value, other, key, object, source);\n\t };\n\t }\n\t return function() {\n\t return func.apply(thisArg, arguments);\n\t };\n\t}\n\t\n\t/**\n\t * This method returns the first argument provided to it.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Utility\n\t * @param {*} value Any value.\n\t * @returns {*} Returns `value`.\n\t * @example\n\t *\n\t * var object = { 'user': 'fred' };\n\t *\n\t * _.identity(object) === object;\n\t * // => true\n\t */\n\tfunction identity(value) {\n\t return value;\n\t}\n\t\n\tmodule.exports = bindCallback;\n\n\n/***/ }),\n/* 15 */\n/*!*******************************************!*\\\n !*** ./~/lodash._isiterateecall/index.js ***!\n \\*******************************************/\n/***/ (function(module, exports) {\n\n\t/**\n\t * lodash 3.0.9 (Custom Build) \n\t * Build: `lodash modern modularize exports=\"npm\" -o ./`\n\t * Copyright 2012-2015 The Dojo Foundation \n\t * Based on Underscore.js 1.8.3 \n\t * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t * Available under MIT license \n\t */\n\t\n\t/** Used to detect unsigned integer values. */\n\tvar reIsUint = /^\\d+$/;\n\t\n\t/**\n\t * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n\t * of an array-like value.\n\t */\n\tvar MAX_SAFE_INTEGER = 9007199254740991;\n\t\n\t/**\n\t * The base implementation of `_.property` without support for deep paths.\n\t *\n\t * @private\n\t * @param {string} key The key of the property to get.\n\t * @returns {Function} Returns the new function.\n\t */\n\tfunction baseProperty(key) {\n\t return function(object) {\n\t return object == null ? undefined : object[key];\n\t };\n\t}\n\t\n\t/**\n\t * Gets the \"length\" property value of `object`.\n\t *\n\t * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n\t * that affects Safari on at least iOS 8.1-8.3 ARM64.\n\t *\n\t * @private\n\t * @param {Object} object The object to query.\n\t * @returns {*} Returns the \"length\" value.\n\t */\n\tvar getLength = baseProperty('length');\n\t\n\t/**\n\t * Checks if `value` is array-like.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n\t */\n\tfunction isArrayLike(value) {\n\t return value != null && isLength(getLength(value));\n\t}\n\t\n\t/**\n\t * Checks if `value` is a valid array-like index.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n\t * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n\t */\n\tfunction isIndex(value, length) {\n\t value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n\t length = length == null ? MAX_SAFE_INTEGER : length;\n\t return value > -1 && value % 1 == 0 && value < length;\n\t}\n\t\n\t/**\n\t * Checks if the provided arguments are from an iteratee call.\n\t *\n\t * @private\n\t * @param {*} value The potential iteratee value argument.\n\t * @param {*} index The potential iteratee index or key argument.\n\t * @param {*} object The potential iteratee object argument.\n\t * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.\n\t */\n\tfunction isIterateeCall(value, index, object) {\n\t if (!isObject(object)) {\n\t return false;\n\t }\n\t var type = typeof index;\n\t if (type == 'number'\n\t ? (isArrayLike(object) && isIndex(index, object.length))\n\t : (type == 'string' && index in object)) {\n\t var other = object[index];\n\t return value === value ? (value === other) : (other !== other);\n\t }\n\t return false;\n\t}\n\t\n\t/**\n\t * Checks if `value` is a valid array-like length.\n\t *\n\t * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n\t */\n\tfunction isLength(value) {\n\t return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n\t}\n\t\n\t/**\n\t * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n\t * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n\t * @example\n\t *\n\t * _.isObject({});\n\t * // => true\n\t *\n\t * _.isObject([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isObject(1);\n\t * // => false\n\t */\n\tfunction isObject(value) {\n\t // Avoid a V8 JIT bug in Chrome 19-20.\n\t // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n\t var type = typeof value;\n\t return !!value && (type == 'object' || type == 'function');\n\t}\n\t\n\tmodule.exports = isIterateeCall;\n\n\n/***/ }),\n/* 16 */\n/*!*************************************!*\\\n !*** ./~/lodash.restparam/index.js ***!\n \\*************************************/\n/***/ (function(module, exports) {\n\n\t/**\n\t * lodash 3.6.1 (Custom Build) \n\t * Build: `lodash modern modularize exports=\"npm\" -o ./`\n\t * Copyright 2012-2015 The Dojo Foundation \n\t * Based on Underscore.js 1.8.3 \n\t * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t * Available under MIT license \n\t */\n\t\n\t/** Used as the `TypeError` message for \"Functions\" methods. */\n\tvar FUNC_ERROR_TEXT = 'Expected a function';\n\t\n\t/* Native method references for those with the same name as other `lodash` methods. */\n\tvar nativeMax = Math.max;\n\t\n\t/**\n\t * Creates a function that invokes `func` with the `this` binding of the\n\t * created function and arguments from `start` and beyond provided as an array.\n\t *\n\t * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Function\n\t * @param {Function} func The function to apply a rest parameter to.\n\t * @param {number} [start=func.length-1] The start position of the rest parameter.\n\t * @returns {Function} Returns the new function.\n\t * @example\n\t *\n\t * var say = _.restParam(function(what, names) {\n\t * return what + ' ' + _.initial(names).join(', ') +\n\t * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n\t * });\n\t *\n\t * say('hello', 'fred', 'barney', 'pebbles');\n\t * // => 'hello fred, barney, & pebbles'\n\t */\n\tfunction restParam(func, start) {\n\t if (typeof func != 'function') {\n\t throw new TypeError(FUNC_ERROR_TEXT);\n\t }\n\t start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);\n\t return function() {\n\t var args = arguments,\n\t index = -1,\n\t length = nativeMax(args.length - start, 0),\n\t rest = Array(length);\n\t\n\t while (++index < length) {\n\t rest[index] = args[start + index];\n\t }\n\t switch (start) {\n\t case 0: return func.call(this, rest);\n\t case 1: return func.call(this, args[0], rest);\n\t case 2: return func.call(this, args[0], args[1], rest);\n\t }\n\t var otherArgs = Array(start + 1);\n\t index = -1;\n\t while (++index < start) {\n\t otherArgs[index] = args[index];\n\t }\n\t otherArgs[start] = rest;\n\t return func.apply(this, otherArgs);\n\t };\n\t}\n\t\n\tmodule.exports = restParam;\n\n\n/***/ }),\n/* 17 */\n/*!*************************************!*\\\n !*** ./src/public/ic_cast_24dp.svg ***!\n \\*************************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = \"\"\n\n/***/ }),\n/* 18 */\n/*!**************************************!*\\\n !*** ./src/public/ic_cast0_24dp.svg ***!\n \\**************************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = \"\"\n\n/***/ }),\n/* 19 */\n/*!**************************************!*\\\n !*** ./src/public/ic_cast1_24dp.svg ***!\n \\**************************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = \"\"\n\n/***/ }),\n/* 20 */\n/*!**************************************!*\\\n !*** ./src/public/ic_cast2_24dp.svg ***!\n \\**************************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = \"\"\n\n/***/ }),\n/* 21 */\n/*!***********************************************!*\\\n !*** ./src/public/ic_cast_connected_24dp.svg ***!\n \\***********************************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = \"\"\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// clappr-chromecast-plugin.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap c888eeef53c884680cd6","import {Browser, Events, Log, Styler, UICorePlugin} from 'clappr'\nimport ChromecastPlayback from './chromecast_playback'\nimport chromecastStyle from './public/style.scss'\nimport assign from 'lodash.assign'\nimport castIconSvg from './public/ic_cast_24dp.svg'\nimport connecting1IconSvg from './public/ic_cast0_24dp.svg'\nimport connecting2IconSvg from './public/ic_cast1_24dp.svg'\nimport connecting3IconSvg from './public/ic_cast2_24dp.svg'\nimport connectedIconSvg from './public/ic_cast_connected_24dp.svg'\n\nconst DEVICE_STATE = {\n 'IDLE' : 0,\n 'ACTIVE' : 1,\n 'WARNING' : 2,\n 'ERROR' : 3\n}\n\nconst DEFAULT_CLAPPR_APP_ID = '9DFB77C0'\n\nconst MIMETYPES = {\n 'mp4': 'video/mp4',\n 'ogg': 'video/ogg',\n '3gpp': 'video/3gpp',\n 'webm': 'video/webm',\n 'mkv': 'video/x-matroska',\n 'm3u8': 'application/x-mpegurl',\n 'mpd': 'application/dash+xml'\n}\nMIMETYPES['ogv'] = MIMETYPES['ogg']\nMIMETYPES['3gp'] = MIMETYPES['3gpp']\n\nexport default class ChromecastPlugin extends UICorePlugin {\n static get Movie() { return 'movie' }\n static get TvShow() { return 'tv_show' }\n static get Generic() { return 'none' }\n\n static get version() { return VERSION }\n get version() { return VERSION }\n\n get name() { return 'chromecast' }\n get tagName() { return 'button' }\n get attributes() {\n return {\n 'class' : 'chromecast-button'\n }\n }\n get events() {\n return {\n 'click': 'click'\n }\n }\n get options() { return this.core.options.chromecast || (this.core.options.chromecast = {}) }\n get container() { return this.core.activeContainer }\n\n constructor(core) {\n super(core)\n\n this.bootTryDelay = this.options.bootTryDelay || 500 // Default is 500 milliseconds between each attempt\n this.bootMaxTryCount = this.options.bootMaxTryCount || 6 // Default is 6 attempts (3 seconds)\n this.bootTryCount = 0\n\n if (Browser.isChrome) {\n this.appId = this.options.appId || DEFAULT_CLAPPR_APP_ID\n this.deviceState = DEVICE_STATE.IDLE\n this.embedScript()\n } else {\n this.disable()\n }\n }\n\n bindEvents() {\n this.listenTo(this.core.mediaControl, Events.MEDIACONTROL_RENDERED, this.render)\n this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.containerChanged)\n if (this.container) {\n this.listenTo(this.container, Events.CONTAINER_TIMEUPDATE, this.containerTimeUpdate)\n this.listenTo(this.container, Events.CONTAINER_PLAY, this.containerPlay)\n this.listenTo(this.container, Events.CONTAINER_ENDED, this.sessionStopped)\n }\n }\n\n enable() {\n super.enable()\n this.render()\n this.embedScript()\n }\n\n embedScript() {\n if (!window.chrome || !window.chrome.cast || !window.chrome.cast.isAvailable) {\n let script = document.createElement('script')\n script.setAttribute('type', 'text/javascript')\n script.setAttribute('async', 'async')\n script.setAttribute('src', 'https://www.gstatic.com/cv/js/sender/v1/cast_sender.js')\n script.onload = () => this.bootstrapCastApi()\n document.body.appendChild(script)\n } else {\n this.bootstrapCastApi()\n }\n }\n\n bootstrapCastApi() {\n this.bootTryCount++\n\n if (this.bootTryCount > this.bootMaxTryCount) {\n this.bootTryCount = 0\n Log.warn('GCastApi bootstrap timeout')\n this.disable()\n return\n }\n\n // The \"chrome\" property may not be available immediately on some iOS devices\n if (window.chrome) {\n this.bootTryCount = 0\n\n if (window.chrome.cast && window.chrome.cast.isAvailable) {\n this.appId = this.appId || DEFAULT_CLAPPR_APP_ID\n this.initializeCastApi()\n } else {\n window['__onGCastApiAvailable'] = (loaded, errorInfo) => {\n if (loaded) {\n this.appId = this.appId || DEFAULT_CLAPPR_APP_ID\n this.initializeCastApi()\n } else {\n Log.warn('GCastApi error', errorInfo)\n this.disable()\n }\n }\n }\n } else {\n setTimeout(() => { this.bootstrapCastApi() }, this.bootTryDelay)\n }\n }\n\n initializeCastApi() {\n let autoJoinPolicy = chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED\n let sessionRequest = new chrome.cast.SessionRequest(this.appId)\n let apiConfig = new chrome.cast.ApiConfig(sessionRequest,\n (session) => this.sessionListener(session), (e) => this.receiverListener(e), autoJoinPolicy)\n chrome.cast.initialize(apiConfig, () => Log.debug(this.name, 'init success'), () => Log.warn(this.name, 'init error'))\n }\n\n sessionListener(session) {\n Log.debug(this.name, 'new session id:' + session.sessionId)\n this.newSession(session)\n }\n\n sessionUpdateListener() {\n if (this.session) {\n Log.debug(this.name, this.session.status)\n if (this.session.status === chrome.cast.SessionStatus.STOPPED) {\n this.sessionStopped()\n this.session = null\n }\n }\n }\n\n receiverListener(e) {\n if ( e === chrome.cast.ReceiverAvailability.AVAILABLE ) {\n Log.debug(this.name, 'receiver found')\n this.show()\n } else {\n Log.debug(this.name, 'receiver list empty')\n this.hide()\n }\n }\n\n launchSuccess(session) {\n this.renderConnected()\n clearInterval(this.connectAnimInterval)\n this.core.mediaControl.resetKeepVisible()\n Log.debug(this.name, 'launch success - session: ' + session.sessionId)\n this.newSession(session)\n }\n\n launchError(e) {\n Log.debug(this.name, 'error on launch', e)\n this.renderDisconnected()\n clearInterval(this.connectAnimInterval)\n this.core.mediaControl.resetKeepVisible()\n this.container.play()\n }\n\n loadMediaSuccess(how, mediaSession) {\n Log.debug(this.name, 'new media session', mediaSession, '(', how , ')')\n\n this.originalPlayback = this.core.activePlayback\n\n let options = assign({}, this.originalPlayback.options, {\n currentMedia: mediaSession,\n mediaControl: this.core.mediaControl,\n poster: this.core.options.poster,\n settings: this.originalPlayback.settings\n })\n this.src = this.originalPlayback.src\n this.playbackProxy = new ChromecastPlayback(options)\n this.playbackProxy.render()\n\n this.mediaSession = mediaSession\n\n this.originalPlayback.$el.remove()\n\n let container = this.core.activeContainer\n container.$el.append(this.playbackProxy.$el)\n container.stopListening()\n container.playback = this.playbackProxy\n container.bindEvents()\n container.settingsUpdate()\n }\n\n loadMediaError(e) {\n Log.warn(this.name, 'media error', e)\n }\n\n newSession(session) {\n this.session = session\n this.deviceState = DEVICE_STATE.ACTIVE\n this.renderConnected()\n\n session.addUpdateListener(() => this.sessionUpdateListener())\n\n this.containerPlay()\n }\n\n sessionStopped() {\n this.renderDisconnected()\n\n let time = this.currentTime\n\n let playerState = undefined\n if (this.mediaSession) {\n playerState = this.mediaSession.playerState\n this.mediaSession = null\n }\n\n this.core.load(this.src || this.core.options.sources)\n\n let container = this.core.activeContainer\n\n if (this.playbackProxy) {\n if (this.playbackProxy.isPlaying() || playerState === 'PAUSED') {\n container.once(Events.CONTAINER_READY, () => {\n container.play()\n container.playback.seek(100 * time / container.getDuration())\n })\n }\n this.playbackProxy.stop()\n }\n }\n\n loadMedia() {\n this.container.pause()\n let src = this.container.options.src\n Log.debug(this.name, 'loading... ' + src)\n let mediaInfo = this.createMediaInfo(src)\n let request = new chrome.cast.media.LoadRequest(mediaInfo)\n request.autoplay = true\n request.currentTime = this.currentTime || 0\n this.session.loadMedia(request, (mediaSession) => this.loadMediaSuccess('loadMedia', mediaSession), (e) => this.loadMediaError(e))\n }\n\n createMediaInfo(src) {\n let mimeType = ChromecastPlugin.mimeTypeFor(src)\n let mediaInfo = new chrome.cast.media.MediaInfo(src)\n mediaInfo.contentType = this.options.contentType || mimeType\n mediaInfo.customData = this.options.customData\n let metadata = this.createMediaMetadata()\n mediaInfo.metadata = metadata\n return mediaInfo\n }\n\n createMediaMetadata() {\n this.options.media || (this.options.media = {})\n let type = this.options.media.type\n\n let metadata = this.createCastMediaMetadata(type)\n metadata.title = this.options.media.title\n metadata.subtitle = this.options.media.subtitle\n metadata.releaseDate = this.options.media.releaseDate\n\n if (type === ChromecastPlugin.TvShow) {\n metadata.episode = this.options.media.episode\n metadata.originalAirdate = this.options.media.originalAirdate\n metadata.season = this.options.media.season\n metadata.seriesTitle = this.options.media.seriesTitle\n } else if (type === ChromecastPlugin.Movie) {\n metadata.studio = this.options.media.studio\n }\n\n if (this.options.media.images) {\n metadata.images = this.options.media.images.map((url) => new chrome.cast.Image(url))\n }\n if (!metadata.images && this.core.options.poster) {\n metadata.images = [new chrome.cast.Image(this.core.options.poster)]\n }\n return metadata\n }\n\n createCastMediaMetadata(type) {\n switch (type) {\n case ChromecastPlugin.Movie: return new chrome.cast.media.MovieMediaMetadata()\n case ChromecastPlugin.TvShow: return new chrome.cast.media.TvShowMediaMetadata()\n default: return new chrome.cast.media.GenericMediaMetadata()\n }\n }\n\n show() {\n this.$el.show()\n }\n\n hide() {\n this.$el.hide()\n }\n\n click() {\n this.container.pause()\n chrome.cast.requestSession((session) => this.launchSuccess(session), (e) => this.launchError(e))\n if (!this.session) {\n let position = 0\n let connectingIcons = [connecting1IconSvg, connecting2IconSvg, connecting3IconSvg]\n clearInterval(this.connectAnimInterval)\n this.connectAnimInterval = setInterval(() => {\n this.$el.html(connectingIcons[position])\n position = (position + 1) % 3\n }, 600)\n this.core.mediaControl.setKeepVisible()\n }\n }\n\n containerChanged() {\n this.stopListening()\n this.bindEvents()\n this.currentTime = 0\n }\n\n containerTimeUpdate(timeProgress) {\n this.currentTime = timeProgress.current\n }\n\n containerPlay() {\n if (this.session && (!this.mediaSession || this.mediaSession.playerState === 'IDLE' || this.mediaSession.playerState === 'PAUSED')) {\n Log.debug(this.name, 'load media')\n this.currentTime = this.currentTime || 0\n this.loadMedia()\n }\n }\n\n renderConnected() {\n this.$el.html(connectedIconSvg)\n }\n\n renderDisconnected() {\n this.$el.html(castIconSvg)\n }\n\n render() {\n this.session ? this.renderConnected() : this.renderDisconnected()\n this.core.mediaControl.$el.find('.media-control-right-panel[data-media-control]').append(this.$el)\n this.$style && this.$style.remove()\n this.$style = Styler.getStyleFor(chromecastStyle, {baseUrl: this.core.options.baseUrl})\n this.core.$el.append(this.$style)\n return this\n }\n\n static mimeTypeFor(srcUrl) {\n let extension = (srcUrl.split('?')[0].match(/.*\\.(.*)$/) || [])[1]\n if (MIMETYPES[extension]) {\n return MIMETYPES[extension]\n } else if (srcUrl.indexOf('.ism') > -1) {\n return 'application/vnd.ms-sstr+xml'\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/chromecast.js","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external {\"amd\":\"clappr\",\"commonjs\":\"clappr\",\"commonjs2\":\"clappr\",\"root\":\"Clappr\"}\n// module id = 1\n// module chunks = 0","import {Events, Log, Playback, template} from 'clappr'\nimport chromecastHTML from './public/chromecast.html'\n\nconst TICK_INTERVAL = 100\n\nexport default class ChromecastPlayback extends Playback {\n\n get name() { return 'chromecast_playback' }\n get template() { return template(chromecastHTML) }\n get attributes() { return { class: 'chromecast-playback' } }\n\n get isReady() { return true }\n\n constructor(options) {\n super(options)\n this.src = options.src\n this.currentMedia = options.currentMedia\n this.mediaControl = options.mediaControl\n this.currentMedia.addUpdateListener(() => this.onMediaStatusUpdate())\n this.settings = options.settings\n let noVolume = (name) => name != 'volume'\n this.settings.default && (this.settings.default = this.settings.default.filter(noVolume))\n this.settings.left && (this.settings.left = this.settings.left.filter(noVolume))\n this.settings.right && (this.settings.right = this.settings.right.filter(noVolume))\n }\n\n render() {\n let template = this.template()\n this.$el.html(template)\n if (this.options.poster) {\n this.$('.chromecast-playback-background').css('background-image', 'url(' + this.options.poster + ')')\n } else {\n this.$('.chromecast-playback-background').css('background-color', '#666')\n }\n }\n\n play() {\n this.currentMedia.play()\n }\n\n pause() {\n this.stopTimer()\n this.currentMedia.pause()\n }\n\n stop() {\n this.stopTimer()\n this.currentMedia.pause() // FIXME: properly handle media stop\n }\n\n seek(time) {\n this.stopTimer()\n let request = new chrome.cast.media.SeekRequest()\n request.currentTime = time\n this.currentMedia.seek(request,\n () => this.startTimer(), () => Log.warn('seek failed'))\n }\n\n seekPercentage(percentage) {\n if (percentage >= 0 && percentage <= 100) {\n let duration = this.getDuration()\n this.seek(percentage * duration / 100)\n }\n }\n\n startTimer() {\n this.timer = setInterval(() => this.updateMediaControl(), TICK_INTERVAL)\n }\n\n stopTimer() {\n clearInterval(this.timer)\n this.timer = null\n }\n\n getDuration() {\n return this.currentMedia.media.duration\n }\n\n isPlaying() {\n return this.currentMedia.playerState === 'PLAYING' || this.currentMedia.playerState === 'BUFFERING'\n }\n\n getPlaybackType() {\n return this.currentMedia.streamType == 'LIVE' ? Playback.LIVE : Playback.VOD\n }\n\n onMediaStatusUpdate() {\n this.mediaControl.changeTogglePlay()\n if (this.isPlaying() && !this.timer) {\n this.startTimer()\n }\n\n if (this.currentMedia.playerState === 'BUFFERING') {\n this.isBuffering = true\n this.trigger(Events.PLAYBACK_BUFFERING, this.name)\n } else if (this.currentMedia.playerState === 'PLAYING') {\n if (this.isBuffering) {\n this.isBuffering = false\n this.trigger(Events.PLAYBACK_BUFFERFULL, this.name)\n }\n if (this.prevState !== this.currentMedia.playerState) {\n this.trigger(Events.PLAYBACK_PLAY, this.name)\n }\n } else if (this.currentMedia.playerState === 'IDLE') {\n if (this.isBuffering) {\n this.isBuffering = false\n this.trigger(Events.PLAYBACK_BUFFERFULL, this.name)\n }\n this.trigger(Events.PLAYBACK_ENDED, this.name)\n } else if (this.currentMedia.playerState === 'PAUSED') {\n if (this.prevState !== this.currentMedia.playerState) {\n this.trigger(Events.PLAYBACK_PAUSE, this.name)\n }\n }\n\n this.prevState = this.currentMedia.playerState\n }\n\n updateMediaControl() {\n let position = this.currentMedia.getEstimatedTime()\n let duration = this.currentMedia.media.duration\n this.trigger(Events.PLAYBACK_TIMEUPDATE, {current: position, total: duration}, this.name)\n }\n\n show() {\n this.$el.show()\n }\n\n hide() {\n this.$el.hide()\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/chromecast_playback.js","module.exports = \"
\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/public/chromecast.html\n// module id = 3\n// module chunks = 0","exports = module.exports = require(\"../../node_modules/css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.id, \".chromecast-playback{height:100%;width:100%}.chromecast-playback .chromecast-playback-background,.chromecast-playback .chromecast-playback-overlay{position:absolute;height:100%;width:100%}.chromecast-playback .chromecast-playback-background{background-size:contain}.chromecast-playback .chromecast-playback-overlay{background-color:#000;opacity:.4}.chromecast-button{background:transparent;border:0;width:32px;height:32px;font-size:22px;line-height:32px;letter-spacing:0;margin:0 6px;color:#fff;opacity:.5;vertical-align:middle;text-align:left;cursor:pointer;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transition:all .1s ease}.chromecast-button:hover{opacity:.75;text-shadow:hsla(0,0%,100%,.8) 0 0 5px}.chromecast-button:focus{outline:none}.chromecast-button svg{width:24px;height:24px}.chromecast-button svg #cast,.chromecast-button svg #cast-on,.chromecast-button svg #Path{fill:#fff;stroke:#fff;stroke-width:.5px}\", \"\"]);\n\n// exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/public/style.scss\n// module id = 4\n// module chunks = 0","/*\r\n\tMIT License http://www.opensource.org/licenses/mit-license.php\r\n\tAuthor Tobias Koppers @sokra\r\n*/\r\n// css base code, injected by the css-loader\r\nmodule.exports = function() {\r\n\tvar list = [];\r\n\r\n\t// return the list of modules as css string\r\n\tlist.toString = function toString() {\r\n\t\tvar result = [];\r\n\t\tfor(var i = 0; i < this.length; i++) {\r\n\t\t\tvar item = this[i];\r\n\t\t\tif(item[2]) {\r\n\t\t\t\tresult.push(\"@media \" + item[2] + \"{\" + item[1] + \"}\");\r\n\t\t\t} else {\r\n\t\t\t\tresult.push(item[1]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result.join(\"\");\r\n\t};\r\n\r\n\t// import a list of modules into the list\r\n\tlist.i = function(modules, mediaQuery) {\r\n\t\tif(typeof modules === \"string\")\r\n\t\t\tmodules = [[null, modules, \"\"]];\r\n\t\tvar alreadyImportedModules = {};\r\n\t\tfor(var i = 0; i < this.length; i++) {\r\n\t\t\tvar id = this[i][0];\r\n\t\t\tif(typeof id === \"number\")\r\n\t\t\t\talreadyImportedModules[id] = true;\r\n\t\t}\r\n\t\tfor(i = 0; i < modules.length; i++) {\r\n\t\t\tvar item = modules[i];\r\n\t\t\t// skip already imported module\r\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\r\n\t\t\t// when a module is imported multiple times with different media queries.\r\n\t\t\t// I hope this will never occur (Hey this way we have smaller bundles)\r\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\r\n\t\t\t\tif(mediaQuery && !item[2]) {\r\n\t\t\t\t\titem[2] = mediaQuery;\r\n\t\t\t\t} else if(mediaQuery) {\r\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\r\n\t\t\t\t}\r\n\t\t\t\tlist.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\treturn list;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/css-loader/lib/css-base.js\n// module id = 5\n// module chunks = 0","/**\n * lodash 3.2.0 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\nvar baseAssign = require('lodash._baseassign'),\n createAssigner = require('lodash._createassigner'),\n keys = require('lodash.keys');\n\n/**\n * A specialized version of `_.assign` for customizing assigned values without\n * support for argument juggling, multiple sources, and `this` binding `customizer`\n * functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n */\nfunction assignWith(object, source, customizer) {\n var index = -1,\n props = keys(source),\n length = props.length;\n\n while (++index < length) {\n var key = props[index],\n value = object[key],\n result = customizer(value, source[key], key, object, source);\n\n if ((result === result ? (result !== value) : (value === value)) ||\n (value === undefined && !(key in object))) {\n object[key] = result;\n }\n }\n return object;\n}\n\n/**\n * Assigns own enumerable properties of source object(s) to the destination\n * object. Subsequent sources overwrite property assignments of previous sources.\n * If `customizer` is provided it is invoked to produce the assigned values.\n * The `customizer` is bound to `thisArg` and invoked with five arguments:\n * (objectValue, sourceValue, key, object, source).\n *\n * **Note:** This method mutates `object` and is based on\n * [`Object.assign`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign).\n *\n * @static\n * @memberOf _\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {*} [thisArg] The `this` binding of `customizer`.\n * @returns {Object} Returns `object`.\n * @example\n *\n * _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' });\n * // => { 'user': 'fred', 'age': 40 }\n *\n * // using a customizer callback\n * var defaults = _.partialRight(_.assign, function(value, other) {\n * return _.isUndefined(value) ? other : value;\n * });\n *\n * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });\n * // => { 'user': 'barney', 'age': 36 }\n */\nvar assign = createAssigner(function(object, source, customizer) {\n return customizer\n ? assignWith(object, source, customizer)\n : baseAssign(object, source);\n});\n\nmodule.exports = assign;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash.assign/index.js\n// module id = 6\n// module chunks = 0","/**\n * lodash 3.2.0 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\nvar baseCopy = require('lodash._basecopy'),\n keys = require('lodash.keys');\n\n/**\n * The base implementation of `_.assign` without support for argument juggling,\n * multiple sources, and `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return source == null\n ? object\n : baseCopy(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash._baseassign/index.js\n// module id = 7\n// module chunks = 0","/**\n * lodash 3.0.1 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property names to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @returns {Object} Returns `object`.\n */\nfunction baseCopy(source, props, object) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n object[key] = source[key];\n }\n return object;\n}\n\nmodule.exports = baseCopy;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash._basecopy/index.js\n// module id = 8\n// module chunks = 0","/**\n * lodash 3.1.2 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\nvar getNative = require('lodash._getnative'),\n isArguments = require('lodash.isarguments'),\n isArray = require('lodash.isarray');\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = getNative(Object, 'keys');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n length = length == null ? MAX_SAFE_INTEGER : length;\n return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * A fallback implementation of `Object.keys` which creates an array of the\n * own enumerable property names of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction shimKeys(object) {\n var props = keysIn(object),\n propsLength = props.length,\n length = propsLength && object.length;\n\n var allowIndexes = !!length && isLength(length) &&\n (isArray(object) || isArguments(object));\n\n var index = -1,\n result = [];\n\n while (++index < propsLength) {\n var key = props[index];\n if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nvar keys = !nativeKeys ? shimKeys : function(object) {\n var Ctor = object == null ? undefined : object.constructor;\n if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n (typeof object != 'function' && isArrayLike(object))) {\n return shimKeys(object);\n }\n return isObject(object) ? nativeKeys(object) : [];\n};\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n if (object == null) {\n return [];\n }\n if (!isObject(object)) {\n object = Object(object);\n }\n var length = object.length;\n length = (length && isLength(length) &&\n (isArray(object) || isArguments(object)) && length) || 0;\n\n var Ctor = object.constructor,\n index = -1,\n isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n result = Array(length),\n skipIndexes = length > 0;\n\n while (++index < length) {\n result[index] = (index + '');\n }\n for (var key in object) {\n if (!(skipIndexes && isIndex(key, length)) &&\n !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = keys;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash.keys/index.js\n// module id = 9\n// module chunks = 0","/**\n * lodash 3.9.1 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = object == null ? undefined : object[key];\n return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in older versions of Chrome and Safari which return 'function' for regexes\n // and Safari 8 equivalents which return 'object' for typed array constructors.\n return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n if (value == null) {\n return false;\n }\n if (isFunction(value)) {\n return reIsNative.test(fnToString.call(value));\n }\n return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = getNative;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash._getnative/index.js\n// module id = 10\n// module chunks = 0","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\nmodule.exports = isArguments;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash.isarguments/index.js\n// module id = 11\n// module chunks = 0","/**\n * lodash 3.0.4 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]',\n funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeIsArray = getNative(Array, 'isArray');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = object == null ? undefined : object[key];\n return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(function() { return arguments; }());\n * // => false\n */\nvar isArray = nativeIsArray || function(value) {\n return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n};\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in older versions of Chrome and Safari which return 'function' for regexes\n // and Safari 8 equivalents which return 'object' for typed array constructors.\n return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n if (value == null) {\n return false;\n }\n if (isFunction(value)) {\n return reIsNative.test(fnToString.call(value));\n }\n return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = isArray;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash.isarray/index.js\n// module id = 12\n// module chunks = 0","/**\n * lodash 3.1.1 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\nvar bindCallback = require('lodash._bindcallback'),\n isIterateeCall = require('lodash._isiterateecall'),\n restParam = require('lodash.restparam');\n\n/**\n * Creates a function that assigns properties of source object(s) to a given\n * destination object.\n *\n * **Note:** This function is used to create `_.assign`, `_.defaults`, and `_.merge`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return restParam(function(object, sources) {\n var index = -1,\n length = object == null ? 0 : sources.length,\n customizer = length > 2 ? sources[length - 2] : undefined,\n guard = length > 2 ? sources[2] : undefined,\n thisArg = length > 1 ? sources[length - 1] : undefined;\n\n if (typeof customizer == 'function') {\n customizer = bindCallback(customizer, thisArg, 5);\n length -= 2;\n } else {\n customizer = typeof thisArg == 'function' ? thisArg : undefined;\n length -= (customizer ? 1 : 0);\n }\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, customizer);\n }\n }\n return object;\n });\n}\n\nmodule.exports = createAssigner;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash._createassigner/index.js\n// module id = 13\n// module chunks = 0","/**\n * lodash 3.0.1 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/**\n * A specialized version of `baseCallback` which only supports `this` binding\n * and specifying the number of arguments to provide to `func`.\n *\n * @private\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {number} [argCount] The number of arguments to provide to `func`.\n * @returns {Function} Returns the callback.\n */\nfunction bindCallback(func, thisArg, argCount) {\n if (typeof func != 'function') {\n return identity;\n }\n if (thisArg === undefined) {\n return func;\n }\n switch (argCount) {\n case 1: return function(value) {\n return func.call(thisArg, value);\n };\n case 3: return function(value, index, collection) {\n return func.call(thisArg, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(thisArg, accumulator, value, index, collection);\n };\n case 5: return function(value, other, key, object, source) {\n return func.call(thisArg, value, other, key, object, source);\n };\n }\n return function() {\n return func.apply(thisArg, arguments);\n };\n}\n\n/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = bindCallback;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash._bindcallback/index.js\n// module id = 14\n// module chunks = 0","/**\n * lodash 3.0.9 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n length = length == null ? MAX_SAFE_INTEGER : length;\n return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if the provided arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)) {\n var other = object[index];\n return value === value ? (value === other) : (other !== other);\n }\n return false;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isIterateeCall;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash._isiterateecall/index.js\n// module id = 15\n// module chunks = 0","/**\n * lodash 3.6.1 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as an array.\n *\n * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters).\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.restParam(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\nfunction restParam(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n rest = Array(length);\n\n while (++index < length) {\n rest[index] = args[start + index];\n }\n switch (start) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, args[0], rest);\n case 2: return func.call(this, args[0], args[1], rest);\n }\n var otherArgs = Array(start + 1);\n index = -1;\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = rest;\n return func.apply(this, otherArgs);\n };\n}\n\nmodule.exports = restParam;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash.restparam/index.js\n// module id = 16\n// module chunks = 0","module.exports = \"\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/public/ic_cast_24dp.svg\n// module id = 17\n// module chunks = 0","module.exports = \"\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/public/ic_cast0_24dp.svg\n// module id = 18\n// module chunks = 0","module.exports = \"\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/public/ic_cast1_24dp.svg\n// module id = 19\n// module chunks = 0","module.exports = \"\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/public/ic_cast2_24dp.svg\n// module id = 20\n// module chunks = 0","module.exports = \"\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/public/ic_cast_connected_24dp.svg\n// module id = 21\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///clappr-chromecast-plugin.min.js","webpack:///webpack/bootstrap f4908445f0a34cad8a33","webpack:///./src/chromecast.js","webpack:///external {\"amd\":\"clappr\",\"commonjs\":\"clappr\",\"commonjs2\":\"clappr\",\"root\":\"Clappr\"}","webpack:///./src/chromecast_playback.js","webpack:///./src/public/chromecast.html","webpack:///./src/public/style.scss","webpack:///./~/css-loader/lib/css-base.js","webpack:///./~/lodash.assign/index.js","webpack:///./~/lodash._baseassign/index.js","webpack:///./~/lodash._basecopy/index.js","webpack:///./~/lodash.keys/index.js","webpack:///./~/lodash._getnative/index.js","webpack:///./~/lodash.isarguments/index.js","webpack:///./~/lodash.isarray/index.js","webpack:///./~/lodash._createassigner/index.js","webpack:///./~/lodash._bindcallback/index.js","webpack:///./~/lodash._isiterateecall/index.js","webpack:///./~/lodash.restparam/index.js","webpack:///./src/public/ic_cast_24dp.svg","webpack:///./src/public/ic_cast0_24dp.svg","webpack:///./src/public/ic_cast1_24dp.svg","webpack:///./src/public/ic_cast2_24dp.svg","webpack:///./src/public/ic_cast_connected_24dp.svg"],"names":["root","factory","exports","module","require","define","amd","ChromecastPlugin","Clappr","this","__WEBPACK_EXTERNAL_MODULE_1__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_interopRequireDefault","obj","__esModule","default","_classCallCheck","instance","Constructor","TypeError","_inherits","subClass","superClass","prototype","Object","create","constructor","value","enumerable","writable","configurable","setPrototypeOf","__proto__","defineProperty","_createClass","defineProperties","target","props","i","length","descriptor","key","protoProps","staticProps","_get","_x","_x2","_x3","_again","object","property","receiver","Function","desc","getOwnPropertyDescriptor","undefined","getter","get","parent","getPrototypeOf","_clappr","_chromecast_playback","_chromecast_playback2","_publicStyleScss","_publicStyleScss2","_lodashAssign","_lodashAssign2","_publicIc_cast_24dpSvg","_publicIc_cast_24dpSvg2","_publicIc_cast0_24dpSvg","_publicIc_cast0_24dpSvg2","_publicIc_cast1_24dpSvg","_publicIc_cast1_24dpSvg2","_publicIc_cast2_24dpSvg","_publicIc_cast2_24dpSvg2","_publicIc_cast_connected_24dpSvg","_publicIc_cast_connected_24dpSvg2","DEVICE_STATE","IDLE","ACTIVE","WARNING","ERROR","DEFAULT_CLAPPR_APP_ID","MIMETYPES","mp4","ogg","3gpp","webm","mkv","m3u8","mpd","ogv","_UICorePlugin","core","bootTryDelay","options","bootMaxTryCount","bootTryCount","isBootable","appId","deviceState","embedScript","disable","class","type","click","chromecast","getCurrentContainer","activeContainer","getCurrentPlayback","activePlayback","listenTo","mediaControl","Events","MEDIACONTROL_RENDERED","render","CORE_ACTIVE_CONTAINER_CHANGED","containerChanged","MEDIACONTROL_CONTAINERCHANGED","container","CONTAINER_TIMEUPDATE","containerTimeUpdate","CONTAINER_PLAY","containerPlay","CONTAINER_ENDED","sessionStopped","Browser","isChrome","version","isSecure","window","location","protocol","_this","chrome","cast","isAvailable","bootstrapCastApi","script","document","createElement","setAttribute","onload","body","appendChild","_this2","Log","warn","initializeCastApi","__onGCastApiAvailable","errorInfo","setTimeout","_this3","autoJoinPolicy","AutoJoinPolicy","ORIGIN_SCOPED","sessionRequest","SessionRequest","apiConfig","ApiConfig","session","sessionListener","e","receiverListener","initialize","debug","name","sessionId","newSession","status","SessionStatus","STOPPED","ReceiverAvailability","AVAILABLE","show","hide","renderConnected","clearInterval","connectAnimInterval","resetKeepVisible","renderDisconnected","play","how","mediaSession","originalPlayback","playback","currentMedia","poster","settings","src","playbackProxy","$el","addClass","remove","append","stopListening","bindEvents","settingsUpdate","_this4","addUpdateListener","sessionUpdateListener","time","currentTime","playerState","removeClass","load","sources","isPlaying","once","CONTAINER_READY","seek","getDuration","stop","_this5","pause","mediaInfo","createMediaInfo","request","media","LoadRequest","autoplay","loadMedia","loadMediaSuccess","loadMediaError","mimeType","mimeTypeFor","MediaInfo","contentType","customData","metadata","createMediaMetadata","createCastMediaMetadata","title","subtitle","releaseDate","TvShow","episode","originalAirdate","season","seriesTitle","Movie","studio","images","map","url","Image","MovieMediaMetadata","TvShowMediaMetadata","GenericMediaMetadata","_this6","getCurrentTime","requestSession","launchSuccess","launchError","position","connectingIcons","setInterval","html","setKeepVisible","timeProgress","current","find","$style","Styler","getStyleFor","baseUrl","srcUrl","extension","split","match","indexOf","UICorePlugin","_publicChromecastHtml","_publicChromecastHtml2","TICK_INTERVAL","ChromecastPlayback","_Playback","onMediaStatusUpdate","noVolume","filter","left","right","template","$","css","stopTimer","getPlaybackType","Playback","LIVE","trigger","PLAYBACK_DVR","SeekRequest","startTimer","percentage","duration","timer","updateMediaControl","liveSeekableRange","VOD","changeTogglePlay","isBuffering","PLAYBACK_BUFFERING","PLAYBACK_BUFFERFULL","prevState","PLAYBACK_PLAY","PLAYBACK_ENDED","PLAYBACK_PAUSE","getEstimatedTime","PLAYBACK_TIMEUPDATE","total","push","list","toString","result","item","join","mediaQuery","alreadyImportedModules","assignWith","source","customizer","index","keys","baseAssign","createAssigner","assign","baseCopy","baseProperty","isArrayLike","isLength","getLength","isIndex","reIsUint","test","MAX_SAFE_INTEGER","shimKeys","keysIn","propsLength","allowIndexes","isArray","isArguments","hasOwnProperty","isObject","Ctor","isProto","Array","skipIndexes","getNative","objectProto","nativeKeys","isObjectLike","isNative","isFunction","objToString","funcTag","reIsNative","fnToString","reIsHostCtor","RegExp","replace","isArrayLikeObject","propertyIsEnumerable","objectToString","argsTag","tag","genTag","arrayTag","nativeIsArray","assigner","restParam","guard","thisArg","bindCallback","isIterateeCall","func","argCount","identity","collection","accumulator","other","apply","arguments","start","FUNC_ERROR_TEXT","nativeMax","args","rest","otherArgs","Math","max"],"mappings":"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","file":"clappr-chromecast-plugin.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"clappr\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"clappr\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ChromecastPlugin\"] = factory(require(\"clappr\"));\n\telse\n\t\troot[\"ChromecastPlugin\"] = factory(root[\"Clappr\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"clappr\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"clappr\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ChromecastPlugin\"] = factory(require(\"clappr\"));\n\telse\n\t\troot[\"ChromecastPlugin\"] = factory(root[\"Clappr\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!***************************!*\\\n !*** ./src/chromecast.js ***!\n \\***************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\tvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\t\n\tvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\t\n\tfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\t\n\tvar _clappr = __webpack_require__(/*! clappr */ 1);\n\t\n\tvar _chromecast_playback = __webpack_require__(/*! ./chromecast_playback */ 2);\n\t\n\tvar _chromecast_playback2 = _interopRequireDefault(_chromecast_playback);\n\t\n\tvar _publicStyleScss = __webpack_require__(/*! ./public/style.scss */ 4);\n\t\n\tvar _publicStyleScss2 = _interopRequireDefault(_publicStyleScss);\n\t\n\tvar _lodashAssign = __webpack_require__(/*! lodash.assign */ 6);\n\t\n\tvar _lodashAssign2 = _interopRequireDefault(_lodashAssign);\n\t\n\tvar _publicIc_cast_24dpSvg = __webpack_require__(/*! ./public/ic_cast_24dp.svg */ 17);\n\t\n\tvar _publicIc_cast_24dpSvg2 = _interopRequireDefault(_publicIc_cast_24dpSvg);\n\t\n\tvar _publicIc_cast0_24dpSvg = __webpack_require__(/*! ./public/ic_cast0_24dp.svg */ 18);\n\t\n\tvar _publicIc_cast0_24dpSvg2 = _interopRequireDefault(_publicIc_cast0_24dpSvg);\n\t\n\tvar _publicIc_cast1_24dpSvg = __webpack_require__(/*! ./public/ic_cast1_24dp.svg */ 19);\n\t\n\tvar _publicIc_cast1_24dpSvg2 = _interopRequireDefault(_publicIc_cast1_24dpSvg);\n\t\n\tvar _publicIc_cast2_24dpSvg = __webpack_require__(/*! ./public/ic_cast2_24dp.svg */ 20);\n\t\n\tvar _publicIc_cast2_24dpSvg2 = _interopRequireDefault(_publicIc_cast2_24dpSvg);\n\t\n\tvar _publicIc_cast_connected_24dpSvg = __webpack_require__(/*! ./public/ic_cast_connected_24dp.svg */ 21);\n\t\n\tvar _publicIc_cast_connected_24dpSvg2 = _interopRequireDefault(_publicIc_cast_connected_24dpSvg);\n\t\n\tvar DEVICE_STATE = {\n\t 'IDLE': 0,\n\t 'ACTIVE': 1,\n\t 'WARNING': 2,\n\t 'ERROR': 3\n\t};\n\t\n\tvar DEFAULT_CLAPPR_APP_ID = '9DFB77C0';\n\t\n\tvar MIMETYPES = {\n\t 'mp4': 'video/mp4',\n\t 'ogg': 'video/ogg',\n\t '3gpp': 'video/3gpp',\n\t 'webm': 'video/webm',\n\t 'mkv': 'video/x-matroska',\n\t 'm3u8': 'application/x-mpegurl',\n\t 'mpd': 'application/dash+xml'\n\t};\n\tMIMETYPES['ogv'] = MIMETYPES['ogg'];\n\tMIMETYPES['3gp'] = MIMETYPES['3gpp'];\n\t\n\tvar ChromecastPlugin = (function (_UICorePlugin) {\n\t _inherits(ChromecastPlugin, _UICorePlugin);\n\t\n\t _createClass(ChromecastPlugin, [{\n\t key: 'version',\n\t get: function get() {\n\t return (\"0.1.1\");\n\t }\n\t }, {\n\t key: 'name',\n\t get: function get() {\n\t return 'chromecast';\n\t }\n\t }, {\n\t key: 'tagName',\n\t get: function get() {\n\t return 'button';\n\t }\n\t }, {\n\t key: 'attributes',\n\t get: function get() {\n\t return {\n\t 'class': 'chromecast-button',\n\t 'type': 'button'\n\t };\n\t }\n\t }, {\n\t key: 'events',\n\t get: function get() {\n\t return {\n\t 'click': 'click'\n\t };\n\t }\n\t }, {\n\t key: 'options',\n\t get: function get() {\n\t return this.core.options.chromecast || (this.core.options.chromecast = {});\n\t }\n\t }, {\n\t key: 'container',\n\t get: function get() {\n\t return this.core.getCurrentContainer ? this.core.getCurrentContainer() : this.core.activeContainer; // Clappr 0.3.0 or greater\n\t }\n\t }, {\n\t key: 'playback',\n\t get: function get() {\n\t return this.core.getCurrentPlayback ? this.core.getCurrentPlayback() : this.core.activePlayback; // Clappr 0.3.0 or greater\n\t }\n\t }], [{\n\t key: 'Movie',\n\t get: function get() {\n\t return 'movie';\n\t }\n\t }, {\n\t key: 'TvShow',\n\t get: function get() {\n\t return 'tv_show';\n\t }\n\t }, {\n\t key: 'Generic',\n\t get: function get() {\n\t return 'none';\n\t }\n\t }, {\n\t key: 'version',\n\t get: function get() {\n\t return (\"0.1.1\");\n\t }\n\t }]);\n\t\n\t function ChromecastPlugin(core) {\n\t _classCallCheck(this, ChromecastPlugin);\n\t\n\t _get(Object.getPrototypeOf(ChromecastPlugin.prototype), 'constructor', this).call(this, core);\n\t\n\t this.bootTryDelay = this.options.bootTryDelay || 500; // Default is 500 milliseconds between each attempt\n\t this.bootMaxTryCount = this.options.bootMaxTryCount || 6; // Default is 6 attempts (3 seconds)\n\t this.bootTryCount = 0;\n\t\n\t if (this.isBootable()) {\n\t this.appId = this.options.appId || DEFAULT_CLAPPR_APP_ID;\n\t this.deviceState = DEVICE_STATE.IDLE;\n\t this.embedScript();\n\t } else {\n\t this.disable();\n\t }\n\t }\n\t\n\t _createClass(ChromecastPlugin, [{\n\t key: 'bindEvents',\n\t value: function bindEvents() {\n\t this.listenTo(this.core.mediaControl, _clappr.Events.MEDIACONTROL_RENDERED, this.render);\n\t\n\t if (_clappr.Events.CORE_ACTIVE_CONTAINER_CHANGED) {\n\t // Clappr 0.3.0 or greater\n\t this.listenTo(this.core, _clappr.Events.CORE_ACTIVE_CONTAINER_CHANGED, this.containerChanged);\n\t } else {\n\t this.listenTo(this.core.mediaControl, _clappr.Events.MEDIACONTROL_CONTAINERCHANGED, this.containerChanged);\n\t }\n\t\n\t if (this.container) {\n\t this.listenTo(this.container, _clappr.Events.CONTAINER_TIMEUPDATE, this.containerTimeUpdate);\n\t this.listenTo(this.container, _clappr.Events.CONTAINER_PLAY, this.containerPlay);\n\t this.listenTo(this.container, _clappr.Events.CONTAINER_ENDED, this.sessionStopped);\n\t }\n\t }\n\t }, {\n\t key: 'isBootable',\n\t value: function isBootable() {\n\t // Browser must be Chrome\n\t if (!_clappr.Browser.isChrome) {\n\t return false;\n\t }\n\t\n\t // Chrome lesser than or equals to 71\n\t // does not require secure page\n\t if (_clappr.Browser.version <= 71) {\n\t return true;\n\t }\n\t\n\t // Chrome greater than or equals to 72\n\t // require secure page\n\t return this.isSecure();\n\t }\n\t }, {\n\t key: 'isSecure',\n\t value: function isSecure() {\n\t return window.location.protocol === 'https:';\n\t }\n\t }, {\n\t key: 'enable',\n\t value: function enable() {\n\t _get(Object.getPrototypeOf(ChromecastPlugin.prototype), 'enable', this).call(this);\n\t this.render();\n\t this.embedScript();\n\t }\n\t }, {\n\t key: 'embedScript',\n\t value: function embedScript() {\n\t var _this = this;\n\t\n\t if (!window.chrome || !window.chrome.cast || !window.chrome.cast.isAvailable) {\n\t var script = document.createElement('script');\n\t script.setAttribute('type', 'text/javascript');\n\t script.setAttribute('async', 'async');\n\t script.setAttribute('src', 'https://www.gstatic.com/cv/js/sender/v1/cast_sender.js');\n\t script.onload = function () {\n\t return _this.bootstrapCastApi();\n\t };\n\t document.body.appendChild(script);\n\t } else {\n\t this.bootstrapCastApi();\n\t }\n\t }\n\t }, {\n\t key: 'bootstrapCastApi',\n\t value: function bootstrapCastApi() {\n\t var _this2 = this;\n\t\n\t this.bootTryCount++;\n\t\n\t if (this.bootTryCount > this.bootMaxTryCount) {\n\t this.bootTryCount = 0;\n\t _clappr.Log.warn('GCastApi bootstrap timeout');\n\t this.disable();\n\t return;\n\t }\n\t\n\t // The \"chrome\" property may not be available immediately on some iOS devices\n\t if (window.chrome) {\n\t this.bootTryCount = 0;\n\t\n\t if (window.chrome.cast && window.chrome.cast.isAvailable) {\n\t this.appId = this.appId || DEFAULT_CLAPPR_APP_ID;\n\t this.initializeCastApi();\n\t } else {\n\t window['__onGCastApiAvailable'] = function (loaded, errorInfo) {\n\t if (loaded) {\n\t _this2.appId = _this2.appId || DEFAULT_CLAPPR_APP_ID;\n\t _this2.initializeCastApi();\n\t } else {\n\t _clappr.Log.warn('GCastApi error', errorInfo);\n\t _this2.disable();\n\t }\n\t };\n\t }\n\t } else {\n\t setTimeout(function () {\n\t _this2.bootstrapCastApi();\n\t }, this.bootTryDelay);\n\t }\n\t }\n\t }, {\n\t key: 'initializeCastApi',\n\t value: function initializeCastApi() {\n\t var _this3 = this;\n\t\n\t var autoJoinPolicy = chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED;\n\t var sessionRequest = new chrome.cast.SessionRequest(this.appId);\n\t var apiConfig = new chrome.cast.ApiConfig(sessionRequest, function (session) {\n\t return _this3.sessionListener(session);\n\t }, function (e) {\n\t return _this3.receiverListener(e);\n\t }, autoJoinPolicy);\n\t chrome.cast.initialize(apiConfig, function () {\n\t return _clappr.Log.debug(_this3.name, 'init success');\n\t }, function () {\n\t return _clappr.Log.warn(_this3.name, 'init error');\n\t });\n\t }\n\t }, {\n\t key: 'sessionListener',\n\t value: function sessionListener(session) {\n\t _clappr.Log.debug(this.name, 'new session id:' + session.sessionId);\n\t this.newSession(session);\n\t }\n\t }, {\n\t key: 'sessionUpdateListener',\n\t value: function sessionUpdateListener() {\n\t if (this.session) {\n\t _clappr.Log.debug(this.name, this.session.status);\n\t if (this.session.status === chrome.cast.SessionStatus.STOPPED) {\n\t this.sessionStopped();\n\t this.session = null;\n\t }\n\t }\n\t }\n\t }, {\n\t key: 'receiverListener',\n\t value: function receiverListener(e) {\n\t if (e === chrome.cast.ReceiverAvailability.AVAILABLE) {\n\t _clappr.Log.debug(this.name, 'receiver found');\n\t this.show();\n\t } else {\n\t _clappr.Log.debug(this.name, 'receiver list empty');\n\t this.hide();\n\t }\n\t }\n\t }, {\n\t key: 'launchSuccess',\n\t value: function launchSuccess(session) {\n\t this.renderConnected();\n\t clearInterval(this.connectAnimInterval);\n\t this.core.mediaControl.resetKeepVisible();\n\t _clappr.Log.debug(this.name, 'launch success - session: ' + session.sessionId);\n\t this.newSession(session);\n\t }\n\t }, {\n\t key: 'launchError',\n\t value: function launchError(e) {\n\t _clappr.Log.debug(this.name, 'error on launch', e);\n\t this.renderDisconnected();\n\t clearInterval(this.connectAnimInterval);\n\t this.core.mediaControl.resetKeepVisible();\n\t this.container.play();\n\t }\n\t }, {\n\t key: 'loadMediaSuccess',\n\t value: function loadMediaSuccess(how, mediaSession) {\n\t _clappr.Log.debug(this.name, 'new media session', mediaSession, '(', how, ')');\n\t\n\t this.originalPlayback = this.playback;\n\t\n\t var options = (0, _lodashAssign2['default'])({}, this.originalPlayback.options, {\n\t currentMedia: mediaSession,\n\t mediaControl: this.core.mediaControl,\n\t poster: this.options.poster || this.core.options.poster,\n\t settings: this.originalPlayback.settings\n\t });\n\t this.src = this.originalPlayback.src;\n\t this.playbackProxy = new _chromecast_playback2['default'](options);\n\t this.playbackProxy.render();\n\t this.core.$el.addClass('chromecast-active');\n\t\n\t this.mediaSession = mediaSession;\n\t\n\t this.originalPlayback.$el.remove();\n\t\n\t var container = this.container;\n\t container.$el.append(this.playbackProxy.$el);\n\t container.stopListening();\n\t container.playback = this.playbackProxy;\n\t container.bindEvents();\n\t container.settingsUpdate();\n\t }\n\t }, {\n\t key: 'loadMediaError',\n\t value: function loadMediaError(e) {\n\t _clappr.Log.warn(this.name, 'media error', e);\n\t }\n\t }, {\n\t key: 'newSession',\n\t value: function newSession(session) {\n\t var _this4 = this;\n\t\n\t this.session = session;\n\t this.deviceState = DEVICE_STATE.ACTIVE;\n\t this.renderConnected();\n\t\n\t session.addUpdateListener(function () {\n\t return _this4.sessionUpdateListener();\n\t });\n\t\n\t this.containerPlay();\n\t }\n\t }, {\n\t key: 'sessionStopped',\n\t value: function sessionStopped() {\n\t this.renderDisconnected();\n\t\n\t var time = this.currentTime;\n\t\n\t var playerState = undefined;\n\t if (this.mediaSession) {\n\t playerState = this.mediaSession.playerState;\n\t this.mediaSession = null;\n\t }\n\t\n\t this.core.$el.removeClass('chromecast-active');\n\t this.core.load(this.src || this.core.options.sources);\n\t\n\t var container = this.container;\n\t\n\t if (this.playbackProxy) {\n\t if (this.playbackProxy.isPlaying() || playerState === 'PAUSED') {\n\t container.once(_clappr.Events.CONTAINER_READY, function () {\n\t container.play();\n\t container.playback.seek(100 * time / container.getDuration());\n\t });\n\t }\n\t this.playbackProxy.stop();\n\t }\n\t }\n\t }, {\n\t key: 'loadMedia',\n\t value: function loadMedia() {\n\t var _this5 = this;\n\t\n\t this.container.pause();\n\t var src = this.container.options.src;\n\t _clappr.Log.debug(this.name, 'loading... ' + src);\n\t var mediaInfo = this.createMediaInfo(src);\n\t var request = new chrome.cast.media.LoadRequest(mediaInfo);\n\t request.autoplay = true;\n\t if (this.currentTime) {\n\t request.currentTime = this.currentTime;\n\t }\n\t this.session.loadMedia(request, function (mediaSession) {\n\t return _this5.loadMediaSuccess('loadMedia', mediaSession);\n\t }, function (e) {\n\t return _this5.loadMediaError(e);\n\t });\n\t }\n\t }, {\n\t key: 'createMediaInfo',\n\t value: function createMediaInfo(src) {\n\t var mimeType = ChromecastPlugin.mimeTypeFor(src);\n\t var mediaInfo = new chrome.cast.media.MediaInfo(src);\n\t mediaInfo.contentType = this.options.contentType || mimeType;\n\t mediaInfo.customData = this.options.customData;\n\t var metadata = this.createMediaMetadata();\n\t mediaInfo.metadata = metadata;\n\t return mediaInfo;\n\t }\n\t }, {\n\t key: 'createMediaMetadata',\n\t value: function createMediaMetadata() {\n\t this.options.media || (this.options.media = {});\n\t var type = this.options.media.type;\n\t\n\t var metadata = this.createCastMediaMetadata(type);\n\t metadata.title = this.options.media.title;\n\t metadata.subtitle = this.options.media.subtitle;\n\t metadata.releaseDate = this.options.media.releaseDate;\n\t\n\t if (type === ChromecastPlugin.TvShow) {\n\t metadata.episode = this.options.media.episode;\n\t metadata.originalAirdate = this.options.media.originalAirdate;\n\t metadata.season = this.options.media.season;\n\t metadata.seriesTitle = this.options.media.seriesTitle;\n\t } else if (type === ChromecastPlugin.Movie) {\n\t metadata.studio = this.options.media.studio;\n\t }\n\t\n\t if (this.options.media.images) {\n\t metadata.images = this.options.media.images.map(function (url) {\n\t return new chrome.cast.Image(url);\n\t });\n\t }\n\t if (!metadata.images && this.options.poster) {\n\t metadata.images = [new chrome.cast.Image(this.options.poster)];\n\t }\n\t if (!metadata.images && this.core.options.poster) {\n\t metadata.images = [new chrome.cast.Image(this.core.options.poster)];\n\t }\n\t return metadata;\n\t }\n\t }, {\n\t key: 'createCastMediaMetadata',\n\t value: function createCastMediaMetadata(type) {\n\t switch (type) {\n\t case ChromecastPlugin.Movie:\n\t return new chrome.cast.media.MovieMediaMetadata();\n\t case ChromecastPlugin.TvShow:\n\t return new chrome.cast.media.TvShowMediaMetadata();\n\t default:\n\t return new chrome.cast.media.GenericMediaMetadata();\n\t }\n\t }\n\t }, {\n\t key: 'show',\n\t value: function show() {\n\t this.$el.show();\n\t }\n\t }, {\n\t key: 'hide',\n\t value: function hide() {\n\t this.$el.hide();\n\t }\n\t }, {\n\t key: 'click',\n\t value: function click() {\n\t var _this6 = this;\n\t\n\t this.currentTime = this.container.getCurrentTime();\n\t this.container.pause();\n\t chrome.cast.requestSession(function (session) {\n\t return _this6.launchSuccess(session);\n\t }, function (e) {\n\t return _this6.launchError(e);\n\t });\n\t if (!this.session) {\n\t (function () {\n\t var position = 0;\n\t var connectingIcons = [_publicIc_cast0_24dpSvg2['default'], _publicIc_cast1_24dpSvg2['default'], _publicIc_cast2_24dpSvg2['default']];\n\t clearInterval(_this6.connectAnimInterval);\n\t _this6.connectAnimInterval = setInterval(function () {\n\t _this6.$el.html(connectingIcons[position]);\n\t position = (position + 1) % 3;\n\t }, 600);\n\t _this6.core.mediaControl.setKeepVisible();\n\t })();\n\t }\n\t }\n\t }, {\n\t key: 'containerChanged',\n\t value: function containerChanged() {\n\t this.stopListening();\n\t this.bindEvents();\n\t }\n\t }, {\n\t key: 'containerTimeUpdate',\n\t value: function containerTimeUpdate(timeProgress) {\n\t this.currentTime = timeProgress.current;\n\t }\n\t }, {\n\t key: 'containerPlay',\n\t value: function containerPlay() {\n\t if (this.session && (!this.mediaSession || this.mediaSession.playerState === 'IDLE' || this.mediaSession.playerState === 'PAUSED')) {\n\t _clappr.Log.debug(this.name, 'load media');\n\t this.loadMedia();\n\t }\n\t }\n\t }, {\n\t key: 'renderConnected',\n\t value: function renderConnected() {\n\t this.$el.html(_publicIc_cast_connected_24dpSvg2['default']);\n\t }\n\t }, {\n\t key: 'renderDisconnected',\n\t value: function renderDisconnected() {\n\t this.$el.html(_publicIc_cast_24dpSvg2['default']);\n\t }\n\t }, {\n\t key: 'render',\n\t value: function render() {\n\t this.session ? this.renderConnected() : this.renderDisconnected();\n\t this.core.mediaControl.$el.find('.media-control-right-panel[data-media-control]').append(this.$el);\n\t this.$style && this.$style.remove();\n\t this.$style = _clappr.Styler.getStyleFor(_publicStyleScss2['default'], { baseUrl: this.core.options.baseUrl });\n\t this.core.$el.append(this.$style);\n\t return this;\n\t }\n\t }], [{\n\t key: 'mimeTypeFor',\n\t value: function mimeTypeFor(srcUrl) {\n\t var extension = (srcUrl.split('?')[0].match(/.*\\.(.*)$/) || [])[1];\n\t if (MIMETYPES[extension]) {\n\t return MIMETYPES[extension];\n\t } else if (srcUrl.indexOf('.ism') > -1) {\n\t return 'application/vnd.ms-sstr+xml';\n\t }\n\t }\n\t }]);\n\t\n\t return ChromecastPlugin;\n\t})(_clappr.UICorePlugin);\n\t\n\texports['default'] = ChromecastPlugin;\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 1 */\n/*!******************************************************************************************!*\\\n !*** external {\"amd\":\"clappr\",\"commonjs\":\"clappr\",\"commonjs2\":\"clappr\",\"root\":\"Clappr\"} ***!\n \\******************************************************************************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n/***/ }),\n/* 2 */\n/*!************************************!*\\\n !*** ./src/chromecast_playback.js ***!\n \\************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\tvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\t\n\tvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\t\n\tfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\t\n\tvar _clappr = __webpack_require__(/*! clappr */ 1);\n\t\n\tvar _publicChromecastHtml = __webpack_require__(/*! ./public/chromecast.html */ 3);\n\t\n\tvar _publicChromecastHtml2 = _interopRequireDefault(_publicChromecastHtml);\n\t\n\tvar TICK_INTERVAL = 100;\n\t\n\tvar ChromecastPlayback = (function (_Playback) {\n\t _inherits(ChromecastPlayback, _Playback);\n\t\n\t _createClass(ChromecastPlayback, [{\n\t key: 'name',\n\t get: function get() {\n\t return 'chromecast_playback';\n\t }\n\t }, {\n\t key: 'template',\n\t get: function get() {\n\t return (0, _clappr.template)(_publicChromecastHtml2['default']);\n\t }\n\t }, {\n\t key: 'attributes',\n\t get: function get() {\n\t return { 'class': 'chromecast-playback' };\n\t }\n\t }, {\n\t key: 'isReady',\n\t get: function get() {\n\t return true;\n\t }\n\t }]);\n\t\n\t function ChromecastPlayback(options) {\n\t var _this = this;\n\t\n\t _classCallCheck(this, ChromecastPlayback);\n\t\n\t _get(Object.getPrototypeOf(ChromecastPlayback.prototype), 'constructor', this).call(this, options);\n\t this.src = options.src;\n\t this.currentMedia = options.currentMedia;\n\t this.mediaControl = options.mediaControl;\n\t this.currentMedia.addUpdateListener(function () {\n\t return _this.onMediaStatusUpdate();\n\t });\n\t this.settings = options.settings;\n\t var noVolume = function noVolume(name) {\n\t return name != 'volume';\n\t };\n\t this.settings['default'] && (this.settings['default'] = this.settings['default'].filter(noVolume));\n\t this.settings.left && (this.settings.left = this.settings.left.filter(noVolume));\n\t this.settings.right && (this.settings.right = this.settings.right.filter(noVolume));\n\t }\n\t\n\t _createClass(ChromecastPlayback, [{\n\t key: 'render',\n\t value: function render() {\n\t var template = this.template();\n\t this.$el.html(template);\n\t if (this.options.poster) {\n\t this.$('.chromecast-playback-background').css('background-image', 'url(' + this.options.poster + ')');\n\t } else {\n\t this.$('.chromecast-playback-background').css('background-color', '#666');\n\t }\n\t }\n\t }, {\n\t key: 'play',\n\t value: function play() {\n\t this.currentMedia.play();\n\t }\n\t }, {\n\t key: 'pause',\n\t value: function pause() {\n\t this.stopTimer();\n\t this.currentMedia.pause();\n\t if (this.getPlaybackType() === _clappr.Playback.LIVE) {\n\t this.trigger(_clappr.Events.PLAYBACK_DVR, true);\n\t }\n\t }\n\t }, {\n\t key: 'stop',\n\t value: function stop() {\n\t this.stopTimer();\n\t this.currentMedia.pause(); // FIXME: properly handle media stop\n\t }\n\t }, {\n\t key: 'seek',\n\t value: function seek(time) {\n\t var _this2 = this;\n\t\n\t this.stopTimer();\n\t var request = new chrome.cast.media.SeekRequest();\n\t request.currentTime = time;\n\t this.currentMedia.seek(request, function () {\n\t return _this2.startTimer();\n\t }, function () {\n\t return _clappr.Log.warn('seek failed');\n\t });\n\t if (this.getPlaybackType() === _clappr.Playback.LIVE) {\n\t // assume live if time within 30 seconds of end of live stream\n\t this.trigger(_clappr.Events.PLAYBACK_DVR, time < this.getDuration() - 30);\n\t }\n\t }\n\t }, {\n\t key: 'seekPercentage',\n\t value: function seekPercentage(percentage) {\n\t if (percentage >= 0 && percentage <= 100) {\n\t var duration = this.getDuration();\n\t this.seek(percentage * duration / 100);\n\t }\n\t }\n\t }, {\n\t key: 'startTimer',\n\t value: function startTimer() {\n\t var _this3 = this;\n\t\n\t this.timer = setInterval(function () {\n\t return _this3.updateMediaControl();\n\t }, TICK_INTERVAL);\n\t }\n\t }, {\n\t key: 'stopTimer',\n\t value: function stopTimer() {\n\t clearInterval(this.timer);\n\t this.timer = null;\n\t }\n\t }, {\n\t key: 'getDuration',\n\t value: function getDuration() {\n\t return this.currentMedia.media.duration;\n\t }\n\t }, {\n\t key: 'isPlaying',\n\t value: function isPlaying() {\n\t return this.currentMedia.playerState === 'PLAYING' || this.currentMedia.playerState === 'BUFFERING';\n\t }\n\t }, {\n\t key: 'getPlaybackType',\n\t value: function getPlaybackType() {\n\t return !!this.currentMedia.liveSeekableRange ? _clappr.Playback.LIVE : _clappr.Playback.VOD;\n\t }\n\t }, {\n\t key: 'onMediaStatusUpdate',\n\t value: function onMediaStatusUpdate() {\n\t this.mediaControl.changeTogglePlay();\n\t if (this.isPlaying() && !this.timer) {\n\t this.startTimer();\n\t }\n\t\n\t if (this.currentMedia.playerState === 'BUFFERING') {\n\t this.isBuffering = true;\n\t this.trigger(_clappr.Events.PLAYBACK_BUFFERING, this.name);\n\t } else if (this.currentMedia.playerState === 'PLAYING') {\n\t if (this.isBuffering) {\n\t this.isBuffering = false;\n\t this.trigger(_clappr.Events.PLAYBACK_BUFFERFULL, this.name);\n\t }\n\t if (this.prevState !== this.currentMedia.playerState) {\n\t this.trigger(_clappr.Events.PLAYBACK_PLAY, this.name);\n\t }\n\t } else if (this.currentMedia.playerState === 'IDLE') {\n\t if (this.isBuffering) {\n\t this.isBuffering = false;\n\t this.trigger(_clappr.Events.PLAYBACK_BUFFERFULL, this.name);\n\t }\n\t this.trigger(_clappr.Events.PLAYBACK_ENDED, this.name);\n\t } else if (this.currentMedia.playerState === 'PAUSED') {\n\t if (this.prevState !== this.currentMedia.playerState) {\n\t this.trigger(_clappr.Events.PLAYBACK_PAUSE, this.name);\n\t }\n\t }\n\t\n\t this.prevState = this.currentMedia.playerState;\n\t }\n\t }, {\n\t key: 'updateMediaControl',\n\t value: function updateMediaControl() {\n\t var position = this.currentMedia.getEstimatedTime();\n\t var duration = this.currentMedia.media.duration;\n\t this.trigger(_clappr.Events.PLAYBACK_TIMEUPDATE, { current: position, total: duration }, this.name);\n\t }\n\t }, {\n\t key: 'show',\n\t value: function show() {\n\t this.$el.show();\n\t }\n\t }, {\n\t key: 'hide',\n\t value: function hide() {\n\t this.$el.hide();\n\t }\n\t }]);\n\t\n\t return ChromecastPlayback;\n\t})(_clappr.Playback);\n\t\n\texports['default'] = ChromecastPlayback;\n\tmodule.exports = exports['default'];\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/public/chromecast.html ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = \"
\";\n\n/***/ }),\n/* 4 */\n/*!*******************************!*\\\n !*** ./src/public/style.scss ***!\n \\*******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\texports = module.exports = __webpack_require__(/*! ../../~/css-loader/lib/css-base.js */ 5)();\n\t// imports\n\t\n\t\n\t// module\n\texports.push([module.id, \".chromecast-playback{height:100%;width:100%}.chromecast-playback .chromecast-playback-background,.chromecast-playback .chromecast-playback-overlay{position:absolute;height:100%;width:100%}.chromecast-playback .chromecast-playback-background{background-size:contain}.chromecast-playback .chromecast-playback-overlay{background-color:#000;opacity:.4}.chromecast-button{background:transparent;border:0;width:32px;height:32px;font-size:22px;line-height:32px;letter-spacing:0;margin:0 6px;color:#fff;opacity:.5;vertical-align:middle;text-align:left;cursor:pointer;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transition:all .1s ease}.chromecast-button:hover{opacity:.75;text-shadow:hsla(0,0%,100%,.8) 0 0 5px}.chromecast-button:focus{outline:none}.chromecast-button svg{width:24px;height:24px}.chromecast-button svg #cast,.chromecast-button svg #cast-on,.chromecast-button svg #Path{fill:#fff;stroke:#fff;stroke-width:.5px}\", \"\"]);\n\t\n\t// exports\n\n\n/***/ }),\n/* 5 */\n/*!**************************************!*\\\n !*** ./~/css-loader/lib/css-base.js ***!\n \\**************************************/\n/***/ (function(module, exports) {\n\n\t/*\r\n\t\tMIT License http://www.opensource.org/licenses/mit-license.php\r\n\t\tAuthor Tobias Koppers @sokra\r\n\t*/\r\n\t// css base code, injected by the css-loader\r\n\tmodule.exports = function() {\r\n\t\tvar list = [];\r\n\t\r\n\t\t// return the list of modules as css string\r\n\t\tlist.toString = function toString() {\r\n\t\t\tvar result = [];\r\n\t\t\tfor(var i = 0; i < this.length; i++) {\r\n\t\t\t\tvar item = this[i];\r\n\t\t\t\tif(item[2]) {\r\n\t\t\t\t\tresult.push(\"@media \" + item[2] + \"{\" + item[1] + \"}\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tresult.push(item[1]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn result.join(\"\");\r\n\t\t};\r\n\t\r\n\t\t// import a list of modules into the list\r\n\t\tlist.i = function(modules, mediaQuery) {\r\n\t\t\tif(typeof modules === \"string\")\r\n\t\t\t\tmodules = [[null, modules, \"\"]];\r\n\t\t\tvar alreadyImportedModules = {};\r\n\t\t\tfor(var i = 0; i < this.length; i++) {\r\n\t\t\t\tvar id = this[i][0];\r\n\t\t\t\tif(typeof id === \"number\")\r\n\t\t\t\t\talreadyImportedModules[id] = true;\r\n\t\t\t}\r\n\t\t\tfor(i = 0; i < modules.length; i++) {\r\n\t\t\t\tvar item = modules[i];\r\n\t\t\t\t// skip already imported module\r\n\t\t\t\t// this implementation is not 100% perfect for weird media query combinations\r\n\t\t\t\t// when a module is imported multiple times with different media queries.\r\n\t\t\t\t// I hope this will never occur (Hey this way we have smaller bundles)\r\n\t\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\r\n\t\t\t\t\tif(mediaQuery && !item[2]) {\r\n\t\t\t\t\t\titem[2] = mediaQuery;\r\n\t\t\t\t\t} else if(mediaQuery) {\r\n\t\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlist.push(item);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\treturn list;\r\n\t};\r\n\n\n/***/ }),\n/* 6 */\n/*!**********************************!*\\\n !*** ./~/lodash.assign/index.js ***!\n \\**********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * lodash 3.2.0 (Custom Build) \n\t * Build: `lodash modern modularize exports=\"npm\" -o ./`\n\t * Copyright 2012-2015 The Dojo Foundation \n\t * Based on Underscore.js 1.8.3 \n\t * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t * Available under MIT license \n\t */\n\tvar baseAssign = __webpack_require__(/*! lodash._baseassign */ 7),\n\t createAssigner = __webpack_require__(/*! lodash._createassigner */ 13),\n\t keys = __webpack_require__(/*! lodash.keys */ 9);\n\t\n\t/**\n\t * A specialized version of `_.assign` for customizing assigned values without\n\t * support for argument juggling, multiple sources, and `this` binding `customizer`\n\t * functions.\n\t *\n\t * @private\n\t * @param {Object} object The destination object.\n\t * @param {Object} source The source object.\n\t * @param {Function} customizer The function to customize assigned values.\n\t * @returns {Object} Returns `object`.\n\t */\n\tfunction assignWith(object, source, customizer) {\n\t var index = -1,\n\t props = keys(source),\n\t length = props.length;\n\t\n\t while (++index < length) {\n\t var key = props[index],\n\t value = object[key],\n\t result = customizer(value, source[key], key, object, source);\n\t\n\t if ((result === result ? (result !== value) : (value === value)) ||\n\t (value === undefined && !(key in object))) {\n\t object[key] = result;\n\t }\n\t }\n\t return object;\n\t}\n\t\n\t/**\n\t * Assigns own enumerable properties of source object(s) to the destination\n\t * object. Subsequent sources overwrite property assignments of previous sources.\n\t * If `customizer` is provided it is invoked to produce the assigned values.\n\t * The `customizer` is bound to `thisArg` and invoked with five arguments:\n\t * (objectValue, sourceValue, key, object, source).\n\t *\n\t * **Note:** This method mutates `object` and is based on\n\t * [`Object.assign`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @alias extend\n\t * @category Object\n\t * @param {Object} object The destination object.\n\t * @param {...Object} [sources] The source objects.\n\t * @param {Function} [customizer] The function to customize assigned values.\n\t * @param {*} [thisArg] The `this` binding of `customizer`.\n\t * @returns {Object} Returns `object`.\n\t * @example\n\t *\n\t * _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' });\n\t * // => { 'user': 'fred', 'age': 40 }\n\t *\n\t * // using a customizer callback\n\t * var defaults = _.partialRight(_.assign, function(value, other) {\n\t * return _.isUndefined(value) ? other : value;\n\t * });\n\t *\n\t * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });\n\t * // => { 'user': 'barney', 'age': 36 }\n\t */\n\tvar assign = createAssigner(function(object, source, customizer) {\n\t return customizer\n\t ? assignWith(object, source, customizer)\n\t : baseAssign(object, source);\n\t});\n\t\n\tmodule.exports = assign;\n\n\n/***/ }),\n/* 7 */\n/*!***************************************!*\\\n !*** ./~/lodash._baseassign/index.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * lodash 3.2.0 (Custom Build) \n\t * Build: `lodash modern modularize exports=\"npm\" -o ./`\n\t * Copyright 2012-2015 The Dojo Foundation \n\t * Based on Underscore.js 1.8.3 \n\t * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t * Available under MIT license \n\t */\n\tvar baseCopy = __webpack_require__(/*! lodash._basecopy */ 8),\n\t keys = __webpack_require__(/*! lodash.keys */ 9);\n\t\n\t/**\n\t * The base implementation of `_.assign` without support for argument juggling,\n\t * multiple sources, and `customizer` functions.\n\t *\n\t * @private\n\t * @param {Object} object The destination object.\n\t * @param {Object} source The source object.\n\t * @returns {Object} Returns `object`.\n\t */\n\tfunction baseAssign(object, source) {\n\t return source == null\n\t ? object\n\t : baseCopy(source, keys(source), object);\n\t}\n\t\n\tmodule.exports = baseAssign;\n\n\n/***/ }),\n/* 8 */\n/*!*************************************!*\\\n !*** ./~/lodash._basecopy/index.js ***!\n \\*************************************/\n/***/ (function(module, exports) {\n\n\t/**\n\t * lodash 3.0.1 (Custom Build) \n\t * Build: `lodash modern modularize exports=\"npm\" -o ./`\n\t * Copyright 2012-2015 The Dojo Foundation \n\t * Based on Underscore.js 1.8.3 \n\t * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t * Available under MIT license \n\t */\n\t\n\t/**\n\t * Copies properties of `source` to `object`.\n\t *\n\t * @private\n\t * @param {Object} source The object to copy properties from.\n\t * @param {Array} props The property names to copy.\n\t * @param {Object} [object={}] The object to copy properties to.\n\t * @returns {Object} Returns `object`.\n\t */\n\tfunction baseCopy(source, props, object) {\n\t object || (object = {});\n\t\n\t var index = -1,\n\t length = props.length;\n\t\n\t while (++index < length) {\n\t var key = props[index];\n\t object[key] = source[key];\n\t }\n\t return object;\n\t}\n\t\n\tmodule.exports = baseCopy;\n\n\n/***/ }),\n/* 9 */\n/*!********************************!*\\\n !*** ./~/lodash.keys/index.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * lodash 3.1.2 (Custom Build) \n\t * Build: `lodash modern modularize exports=\"npm\" -o ./`\n\t * Copyright 2012-2015 The Dojo Foundation \n\t * Based on Underscore.js 1.8.3 \n\t * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t * Available under MIT license \n\t */\n\tvar getNative = __webpack_require__(/*! lodash._getnative */ 10),\n\t isArguments = __webpack_require__(/*! lodash.isarguments */ 11),\n\t isArray = __webpack_require__(/*! lodash.isarray */ 12);\n\t\n\t/** Used to detect unsigned integer values. */\n\tvar reIsUint = /^\\d+$/;\n\t\n\t/** Used for native method references. */\n\tvar objectProto = Object.prototype;\n\t\n\t/** Used to check objects for own properties. */\n\tvar hasOwnProperty = objectProto.hasOwnProperty;\n\t\n\t/* Native method references for those with the same name as other `lodash` methods. */\n\tvar nativeKeys = getNative(Object, 'keys');\n\t\n\t/**\n\t * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n\t * of an array-like value.\n\t */\n\tvar MAX_SAFE_INTEGER = 9007199254740991;\n\t\n\t/**\n\t * The base implementation of `_.property` without support for deep paths.\n\t *\n\t * @private\n\t * @param {string} key The key of the property to get.\n\t * @returns {Function} Returns the new function.\n\t */\n\tfunction baseProperty(key) {\n\t return function(object) {\n\t return object == null ? undefined : object[key];\n\t };\n\t}\n\t\n\t/**\n\t * Gets the \"length\" property value of `object`.\n\t *\n\t * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n\t * that affects Safari on at least iOS 8.1-8.3 ARM64.\n\t *\n\t * @private\n\t * @param {Object} object The object to query.\n\t * @returns {*} Returns the \"length\" value.\n\t */\n\tvar getLength = baseProperty('length');\n\t\n\t/**\n\t * Checks if `value` is array-like.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n\t */\n\tfunction isArrayLike(value) {\n\t return value != null && isLength(getLength(value));\n\t}\n\t\n\t/**\n\t * Checks if `value` is a valid array-like index.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n\t * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n\t */\n\tfunction isIndex(value, length) {\n\t value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n\t length = length == null ? MAX_SAFE_INTEGER : length;\n\t return value > -1 && value % 1 == 0 && value < length;\n\t}\n\t\n\t/**\n\t * Checks if `value` is a valid array-like length.\n\t *\n\t * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n\t */\n\tfunction isLength(value) {\n\t return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n\t}\n\t\n\t/**\n\t * A fallback implementation of `Object.keys` which creates an array of the\n\t * own enumerable property names of `object`.\n\t *\n\t * @private\n\t * @param {Object} object The object to query.\n\t * @returns {Array} Returns the array of property names.\n\t */\n\tfunction shimKeys(object) {\n\t var props = keysIn(object),\n\t propsLength = props.length,\n\t length = propsLength && object.length;\n\t\n\t var allowIndexes = !!length && isLength(length) &&\n\t (isArray(object) || isArguments(object));\n\t\n\t var index = -1,\n\t result = [];\n\t\n\t while (++index < propsLength) {\n\t var key = props[index];\n\t if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n\t result.push(key);\n\t }\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n\t * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n\t * @example\n\t *\n\t * _.isObject({});\n\t * // => true\n\t *\n\t * _.isObject([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isObject(1);\n\t * // => false\n\t */\n\tfunction isObject(value) {\n\t // Avoid a V8 JIT bug in Chrome 19-20.\n\t // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n\t var type = typeof value;\n\t return !!value && (type == 'object' || type == 'function');\n\t}\n\t\n\t/**\n\t * Creates an array of the own enumerable property names of `object`.\n\t *\n\t * **Note:** Non-object values are coerced to objects. See the\n\t * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n\t * for more details.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The object to query.\n\t * @returns {Array} Returns the array of property names.\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = 1;\n\t * this.b = 2;\n\t * }\n\t *\n\t * Foo.prototype.c = 3;\n\t *\n\t * _.keys(new Foo);\n\t * // => ['a', 'b'] (iteration order is not guaranteed)\n\t *\n\t * _.keys('hi');\n\t * // => ['0', '1']\n\t */\n\tvar keys = !nativeKeys ? shimKeys : function(object) {\n\t var Ctor = object == null ? undefined : object.constructor;\n\t if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n\t (typeof object != 'function' && isArrayLike(object))) {\n\t return shimKeys(object);\n\t }\n\t return isObject(object) ? nativeKeys(object) : [];\n\t};\n\t\n\t/**\n\t * Creates an array of the own and inherited enumerable property names of `object`.\n\t *\n\t * **Note:** Non-object values are coerced to objects.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The object to query.\n\t * @returns {Array} Returns the array of property names.\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = 1;\n\t * this.b = 2;\n\t * }\n\t *\n\t * Foo.prototype.c = 3;\n\t *\n\t * _.keysIn(new Foo);\n\t * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n\t */\n\tfunction keysIn(object) {\n\t if (object == null) {\n\t return [];\n\t }\n\t if (!isObject(object)) {\n\t object = Object(object);\n\t }\n\t var length = object.length;\n\t length = (length && isLength(length) &&\n\t (isArray(object) || isArguments(object)) && length) || 0;\n\t\n\t var Ctor = object.constructor,\n\t index = -1,\n\t isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n\t result = Array(length),\n\t skipIndexes = length > 0;\n\t\n\t while (++index < length) {\n\t result[index] = (index + '');\n\t }\n\t for (var key in object) {\n\t if (!(skipIndexes && isIndex(key, length)) &&\n\t !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n\t result.push(key);\n\t }\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = keys;\n\n\n/***/ }),\n/* 10 */\n/*!**************************************!*\\\n !*** ./~/lodash._getnative/index.js ***!\n \\**************************************/\n/***/ (function(module, exports) {\n\n\t/**\n\t * lodash 3.9.1 (Custom Build) \n\t * Build: `lodash modern modularize exports=\"npm\" -o ./`\n\t * Copyright 2012-2015 The Dojo Foundation \n\t * Based on Underscore.js 1.8.3 \n\t * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t * Available under MIT license \n\t */\n\t\n\t/** `Object#toString` result references. */\n\tvar funcTag = '[object Function]';\n\t\n\t/** Used to detect host constructors (Safari > 5). */\n\tvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\t\n\t/**\n\t * Checks if `value` is object-like.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n\t */\n\tfunction isObjectLike(value) {\n\t return !!value && typeof value == 'object';\n\t}\n\t\n\t/** Used for native method references. */\n\tvar objectProto = Object.prototype;\n\t\n\t/** Used to resolve the decompiled source of functions. */\n\tvar fnToString = Function.prototype.toString;\n\t\n\t/** Used to check objects for own properties. */\n\tvar hasOwnProperty = objectProto.hasOwnProperty;\n\t\n\t/**\n\t * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n\t * of values.\n\t */\n\tvar objToString = objectProto.toString;\n\t\n\t/** Used to detect if a method is native. */\n\tvar reIsNative = RegExp('^' +\n\t fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n\t .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n\t);\n\t\n\t/**\n\t * Gets the native function at `key` of `object`.\n\t *\n\t * @private\n\t * @param {Object} object The object to query.\n\t * @param {string} key The key of the method to get.\n\t * @returns {*} Returns the function if it's native, else `undefined`.\n\t */\n\tfunction getNative(object, key) {\n\t var value = object == null ? undefined : object[key];\n\t return isNative(value) ? value : undefined;\n\t}\n\t\n\t/**\n\t * Checks if `value` is classified as a `Function` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n\t * @example\n\t *\n\t * _.isFunction(_);\n\t * // => true\n\t *\n\t * _.isFunction(/abc/);\n\t * // => false\n\t */\n\tfunction isFunction(value) {\n\t // The use of `Object#toString` avoids issues with the `typeof` operator\n\t // in older versions of Chrome and Safari which return 'function' for regexes\n\t // and Safari 8 equivalents which return 'object' for typed array constructors.\n\t return isObject(value) && objToString.call(value) == funcTag;\n\t}\n\t\n\t/**\n\t * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n\t * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n\t * @example\n\t *\n\t * _.isObject({});\n\t * // => true\n\t *\n\t * _.isObject([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isObject(1);\n\t * // => false\n\t */\n\tfunction isObject(value) {\n\t // Avoid a V8 JIT bug in Chrome 19-20.\n\t // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n\t var type = typeof value;\n\t return !!value && (type == 'object' || type == 'function');\n\t}\n\t\n\t/**\n\t * Checks if `value` is a native function.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n\t * @example\n\t *\n\t * _.isNative(Array.prototype.push);\n\t * // => true\n\t *\n\t * _.isNative(_);\n\t * // => false\n\t */\n\tfunction isNative(value) {\n\t if (value == null) {\n\t return false;\n\t }\n\t if (isFunction(value)) {\n\t return reIsNative.test(fnToString.call(value));\n\t }\n\t return isObjectLike(value) && reIsHostCtor.test(value);\n\t}\n\t\n\tmodule.exports = getNative;\n\n\n/***/ }),\n/* 11 */\n/*!***************************************!*\\\n !*** ./~/lodash.isarguments/index.js ***!\n \\***************************************/\n/***/ (function(module, exports) {\n\n\t/**\n\t * lodash (Custom Build) \n\t * Build: `lodash modularize exports=\"npm\" -o ./`\n\t * Copyright jQuery Foundation and other contributors \n\t * Released under MIT license \n\t * Based on Underscore.js 1.8.3 \n\t * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t */\n\t\n\t/** Used as references for various `Number` constants. */\n\tvar MAX_SAFE_INTEGER = 9007199254740991;\n\t\n\t/** `Object#toString` result references. */\n\tvar argsTag = '[object Arguments]',\n\t funcTag = '[object Function]',\n\t genTag = '[object GeneratorFunction]';\n\t\n\t/** Used for built-in method references. */\n\tvar objectProto = Object.prototype;\n\t\n\t/** Used to check objects for own properties. */\n\tvar hasOwnProperty = objectProto.hasOwnProperty;\n\t\n\t/**\n\t * Used to resolve the\n\t * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n\t * of values.\n\t */\n\tvar objectToString = objectProto.toString;\n\t\n\t/** Built-in value references. */\n\tvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\t\n\t/**\n\t * Checks if `value` is likely an `arguments` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n\t * else `false`.\n\t * @example\n\t *\n\t * _.isArguments(function() { return arguments; }());\n\t * // => true\n\t *\n\t * _.isArguments([1, 2, 3]);\n\t * // => false\n\t */\n\tfunction isArguments(value) {\n\t // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n\t return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n\t (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n\t}\n\t\n\t/**\n\t * Checks if `value` is array-like. A value is considered array-like if it's\n\t * not a function and has a `value.length` that's an integer greater than or\n\t * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n\t * @example\n\t *\n\t * _.isArrayLike([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isArrayLike(document.body.children);\n\t * // => true\n\t *\n\t * _.isArrayLike('abc');\n\t * // => true\n\t *\n\t * _.isArrayLike(_.noop);\n\t * // => false\n\t */\n\tfunction isArrayLike(value) {\n\t return value != null && isLength(value.length) && !isFunction(value);\n\t}\n\t\n\t/**\n\t * This method is like `_.isArrayLike` except that it also checks if `value`\n\t * is an object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an array-like object,\n\t * else `false`.\n\t * @example\n\t *\n\t * _.isArrayLikeObject([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isArrayLikeObject(document.body.children);\n\t * // => true\n\t *\n\t * _.isArrayLikeObject('abc');\n\t * // => false\n\t *\n\t * _.isArrayLikeObject(_.noop);\n\t * // => false\n\t */\n\tfunction isArrayLikeObject(value) {\n\t return isObjectLike(value) && isArrayLike(value);\n\t}\n\t\n\t/**\n\t * Checks if `value` is classified as a `Function` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n\t * @example\n\t *\n\t * _.isFunction(_);\n\t * // => true\n\t *\n\t * _.isFunction(/abc/);\n\t * // => false\n\t */\n\tfunction isFunction(value) {\n\t // The use of `Object#toString` avoids issues with the `typeof` operator\n\t // in Safari 8-9 which returns 'object' for typed array and other constructors.\n\t var tag = isObject(value) ? objectToString.call(value) : '';\n\t return tag == funcTag || tag == genTag;\n\t}\n\t\n\t/**\n\t * Checks if `value` is a valid array-like length.\n\t *\n\t * **Note:** This method is loosely based on\n\t * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n\t * @example\n\t *\n\t * _.isLength(3);\n\t * // => true\n\t *\n\t * _.isLength(Number.MIN_VALUE);\n\t * // => false\n\t *\n\t * _.isLength(Infinity);\n\t * // => false\n\t *\n\t * _.isLength('3');\n\t * // => false\n\t */\n\tfunction isLength(value) {\n\t return typeof value == 'number' &&\n\t value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n\t}\n\t\n\t/**\n\t * Checks if `value` is the\n\t * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n\t * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n\t * @example\n\t *\n\t * _.isObject({});\n\t * // => true\n\t *\n\t * _.isObject([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isObject(_.noop);\n\t * // => true\n\t *\n\t * _.isObject(null);\n\t * // => false\n\t */\n\tfunction isObject(value) {\n\t var type = typeof value;\n\t return !!value && (type == 'object' || type == 'function');\n\t}\n\t\n\t/**\n\t * Checks if `value` is object-like. A value is object-like if it's not `null`\n\t * and has a `typeof` result of \"object\".\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n\t * @example\n\t *\n\t * _.isObjectLike({});\n\t * // => true\n\t *\n\t * _.isObjectLike([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isObjectLike(_.noop);\n\t * // => false\n\t *\n\t * _.isObjectLike(null);\n\t * // => false\n\t */\n\tfunction isObjectLike(value) {\n\t return !!value && typeof value == 'object';\n\t}\n\t\n\tmodule.exports = isArguments;\n\n\n/***/ }),\n/* 12 */\n/*!***********************************!*\\\n !*** ./~/lodash.isarray/index.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t/**\n\t * lodash 3.0.4 (Custom Build) \n\t * Build: `lodash modern modularize exports=\"npm\" -o ./`\n\t * Copyright 2012-2015 The Dojo Foundation \n\t * Based on Underscore.js 1.8.3 \n\t * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t * Available under MIT license \n\t */\n\t\n\t/** `Object#toString` result references. */\n\tvar arrayTag = '[object Array]',\n\t funcTag = '[object Function]';\n\t\n\t/** Used to detect host constructors (Safari > 5). */\n\tvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\t\n\t/**\n\t * Checks if `value` is object-like.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n\t */\n\tfunction isObjectLike(value) {\n\t return !!value && typeof value == 'object';\n\t}\n\t\n\t/** Used for native method references. */\n\tvar objectProto = Object.prototype;\n\t\n\t/** Used to resolve the decompiled source of functions. */\n\tvar fnToString = Function.prototype.toString;\n\t\n\t/** Used to check objects for own properties. */\n\tvar hasOwnProperty = objectProto.hasOwnProperty;\n\t\n\t/**\n\t * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n\t * of values.\n\t */\n\tvar objToString = objectProto.toString;\n\t\n\t/** Used to detect if a method is native. */\n\tvar reIsNative = RegExp('^' +\n\t fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n\t .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n\t);\n\t\n\t/* Native method references for those with the same name as other `lodash` methods. */\n\tvar nativeIsArray = getNative(Array, 'isArray');\n\t\n\t/**\n\t * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n\t * of an array-like value.\n\t */\n\tvar MAX_SAFE_INTEGER = 9007199254740991;\n\t\n\t/**\n\t * Gets the native function at `key` of `object`.\n\t *\n\t * @private\n\t * @param {Object} object The object to query.\n\t * @param {string} key The key of the method to get.\n\t * @returns {*} Returns the function if it's native, else `undefined`.\n\t */\n\tfunction getNative(object, key) {\n\t var value = object == null ? undefined : object[key];\n\t return isNative(value) ? value : undefined;\n\t}\n\t\n\t/**\n\t * Checks if `value` is a valid array-like length.\n\t *\n\t * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n\t */\n\tfunction isLength(value) {\n\t return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n\t}\n\t\n\t/**\n\t * Checks if `value` is classified as an `Array` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n\t * @example\n\t *\n\t * _.isArray([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isArray(function() { return arguments; }());\n\t * // => false\n\t */\n\tvar isArray = nativeIsArray || function(value) {\n\t return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n\t};\n\t\n\t/**\n\t * Checks if `value` is classified as a `Function` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n\t * @example\n\t *\n\t * _.isFunction(_);\n\t * // => true\n\t *\n\t * _.isFunction(/abc/);\n\t * // => false\n\t */\n\tfunction isFunction(value) {\n\t // The use of `Object#toString` avoids issues with the `typeof` operator\n\t // in older versions of Chrome and Safari which return 'function' for regexes\n\t // and Safari 8 equivalents which return 'object' for typed array constructors.\n\t return isObject(value) && objToString.call(value) == funcTag;\n\t}\n\t\n\t/**\n\t * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n\t * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n\t * @example\n\t *\n\t * _.isObject({});\n\t * // => true\n\t *\n\t * _.isObject([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isObject(1);\n\t * // => false\n\t */\n\tfunction isObject(value) {\n\t // Avoid a V8 JIT bug in Chrome 19-20.\n\t // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n\t var type = typeof value;\n\t return !!value && (type == 'object' || type == 'function');\n\t}\n\t\n\t/**\n\t * Checks if `value` is a native function.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n\t * @example\n\t *\n\t * _.isNative(Array.prototype.push);\n\t * // => true\n\t *\n\t * _.isNative(_);\n\t * // => false\n\t */\n\tfunction isNative(value) {\n\t if (value == null) {\n\t return false;\n\t }\n\t if (isFunction(value)) {\n\t return reIsNative.test(fnToString.call(value));\n\t }\n\t return isObjectLike(value) && reIsHostCtor.test(value);\n\t}\n\t\n\tmodule.exports = isArray;\n\n\n/***/ }),\n/* 13 */\n/*!*******************************************!*\\\n !*** ./~/lodash._createassigner/index.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * lodash 3.1.1 (Custom Build) \n\t * Build: `lodash modern modularize exports=\"npm\" -o ./`\n\t * Copyright 2012-2015 The Dojo Foundation \n\t * Based on Underscore.js 1.8.3 \n\t * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t * Available under MIT license \n\t */\n\tvar bindCallback = __webpack_require__(/*! lodash._bindcallback */ 14),\n\t isIterateeCall = __webpack_require__(/*! lodash._isiterateecall */ 15),\n\t restParam = __webpack_require__(/*! lodash.restparam */ 16);\n\t\n\t/**\n\t * Creates a function that assigns properties of source object(s) to a given\n\t * destination object.\n\t *\n\t * **Note:** This function is used to create `_.assign`, `_.defaults`, and `_.merge`.\n\t *\n\t * @private\n\t * @param {Function} assigner The function to assign values.\n\t * @returns {Function} Returns the new assigner function.\n\t */\n\tfunction createAssigner(assigner) {\n\t return restParam(function(object, sources) {\n\t var index = -1,\n\t length = object == null ? 0 : sources.length,\n\t customizer = length > 2 ? sources[length - 2] : undefined,\n\t guard = length > 2 ? sources[2] : undefined,\n\t thisArg = length > 1 ? sources[length - 1] : undefined;\n\t\n\t if (typeof customizer == 'function') {\n\t customizer = bindCallback(customizer, thisArg, 5);\n\t length -= 2;\n\t } else {\n\t customizer = typeof thisArg == 'function' ? thisArg : undefined;\n\t length -= (customizer ? 1 : 0);\n\t }\n\t if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n\t customizer = length < 3 ? undefined : customizer;\n\t length = 1;\n\t }\n\t while (++index < length) {\n\t var source = sources[index];\n\t if (source) {\n\t assigner(object, source, customizer);\n\t }\n\t }\n\t return object;\n\t });\n\t}\n\t\n\tmodule.exports = createAssigner;\n\n\n/***/ }),\n/* 14 */\n/*!*****************************************!*\\\n !*** ./~/lodash._bindcallback/index.js ***!\n \\*****************************************/\n/***/ (function(module, exports) {\n\n\t/**\n\t * lodash 3.0.1 (Custom Build) \n\t * Build: `lodash modern modularize exports=\"npm\" -o ./`\n\t * Copyright 2012-2015 The Dojo Foundation \n\t * Based on Underscore.js 1.8.3 \n\t * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t * Available under MIT license \n\t */\n\t\n\t/**\n\t * A specialized version of `baseCallback` which only supports `this` binding\n\t * and specifying the number of arguments to provide to `func`.\n\t *\n\t * @private\n\t * @param {Function} func The function to bind.\n\t * @param {*} thisArg The `this` binding of `func`.\n\t * @param {number} [argCount] The number of arguments to provide to `func`.\n\t * @returns {Function} Returns the callback.\n\t */\n\tfunction bindCallback(func, thisArg, argCount) {\n\t if (typeof func != 'function') {\n\t return identity;\n\t }\n\t if (thisArg === undefined) {\n\t return func;\n\t }\n\t switch (argCount) {\n\t case 1: return function(value) {\n\t return func.call(thisArg, value);\n\t };\n\t case 3: return function(value, index, collection) {\n\t return func.call(thisArg, value, index, collection);\n\t };\n\t case 4: return function(accumulator, value, index, collection) {\n\t return func.call(thisArg, accumulator, value, index, collection);\n\t };\n\t case 5: return function(value, other, key, object, source) {\n\t return func.call(thisArg, value, other, key, object, source);\n\t };\n\t }\n\t return function() {\n\t return func.apply(thisArg, arguments);\n\t };\n\t}\n\t\n\t/**\n\t * This method returns the first argument provided to it.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Utility\n\t * @param {*} value Any value.\n\t * @returns {*} Returns `value`.\n\t * @example\n\t *\n\t * var object = { 'user': 'fred' };\n\t *\n\t * _.identity(object) === object;\n\t * // => true\n\t */\n\tfunction identity(value) {\n\t return value;\n\t}\n\t\n\tmodule.exports = bindCallback;\n\n\n/***/ }),\n/* 15 */\n/*!*******************************************!*\\\n !*** ./~/lodash._isiterateecall/index.js ***!\n \\*******************************************/\n/***/ (function(module, exports) {\n\n\t/**\n\t * lodash 3.0.9 (Custom Build) \n\t * Build: `lodash modern modularize exports=\"npm\" -o ./`\n\t * Copyright 2012-2015 The Dojo Foundation \n\t * Based on Underscore.js 1.8.3 \n\t * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t * Available under MIT license \n\t */\n\t\n\t/** Used to detect unsigned integer values. */\n\tvar reIsUint = /^\\d+$/;\n\t\n\t/**\n\t * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n\t * of an array-like value.\n\t */\n\tvar MAX_SAFE_INTEGER = 9007199254740991;\n\t\n\t/**\n\t * The base implementation of `_.property` without support for deep paths.\n\t *\n\t * @private\n\t * @param {string} key The key of the property to get.\n\t * @returns {Function} Returns the new function.\n\t */\n\tfunction baseProperty(key) {\n\t return function(object) {\n\t return object == null ? undefined : object[key];\n\t };\n\t}\n\t\n\t/**\n\t * Gets the \"length\" property value of `object`.\n\t *\n\t * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n\t * that affects Safari on at least iOS 8.1-8.3 ARM64.\n\t *\n\t * @private\n\t * @param {Object} object The object to query.\n\t * @returns {*} Returns the \"length\" value.\n\t */\n\tvar getLength = baseProperty('length');\n\t\n\t/**\n\t * Checks if `value` is array-like.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n\t */\n\tfunction isArrayLike(value) {\n\t return value != null && isLength(getLength(value));\n\t}\n\t\n\t/**\n\t * Checks if `value` is a valid array-like index.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n\t * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n\t */\n\tfunction isIndex(value, length) {\n\t value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n\t length = length == null ? MAX_SAFE_INTEGER : length;\n\t return value > -1 && value % 1 == 0 && value < length;\n\t}\n\t\n\t/**\n\t * Checks if the provided arguments are from an iteratee call.\n\t *\n\t * @private\n\t * @param {*} value The potential iteratee value argument.\n\t * @param {*} index The potential iteratee index or key argument.\n\t * @param {*} object The potential iteratee object argument.\n\t * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.\n\t */\n\tfunction isIterateeCall(value, index, object) {\n\t if (!isObject(object)) {\n\t return false;\n\t }\n\t var type = typeof index;\n\t if (type == 'number'\n\t ? (isArrayLike(object) && isIndex(index, object.length))\n\t : (type == 'string' && index in object)) {\n\t var other = object[index];\n\t return value === value ? (value === other) : (other !== other);\n\t }\n\t return false;\n\t}\n\t\n\t/**\n\t * Checks if `value` is a valid array-like length.\n\t *\n\t * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n\t */\n\tfunction isLength(value) {\n\t return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n\t}\n\t\n\t/**\n\t * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n\t * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n\t * @example\n\t *\n\t * _.isObject({});\n\t * // => true\n\t *\n\t * _.isObject([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isObject(1);\n\t * // => false\n\t */\n\tfunction isObject(value) {\n\t // Avoid a V8 JIT bug in Chrome 19-20.\n\t // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n\t var type = typeof value;\n\t return !!value && (type == 'object' || type == 'function');\n\t}\n\t\n\tmodule.exports = isIterateeCall;\n\n\n/***/ }),\n/* 16 */\n/*!*************************************!*\\\n !*** ./~/lodash.restparam/index.js ***!\n \\*************************************/\n/***/ (function(module, exports) {\n\n\t/**\n\t * lodash 3.6.1 (Custom Build) \n\t * Build: `lodash modern modularize exports=\"npm\" -o ./`\n\t * Copyright 2012-2015 The Dojo Foundation \n\t * Based on Underscore.js 1.8.3 \n\t * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t * Available under MIT license \n\t */\n\t\n\t/** Used as the `TypeError` message for \"Functions\" methods. */\n\tvar FUNC_ERROR_TEXT = 'Expected a function';\n\t\n\t/* Native method references for those with the same name as other `lodash` methods. */\n\tvar nativeMax = Math.max;\n\t\n\t/**\n\t * Creates a function that invokes `func` with the `this` binding of the\n\t * created function and arguments from `start` and beyond provided as an array.\n\t *\n\t * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @category Function\n\t * @param {Function} func The function to apply a rest parameter to.\n\t * @param {number} [start=func.length-1] The start position of the rest parameter.\n\t * @returns {Function} Returns the new function.\n\t * @example\n\t *\n\t * var say = _.restParam(function(what, names) {\n\t * return what + ' ' + _.initial(names).join(', ') +\n\t * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n\t * });\n\t *\n\t * say('hello', 'fred', 'barney', 'pebbles');\n\t * // => 'hello fred, barney, & pebbles'\n\t */\n\tfunction restParam(func, start) {\n\t if (typeof func != 'function') {\n\t throw new TypeError(FUNC_ERROR_TEXT);\n\t }\n\t start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);\n\t return function() {\n\t var args = arguments,\n\t index = -1,\n\t length = nativeMax(args.length - start, 0),\n\t rest = Array(length);\n\t\n\t while (++index < length) {\n\t rest[index] = args[start + index];\n\t }\n\t switch (start) {\n\t case 0: return func.call(this, rest);\n\t case 1: return func.call(this, args[0], rest);\n\t case 2: return func.call(this, args[0], args[1], rest);\n\t }\n\t var otherArgs = Array(start + 1);\n\t index = -1;\n\t while (++index < start) {\n\t otherArgs[index] = args[index];\n\t }\n\t otherArgs[start] = rest;\n\t return func.apply(this, otherArgs);\n\t };\n\t}\n\t\n\tmodule.exports = restParam;\n\n\n/***/ }),\n/* 17 */\n/*!*************************************!*\\\n !*** ./src/public/ic_cast_24dp.svg ***!\n \\*************************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = \"\"\n\n/***/ }),\n/* 18 */\n/*!**************************************!*\\\n !*** ./src/public/ic_cast0_24dp.svg ***!\n \\**************************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = \"\"\n\n/***/ }),\n/* 19 */\n/*!**************************************!*\\\n !*** ./src/public/ic_cast1_24dp.svg ***!\n \\**************************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = \"\"\n\n/***/ }),\n/* 20 */\n/*!**************************************!*\\\n !*** ./src/public/ic_cast2_24dp.svg ***!\n \\**************************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = \"\"\n\n/***/ }),\n/* 21 */\n/*!***********************************************!*\\\n !*** ./src/public/ic_cast_connected_24dp.svg ***!\n \\***********************************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = \"\"\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// clappr-chromecast-plugin.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap f4908445f0a34cad8a33","import {Browser, Events, Log, Styler, UICorePlugin} from 'clappr'\nimport ChromecastPlayback from './chromecast_playback'\nimport chromecastStyle from './public/style.scss'\nimport assign from 'lodash.assign'\nimport castIconSvg from './public/ic_cast_24dp.svg'\nimport connecting1IconSvg from './public/ic_cast0_24dp.svg'\nimport connecting2IconSvg from './public/ic_cast1_24dp.svg'\nimport connecting3IconSvg from './public/ic_cast2_24dp.svg'\nimport connectedIconSvg from './public/ic_cast_connected_24dp.svg'\n\nconst DEVICE_STATE = {\n 'IDLE' : 0,\n 'ACTIVE' : 1,\n 'WARNING' : 2,\n 'ERROR' : 3\n}\n\nconst DEFAULT_CLAPPR_APP_ID = '9DFB77C0'\n\nconst MIMETYPES = {\n 'mp4': 'video/mp4',\n 'ogg': 'video/ogg',\n '3gpp': 'video/3gpp',\n 'webm': 'video/webm',\n 'mkv': 'video/x-matroska',\n 'm3u8': 'application/x-mpegurl',\n 'mpd': 'application/dash+xml'\n}\nMIMETYPES['ogv'] = MIMETYPES['ogg']\nMIMETYPES['3gp'] = MIMETYPES['3gpp']\n\nexport default class ChromecastPlugin extends UICorePlugin {\n static get Movie() { return 'movie' }\n static get TvShow() { return 'tv_show' }\n static get Generic() { return 'none' }\n\n static get version() { return VERSION }\n get version() { return VERSION }\n\n get name() { return 'chromecast' }\n get tagName() { return 'button' }\n get attributes() {\n return {\n 'class' : 'chromecast-button',\n 'type' : 'button'\n }\n }\n get events() {\n return {\n 'click': 'click'\n }\n }\n get options() { return this.core.options.chromecast || (this.core.options.chromecast = {}) }\n get container() {\n return this.core.getCurrentContainer\n ? this.core.getCurrentContainer()\n : this.core.activeContainer // Clappr 0.3.0 or greater\n }\n get playback() {\n return this.core.getCurrentPlayback\n ? this.core.getCurrentPlayback()\n : this.core.activePlayback // Clappr 0.3.0 or greater\n }\n\n constructor(core) {\n super(core)\n\n this.bootTryDelay = this.options.bootTryDelay || 500 // Default is 500 milliseconds between each attempt\n this.bootMaxTryCount = this.options.bootMaxTryCount || 6 // Default is 6 attempts (3 seconds)\n this.bootTryCount = 0\n\n if (this.isBootable()) {\n this.appId = this.options.appId || DEFAULT_CLAPPR_APP_ID\n this.deviceState = DEVICE_STATE.IDLE\n this.embedScript()\n } else {\n this.disable()\n }\n }\n\n bindEvents() {\n this.listenTo(this.core.mediaControl, Events.MEDIACONTROL_RENDERED, this.render)\n\n if (Events.CORE_ACTIVE_CONTAINER_CHANGED) {\n // Clappr 0.3.0 or greater\n this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.containerChanged)\n } else {\n this.listenTo(this.core.mediaControl, Events.MEDIACONTROL_CONTAINERCHANGED, this.containerChanged)\n }\n\n if (this.container) {\n this.listenTo(this.container, Events.CONTAINER_TIMEUPDATE, this.containerTimeUpdate)\n this.listenTo(this.container, Events.CONTAINER_PLAY, this.containerPlay)\n this.listenTo(this.container, Events.CONTAINER_ENDED, this.sessionStopped)\n }\n }\n\n isBootable() {\n // Browser must be Chrome\n if (!Browser.isChrome) {\n return false\n }\n\n // Chrome lesser than or equals to 71\n // does not require secure page\n if (Browser.version <= 71) {\n return true\n }\n\n // Chrome greater than or equals to 72\n // require secure page\n return this.isSecure()\n }\n\n isSecure() {\n return window.location.protocol === 'https:'\n }\n\n enable() {\n super.enable()\n this.render()\n this.embedScript()\n }\n\n embedScript() {\n if (!window.chrome || !window.chrome.cast || !window.chrome.cast.isAvailable) {\n let script = document.createElement('script')\n script.setAttribute('type', 'text/javascript')\n script.setAttribute('async', 'async')\n script.setAttribute('src', 'https://www.gstatic.com/cv/js/sender/v1/cast_sender.js')\n script.onload = () => this.bootstrapCastApi()\n document.body.appendChild(script)\n } else {\n this.bootstrapCastApi()\n }\n }\n\n bootstrapCastApi() {\n this.bootTryCount++\n\n if (this.bootTryCount > this.bootMaxTryCount) {\n this.bootTryCount = 0\n Log.warn('GCastApi bootstrap timeout')\n this.disable()\n return\n }\n\n // The \"chrome\" property may not be available immediately on some iOS devices\n if (window.chrome) {\n this.bootTryCount = 0\n\n if (window.chrome.cast && window.chrome.cast.isAvailable) {\n this.appId = this.appId || DEFAULT_CLAPPR_APP_ID\n this.initializeCastApi()\n } else {\n window['__onGCastApiAvailable'] = (loaded, errorInfo) => {\n if (loaded) {\n this.appId = this.appId || DEFAULT_CLAPPR_APP_ID\n this.initializeCastApi()\n } else {\n Log.warn('GCastApi error', errorInfo)\n this.disable()\n }\n }\n }\n } else {\n setTimeout(() => { this.bootstrapCastApi() }, this.bootTryDelay)\n }\n }\n\n initializeCastApi() {\n let autoJoinPolicy = chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED\n let sessionRequest = new chrome.cast.SessionRequest(this.appId)\n let apiConfig = new chrome.cast.ApiConfig(sessionRequest,\n (session) => this.sessionListener(session), (e) => this.receiverListener(e), autoJoinPolicy)\n chrome.cast.initialize(apiConfig, () => Log.debug(this.name, 'init success'), () => Log.warn(this.name, 'init error'))\n }\n\n sessionListener(session) {\n Log.debug(this.name, 'new session id:' + session.sessionId)\n this.newSession(session)\n }\n\n sessionUpdateListener() {\n if (this.session) {\n Log.debug(this.name, this.session.status)\n if (this.session.status === chrome.cast.SessionStatus.STOPPED) {\n this.sessionStopped()\n this.session = null\n }\n }\n }\n\n receiverListener(e) {\n if ( e === chrome.cast.ReceiverAvailability.AVAILABLE ) {\n Log.debug(this.name, 'receiver found')\n this.show()\n } else {\n Log.debug(this.name, 'receiver list empty')\n this.hide()\n }\n }\n\n launchSuccess(session) {\n this.renderConnected()\n clearInterval(this.connectAnimInterval)\n this.core.mediaControl.resetKeepVisible()\n Log.debug(this.name, 'launch success - session: ' + session.sessionId)\n this.newSession(session)\n }\n\n launchError(e) {\n Log.debug(this.name, 'error on launch', e)\n this.renderDisconnected()\n clearInterval(this.connectAnimInterval)\n this.core.mediaControl.resetKeepVisible()\n this.container.play()\n }\n\n loadMediaSuccess(how, mediaSession) {\n Log.debug(this.name, 'new media session', mediaSession, '(', how , ')')\n\n this.originalPlayback = this.playback\n\n let options = assign({}, this.originalPlayback.options, {\n currentMedia: mediaSession,\n mediaControl: this.core.mediaControl,\n poster: this.options.poster || this.core.options.poster,\n settings: this.originalPlayback.settings\n })\n this.src = this.originalPlayback.src\n this.playbackProxy = new ChromecastPlayback(options)\n this.playbackProxy.render()\n this.core.$el.addClass('chromecast-active')\n\n this.mediaSession = mediaSession\n\n this.originalPlayback.$el.remove()\n\n let container = this.container\n container.$el.append(this.playbackProxy.$el)\n container.stopListening()\n container.playback = this.playbackProxy\n container.bindEvents()\n container.settingsUpdate()\n }\n\n loadMediaError(e) {\n Log.warn(this.name, 'media error', e)\n }\n\n newSession(session) {\n this.session = session\n this.deviceState = DEVICE_STATE.ACTIVE\n this.renderConnected()\n\n session.addUpdateListener(() => this.sessionUpdateListener())\n\n this.containerPlay()\n }\n\n sessionStopped() {\n this.renderDisconnected()\n\n let time = this.currentTime\n\n let playerState = undefined\n if (this.mediaSession) {\n playerState = this.mediaSession.playerState\n this.mediaSession = null\n }\n\n this.core.$el.removeClass('chromecast-active')\n this.core.load(this.src || this.core.options.sources)\n\n let container = this.container\n\n if (this.playbackProxy) {\n if (this.playbackProxy.isPlaying() || playerState === 'PAUSED') {\n container.once(Events.CONTAINER_READY, () => {\n container.play()\n container.playback.seek(100 * time / container.getDuration())\n })\n }\n this.playbackProxy.stop()\n }\n }\n\n loadMedia() {\n this.container.pause()\n let src = this.container.options.src\n Log.debug(this.name, 'loading... ' + src)\n let mediaInfo = this.createMediaInfo(src)\n let request = new chrome.cast.media.LoadRequest(mediaInfo)\n request.autoplay = true\n if (this.currentTime) {\n request.currentTime = this.currentTime\n }\n this.session.loadMedia(request, (mediaSession) => this.loadMediaSuccess('loadMedia', mediaSession), (e) => this.loadMediaError(e))\n }\n\n createMediaInfo(src) {\n let mimeType = ChromecastPlugin.mimeTypeFor(src)\n let mediaInfo = new chrome.cast.media.MediaInfo(src)\n mediaInfo.contentType = this.options.contentType || mimeType\n mediaInfo.customData = this.options.customData\n let metadata = this.createMediaMetadata()\n mediaInfo.metadata = metadata\n return mediaInfo\n }\n\n createMediaMetadata() {\n this.options.media || (this.options.media = {})\n let type = this.options.media.type\n\n let metadata = this.createCastMediaMetadata(type)\n metadata.title = this.options.media.title\n metadata.subtitle = this.options.media.subtitle\n metadata.releaseDate = this.options.media.releaseDate\n\n if (type === ChromecastPlugin.TvShow) {\n metadata.episode = this.options.media.episode\n metadata.originalAirdate = this.options.media.originalAirdate\n metadata.season = this.options.media.season\n metadata.seriesTitle = this.options.media.seriesTitle\n } else if (type === ChromecastPlugin.Movie) {\n metadata.studio = this.options.media.studio\n }\n\n if (this.options.media.images) {\n metadata.images = this.options.media.images.map((url) => new chrome.cast.Image(url))\n }\n if (!metadata.images && this.options.poster) {\n metadata.images = [new chrome.cast.Image(this.options.poster)]\n }\n if (!metadata.images && this.core.options.poster) {\n metadata.images = [new chrome.cast.Image(this.core.options.poster)]\n }\n return metadata\n }\n\n createCastMediaMetadata(type) {\n switch (type) {\n case ChromecastPlugin.Movie: return new chrome.cast.media.MovieMediaMetadata()\n case ChromecastPlugin.TvShow: return new chrome.cast.media.TvShowMediaMetadata()\n default: return new chrome.cast.media.GenericMediaMetadata()\n }\n }\n\n show() {\n this.$el.show()\n }\n\n hide() {\n this.$el.hide()\n }\n\n click() {\n this.currentTime = this.container.getCurrentTime()\n this.container.pause()\n chrome.cast.requestSession((session) => this.launchSuccess(session), (e) => this.launchError(e))\n if (!this.session) {\n let position = 0\n let connectingIcons = [connecting1IconSvg, connecting2IconSvg, connecting3IconSvg]\n clearInterval(this.connectAnimInterval)\n this.connectAnimInterval = setInterval(() => {\n this.$el.html(connectingIcons[position])\n position = (position + 1) % 3\n }, 600)\n this.core.mediaControl.setKeepVisible()\n }\n }\n\n containerChanged() {\n this.stopListening()\n this.bindEvents()\n }\n\n containerTimeUpdate(timeProgress) {\n this.currentTime = timeProgress.current\n }\n\n containerPlay() {\n if (this.session && (!this.mediaSession || this.mediaSession.playerState === 'IDLE' || this.mediaSession.playerState === 'PAUSED')) {\n Log.debug(this.name, 'load media')\n this.loadMedia()\n }\n }\n\n renderConnected() {\n this.$el.html(connectedIconSvg)\n }\n\n renderDisconnected() {\n this.$el.html(castIconSvg)\n }\n\n render() {\n this.session ? this.renderConnected() : this.renderDisconnected()\n this.core.mediaControl.$el.find('.media-control-right-panel[data-media-control]').append(this.$el)\n this.$style && this.$style.remove()\n this.$style = Styler.getStyleFor(chromecastStyle, {baseUrl: this.core.options.baseUrl})\n this.core.$el.append(this.$style)\n return this\n }\n\n static mimeTypeFor(srcUrl) {\n let extension = (srcUrl.split('?')[0].match(/.*\\.(.*)$/) || [])[1]\n if (MIMETYPES[extension]) {\n return MIMETYPES[extension]\n } else if (srcUrl.indexOf('.ism') > -1) {\n return 'application/vnd.ms-sstr+xml'\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/chromecast.js","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external {\"amd\":\"clappr\",\"commonjs\":\"clappr\",\"commonjs2\":\"clappr\",\"root\":\"Clappr\"}\n// module id = 1\n// module chunks = 0","import {Events, Log, Playback, template} from 'clappr'\nimport chromecastHTML from './public/chromecast.html'\n\nconst TICK_INTERVAL = 100\n\nexport default class ChromecastPlayback extends Playback {\n\n get name() { return 'chromecast_playback' }\n get template() { return template(chromecastHTML) }\n get attributes() { return { class: 'chromecast-playback' } }\n\n get isReady() { return true }\n\n constructor(options) {\n super(options)\n this.src = options.src\n this.currentMedia = options.currentMedia\n this.mediaControl = options.mediaControl\n this.currentMedia.addUpdateListener(() => this.onMediaStatusUpdate())\n this.settings = options.settings\n let noVolume = (name) => name != 'volume'\n this.settings.default && (this.settings.default = this.settings.default.filter(noVolume))\n this.settings.left && (this.settings.left = this.settings.left.filter(noVolume))\n this.settings.right && (this.settings.right = this.settings.right.filter(noVolume))\n }\n\n render() {\n let template = this.template()\n this.$el.html(template)\n if (this.options.poster) {\n this.$('.chromecast-playback-background').css('background-image', 'url(' + this.options.poster + ')')\n } else {\n this.$('.chromecast-playback-background').css('background-color', '#666')\n }\n }\n\n play() {\n this.currentMedia.play()\n }\n\n pause() {\n this.stopTimer()\n this.currentMedia.pause()\n if (this.getPlaybackType() === Playback.LIVE) {\n this.trigger(Events.PLAYBACK_DVR, true)\n }\n }\n\n stop() {\n this.stopTimer()\n this.currentMedia.pause() // FIXME: properly handle media stop\n }\n\n seek(time) {\n this.stopTimer()\n let request = new chrome.cast.media.SeekRequest()\n request.currentTime = time\n this.currentMedia.seek(request,\n () => this.startTimer(), () => Log.warn('seek failed'))\n if (this.getPlaybackType() === Playback.LIVE) {\n // assume live if time within 30 seconds of end of live stream\n this.trigger(Events.PLAYBACK_DVR, time < this.getDuration() - 30)\n }\n }\n\n seekPercentage(percentage) {\n if (percentage >= 0 && percentage <= 100) {\n let duration = this.getDuration()\n this.seek(percentage * duration / 100)\n }\n }\n\n startTimer() {\n this.timer = setInterval(() => this.updateMediaControl(), TICK_INTERVAL)\n }\n\n stopTimer() {\n clearInterval(this.timer)\n this.timer = null\n }\n\n getDuration() {\n return this.currentMedia.media.duration\n }\n\n isPlaying() {\n return this.currentMedia.playerState === 'PLAYING' || this.currentMedia.playerState === 'BUFFERING'\n }\n\n getPlaybackType() {\n return !!this.currentMedia.liveSeekableRange ? Playback.LIVE : Playback.VOD\n }\n\n onMediaStatusUpdate() {\n this.mediaControl.changeTogglePlay()\n if (this.isPlaying() && !this.timer) {\n this.startTimer()\n }\n\n if (this.currentMedia.playerState === 'BUFFERING') {\n this.isBuffering = true\n this.trigger(Events.PLAYBACK_BUFFERING, this.name)\n } else if (this.currentMedia.playerState === 'PLAYING') {\n if (this.isBuffering) {\n this.isBuffering = false\n this.trigger(Events.PLAYBACK_BUFFERFULL, this.name)\n }\n if (this.prevState !== this.currentMedia.playerState) {\n this.trigger(Events.PLAYBACK_PLAY, this.name)\n }\n } else if (this.currentMedia.playerState === 'IDLE') {\n if (this.isBuffering) {\n this.isBuffering = false\n this.trigger(Events.PLAYBACK_BUFFERFULL, this.name)\n }\n this.trigger(Events.PLAYBACK_ENDED, this.name)\n } else if (this.currentMedia.playerState === 'PAUSED') {\n if (this.prevState !== this.currentMedia.playerState) {\n this.trigger(Events.PLAYBACK_PAUSE, this.name)\n }\n }\n\n this.prevState = this.currentMedia.playerState\n }\n\n updateMediaControl() {\n let position = this.currentMedia.getEstimatedTime()\n let duration = this.currentMedia.media.duration\n this.trigger(Events.PLAYBACK_TIMEUPDATE, {current: position, total: duration}, this.name)\n }\n\n show() {\n this.$el.show()\n }\n\n hide() {\n this.$el.hide()\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/chromecast_playback.js","module.exports = \"
\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/public/chromecast.html\n// module id = 3\n// module chunks = 0","exports = module.exports = require(\"../../node_modules/css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.id, \".chromecast-playback{height:100%;width:100%}.chromecast-playback .chromecast-playback-background,.chromecast-playback .chromecast-playback-overlay{position:absolute;height:100%;width:100%}.chromecast-playback .chromecast-playback-background{background-size:contain}.chromecast-playback .chromecast-playback-overlay{background-color:#000;opacity:.4}.chromecast-button{background:transparent;border:0;width:32px;height:32px;font-size:22px;line-height:32px;letter-spacing:0;margin:0 6px;color:#fff;opacity:.5;vertical-align:middle;text-align:left;cursor:pointer;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transition:all .1s ease}.chromecast-button:hover{opacity:.75;text-shadow:hsla(0,0%,100%,.8) 0 0 5px}.chromecast-button:focus{outline:none}.chromecast-button svg{width:24px;height:24px}.chromecast-button svg #cast,.chromecast-button svg #cast-on,.chromecast-button svg #Path{fill:#fff;stroke:#fff;stroke-width:.5px}\", \"\"]);\n\n// exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/public/style.scss\n// module id = 4\n// module chunks = 0","/*\r\n\tMIT License http://www.opensource.org/licenses/mit-license.php\r\n\tAuthor Tobias Koppers @sokra\r\n*/\r\n// css base code, injected by the css-loader\r\nmodule.exports = function() {\r\n\tvar list = [];\r\n\r\n\t// return the list of modules as css string\r\n\tlist.toString = function toString() {\r\n\t\tvar result = [];\r\n\t\tfor(var i = 0; i < this.length; i++) {\r\n\t\t\tvar item = this[i];\r\n\t\t\tif(item[2]) {\r\n\t\t\t\tresult.push(\"@media \" + item[2] + \"{\" + item[1] + \"}\");\r\n\t\t\t} else {\r\n\t\t\t\tresult.push(item[1]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result.join(\"\");\r\n\t};\r\n\r\n\t// import a list of modules into the list\r\n\tlist.i = function(modules, mediaQuery) {\r\n\t\tif(typeof modules === \"string\")\r\n\t\t\tmodules = [[null, modules, \"\"]];\r\n\t\tvar alreadyImportedModules = {};\r\n\t\tfor(var i = 0; i < this.length; i++) {\r\n\t\t\tvar id = this[i][0];\r\n\t\t\tif(typeof id === \"number\")\r\n\t\t\t\talreadyImportedModules[id] = true;\r\n\t\t}\r\n\t\tfor(i = 0; i < modules.length; i++) {\r\n\t\t\tvar item = modules[i];\r\n\t\t\t// skip already imported module\r\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\r\n\t\t\t// when a module is imported multiple times with different media queries.\r\n\t\t\t// I hope this will never occur (Hey this way we have smaller bundles)\r\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\r\n\t\t\t\tif(mediaQuery && !item[2]) {\r\n\t\t\t\t\titem[2] = mediaQuery;\r\n\t\t\t\t} else if(mediaQuery) {\r\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\r\n\t\t\t\t}\r\n\t\t\t\tlist.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\treturn list;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/css-loader/lib/css-base.js\n// module id = 5\n// module chunks = 0","/**\n * lodash 3.2.0 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\nvar baseAssign = require('lodash._baseassign'),\n createAssigner = require('lodash._createassigner'),\n keys = require('lodash.keys');\n\n/**\n * A specialized version of `_.assign` for customizing assigned values without\n * support for argument juggling, multiple sources, and `this` binding `customizer`\n * functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n */\nfunction assignWith(object, source, customizer) {\n var index = -1,\n props = keys(source),\n length = props.length;\n\n while (++index < length) {\n var key = props[index],\n value = object[key],\n result = customizer(value, source[key], key, object, source);\n\n if ((result === result ? (result !== value) : (value === value)) ||\n (value === undefined && !(key in object))) {\n object[key] = result;\n }\n }\n return object;\n}\n\n/**\n * Assigns own enumerable properties of source object(s) to the destination\n * object. Subsequent sources overwrite property assignments of previous sources.\n * If `customizer` is provided it is invoked to produce the assigned values.\n * The `customizer` is bound to `thisArg` and invoked with five arguments:\n * (objectValue, sourceValue, key, object, source).\n *\n * **Note:** This method mutates `object` and is based on\n * [`Object.assign`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign).\n *\n * @static\n * @memberOf _\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {*} [thisArg] The `this` binding of `customizer`.\n * @returns {Object} Returns `object`.\n * @example\n *\n * _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' });\n * // => { 'user': 'fred', 'age': 40 }\n *\n * // using a customizer callback\n * var defaults = _.partialRight(_.assign, function(value, other) {\n * return _.isUndefined(value) ? other : value;\n * });\n *\n * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });\n * // => { 'user': 'barney', 'age': 36 }\n */\nvar assign = createAssigner(function(object, source, customizer) {\n return customizer\n ? assignWith(object, source, customizer)\n : baseAssign(object, source);\n});\n\nmodule.exports = assign;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash.assign/index.js\n// module id = 6\n// module chunks = 0","/**\n * lodash 3.2.0 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\nvar baseCopy = require('lodash._basecopy'),\n keys = require('lodash.keys');\n\n/**\n * The base implementation of `_.assign` without support for argument juggling,\n * multiple sources, and `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return source == null\n ? object\n : baseCopy(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash._baseassign/index.js\n// module id = 7\n// module chunks = 0","/**\n * lodash 3.0.1 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property names to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @returns {Object} Returns `object`.\n */\nfunction baseCopy(source, props, object) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n object[key] = source[key];\n }\n return object;\n}\n\nmodule.exports = baseCopy;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash._basecopy/index.js\n// module id = 8\n// module chunks = 0","/**\n * lodash 3.1.2 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\nvar getNative = require('lodash._getnative'),\n isArguments = require('lodash.isarguments'),\n isArray = require('lodash.isarray');\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = getNative(Object, 'keys');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n length = length == null ? MAX_SAFE_INTEGER : length;\n return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * A fallback implementation of `Object.keys` which creates an array of the\n * own enumerable property names of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction shimKeys(object) {\n var props = keysIn(object),\n propsLength = props.length,\n length = propsLength && object.length;\n\n var allowIndexes = !!length && isLength(length) &&\n (isArray(object) || isArguments(object));\n\n var index = -1,\n result = [];\n\n while (++index < propsLength) {\n var key = props[index];\n if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nvar keys = !nativeKeys ? shimKeys : function(object) {\n var Ctor = object == null ? undefined : object.constructor;\n if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n (typeof object != 'function' && isArrayLike(object))) {\n return shimKeys(object);\n }\n return isObject(object) ? nativeKeys(object) : [];\n};\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n if (object == null) {\n return [];\n }\n if (!isObject(object)) {\n object = Object(object);\n }\n var length = object.length;\n length = (length && isLength(length) &&\n (isArray(object) || isArguments(object)) && length) || 0;\n\n var Ctor = object.constructor,\n index = -1,\n isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n result = Array(length),\n skipIndexes = length > 0;\n\n while (++index < length) {\n result[index] = (index + '');\n }\n for (var key in object) {\n if (!(skipIndexes && isIndex(key, length)) &&\n !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = keys;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash.keys/index.js\n// module id = 9\n// module chunks = 0","/**\n * lodash 3.9.1 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = object == null ? undefined : object[key];\n return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in older versions of Chrome and Safari which return 'function' for regexes\n // and Safari 8 equivalents which return 'object' for typed array constructors.\n return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n if (value == null) {\n return false;\n }\n if (isFunction(value)) {\n return reIsNative.test(fnToString.call(value));\n }\n return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = getNative;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash._getnative/index.js\n// module id = 10\n// module chunks = 0","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\nmodule.exports = isArguments;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash.isarguments/index.js\n// module id = 11\n// module chunks = 0","/**\n * lodash 3.0.4 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]',\n funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeIsArray = getNative(Array, 'isArray');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = object == null ? undefined : object[key];\n return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(function() { return arguments; }());\n * // => false\n */\nvar isArray = nativeIsArray || function(value) {\n return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n};\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in older versions of Chrome and Safari which return 'function' for regexes\n // and Safari 8 equivalents which return 'object' for typed array constructors.\n return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n if (value == null) {\n return false;\n }\n if (isFunction(value)) {\n return reIsNative.test(fnToString.call(value));\n }\n return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = isArray;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash.isarray/index.js\n// module id = 12\n// module chunks = 0","/**\n * lodash 3.1.1 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\nvar bindCallback = require('lodash._bindcallback'),\n isIterateeCall = require('lodash._isiterateecall'),\n restParam = require('lodash.restparam');\n\n/**\n * Creates a function that assigns properties of source object(s) to a given\n * destination object.\n *\n * **Note:** This function is used to create `_.assign`, `_.defaults`, and `_.merge`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return restParam(function(object, sources) {\n var index = -1,\n length = object == null ? 0 : sources.length,\n customizer = length > 2 ? sources[length - 2] : undefined,\n guard = length > 2 ? sources[2] : undefined,\n thisArg = length > 1 ? sources[length - 1] : undefined;\n\n if (typeof customizer == 'function') {\n customizer = bindCallback(customizer, thisArg, 5);\n length -= 2;\n } else {\n customizer = typeof thisArg == 'function' ? thisArg : undefined;\n length -= (customizer ? 1 : 0);\n }\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, customizer);\n }\n }\n return object;\n });\n}\n\nmodule.exports = createAssigner;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash._createassigner/index.js\n// module id = 13\n// module chunks = 0","/**\n * lodash 3.0.1 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/**\n * A specialized version of `baseCallback` which only supports `this` binding\n * and specifying the number of arguments to provide to `func`.\n *\n * @private\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {number} [argCount] The number of arguments to provide to `func`.\n * @returns {Function} Returns the callback.\n */\nfunction bindCallback(func, thisArg, argCount) {\n if (typeof func != 'function') {\n return identity;\n }\n if (thisArg === undefined) {\n return func;\n }\n switch (argCount) {\n case 1: return function(value) {\n return func.call(thisArg, value);\n };\n case 3: return function(value, index, collection) {\n return func.call(thisArg, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(thisArg, accumulator, value, index, collection);\n };\n case 5: return function(value, other, key, object, source) {\n return func.call(thisArg, value, other, key, object, source);\n };\n }\n return function() {\n return func.apply(thisArg, arguments);\n };\n}\n\n/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = bindCallback;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash._bindcallback/index.js\n// module id = 14\n// module chunks = 0","/**\n * lodash 3.0.9 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n length = length == null ? MAX_SAFE_INTEGER : length;\n return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if the provided arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)) {\n var other = object[index];\n return value === value ? (value === other) : (other !== other);\n }\n return false;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isIterateeCall;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash._isiterateecall/index.js\n// module id = 15\n// module chunks = 0","/**\n * lodash 3.6.1 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as an array.\n *\n * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters).\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.restParam(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\nfunction restParam(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n rest = Array(length);\n\n while (++index < length) {\n rest[index] = args[start + index];\n }\n switch (start) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, args[0], rest);\n case 2: return func.call(this, args[0], args[1], rest);\n }\n var otherArgs = Array(start + 1);\n index = -1;\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = rest;\n return func.apply(this, otherArgs);\n };\n}\n\nmodule.exports = restParam;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash.restparam/index.js\n// module id = 16\n// module chunks = 0","module.exports = \"\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/public/ic_cast_24dp.svg\n// module id = 17\n// module chunks = 0","module.exports = \"\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/public/ic_cast0_24dp.svg\n// module id = 18\n// module chunks = 0","module.exports = \"\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/public/ic_cast1_24dp.svg\n// module id = 19\n// module chunks = 0","module.exports = \"\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/public/ic_cast2_24dp.svg\n// module id = 20\n// module chunks = 0","module.exports = \"\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/public/ic_cast_connected_24dp.svg\n// module id = 21\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/package.json b/package.json index eebd9b2..b585039 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "clappr-chromecast-plugin", - "version": "0.1.0", + "version": "0.1.1", "description": "Chromecast support for Clappr", "main": "dist/clappr-chromecast-plugin.js", "scripts": {