From 3e15aa7f1db6a7c5815c40adca8a2a54a8b05779 Mon Sep 17 00:00:00 2001 From: James Barnsley Date: Wed, 9 Nov 2016 20:34:37 +1300 Subject: [PATCH] Album sorted --- mopidy_iris/static/app.js | 10356 ++++++++++++++++---------------- mopidy_iris/static/app.js.map | 2 +- src/js/services/ui/reducer.js | 28 +- src/js/views/Album.js | 16 +- 4 files changed, 5193 insertions(+), 5209 deletions(-) diff --git a/mopidy_iris/static/app.js b/mopidy_iris/static/app.js index 0924d188..bca0312a 100644 --- a/mopidy_iris/static/app.js +++ b/mopidy_iris/static/app.js @@ -73,7 +73,7 @@ var _react2 = _interopRequireDefault(_react); - var _reactDom = __webpack_require__(113); + var _reactDom = __webpack_require__(110); var _reactDom2 = _interopRequireDefault(_reactDom); @@ -81,89 +81,89 @@ var _redux = __webpack_require__(5); - var _reactRouter = __webpack_require__(9); + var _reactRouter = __webpack_require__(8); - var _bootstrap = __webpack_require__(159); + var _bootstrap = __webpack_require__(158); var _bootstrap2 = _interopRequireDefault(_bootstrap); - var _App = __webpack_require__(183); + var _App = __webpack_require__(182); var _App2 = _interopRequireDefault(_App); - var _Album = __webpack_require__(182); + var _Album = __webpack_require__(181); var _Album2 = _interopRequireDefault(_Album); - var _Artist = __webpack_require__(184); + var _Artist = __webpack_require__(183); var _Artist2 = _interopRequireDefault(_Artist); - var _Playlist = __webpack_require__(185); + var _Playlist = __webpack_require__(184); var _Playlist2 = _interopRequireDefault(_Playlist); - var _Queue = __webpack_require__(186); + var _Queue = __webpack_require__(185); var _Queue2 = _interopRequireDefault(_Queue); - var _Settings = __webpack_require__(188); + var _Settings = __webpack_require__(187); var _Settings2 = _interopRequireDefault(_Settings); - var _Search = __webpack_require__(187); + var _Search = __webpack_require__(186); var _Search2 = _interopRequireDefault(_Search); - var _Discover = __webpack_require__(189); + var _Discover = __webpack_require__(188); var _Discover2 = _interopRequireDefault(_Discover); - var _DiscoverFeatured = __webpack_require__(192); + var _DiscoverFeatured = __webpack_require__(191); var _DiscoverFeatured2 = _interopRequireDefault(_DiscoverFeatured); - var _DiscoverCategories = __webpack_require__(190); + var _DiscoverCategories = __webpack_require__(189); var _DiscoverCategories2 = _interopRequireDefault(_DiscoverCategories); - var _DiscoverCategory = __webpack_require__(191); + var _DiscoverCategory = __webpack_require__(190); var _DiscoverCategory2 = _interopRequireDefault(_DiscoverCategory); - var _DiscoverNewReleases = __webpack_require__(193); + var _DiscoverNewReleases = __webpack_require__(192); var _DiscoverNewReleases2 = _interopRequireDefault(_DiscoverNewReleases); - var _LibraryArtists = __webpack_require__(195); + var _LibraryArtists = __webpack_require__(194); var _LibraryArtists2 = _interopRequireDefault(_LibraryArtists); - var _LibraryAlbums = __webpack_require__(194); + var _LibraryAlbums = __webpack_require__(193); var _LibraryAlbums2 = _interopRequireDefault(_LibraryAlbums); - var _LibraryTracks = __webpack_require__(201); + var _LibraryTracks = __webpack_require__(200); var _LibraryTracks2 = _interopRequireDefault(_LibraryTracks); - var _LibraryPlaylists = __webpack_require__(200); + var _LibraryPlaylists = __webpack_require__(199); var _LibraryPlaylists2 = _interopRequireDefault(_LibraryPlaylists); - var _LibraryLocal = __webpack_require__(196); + var _LibraryLocal = __webpack_require__(195); var _LibraryLocal2 = _interopRequireDefault(_LibraryLocal); - var _LibraryLocalArtists = __webpack_require__(198); + var _LibraryLocalArtists = __webpack_require__(197); var _LibraryLocalArtists2 = _interopRequireDefault(_LibraryLocalArtists); - var _LibraryLocalAlbums = __webpack_require__(197); + var _LibraryLocalAlbums = __webpack_require__(196); var _LibraryLocalAlbums2 = _interopRequireDefault(_LibraryLocalAlbums); - var _LibraryLocalDirectory = __webpack_require__(199); + var _LibraryLocalDirectory = __webpack_require__(198); var _LibraryLocalDirectory2 = _interopRequireDefault(_LibraryLocalDirectory); @@ -173,7 +173,7 @@ * Base-level application wrapper **/ - __webpack_require__(207); + __webpack_require__(202); _reactDom2.default.render(_react2.default.createElement( _reactRedux.Provider, @@ -401,7 +401,7 @@ 'use strict'; - module.exports = __webpack_require__(254); + module.exports = __webpack_require__(272); /***/ }, @@ -540,27 +540,27 @@ exports.__esModule = true; exports.compose = exports.applyMiddleware = exports.bindActionCreators = exports.combineReducers = exports.createStore = undefined; - var _createStore = __webpack_require__(153); + var _createStore = __webpack_require__(155); var _createStore2 = _interopRequireDefault(_createStore); - var _combineReducers = __webpack_require__(331); + var _combineReducers = __webpack_require__(349); var _combineReducers2 = _interopRequireDefault(_combineReducers); - var _bindActionCreators = __webpack_require__(330); + var _bindActionCreators = __webpack_require__(348); var _bindActionCreators2 = _interopRequireDefault(_bindActionCreators); - var _applyMiddleware = __webpack_require__(329); + var _applyMiddleware = __webpack_require__(347); var _applyMiddleware2 = _interopRequireDefault(_applyMiddleware); - var _compose = __webpack_require__(152); + var _compose = __webpack_require__(154); var _compose2 = _interopRequireDefault(_compose); - var _warning = __webpack_require__(154); + var _warning = __webpack_require__(156); var _warning2 = _interopRequireDefault(_warning); @@ -636,11 +636,11 @@ exports.__esModule = true; exports.connect = exports.Provider = undefined; - var _Provider = __webpack_require__(216); + var _Provider = __webpack_require__(221); var _Provider2 = _interopRequireDefault(_Provider); - var _connect = __webpack_require__(217); + var _connect = __webpack_require__(222); var _connect2 = _interopRequireDefault(_connect); @@ -651,6 +651,167 @@ /***/ }, /* 8 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + exports.createMemoryHistory = exports.hashHistory = exports.browserHistory = exports.applyRouterMiddleware = exports.formatPattern = exports.useRouterHistory = exports.match = exports.routerShape = exports.locationShape = exports.PropTypes = exports.RoutingContext = exports.RouterContext = exports.createRoutes = exports.useRoutes = exports.RouteContext = exports.Lifecycle = exports.History = exports.Route = exports.Redirect = exports.IndexRoute = exports.IndexRedirect = exports.withRouter = exports.IndexLink = exports.Link = exports.Router = undefined; + + var _RouteUtils = __webpack_require__(31); + + Object.defineProperty(exports, 'createRoutes', { + enumerable: true, + get: function get() { + return _RouteUtils.createRoutes; + } + }); + + var _PropTypes2 = __webpack_require__(73); + + Object.defineProperty(exports, 'locationShape', { + enumerable: true, + get: function get() { + return _PropTypes2.locationShape; + } + }); + Object.defineProperty(exports, 'routerShape', { + enumerable: true, + get: function get() { + return _PropTypes2.routerShape; + } + }); + + var _PatternUtils = __webpack_require__(40); + + Object.defineProperty(exports, 'formatPattern', { + enumerable: true, + get: function get() { + return _PatternUtils.formatPattern; + } + }); + + var _Router2 = __webpack_require__(238); + + var _Router3 = _interopRequireDefault(_Router2); + + var _Link2 = __webpack_require__(113); + + var _Link3 = _interopRequireDefault(_Link2); + + var _IndexLink2 = __webpack_require__(232); + + var _IndexLink3 = _interopRequireDefault(_IndexLink2); + + var _withRouter2 = __webpack_require__(251); + + var _withRouter3 = _interopRequireDefault(_withRouter2); + + var _IndexRedirect2 = __webpack_require__(233); + + var _IndexRedirect3 = _interopRequireDefault(_IndexRedirect2); + + var _IndexRoute2 = __webpack_require__(234); + + var _IndexRoute3 = _interopRequireDefault(_IndexRoute2); + + var _Redirect2 = __webpack_require__(114); + + var _Redirect3 = _interopRequireDefault(_Redirect2); + + var _Route2 = __webpack_require__(236); + + var _Route3 = _interopRequireDefault(_Route2); + + var _History2 = __webpack_require__(231); + + var _History3 = _interopRequireDefault(_History2); + + var _Lifecycle2 = __webpack_require__(235); + + var _Lifecycle3 = _interopRequireDefault(_Lifecycle2); + + var _RouteContext2 = __webpack_require__(237); + + var _RouteContext3 = _interopRequireDefault(_RouteContext2); + + var _useRoutes2 = __webpack_require__(250); + + var _useRoutes3 = _interopRequireDefault(_useRoutes2); + + var _RouterContext2 = __webpack_require__(55); + + var _RouterContext3 = _interopRequireDefault(_RouterContext2); + + var _RoutingContext2 = __webpack_require__(239); + + var _RoutingContext3 = _interopRequireDefault(_RoutingContext2); + + var _PropTypes3 = _interopRequireDefault(_PropTypes2); + + var _match2 = __webpack_require__(248); + + var _match3 = _interopRequireDefault(_match2); + + var _useRouterHistory2 = __webpack_require__(119); + + var _useRouterHistory3 = _interopRequireDefault(_useRouterHistory2); + + var _applyRouterMiddleware2 = __webpack_require__(241); + + var _applyRouterMiddleware3 = _interopRequireDefault(_applyRouterMiddleware2); + + var _browserHistory2 = __webpack_require__(242); + + var _browserHistory3 = _interopRequireDefault(_browserHistory2); + + var _hashHistory2 = __webpack_require__(246); + + var _hashHistory3 = _interopRequireDefault(_hashHistory2); + + var _createMemoryHistory2 = __webpack_require__(116); + + var _createMemoryHistory3 = _interopRequireDefault(_createMemoryHistory2); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + exports.Router = _Router3.default; /* components */ + + exports.Link = _Link3.default; + exports.IndexLink = _IndexLink3.default; + exports.withRouter = _withRouter3.default; + + /* components (configuration) */ + + exports.IndexRedirect = _IndexRedirect3.default; + exports.IndexRoute = _IndexRoute3.default; + exports.Redirect = _Redirect3.default; + exports.Route = _Route3.default; + + /* mixins */ + + exports.History = _History3.default; + exports.Lifecycle = _Lifecycle3.default; + exports.RouteContext = _RouteContext3.default; + + /* utils */ + + exports.useRoutes = _useRoutes3.default; + exports.RouterContext = _RouterContext3.default; + exports.RoutingContext = _RoutingContext3.default; + exports.PropTypes = _PropTypes3.default; + exports.match = _match3.default; + exports.useRouterHistory = _useRouterHistory3.default; + exports.applyRouterMiddleware = _applyRouterMiddleware3.default; + + /* histories */ + + exports.browserHistory = _browserHistory3.default; + exports.hashHistory = _hashHistory3.default; + exports.createMemoryHistory = _createMemoryHistory3.default; + +/***/ }, +/* 9 */ /***/ function(module, exports) { 'use strict'; @@ -738,167 +899,6 @@ }; -/***/ }, -/* 9 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - exports.__esModule = true; - exports.createMemoryHistory = exports.hashHistory = exports.browserHistory = exports.applyRouterMiddleware = exports.formatPattern = exports.useRouterHistory = exports.match = exports.routerShape = exports.locationShape = exports.PropTypes = exports.RoutingContext = exports.RouterContext = exports.createRoutes = exports.useRoutes = exports.RouteContext = exports.Lifecycle = exports.History = exports.Route = exports.Redirect = exports.IndexRoute = exports.IndexRedirect = exports.withRouter = exports.IndexLink = exports.Link = exports.Router = undefined; - - var _RouteUtils = __webpack_require__(31); - - Object.defineProperty(exports, 'createRoutes', { - enumerable: true, - get: function get() { - return _RouteUtils.createRoutes; - } - }); - - var _PropTypes2 = __webpack_require__(75); - - Object.defineProperty(exports, 'locationShape', { - enumerable: true, - get: function get() { - return _PropTypes2.locationShape; - } - }); - Object.defineProperty(exports, 'routerShape', { - enumerable: true, - get: function get() { - return _PropTypes2.routerShape; - } - }); - - var _PatternUtils = __webpack_require__(41); - - Object.defineProperty(exports, 'formatPattern', { - enumerable: true, - get: function get() { - return _PatternUtils.formatPattern; - } - }); - - var _Router2 = __webpack_require__(231); - - var _Router3 = _interopRequireDefault(_Router2); - - var _Link2 = __webpack_require__(116); - - var _Link3 = _interopRequireDefault(_Link2); - - var _IndexLink2 = __webpack_require__(225); - - var _IndexLink3 = _interopRequireDefault(_IndexLink2); - - var _withRouter2 = __webpack_require__(244); - - var _withRouter3 = _interopRequireDefault(_withRouter2); - - var _IndexRedirect2 = __webpack_require__(226); - - var _IndexRedirect3 = _interopRequireDefault(_IndexRedirect2); - - var _IndexRoute2 = __webpack_require__(227); - - var _IndexRoute3 = _interopRequireDefault(_IndexRoute2); - - var _Redirect2 = __webpack_require__(117); - - var _Redirect3 = _interopRequireDefault(_Redirect2); - - var _Route2 = __webpack_require__(229); - - var _Route3 = _interopRequireDefault(_Route2); - - var _History2 = __webpack_require__(224); - - var _History3 = _interopRequireDefault(_History2); - - var _Lifecycle2 = __webpack_require__(228); - - var _Lifecycle3 = _interopRequireDefault(_Lifecycle2); - - var _RouteContext2 = __webpack_require__(230); - - var _RouteContext3 = _interopRequireDefault(_RouteContext2); - - var _useRoutes2 = __webpack_require__(243); - - var _useRoutes3 = _interopRequireDefault(_useRoutes2); - - var _RouterContext2 = __webpack_require__(57); - - var _RouterContext3 = _interopRequireDefault(_RouterContext2); - - var _RoutingContext2 = __webpack_require__(232); - - var _RoutingContext3 = _interopRequireDefault(_RoutingContext2); - - var _PropTypes3 = _interopRequireDefault(_PropTypes2); - - var _match2 = __webpack_require__(241); - - var _match3 = _interopRequireDefault(_match2); - - var _useRouterHistory2 = __webpack_require__(122); - - var _useRouterHistory3 = _interopRequireDefault(_useRouterHistory2); - - var _applyRouterMiddleware2 = __webpack_require__(234); - - var _applyRouterMiddleware3 = _interopRequireDefault(_applyRouterMiddleware2); - - var _browserHistory2 = __webpack_require__(235); - - var _browserHistory3 = _interopRequireDefault(_browserHistory2); - - var _hashHistory2 = __webpack_require__(239); - - var _hashHistory3 = _interopRequireDefault(_hashHistory2); - - var _createMemoryHistory2 = __webpack_require__(119); - - var _createMemoryHistory3 = _interopRequireDefault(_createMemoryHistory2); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - exports.Router = _Router3.default; /* components */ - - exports.Link = _Link3.default; - exports.IndexLink = _IndexLink3.default; - exports.withRouter = _withRouter3.default; - - /* components (configuration) */ - - exports.IndexRedirect = _IndexRedirect3.default; - exports.IndexRoute = _IndexRoute3.default; - exports.Redirect = _Redirect3.default; - exports.Route = _Route3.default; - - /* mixins */ - - exports.History = _History3.default; - exports.Lifecycle = _Lifecycle3.default; - exports.RouteContext = _RouteContext3.default; - - /* utils */ - - exports.useRoutes = _useRoutes3.default; - exports.RouterContext = _RouterContext3.default; - exports.RoutingContext = _RoutingContext3.default; - exports.PropTypes = _PropTypes3.default; - exports.match = _match3.default; - exports.useRouterHistory = _useRouterHistory3.default; - exports.applyRouterMiddleware = _applyRouterMiddleware3.default; - - /* histories */ - - exports.browserHistory = _browserHistory3.default; - exports.hashHistory = _hashHistory3.default; - exports.createMemoryHistory = _createMemoryHistory3.default; - /***/ }, /* 10 */ /***/ function(module, exports, __webpack_require__) { @@ -1788,7 +1788,7 @@ var _prodInvariant = __webpack_require__(6); var DOMProperty = __webpack_require__(38); - var ReactDOMComponentFlags = __webpack_require__(128); + var ReactDOMComponentFlags = __webpack_require__(130); var invariant = __webpack_require__(3); @@ -2037,7 +2037,7 @@ exports.default = routerWarning; exports._resetWarned = _resetWarned; - var _warning = __webpack_require__(361); + var _warning = __webpack_require__(262); var _warning2 = _interopRequireDefault(_warning); @@ -2186,7 +2186,7 @@ var debugTool = null; if (process.env.NODE_ENV !== 'production') { - var ReactDebugTool = __webpack_require__(275); + var ReactDebugTool = __webpack_require__(293); debugTool = ReactDebugTool; } @@ -2558,12 +2558,12 @@ 'use strict'; - var _assign = __webpack_require__(8); + var _assign = __webpack_require__(9); var ReactCurrentOwner = __webpack_require__(28); var warning = __webpack_require__(4); - var canDefineProperty = __webpack_require__(89); + var canDefineProperty = __webpack_require__(90); var hasOwnProperty = Object.prototype.hasOwnProperty; // The Symbol used to tag the ReactElement type. If there is no native Symbol @@ -3183,11 +3183,11 @@ 'use strict'; var _prodInvariant = __webpack_require__(6), - _assign = __webpack_require__(8); + _assign = __webpack_require__(9); - var CallbackQueue = __webpack_require__(124); + var CallbackQueue = __webpack_require__(126); var PooledClass = __webpack_require__(32); - var ReactFeatureFlags = __webpack_require__(132); + var ReactFeatureFlags = __webpack_require__(134); var ReactReconciler = __webpack_require__(43); var Transaction = __webpack_require__(50); @@ -3676,7 +3676,7 @@ 'use strict'; - var _assign = __webpack_require__(8); + var _assign = __webpack_require__(9); var PooledClass = __webpack_require__(32); @@ -4586,6 +4586,43 @@ /***/ }, /* 36 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + exports.routes = exports.route = exports.components = exports.component = exports.history = undefined; + exports.falsy = falsy; + + var _react = __webpack_require__(2); + + var func = _react.PropTypes.func; + var object = _react.PropTypes.object; + var arrayOf = _react.PropTypes.arrayOf; + var oneOfType = _react.PropTypes.oneOfType; + var element = _react.PropTypes.element; + var shape = _react.PropTypes.shape; + var string = _react.PropTypes.string; + function falsy(props, propName, componentName) { + if (props[propName]) return new Error('<' + componentName + '> should not have a "' + propName + '" prop'); + } + + var history = exports.history = shape({ + listen: func.isRequired, + push: func.isRequired, + replace: func.isRequired, + go: func.isRequired, + goBack: func.isRequired, + goForward: func.isRequired + }); + + var component = exports.component = oneOfType([func, string]); + var components = exports.components = oneOfType([component, object]); + var route = exports.route = oneOfType([object, element]); + var routes = exports.routes = oneOfType([route, arrayOf(route)]); + +/***/ }, +/* 37 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {'use strict'; @@ -4637,43 +4674,6 @@ } /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) -/***/ }, -/* 37 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - exports.__esModule = true; - exports.routes = exports.route = exports.components = exports.component = exports.history = undefined; - exports.falsy = falsy; - - var _react = __webpack_require__(2); - - var func = _react.PropTypes.func; - var object = _react.PropTypes.object; - var arrayOf = _react.PropTypes.arrayOf; - var oneOfType = _react.PropTypes.oneOfType; - var element = _react.PropTypes.element; - var shape = _react.PropTypes.shape; - var string = _react.PropTypes.string; - function falsy(props, propName, componentName) { - if (props[propName]) return new Error('<' + componentName + '> should not have a "' + propName + '" prop'); - } - - var history = exports.history = shape({ - listen: func.isRequired, - push: func.isRequired, - replace: func.isRequired, - go: func.isRequired, - goBack: func.isRequired, - goForward: func.isRequired - }); - - var component = exports.component = oneOfType([func, string]); - var components = exports.components = oneOfType([component, object]); - var route = exports.route = oneOfType([object, element]); - var routes = exports.routes = oneOfType([route, arrayOf(route)]); - /***/ }, /* 38 */ /***/ function(module, exports, __webpack_require__) { @@ -4906,7 +4906,7 @@ var _reactFontawesome2 = _interopRequireDefault(_reactFontawesome); - var _reactRouter = __webpack_require__(9); + var _reactRouter = __webpack_require__(8); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -4978,42 +4978,6 @@ /***/ }, /* 40 */ -/***/ function(module, exports) { - - /** - * Indicates that navigation was caused by a call to history.push. - */ - 'use strict'; - - exports.__esModule = true; - var PUSH = 'PUSH'; - - exports.PUSH = PUSH; - /** - * Indicates that navigation was caused by a call to history.replace. - */ - var REPLACE = 'REPLACE'; - - exports.REPLACE = REPLACE; - /** - * Indicates that navigation was caused by some other action such - * as using a browser's back/forward buttons and/or manually manipulating - * the URL in a browser's location bar. This is the default. - * - * See https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate - * for more information. - */ - var POP = 'POP'; - - exports.POP = POP; - exports['default'] = { - PUSH: PUSH, - REPLACE: REPLACE, - POP: POP - }; - -/***/ }, -/* 41 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {'use strict'; @@ -5230,6 +5194,42 @@ } /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) +/***/ }, +/* 41 */ +/***/ function(module, exports) { + + /** + * Indicates that navigation was caused by a call to history.push. + */ + 'use strict'; + + exports.__esModule = true; + var PUSH = 'PUSH'; + + exports.PUSH = PUSH; + /** + * Indicates that navigation was caused by a call to history.replace. + */ + var REPLACE = 'REPLACE'; + + exports.REPLACE = REPLACE; + /** + * Indicates that navigation was caused by some other action such + * as using a browser's back/forward buttons and/or manually manipulating + * the URL in a browser's location bar. This is the default. + * + * See https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate + * for more information. + */ + var POP = 'POP'; + + exports.POP = POP; + exports['default'] = { + PUSH: PUSH, + REPLACE: REPLACE, + POP: POP + }; + /***/ }, /* 42 */ /***/ function(module, exports, __webpack_require__) { @@ -5247,11 +5247,11 @@ 'use strict'; - var DOMNamespaces = __webpack_require__(78); + var DOMNamespaces = __webpack_require__(79); var setInnerHTML = __webpack_require__(65); - var createMicrosoftUnsafeLocalFunction = __webpack_require__(90); - var setTextContent = __webpack_require__(148); + var createMicrosoftUnsafeLocalFunction = __webpack_require__(91); + var setTextContent = __webpack_require__(150); var ELEMENT_NODE_TYPE = 1; var DOCUMENT_FRAGMENT_NODE_TYPE = 11; @@ -5370,7 +5370,7 @@ 'use strict'; - var ReactRef = __webpack_require__(288); + var ReactRef = __webpack_require__(306); var ReactInstrumentation = __webpack_require__(19); var warning = __webpack_require__(4); @@ -5543,7 +5543,7 @@ var _react2 = _interopRequireDefault(_react); - var _reactRouter = __webpack_require__(9); + var _reactRouter = __webpack_require__(8); var _Thumbnail = __webpack_require__(26); @@ -5714,11 +5714,11 @@ var _prodInvariant = __webpack_require__(6); var EventPluginRegistry = __webpack_require__(60); - var EventPluginUtils = __webpack_require__(79); - var ReactErrorUtils = __webpack_require__(84); + var EventPluginUtils = __webpack_require__(80); + var ReactErrorUtils = __webpack_require__(85); - var accumulateInto = __webpack_require__(141); - var forEachAccumulated = __webpack_require__(143); + var accumulateInto = __webpack_require__(143); + var forEachAccumulated = __webpack_require__(145); var invariant = __webpack_require__(3); /** @@ -5970,10 +5970,10 @@ var EventConstants = __webpack_require__(27); var EventPluginHub = __webpack_require__(46); - var EventPluginUtils = __webpack_require__(79); + var EventPluginUtils = __webpack_require__(80); - var accumulateInto = __webpack_require__(141); - var forEachAccumulated = __webpack_require__(143); + var accumulateInto = __webpack_require__(143); + var forEachAccumulated = __webpack_require__(145); var warning = __webpack_require__(4); var PropagationPhases = EventConstants.PropagationPhases; @@ -6166,7 +6166,7 @@ var SyntheticEvent = __webpack_require__(29); - var getEventTarget = __webpack_require__(93); + var getEventTarget = __webpack_require__(94); /** * @interface UIEvent @@ -6559,7 +6559,7 @@ var _react2 = _interopRequireDefault(_react); - var _reactRouter = __webpack_require__(9); + var _reactRouter = __webpack_require__(8); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -6636,11 +6636,254 @@ /* 54 */ /***/ function(module, exports, __webpack_require__) { - /* WEBPACK VAR INJECTION */(function(global) {module.exports = global["jQuery"] = __webpack_require__(206); + /* WEBPACK VAR INJECTION */(function(global) {module.exports = global["jQuery"] = __webpack_require__(201); /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) /***/ }, /* 55 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + var _invariant = __webpack_require__(18); + + var _invariant2 = _interopRequireDefault(_invariant); + + var _react = __webpack_require__(2); + + var _react2 = _interopRequireDefault(_react); + + var _deprecateObjectProperties = __webpack_require__(56); + + var _deprecateObjectProperties2 = _interopRequireDefault(_deprecateObjectProperties); + + var _getRouteParams = __webpack_require__(245); + + var _getRouteParams2 = _interopRequireDefault(_getRouteParams); + + var _RouteUtils = __webpack_require__(31); + + var _routerWarning = __webpack_require__(16); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + var _React$PropTypes = _react2.default.PropTypes; + var array = _React$PropTypes.array; + var func = _React$PropTypes.func; + var object = _React$PropTypes.object; + + /** + * A renders the component tree for a given router state + * and sets the history object and the current location in context. + */ + + var RouterContext = _react2.default.createClass({ + displayName: 'RouterContext', + + + propTypes: { + history: object, + router: object.isRequired, + location: object.isRequired, + routes: array.isRequired, + params: object.isRequired, + components: array.isRequired, + createElement: func.isRequired + }, + + getDefaultProps: function getDefaultProps() { + return { + createElement: _react2.default.createElement + }; + }, + + + childContextTypes: { + history: object, + location: object.isRequired, + router: object.isRequired + }, + + getChildContext: function getChildContext() { + var _props = this.props; + var router = _props.router; + var history = _props.history; + var location = _props.location; + + if (!router) { + process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, '`` expects a `router` rather than a `history`') : void 0; + + router = _extends({}, history, { + setRouteLeaveHook: history.listenBeforeLeavingRoute + }); + delete router.listenBeforeLeavingRoute; + } + + if (process.env.NODE_ENV !== 'production') { + location = (0, _deprecateObjectProperties2.default)(location, '`context.location` is deprecated, please use a route component\'s `props.location` instead. http://tiny.cc/router-accessinglocation'); + } + + return { history: history, location: location, router: router }; + }, + createElement: function createElement(component, props) { + return component == null ? null : this.props.createElement(component, props); + }, + render: function render() { + var _this = this; + + var _props2 = this.props; + var history = _props2.history; + var location = _props2.location; + var routes = _props2.routes; + var params = _props2.params; + var components = _props2.components; + + var element = null; + + if (components) { + element = components.reduceRight(function (element, components, index) { + if (components == null) return element; // Don't create new children; use the grandchildren. + + var route = routes[index]; + var routeParams = (0, _getRouteParams2.default)(route, params); + var props = { + history: history, + location: location, + params: params, + route: route, + routeParams: routeParams, + routes: routes + }; + + if ((0, _RouteUtils.isReactChildren)(element)) { + props.children = element; + } else if (element) { + for (var prop in element) { + if (Object.prototype.hasOwnProperty.call(element, prop)) props[prop] = element[prop]; + } + } + + if ((typeof components === 'undefined' ? 'undefined' : _typeof(components)) === 'object') { + var elements = {}; + + for (var key in components) { + if (Object.prototype.hasOwnProperty.call(components, key)) { + // Pass through the key as a prop to createElement to allow + // custom createElement functions to know which named component + // they're rendering, for e.g. matching up to fetched data. + elements[key] = _this.createElement(components[key], _extends({ + key: key }, props)); + } + } + + return elements; + } + + return _this.createElement(components, props); + }, element); + } + + !(element === null || element === false || _react2.default.isValidElement(element)) ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'The root route must render a single element') : (0, _invariant2.default)(false) : void 0; + + return element; + } + }); + + exports.default = RouterContext; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) + +/***/ }, +/* 56 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + exports.canUseMembrane = undefined; + + var _routerWarning = __webpack_require__(16); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + var canUseMembrane = exports.canUseMembrane = false; + + // No-op by default. + var deprecateObjectProperties = function deprecateObjectProperties(object) { + return object; + }; + + if (process.env.NODE_ENV !== 'production') { + try { + if (Object.defineProperty({}, 'x', { + get: function get() { + return true; + } + }).x) { + exports.canUseMembrane = canUseMembrane = true; + } + /* eslint-disable no-empty */ + } catch (e) {} + /* eslint-enable no-empty */ + + if (canUseMembrane) { + deprecateObjectProperties = function deprecateObjectProperties(object, message) { + // Wrap the deprecated object in a membrane to warn on property access. + var membrane = {}; + + var _loop = function _loop(prop) { + if (!Object.prototype.hasOwnProperty.call(object, prop)) { + return 'continue'; + } + + if (typeof object[prop] === 'function') { + // Can't use fat arrow here because of use of arguments below. + membrane[prop] = function () { + process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, message) : void 0; + return object[prop].apply(object, arguments); + }; + return 'continue'; + } + + // These properties are non-enumerable to prevent React dev tools from + // seeing them and causing spurious warnings when accessing them. In + // principle this could be done with a proxy, but support for the + // ownKeys trap on proxies is not universal, even among browsers that + // otherwise support proxies. + Object.defineProperty(membrane, prop, { + get: function get() { + process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, message) : void 0; + return object[prop]; + } + }); + }; + + for (var prop in object) { + var _ret = _loop(prop); + + if (_ret === 'continue') continue; + } + + return membrane; + }; + } + } + + exports.default = deprecateObjectProperties; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) + +/***/ }, +/* 57 */ /***/ function(module, exports) { 'use strict'; @@ -6650,7 +6893,7 @@ exports.canUseDOM = canUseDOM; /***/ }, -/* 56 */ +/* 58 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {'use strict'; @@ -6665,15 +6908,15 @@ var _warning2 = _interopRequireDefault(_warning); - var _queryString = __webpack_require__(212); + var _queryString = __webpack_require__(259); - var _runTransitionHook = __webpack_require__(73); + var _runTransitionHook = __webpack_require__(77); var _runTransitionHook2 = _interopRequireDefault(_runTransitionHook); - var _PathUtils = __webpack_require__(36); + var _PathUtils = __webpack_require__(37); - var _deprecate = __webpack_require__(72); + var _deprecate = __webpack_require__(76); var _deprecate2 = _interopRequireDefault(_deprecate); @@ -6831,249 +7074,6 @@ module.exports = exports['default']; /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) -/***/ }, -/* 57 */ -/***/ function(module, exports, __webpack_require__) { - - /* WEBPACK VAR INJECTION */(function(process) {'use strict'; - - exports.__esModule = true; - - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - - var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - - var _invariant = __webpack_require__(18); - - var _invariant2 = _interopRequireDefault(_invariant); - - var _react = __webpack_require__(2); - - var _react2 = _interopRequireDefault(_react); - - var _deprecateObjectProperties = __webpack_require__(58); - - var _deprecateObjectProperties2 = _interopRequireDefault(_deprecateObjectProperties); - - var _getRouteParams = __webpack_require__(238); - - var _getRouteParams2 = _interopRequireDefault(_getRouteParams); - - var _RouteUtils = __webpack_require__(31); - - var _routerWarning = __webpack_require__(16); - - var _routerWarning2 = _interopRequireDefault(_routerWarning); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - var _React$PropTypes = _react2.default.PropTypes; - var array = _React$PropTypes.array; - var func = _React$PropTypes.func; - var object = _React$PropTypes.object; - - /** - * A renders the component tree for a given router state - * and sets the history object and the current location in context. - */ - - var RouterContext = _react2.default.createClass({ - displayName: 'RouterContext', - - - propTypes: { - history: object, - router: object.isRequired, - location: object.isRequired, - routes: array.isRequired, - params: object.isRequired, - components: array.isRequired, - createElement: func.isRequired - }, - - getDefaultProps: function getDefaultProps() { - return { - createElement: _react2.default.createElement - }; - }, - - - childContextTypes: { - history: object, - location: object.isRequired, - router: object.isRequired - }, - - getChildContext: function getChildContext() { - var _props = this.props; - var router = _props.router; - var history = _props.history; - var location = _props.location; - - if (!router) { - process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, '`` expects a `router` rather than a `history`') : void 0; - - router = _extends({}, history, { - setRouteLeaveHook: history.listenBeforeLeavingRoute - }); - delete router.listenBeforeLeavingRoute; - } - - if (process.env.NODE_ENV !== 'production') { - location = (0, _deprecateObjectProperties2.default)(location, '`context.location` is deprecated, please use a route component\'s `props.location` instead. http://tiny.cc/router-accessinglocation'); - } - - return { history: history, location: location, router: router }; - }, - createElement: function createElement(component, props) { - return component == null ? null : this.props.createElement(component, props); - }, - render: function render() { - var _this = this; - - var _props2 = this.props; - var history = _props2.history; - var location = _props2.location; - var routes = _props2.routes; - var params = _props2.params; - var components = _props2.components; - - var element = null; - - if (components) { - element = components.reduceRight(function (element, components, index) { - if (components == null) return element; // Don't create new children; use the grandchildren. - - var route = routes[index]; - var routeParams = (0, _getRouteParams2.default)(route, params); - var props = { - history: history, - location: location, - params: params, - route: route, - routeParams: routeParams, - routes: routes - }; - - if ((0, _RouteUtils.isReactChildren)(element)) { - props.children = element; - } else if (element) { - for (var prop in element) { - if (Object.prototype.hasOwnProperty.call(element, prop)) props[prop] = element[prop]; - } - } - - if ((typeof components === 'undefined' ? 'undefined' : _typeof(components)) === 'object') { - var elements = {}; - - for (var key in components) { - if (Object.prototype.hasOwnProperty.call(components, key)) { - // Pass through the key as a prop to createElement to allow - // custom createElement functions to know which named component - // they're rendering, for e.g. matching up to fetched data. - elements[key] = _this.createElement(components[key], _extends({ - key: key }, props)); - } - } - - return elements; - } - - return _this.createElement(components, props); - }, element); - } - - !(element === null || element === false || _react2.default.isValidElement(element)) ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'The root route must render a single element') : (0, _invariant2.default)(false) : void 0; - - return element; - } - }); - - exports.default = RouterContext; - module.exports = exports['default']; - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) - -/***/ }, -/* 58 */ -/***/ function(module, exports, __webpack_require__) { - - /* WEBPACK VAR INJECTION */(function(process) {'use strict'; - - exports.__esModule = true; - exports.canUseMembrane = undefined; - - var _routerWarning = __webpack_require__(16); - - var _routerWarning2 = _interopRequireDefault(_routerWarning); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - var canUseMembrane = exports.canUseMembrane = false; - - // No-op by default. - var deprecateObjectProperties = function deprecateObjectProperties(object) { - return object; - }; - - if (process.env.NODE_ENV !== 'production') { - try { - if (Object.defineProperty({}, 'x', { - get: function get() { - return true; - } - }).x) { - exports.canUseMembrane = canUseMembrane = true; - } - /* eslint-disable no-empty */ - } catch (e) {} - /* eslint-enable no-empty */ - - if (canUseMembrane) { - deprecateObjectProperties = function deprecateObjectProperties(object, message) { - // Wrap the deprecated object in a membrane to warn on property access. - var membrane = {}; - - var _loop = function _loop(prop) { - if (!Object.prototype.hasOwnProperty.call(object, prop)) { - return 'continue'; - } - - if (typeof object[prop] === 'function') { - // Can't use fat arrow here because of use of arguments below. - membrane[prop] = function () { - process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, message) : void 0; - return object[prop].apply(object, arguments); - }; - return 'continue'; - } - - // These properties are non-enumerable to prevent React dev tools from - // seeing them and causing spurious warnings when accessing them. In - // principle this could be done with a proxy, but support for the - // ownKeys trap on proxies is not universal, even among browsers that - // otherwise support proxies. - Object.defineProperty(membrane, prop, { - get: function get() { - process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, message) : void 0; - return object[prop]; - } - }); - }; - - for (var prop in object) { - var _ret = _loop(prop); - - if (_ret === 'continue') continue; - } - - return membrane; - }; - } - } - - exports.default = deprecateObjectProperties; - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) - /***/ }, /* 59 */ /***/ function(module, exports) { @@ -7399,15 +7399,15 @@ 'use strict'; - var _assign = __webpack_require__(8); + var _assign = __webpack_require__(9); var EventConstants = __webpack_require__(27); var EventPluginRegistry = __webpack_require__(60); - var ReactEventEmitterMixin = __webpack_require__(278); - var ViewportMetrics = __webpack_require__(140); + var ReactEventEmitterMixin = __webpack_require__(296); + var ViewportMetrics = __webpack_require__(142); - var getVendorPrefixedEventName = __webpack_require__(310); - var isEventSupported = __webpack_require__(95); + var getVendorPrefixedEventName = __webpack_require__(328); + var isEventSupported = __webpack_require__(96); /** * Summary of `ReactBrowserEventEmitter` event handling: @@ -7762,9 +7762,9 @@ 'use strict'; var SyntheticUIEvent = __webpack_require__(49); - var ViewportMetrics = __webpack_require__(140); + var ViewportMetrics = __webpack_require__(142); - var getEventModifierState = __webpack_require__(92); + var getEventModifierState = __webpack_require__(93); /** * @interface MouseEvent @@ -7967,12 +7967,12 @@ 'use strict'; var ExecutionEnvironment = __webpack_require__(17); - var DOMNamespaces = __webpack_require__(78); + var DOMNamespaces = __webpack_require__(79); var WHITESPACE_TEST = /^[ \r\n\t\f]/; var NONVISIBLE_TEST = /<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/; - var createMicrosoftUnsafeLocalFunction = __webpack_require__(90); + var createMicrosoftUnsafeLocalFunction = __webpack_require__(91); // SVG temp container for IE lacking innerHTML var reusableSVGContainer; @@ -8381,141 +8381,86 @@ /***/ }, /* 71 */ -/***/ function(module, exports) { +/***/ function(module, exports, __webpack_require__) { - 'use strict'; + var require;var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(process) {/** @license MIT License (c) copyright 2010-2014 original author or authors */ + /** @author Brian Cavalier */ + /** @author John Hann */ - exports.__esModule = true; - exports.addEventListener = addEventListener; - exports.removeEventListener = removeEventListener; - exports.getHashPath = getHashPath; - exports.replaceHashPath = replaceHashPath; - exports.getWindowPath = getWindowPath; - exports.go = go; - exports.getUserConfirmation = getUserConfirmation; - exports.supportsHistory = supportsHistory; - exports.supportsGoWithoutReloadUsingHash = supportsGoWithoutReloadUsingHash; + /*global process,document,setTimeout,clearTimeout,MutationObserver,WebKitMutationObserver*/ + (function(define) { 'use strict'; + !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require) { + /*jshint maxcomplexity:6*/ - function addEventListener(node, event, listener) { - if (node.addEventListener) { - node.addEventListener(event, listener, false); - } else { - node.attachEvent('on' + event, listener); - } - } + // Sniff "best" async scheduling option + // Prefer process.nextTick or MutationObserver, then check for + // setTimeout, and finally vertx, since its the only env that doesn't + // have setTimeout - function removeEventListener(node, event, listener) { - if (node.removeEventListener) { - node.removeEventListener(event, listener, false); - } else { - node.detachEvent('on' + event, listener); - } - } + var MutationObs; + var capturedSetTimeout = typeof setTimeout !== 'undefined' && setTimeout; - function getHashPath() { - // We can't use window.location.hash here because it's not - // consistent across browsers - Firefox will pre-decode it! - return window.location.href.split('#')[1] || ''; - } + // Default env + var setTimer = function(f, ms) { return setTimeout(f, ms); }; + var clearTimer = function(t) { return clearTimeout(t); }; + var asap = function (f) { return capturedSetTimeout(f, 0); }; - function replaceHashPath(path) { - window.location.replace(window.location.pathname + window.location.search + '#' + path); - } + // Detect specific env + if (isNode()) { // Node + asap = function (f) { return process.nextTick(f); }; - function getWindowPath() { - return window.location.pathname + window.location.search + window.location.hash; - } + } else if (MutationObs = hasMutationObserver()) { // Modern browser + asap = initMutationObserver(MutationObs); - function go(n) { - if (n) window.history.go(n); - } + } else if (!capturedSetTimeout) { // vert.x + var vertxRequire = require; + var vertx = __webpack_require__(380); + setTimer = function (f, ms) { return vertx.setTimer(ms, f); }; + clearTimer = vertx.cancelTimer; + asap = vertx.runOnLoop || vertx.runOnContext; + } - function getUserConfirmation(message, callback) { - callback(window.confirm(message)); - } + return { + setTimer: setTimer, + clearTimer: clearTimer, + asap: asap + }; - /** - * Returns true if the HTML5 history API is supported. Taken from Modernizr. - * - * https://github.com/Modernizr/Modernizr/blob/master/LICENSE - * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js - * changed to avoid false negatives for Windows Phones: https://github.com/rackt/react-router/issues/586 - */ + function isNode () { + return typeof process !== 'undefined' && + Object.prototype.toString.call(process) === '[object process]'; + } - function supportsHistory() { - var ua = navigator.userAgent; - if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) { - return false; - } - return window.history && 'pushState' in window.history; - } + function hasMutationObserver () { + return (typeof MutationObserver === 'function' && MutationObserver) || + (typeof WebKitMutationObserver === 'function' && WebKitMutationObserver); + } - /** - * Returns false if using go(n) with hash history causes a full page reload. - */ + function initMutationObserver(MutationObserver) { + var scheduled; + var node = document.createTextNode(''); + var o = new MutationObserver(run); + o.observe(node, { characterData: true }); - function supportsGoWithoutReloadUsingHash() { - var ua = navigator.userAgent; - return ua.indexOf('Firefox') === -1; - } + function run() { + var f = scheduled; + scheduled = void 0; + f(); + } + + var i = 0; + return function (f) { + scheduled = f; + node.data = (i ^= 1); + }; + } + }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + }(__webpack_require__(14))); + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, /* 72 */ -/***/ function(module, exports, __webpack_require__) { - - /* WEBPACK VAR INJECTION */(function(process) {'use strict'; - - exports.__esModule = true; - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _warning = __webpack_require__(24); - - var _warning2 = _interopRequireDefault(_warning); - - function deprecate(fn, message) { - return function () { - process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] ' + message) : undefined; - return fn.apply(this, arguments); - }; - } - - exports['default'] = deprecate; - module.exports = exports['default']; - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) - -/***/ }, -/* 73 */ -/***/ function(module, exports, __webpack_require__) { - - /* WEBPACK VAR INJECTION */(function(process) {'use strict'; - - exports.__esModule = true; - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _warning = __webpack_require__(24); - - var _warning2 = _interopRequireDefault(_warning); - - function runTransitionHook(hook, location, callback) { - var result = hook(location, callback); - - if (hook.length < 2) { - // Assume the hook runs synchronously and automatically - // call the callback with the return value. - callback(result); - } else { - process.env.NODE_ENV !== 'production' ? _warning2['default'](result === undefined, 'You should not "return" in a transition hook with a callback argument; call the callback instead') : undefined; - } - } - - exports['default'] = runTransitionHook; - module.exports = exports['default']; - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) - -/***/ }, -/* 74 */ /***/ function(module, exports) { "use strict"; @@ -8608,7 +8553,7 @@ } /***/ }, -/* 75 */ +/* 73 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {'use strict'; @@ -8618,11 +8563,11 @@ var _react = __webpack_require__(2); - var _deprecateObjectProperties = __webpack_require__(58); + var _deprecateObjectProperties = __webpack_require__(56); var _deprecateObjectProperties2 = _interopRequireDefault(_deprecateObjectProperties); - var _InternalPropTypes = __webpack_require__(37); + var _InternalPropTypes = __webpack_require__(36); var InternalPropTypes = _interopRequireWildcard(_InternalPropTypes); @@ -8715,7 +8660,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 76 */ +/* 74 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {'use strict'; @@ -8730,21 +8675,21 @@ var _routerWarning2 = _interopRequireDefault(_routerWarning); - var _computeChangedRoutes2 = __webpack_require__(236); + var _computeChangedRoutes2 = __webpack_require__(243); var _computeChangedRoutes3 = _interopRequireDefault(_computeChangedRoutes2); - var _TransitionUtils = __webpack_require__(233); + var _TransitionUtils = __webpack_require__(240); - var _isActive2 = __webpack_require__(240); + var _isActive2 = __webpack_require__(247); var _isActive3 = _interopRequireDefault(_isActive2); - var _getComponents = __webpack_require__(237); + var _getComponents = __webpack_require__(244); var _getComponents2 = _interopRequireDefault(_getComponents); - var _matchRoutes = __webpack_require__(242); + var _matchRoutes = __webpack_require__(249); var _matchRoutes2 = _interopRequireDefault(_matchRoutes); @@ -9022,8 +8967,143 @@ module.exports = exports['default']; /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) +/***/ }, +/* 75 */ +/***/ function(module, exports) { + + 'use strict'; + + exports.__esModule = true; + exports.addEventListener = addEventListener; + exports.removeEventListener = removeEventListener; + exports.getHashPath = getHashPath; + exports.replaceHashPath = replaceHashPath; + exports.getWindowPath = getWindowPath; + exports.go = go; + exports.getUserConfirmation = getUserConfirmation; + exports.supportsHistory = supportsHistory; + exports.supportsGoWithoutReloadUsingHash = supportsGoWithoutReloadUsingHash; + + function addEventListener(node, event, listener) { + if (node.addEventListener) { + node.addEventListener(event, listener, false); + } else { + node.attachEvent('on' + event, listener); + } + } + + function removeEventListener(node, event, listener) { + if (node.removeEventListener) { + node.removeEventListener(event, listener, false); + } else { + node.detachEvent('on' + event, listener); + } + } + + function getHashPath() { + // We can't use window.location.hash here because it's not + // consistent across browsers - Firefox will pre-decode it! + return window.location.href.split('#')[1] || ''; + } + + function replaceHashPath(path) { + window.location.replace(window.location.pathname + window.location.search + '#' + path); + } + + function getWindowPath() { + return window.location.pathname + window.location.search + window.location.hash; + } + + function go(n) { + if (n) window.history.go(n); + } + + function getUserConfirmation(message, callback) { + callback(window.confirm(message)); + } + + /** + * Returns true if the HTML5 history API is supported. Taken from Modernizr. + * + * https://github.com/Modernizr/Modernizr/blob/master/LICENSE + * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js + * changed to avoid false negatives for Windows Phones: https://github.com/rackt/react-router/issues/586 + */ + + function supportsHistory() { + var ua = navigator.userAgent; + if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) { + return false; + } + return window.history && 'pushState' in window.history; + } + + /** + * Returns false if using go(n) with hash history causes a full page reload. + */ + + function supportsGoWithoutReloadUsingHash() { + var ua = navigator.userAgent; + return ua.indexOf('Firefox') === -1; + } + +/***/ }, +/* 76 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _warning = __webpack_require__(24); + + var _warning2 = _interopRequireDefault(_warning); + + function deprecate(fn, message) { + return function () { + process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] ' + message) : undefined; + return fn.apply(this, arguments); + }; + } + + exports['default'] = deprecate; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) + /***/ }, /* 77 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _warning = __webpack_require__(24); + + var _warning2 = _interopRequireDefault(_warning); + + function runTransitionHook(hook, location, callback) { + var result = hook(location, callback); + + if (hook.length < 2) { + // Assume the hook runs synchronously and automatically + // call the callback with the return value. + callback(result); + } else { + process.env.NODE_ENV !== 'production' ? _warning2['default'](result === undefined, 'You should not "return" in a transition hook with a callback argument; call the callback instead') : undefined; + } + } + + exports['default'] = runTransitionHook; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) + +/***/ }, +/* 78 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -9040,14 +9120,14 @@ 'use strict'; var DOMLazyTree = __webpack_require__(42); - var Danger = __webpack_require__(249); - var ReactMultiChildUpdateTypes = __webpack_require__(136); + var Danger = __webpack_require__(267); + var ReactMultiChildUpdateTypes = __webpack_require__(138); var ReactDOMComponentTree = __webpack_require__(13); var ReactInstrumentation = __webpack_require__(19); - var createMicrosoftUnsafeLocalFunction = __webpack_require__(90); + var createMicrosoftUnsafeLocalFunction = __webpack_require__(91); var setInnerHTML = __webpack_require__(65); - var setTextContent = __webpack_require__(148); + var setTextContent = __webpack_require__(150); function getNodeAfter(parentNode, node) { // Special case for text components, which return [open, close] comments @@ -9223,7 +9303,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 78 */ +/* 79 */ /***/ function(module, exports) { /** @@ -9248,7 +9328,7 @@ module.exports = DOMNamespaces; /***/ }, -/* 79 */ +/* 80 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -9267,7 +9347,7 @@ var _prodInvariant = __webpack_require__(6); var EventConstants = __webpack_require__(27); - var ReactErrorUtils = __webpack_require__(84); + var ReactErrorUtils = __webpack_require__(85); var invariant = __webpack_require__(3); var warning = __webpack_require__(4); @@ -9483,7 +9563,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 80 */ +/* 81 */ /***/ function(module, exports) { /** @@ -9547,7 +9627,7 @@ module.exports = KeyEscapeUtils; /***/ }, -/* 81 */ +/* 82 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -9565,9 +9645,9 @@ var _prodInvariant = __webpack_require__(6); - var ReactPropTypes = __webpack_require__(138); + var ReactPropTypes = __webpack_require__(140); var ReactPropTypeLocations = __webpack_require__(62); - var ReactPropTypesSecret = __webpack_require__(87); + var ReactPropTypesSecret = __webpack_require__(88); var invariant = __webpack_require__(3); var warning = __webpack_require__(4); @@ -9689,7 +9769,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 82 */ +/* 83 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -9707,9 +9787,9 @@ var _prodInvariant = __webpack_require__(6); - var ReactNoopUpdateQueue = __webpack_require__(85); + var ReactNoopUpdateQueue = __webpack_require__(86); - var canDefineProperty = __webpack_require__(89); + var canDefineProperty = __webpack_require__(90); var emptyObject = __webpack_require__(51); var invariant = __webpack_require__(3); var warning = __webpack_require__(4); @@ -9813,7 +9893,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 83 */ +/* 84 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -9864,7 +9944,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 84 */ +/* 85 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -9946,7 +10026,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 85 */ +/* 86 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -10048,7 +10128,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 86 */ +/* 87 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -10078,7 +10158,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 87 */ +/* 88 */ /***/ function(module, exports) { /** @@ -10099,7 +10179,7 @@ module.exports = ReactPropTypesSecret; /***/ }, -/* 88 */ +/* 89 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -10331,7 +10411,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 89 */ +/* 90 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -10361,7 +10441,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 90 */ +/* 91 */ /***/ function(module, exports) { /** @@ -10398,7 +10478,7 @@ module.exports = createMicrosoftUnsafeLocalFunction; /***/ }, -/* 91 */ +/* 92 */ /***/ function(module, exports) { /** @@ -10453,7 +10533,7 @@ module.exports = getEventCharCode; /***/ }, -/* 92 */ +/* 93 */ /***/ function(module, exports) { /** @@ -10501,7 +10581,7 @@ module.exports = getEventModifierState; /***/ }, -/* 93 */ +/* 94 */ /***/ function(module, exports) { /** @@ -10541,7 +10621,7 @@ module.exports = getEventTarget; /***/ }, -/* 94 */ +/* 95 */ /***/ function(module, exports) { /** @@ -10587,7 +10667,7 @@ module.exports = getIteratorFn; /***/ }, -/* 95 */ +/* 96 */ /***/ function(module, exports, __webpack_require__) { /** @@ -10652,7 +10732,7 @@ module.exports = isEventSupported; /***/ }, -/* 96 */ +/* 97 */ /***/ function(module, exports) { /** @@ -10699,7 +10779,7 @@ module.exports = shouldUpdateReactComponent; /***/ }, -/* 97 */ +/* 98 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -10720,9 +10800,9 @@ var ReactCurrentOwner = __webpack_require__(28); var ReactElement = __webpack_require__(21); - var getIteratorFn = __webpack_require__(94); + var getIteratorFn = __webpack_require__(95); var invariant = __webpack_require__(3); - var KeyEscapeUtils = __webpack_require__(80); + var KeyEscapeUtils = __webpack_require__(81); var warning = __webpack_require__(4); var SEPARATOR = '.'; @@ -10872,7 +10952,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 98 */ +/* 99 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -10888,7 +10968,7 @@ 'use strict'; - var _assign = __webpack_require__(8); + var _assign = __webpack_require__(9); var emptyFunction = __webpack_require__(22); var warning = __webpack_require__(4); @@ -11260,7 +11340,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 99 */ +/* 100 */ /***/ function(module, exports) { /** @@ -11331,86 +11411,6 @@ module.exports = shallowEqual; -/***/ }, -/* 100 */ -/***/ function(module, exports, __webpack_require__) { - - var require;var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(process) {/** @license MIT License (c) copyright 2010-2014 original author or authors */ - /** @author Brian Cavalier */ - /** @author John Hann */ - - /*global process,document,setTimeout,clearTimeout,MutationObserver,WebKitMutationObserver*/ - (function(define) { 'use strict'; - !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require) { - /*jshint maxcomplexity:6*/ - - // Sniff "best" async scheduling option - // Prefer process.nextTick or MutationObserver, then check for - // setTimeout, and finally vertx, since its the only env that doesn't - // have setTimeout - - var MutationObs; - var capturedSetTimeout = typeof setTimeout !== 'undefined' && setTimeout; - - // Default env - var setTimer = function(f, ms) { return setTimeout(f, ms); }; - var clearTimer = function(t) { return clearTimeout(t); }; - var asap = function (f) { return capturedSetTimeout(f, 0); }; - - // Detect specific env - if (isNode()) { // Node - asap = function (f) { return process.nextTick(f); }; - - } else if (MutationObs = hasMutationObserver()) { // Modern browser - asap = initMutationObserver(MutationObs); - - } else if (!capturedSetTimeout) { // vert.x - var vertxRequire = require; - var vertx = __webpack_require__(379); - setTimer = function (f, ms) { return vertx.setTimer(ms, f); }; - clearTimer = vertx.cancelTimer; - asap = vertx.runOnLoop || vertx.runOnContext; - } - - return { - setTimer: setTimer, - clearTimer: clearTimer, - asap: asap - }; - - function isNode () { - return typeof process !== 'undefined' && - Object.prototype.toString.call(process) === '[object process]'; - } - - function hasMutationObserver () { - return (typeof MutationObserver === 'function' && MutationObserver) || - (typeof WebKitMutationObserver === 'function' && WebKitMutationObserver); - } - - function initMutationObserver(MutationObserver) { - var scheduled; - var node = document.createTextNode(''); - var o = new MutationObserver(run); - o.observe(node, { characterData: true }); - - function run() { - var f = scheduled; - scheduled = void 0; - f(); - } - - var i = 0; - return function (f) { - scheduled = f; - node.data = (i ^= 1); - }; - } - }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - }(__webpack_require__(14))); - - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) - /***/ }, /* 101 */ /***/ function(module, exports, __webpack_require__) { @@ -11431,7 +11431,7 @@ var _reactFontawesome2 = _interopRequireDefault(_reactFontawesome); - var _reactRouter = __webpack_require__(9); + var _reactRouter = __webpack_require__(8); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -11494,7 +11494,7 @@ var _react2 = _interopRequireDefault(_react); - var _reactRouter = __webpack_require__(9); + var _reactRouter = __webpack_require__(8); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -11518,7 +11518,7 @@ value: function render() { var className = 'icon'; if (this.props.className) className += ' ' + this.props.className; - var src = __webpack_require__(378)("./" + this.props.name + '.svg'); + var src = __webpack_require__(379)("./" + this.props.name + '.svg'); return _react2.default.createElement('img', { className: className, src: src }); } }]); @@ -11758,7 +11758,7 @@ var _redux = __webpack_require__(5); - var _reactRouter = __webpack_require__(9); + var _reactRouter = __webpack_require__(8); var _actions = __webpack_require__(11); @@ -12129,6 +12129,666 @@ /***/ }, /* 107 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ + /** @author Brian Cavalier */ + /** @author John Hann */ + + (function(define) { 'use strict'; + !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { + + /** + * Custom error type for promises rejected by promise.timeout + * @param {string} message + * @constructor + */ + function TimeoutError (message) { + Error.call(this); + this.message = message; + this.name = TimeoutError.name; + if (typeof Error.captureStackTrace === 'function') { + Error.captureStackTrace(this, TimeoutError); + } + } + + TimeoutError.prototype = Object.create(Error.prototype); + TimeoutError.prototype.constructor = TimeoutError; + + return TimeoutError; + }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + }(__webpack_require__(14))); + +/***/ }, +/* 108 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ + /** @author Brian Cavalier */ + /** @author John Hann */ + + (function(define) { 'use strict'; + !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { + + makeApply.tryCatchResolve = tryCatchResolve; + + return makeApply; + + function makeApply(Promise, call) { + if(arguments.length < 2) { + call = tryCatchResolve; + } + + return apply; + + function apply(f, thisArg, args) { + var p = Promise._defer(); + var l = args.length; + var params = new Array(l); + callAndResolve({ f:f, thisArg:thisArg, args:args, params:params, i:l-1, call:call }, p._handler); + + return p; + } + + function callAndResolve(c, h) { + if(c.i < 0) { + return call(c.f, c.thisArg, c.params, h); + } + + var handler = Promise._handler(c.args[c.i]); + handler.fold(callAndResolveNext, c, void 0, h); + } + + function callAndResolveNext(c, x, h) { + c.params[c.i] = x; + c.i -= 1; + callAndResolve(c, h); + } + } + + function tryCatchResolve(f, thisArg, args, resolver) { + try { + resolver.resolve(f.apply(thisArg, args)); + } catch(e) { + resolver.reject(e); + } + } + + }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + }(__webpack_require__(14))); + + + + +/***/ }, +/* 109 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ + /** @author Brian Cavalier */ + /** @author John Hann */ + + (function(define) { 'use strict'; + !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { + + return { + pending: toPendingState, + fulfilled: toFulfilledState, + rejected: toRejectedState, + inspect: inspect + }; + + function toPendingState() { + return { state: 'pending' }; + } + + function toRejectedState(e) { + return { state: 'rejected', reason: e }; + } + + function toFulfilledState(x) { + return { state: 'fulfilled', value: x }; + } + + function inspect(handler) { + var state = handler.state(); + return state === 0 ? toPendingState() + : state > 0 ? toFulfilledState(handler.value) + : toRejectedState(handler.value); + } + + }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + }(__webpack_require__(14))); + + +/***/ }, +/* 110 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + module.exports = __webpack_require__(277); + + +/***/ }, +/* 111 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _react = __webpack_require__(2); + + exports["default"] = _react.PropTypes.shape({ + subscribe: _react.PropTypes.func.isRequired, + dispatch: _react.PropTypes.func.isRequired, + getState: _react.PropTypes.func.isRequired + }); + +/***/ }, +/* 112 */ +/***/ function(module, exports) { + + 'use strict'; + + exports.__esModule = true; + exports["default"] = warning; + /** + * Prints a warning in the console if it exists. + * + * @param {String} message The warning message. + * @returns {void} + */ + function warning(message) { + /* eslint-disable no-console */ + if (typeof console !== 'undefined' && typeof console.error === 'function') { + console.error(message); + } + /* eslint-enable no-console */ + try { + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + /* eslint-disable no-empty */ + } catch (e) {} + /* eslint-enable no-empty */ + } + +/***/ }, +/* 113 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + var _react = __webpack_require__(2); + + var _react2 = _interopRequireDefault(_react); + + var _routerWarning = __webpack_require__(16); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + var _invariant = __webpack_require__(18); + + var _invariant2 = _interopRequireDefault(_invariant); + + var _PropTypes = __webpack_require__(73); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } + + var _React$PropTypes = _react2.default.PropTypes; + var bool = _React$PropTypes.bool; + var object = _React$PropTypes.object; + var string = _React$PropTypes.string; + var func = _React$PropTypes.func; + var oneOfType = _React$PropTypes.oneOfType; + + + function isLeftClickEvent(event) { + return event.button === 0; + } + + function isModifiedEvent(event) { + return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey); + } + + // TODO: De-duplicate against hasAnyProperties in createTransitionManager. + function isEmptyObject(object) { + for (var p in object) { + if (Object.prototype.hasOwnProperty.call(object, p)) return false; + }return true; + } + + function createLocationDescriptor(to, _ref) { + var query = _ref.query; + var hash = _ref.hash; + var state = _ref.state; + + if (query || hash || state) { + return { pathname: to, query: query, hash: hash, state: state }; + } + + return to; + } + + /** + * A is used to create an element that links to a route. + * When that route is active, the link gets the value of its + * activeClassName prop. + * + * For example, assuming you have the following route: + * + * + * + * You could use the following component to link to that route: + * + * + * + * Links may pass along location state and/or query string parameters + * in the state/query props, respectively. + * + * + */ + var Link = _react2.default.createClass({ + displayName: 'Link', + + + contextTypes: { + router: _PropTypes.routerShape + }, + + propTypes: { + to: oneOfType([string, object]), + query: object, + hash: string, + state: object, + activeStyle: object, + activeClassName: string, + onlyActiveOnIndex: bool.isRequired, + onClick: func, + target: string + }, + + getDefaultProps: function getDefaultProps() { + return { + onlyActiveOnIndex: false, + style: {} + }; + }, + handleClick: function handleClick(event) { + if (this.props.onClick) this.props.onClick(event); + + if (event.defaultPrevented) return; + + !this.context.router ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 's rendered outside of a router context cannot navigate.') : (0, _invariant2.default)(false) : void 0; + + if (isModifiedEvent(event) || !isLeftClickEvent(event)) return; + + // If target prop is set (e.g. to "_blank"), let browser handle link. + /* istanbul ignore if: untestable with Karma */ + if (this.props.target) return; + + event.preventDefault(); + + var _props = this.props; + var to = _props.to; + var query = _props.query; + var hash = _props.hash; + var state = _props.state; + + var location = createLocationDescriptor(to, { query: query, hash: hash, state: state }); + + this.context.router.push(location); + }, + render: function render() { + var _props2 = this.props; + var to = _props2.to; + var query = _props2.query; + var hash = _props2.hash; + var state = _props2.state; + var activeClassName = _props2.activeClassName; + var activeStyle = _props2.activeStyle; + var onlyActiveOnIndex = _props2.onlyActiveOnIndex; + + var props = _objectWithoutProperties(_props2, ['to', 'query', 'hash', 'state', 'activeClassName', 'activeStyle', 'onlyActiveOnIndex']); + + process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(!(query || hash || state), 'the `query`, `hash`, and `state` props on `` are deprecated, use `. http://tiny.cc/router-isActivedeprecated') : void 0; + + // Ignore if rendered outside the context of router, simplifies unit testing. + var router = this.context.router; + + + if (router) { + // If user does not specify a `to` prop, return an empty anchor tag. + if (to == null) { + return _react2.default.createElement('a', props); + } + + var location = createLocationDescriptor(to, { query: query, hash: hash, state: state }); + props.href = router.createHref(location); + + if (activeClassName || activeStyle != null && !isEmptyObject(activeStyle)) { + if (router.isActive(location, onlyActiveOnIndex)) { + if (activeClassName) { + if (props.className) { + props.className += ' ' + activeClassName; + } else { + props.className = activeClassName; + } + } + + if (activeStyle) props.style = _extends({}, props.style, activeStyle); + } + } + } + + return _react2.default.createElement('a', _extends({}, props, { onClick: this.handleClick })); + } + }); + + exports.default = Link; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) + +/***/ }, +/* 114 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + var _react = __webpack_require__(2); + + var _react2 = _interopRequireDefault(_react); + + var _invariant = __webpack_require__(18); + + var _invariant2 = _interopRequireDefault(_invariant); + + var _RouteUtils = __webpack_require__(31); + + var _PatternUtils = __webpack_require__(40); + + var _InternalPropTypes = __webpack_require__(36); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + var _React$PropTypes = _react2.default.PropTypes; + var string = _React$PropTypes.string; + var object = _React$PropTypes.object; + + /** + * A is used to declare another URL path a client should + * be sent to when they request a given URL. + * + * Redirects are placed alongside routes in the route configuration + * and are traversed in the same manner. + */ + + var Redirect = _react2.default.createClass({ + displayName: 'Redirect', + + + statics: { + createRouteFromReactElement: function createRouteFromReactElement(element) { + var route = (0, _RouteUtils.createRouteFromReactElement)(element); + + if (route.from) route.path = route.from; + + route.onEnter = function (nextState, replace) { + var location = nextState.location; + var params = nextState.params; + + + var pathname = void 0; + if (route.to.charAt(0) === '/') { + pathname = (0, _PatternUtils.formatPattern)(route.to, params); + } else if (!route.to) { + pathname = location.pathname; + } else { + var routeIndex = nextState.routes.indexOf(route); + var parentPattern = Redirect.getRoutePattern(nextState.routes, routeIndex - 1); + var pattern = parentPattern.replace(/\/*$/, '/') + route.to; + pathname = (0, _PatternUtils.formatPattern)(pattern, params); + } + + replace({ + pathname: pathname, + query: route.query || location.query, + state: route.state || location.state + }); + }; + + return route; + }, + getRoutePattern: function getRoutePattern(routes, routeIndex) { + var parentPattern = ''; + + for (var i = routeIndex; i >= 0; i--) { + var route = routes[i]; + var pattern = route.path || ''; + + parentPattern = pattern.replace(/\/*$/, '/') + parentPattern; + + if (pattern.indexOf('/') === 0) break; + } + + return '/' + parentPattern; + } + }, + + propTypes: { + path: string, + from: string, // Alias for path + to: string.isRequired, + query: object, + state: object, + onEnter: _InternalPropTypes.falsy, + children: _InternalPropTypes.falsy + }, + + /* istanbul ignore next: sanity check */ + render: function render() { + true ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, ' elements are for router configuration only and should not be rendered') : (0, _invariant2.default)(false) : void 0; + } + }); + + exports.default = Redirect; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) + +/***/ }, +/* 115 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + exports.createRouterObject = createRouterObject; + exports.createRoutingHistory = createRoutingHistory; + + var _deprecateObjectProperties = __webpack_require__(56); + + var _deprecateObjectProperties2 = _interopRequireDefault(_deprecateObjectProperties); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + function createRouterObject(history, transitionManager) { + return _extends({}, history, { + setRouteLeaveHook: transitionManager.listenBeforeLeavingRoute, + isActive: transitionManager.isActive + }); + } + + // deprecated + function createRoutingHistory(history, transitionManager) { + history = _extends({}, history, transitionManager); + + if (process.env.NODE_ENV !== 'production') { + history = (0, _deprecateObjectProperties2.default)(history, '`props.history` and `context.history` are deprecated. Please use `context.router`. http://tiny.cc/router-contextchanges'); + } + + return history; + } + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) + +/***/ }, +/* 116 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + exports.default = createMemoryHistory; + + var _useQueries = __webpack_require__(58); + + var _useQueries2 = _interopRequireDefault(_useQueries); + + var _useBasename = __webpack_require__(124); + + var _useBasename2 = _interopRequireDefault(_useBasename); + + var _createMemoryHistory = __webpack_require__(255); + + var _createMemoryHistory2 = _interopRequireDefault(_createMemoryHistory); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + function createMemoryHistory(options) { + // signatures and type checking differ between `useRoutes` and + // `createMemoryHistory`, have to create `memoryHistory` first because + // `useQueries` doesn't understand the signature + var memoryHistory = (0, _createMemoryHistory2.default)(options); + var createHistory = function createHistory() { + return memoryHistory; + }; + var history = (0, _useQueries2.default)((0, _useBasename2.default)(createHistory))(options); + history.__v2_compatible__ = true; + return history; + } + module.exports = exports['default']; + +/***/ }, +/* 117 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + exports.default = function (createHistory) { + var history = void 0; + if (canUseDOM) history = (0, _useRouterHistory2.default)(createHistory)(); + return history; + }; + + var _useRouterHistory = __webpack_require__(119); + + var _useRouterHistory2 = _interopRequireDefault(_useRouterHistory); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement); + + module.exports = exports['default']; + +/***/ }, +/* 118 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + exports.default = makeStateWithLocation; + + var _deprecateObjectProperties = __webpack_require__(56); + + var _routerWarning = __webpack_require__(16); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + function makeStateWithLocation(state, location) { + if (process.env.NODE_ENV !== 'production' && _deprecateObjectProperties.canUseMembrane) { + var stateWithLocation = _extends({}, state); + + // I don't use deprecateObjectProperties here because I want to keep the + // same code path between development and production, in that we just + // assign extra properties to the copy of the state object in both cases. + + var _loop = function _loop(prop) { + if (!Object.prototype.hasOwnProperty.call(location, prop)) { + return 'continue'; + } + + Object.defineProperty(stateWithLocation, prop, { + get: function get() { + process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, 'Accessing location properties directly from the first argument to `getComponent`, `getComponents`, `getChildRoutes`, and `getIndexRoute` is deprecated. That argument is now the router state (`nextState` or `partialNextState`) rather than the location. To access the location, use `nextState.location` or `partialNextState.location`.') : void 0; + return location[prop]; + } + }); + }; + + for (var prop in location) { + var _ret = _loop(prop); + + if (_ret === 'continue') continue; + } + + return stateWithLocation; + } + + return _extends({}, state, location); + } + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) + +/***/ }, +/* 119 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + exports.default = useRouterHistory; + + var _useQueries = __webpack_require__(58); + + var _useQueries2 = _interopRequireDefault(_useQueries); + + var _useBasename = __webpack_require__(124); + + var _useBasename2 = _interopRequireDefault(_useBasename); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + function useRouterHistory(createHistory) { + return function (options) { + var history = (0, _useQueries2.default)((0, _useBasename2.default)(createHistory))(options); + history.__v2_compatible__ = true; + return history; + }; + } + module.exports = exports['default']; + +/***/ }, +/* 120 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/*eslint-disable no-empty */ @@ -12207,7 +12867,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 108 */ +/* 121 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {'use strict'; @@ -12222,11 +12882,11 @@ var _invariant2 = _interopRequireDefault(_invariant); - var _ExecutionEnvironment = __webpack_require__(55); + var _ExecutionEnvironment = __webpack_require__(57); - var _DOMUtils = __webpack_require__(71); + var _DOMUtils = __webpack_require__(75); - var _createHistory = __webpack_require__(110); + var _createHistory = __webpack_require__(123); var _createHistory2 = _interopRequireDefault(_createHistory); @@ -12253,7 +12913,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 109 */ +/* 122 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {'use strict'; @@ -12272,17 +12932,17 @@ var _invariant2 = _interopRequireDefault(_invariant); - var _Actions = __webpack_require__(40); + var _Actions = __webpack_require__(41); - var _PathUtils = __webpack_require__(36); + var _PathUtils = __webpack_require__(37); - var _ExecutionEnvironment = __webpack_require__(55); + var _ExecutionEnvironment = __webpack_require__(57); - var _DOMUtils = __webpack_require__(71); + var _DOMUtils = __webpack_require__(75); - var _DOMStateStorage = __webpack_require__(107); + var _DOMStateStorage = __webpack_require__(120); - var _createDOMHistory = __webpack_require__(108); + var _createDOMHistory = __webpack_require__(121); var _createDOMHistory2 = _interopRequireDefault(_createDOMHistory); @@ -12505,7 +13165,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 110 */ +/* 123 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {'use strict'; @@ -12520,25 +13180,25 @@ var _warning2 = _interopRequireDefault(_warning); - var _deepEqual = __webpack_require__(203); + var _deepEqual = __webpack_require__(256); var _deepEqual2 = _interopRequireDefault(_deepEqual); - var _PathUtils = __webpack_require__(36); + var _PathUtils = __webpack_require__(37); - var _AsyncUtils = __webpack_require__(208); + var _AsyncUtils = __webpack_require__(252); - var _Actions = __webpack_require__(40); + var _Actions = __webpack_require__(41); - var _createLocation2 = __webpack_require__(210); + var _createLocation2 = __webpack_require__(254); var _createLocation3 = _interopRequireDefault(_createLocation2); - var _runTransitionHook = __webpack_require__(73); + var _runTransitionHook = __webpack_require__(77); var _runTransitionHook2 = _interopRequireDefault(_runTransitionHook); - var _deprecate = __webpack_require__(72); + var _deprecate = __webpack_require__(76); var _deprecate2 = _interopRequireDefault(_deprecate); @@ -12799,7 +13459,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 111 */ +/* 124 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {'use strict'; @@ -12814,15 +13474,15 @@ var _warning2 = _interopRequireDefault(_warning); - var _ExecutionEnvironment = __webpack_require__(55); + var _ExecutionEnvironment = __webpack_require__(57); - var _PathUtils = __webpack_require__(36); + var _PathUtils = __webpack_require__(37); - var _runTransitionHook = __webpack_require__(73); + var _runTransitionHook = __webpack_require__(77); var _runTransitionHook2 = _interopRequireDefault(_runTransitionHook); - var _deprecate = __webpack_require__(72); + var _deprecate = __webpack_require__(76); var _deprecate2 = _interopRequireDefault(_deprecate); @@ -12963,589 +13623,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 112 */ -/***/ function(module, exports) { - - /** - * Copyright 2015, Yahoo! Inc. - * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - 'use strict'; - - var REACT_STATICS = { - childContextTypes: true, - contextTypes: true, - defaultProps: true, - displayName: true, - getDefaultProps: true, - mixins: true, - propTypes: true, - type: true - }; - - var KNOWN_STATICS = { - name: true, - length: true, - prototype: true, - caller: true, - arguments: true, - arity: true - }; - - var isGetOwnPropertySymbolsAvailable = typeof Object.getOwnPropertySymbols === 'function'; - - module.exports = function hoistNonReactStatics(targetComponent, sourceComponent, customStatics) { - if (typeof sourceComponent !== 'string') { // don't hoist over string (html) components - var keys = Object.getOwnPropertyNames(sourceComponent); - - /* istanbul ignore else */ - if (isGetOwnPropertySymbolsAvailable) { - keys = keys.concat(Object.getOwnPropertySymbols(sourceComponent)); - } - - for (var i = 0; i < keys.length; ++i) { - if (!REACT_STATICS[keys[i]] && !KNOWN_STATICS[keys[i]] && (!customStatics || !customStatics[keys[i]])) { - try { - targetComponent[keys[i]] = sourceComponent[keys[i]]; - } catch (error) { - - } - } - } - } - - return targetComponent; - }; - - -/***/ }, -/* 113 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - module.exports = __webpack_require__(259); - - -/***/ }, -/* 114 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - exports.__esModule = true; - - var _react = __webpack_require__(2); - - exports["default"] = _react.PropTypes.shape({ - subscribe: _react.PropTypes.func.isRequired, - dispatch: _react.PropTypes.func.isRequired, - getState: _react.PropTypes.func.isRequired - }); - -/***/ }, -/* 115 */ -/***/ function(module, exports) { - - 'use strict'; - - exports.__esModule = true; - exports["default"] = warning; - /** - * Prints a warning in the console if it exists. - * - * @param {String} message The warning message. - * @returns {void} - */ - function warning(message) { - /* eslint-disable no-console */ - if (typeof console !== 'undefined' && typeof console.error === 'function') { - console.error(message); - } - /* eslint-enable no-console */ - try { - // This error was thrown as a convenience so that you can use this stack - // to find the callsite that caused this warning to fire. - throw new Error(message); - /* eslint-disable no-empty */ - } catch (e) {} - /* eslint-enable no-empty */ - } - -/***/ }, -/* 116 */ -/***/ function(module, exports, __webpack_require__) { - - /* WEBPACK VAR INJECTION */(function(process) {'use strict'; - - exports.__esModule = true; - - var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - - var _react = __webpack_require__(2); - - var _react2 = _interopRequireDefault(_react); - - var _routerWarning = __webpack_require__(16); - - var _routerWarning2 = _interopRequireDefault(_routerWarning); - - var _invariant = __webpack_require__(18); - - var _invariant2 = _interopRequireDefault(_invariant); - - var _PropTypes = __webpack_require__(75); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } - - var _React$PropTypes = _react2.default.PropTypes; - var bool = _React$PropTypes.bool; - var object = _React$PropTypes.object; - var string = _React$PropTypes.string; - var func = _React$PropTypes.func; - var oneOfType = _React$PropTypes.oneOfType; - - - function isLeftClickEvent(event) { - return event.button === 0; - } - - function isModifiedEvent(event) { - return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey); - } - - // TODO: De-duplicate against hasAnyProperties in createTransitionManager. - function isEmptyObject(object) { - for (var p in object) { - if (Object.prototype.hasOwnProperty.call(object, p)) return false; - }return true; - } - - function createLocationDescriptor(to, _ref) { - var query = _ref.query; - var hash = _ref.hash; - var state = _ref.state; - - if (query || hash || state) { - return { pathname: to, query: query, hash: hash, state: state }; - } - - return to; - } - - /** - * A is used to create an element that links to a route. - * When that route is active, the link gets the value of its - * activeClassName prop. - * - * For example, assuming you have the following route: - * - * - * - * You could use the following component to link to that route: - * - * - * - * Links may pass along location state and/or query string parameters - * in the state/query props, respectively. - * - * - */ - var Link = _react2.default.createClass({ - displayName: 'Link', - - - contextTypes: { - router: _PropTypes.routerShape - }, - - propTypes: { - to: oneOfType([string, object]), - query: object, - hash: string, - state: object, - activeStyle: object, - activeClassName: string, - onlyActiveOnIndex: bool.isRequired, - onClick: func, - target: string - }, - - getDefaultProps: function getDefaultProps() { - return { - onlyActiveOnIndex: false, - style: {} - }; - }, - handleClick: function handleClick(event) { - if (this.props.onClick) this.props.onClick(event); - - if (event.defaultPrevented) return; - - !this.context.router ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 's rendered outside of a router context cannot navigate.') : (0, _invariant2.default)(false) : void 0; - - if (isModifiedEvent(event) || !isLeftClickEvent(event)) return; - - // If target prop is set (e.g. to "_blank"), let browser handle link. - /* istanbul ignore if: untestable with Karma */ - if (this.props.target) return; - - event.preventDefault(); - - var _props = this.props; - var to = _props.to; - var query = _props.query; - var hash = _props.hash; - var state = _props.state; - - var location = createLocationDescriptor(to, { query: query, hash: hash, state: state }); - - this.context.router.push(location); - }, - render: function render() { - var _props2 = this.props; - var to = _props2.to; - var query = _props2.query; - var hash = _props2.hash; - var state = _props2.state; - var activeClassName = _props2.activeClassName; - var activeStyle = _props2.activeStyle; - var onlyActiveOnIndex = _props2.onlyActiveOnIndex; - - var props = _objectWithoutProperties(_props2, ['to', 'query', 'hash', 'state', 'activeClassName', 'activeStyle', 'onlyActiveOnIndex']); - - process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(!(query || hash || state), 'the `query`, `hash`, and `state` props on `` are deprecated, use `. http://tiny.cc/router-isActivedeprecated') : void 0; - - // Ignore if rendered outside the context of router, simplifies unit testing. - var router = this.context.router; - - - if (router) { - // If user does not specify a `to` prop, return an empty anchor tag. - if (to == null) { - return _react2.default.createElement('a', props); - } - - var location = createLocationDescriptor(to, { query: query, hash: hash, state: state }); - props.href = router.createHref(location); - - if (activeClassName || activeStyle != null && !isEmptyObject(activeStyle)) { - if (router.isActive(location, onlyActiveOnIndex)) { - if (activeClassName) { - if (props.className) { - props.className += ' ' + activeClassName; - } else { - props.className = activeClassName; - } - } - - if (activeStyle) props.style = _extends({}, props.style, activeStyle); - } - } - } - - return _react2.default.createElement('a', _extends({}, props, { onClick: this.handleClick })); - } - }); - - exports.default = Link; - module.exports = exports['default']; - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) - -/***/ }, -/* 117 */ -/***/ function(module, exports, __webpack_require__) { - - /* WEBPACK VAR INJECTION */(function(process) {'use strict'; - - exports.__esModule = true; - - var _react = __webpack_require__(2); - - var _react2 = _interopRequireDefault(_react); - - var _invariant = __webpack_require__(18); - - var _invariant2 = _interopRequireDefault(_invariant); - - var _RouteUtils = __webpack_require__(31); - - var _PatternUtils = __webpack_require__(41); - - var _InternalPropTypes = __webpack_require__(37); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - var _React$PropTypes = _react2.default.PropTypes; - var string = _React$PropTypes.string; - var object = _React$PropTypes.object; - - /** - * A is used to declare another URL path a client should - * be sent to when they request a given URL. - * - * Redirects are placed alongside routes in the route configuration - * and are traversed in the same manner. - */ - - var Redirect = _react2.default.createClass({ - displayName: 'Redirect', - - - statics: { - createRouteFromReactElement: function createRouteFromReactElement(element) { - var route = (0, _RouteUtils.createRouteFromReactElement)(element); - - if (route.from) route.path = route.from; - - route.onEnter = function (nextState, replace) { - var location = nextState.location; - var params = nextState.params; - - - var pathname = void 0; - if (route.to.charAt(0) === '/') { - pathname = (0, _PatternUtils.formatPattern)(route.to, params); - } else if (!route.to) { - pathname = location.pathname; - } else { - var routeIndex = nextState.routes.indexOf(route); - var parentPattern = Redirect.getRoutePattern(nextState.routes, routeIndex - 1); - var pattern = parentPattern.replace(/\/*$/, '/') + route.to; - pathname = (0, _PatternUtils.formatPattern)(pattern, params); - } - - replace({ - pathname: pathname, - query: route.query || location.query, - state: route.state || location.state - }); - }; - - return route; - }, - getRoutePattern: function getRoutePattern(routes, routeIndex) { - var parentPattern = ''; - - for (var i = routeIndex; i >= 0; i--) { - var route = routes[i]; - var pattern = route.path || ''; - - parentPattern = pattern.replace(/\/*$/, '/') + parentPattern; - - if (pattern.indexOf('/') === 0) break; - } - - return '/' + parentPattern; - } - }, - - propTypes: { - path: string, - from: string, // Alias for path - to: string.isRequired, - query: object, - state: object, - onEnter: _InternalPropTypes.falsy, - children: _InternalPropTypes.falsy - }, - - /* istanbul ignore next: sanity check */ - render: function render() { - true ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, ' elements are for router configuration only and should not be rendered') : (0, _invariant2.default)(false) : void 0; - } - }); - - exports.default = Redirect; - module.exports = exports['default']; - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) - -/***/ }, -/* 118 */ -/***/ function(module, exports, __webpack_require__) { - - /* WEBPACK VAR INJECTION */(function(process) {'use strict'; - - exports.__esModule = true; - - var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - - exports.createRouterObject = createRouterObject; - exports.createRoutingHistory = createRoutingHistory; - - var _deprecateObjectProperties = __webpack_require__(58); - - var _deprecateObjectProperties2 = _interopRequireDefault(_deprecateObjectProperties); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function createRouterObject(history, transitionManager) { - return _extends({}, history, { - setRouteLeaveHook: transitionManager.listenBeforeLeavingRoute, - isActive: transitionManager.isActive - }); - } - - // deprecated - function createRoutingHistory(history, transitionManager) { - history = _extends({}, history, transitionManager); - - if (process.env.NODE_ENV !== 'production') { - history = (0, _deprecateObjectProperties2.default)(history, '`props.history` and `context.history` are deprecated. Please use `context.router`. http://tiny.cc/router-contextchanges'); - } - - return history; - } - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) - -/***/ }, -/* 119 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - exports.__esModule = true; - exports.default = createMemoryHistory; - - var _useQueries = __webpack_require__(56); - - var _useQueries2 = _interopRequireDefault(_useQueries); - - var _useBasename = __webpack_require__(111); - - var _useBasename2 = _interopRequireDefault(_useBasename); - - var _createMemoryHistory = __webpack_require__(211); - - var _createMemoryHistory2 = _interopRequireDefault(_createMemoryHistory); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function createMemoryHistory(options) { - // signatures and type checking differ between `useRoutes` and - // `createMemoryHistory`, have to create `memoryHistory` first because - // `useQueries` doesn't understand the signature - var memoryHistory = (0, _createMemoryHistory2.default)(options); - var createHistory = function createHistory() { - return memoryHistory; - }; - var history = (0, _useQueries2.default)((0, _useBasename2.default)(createHistory))(options); - history.__v2_compatible__ = true; - return history; - } - module.exports = exports['default']; - -/***/ }, -/* 120 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - exports.__esModule = true; - - exports.default = function (createHistory) { - var history = void 0; - if (canUseDOM) history = (0, _useRouterHistory2.default)(createHistory)(); - return history; - }; - - var _useRouterHistory = __webpack_require__(122); - - var _useRouterHistory2 = _interopRequireDefault(_useRouterHistory); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement); - - module.exports = exports['default']; - -/***/ }, -/* 121 */ -/***/ function(module, exports, __webpack_require__) { - - /* WEBPACK VAR INJECTION */(function(process) {'use strict'; - - exports.__esModule = true; - - var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - - exports.default = makeStateWithLocation; - - var _deprecateObjectProperties = __webpack_require__(58); - - var _routerWarning = __webpack_require__(16); - - var _routerWarning2 = _interopRequireDefault(_routerWarning); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function makeStateWithLocation(state, location) { - if (process.env.NODE_ENV !== 'production' && _deprecateObjectProperties.canUseMembrane) { - var stateWithLocation = _extends({}, state); - - // I don't use deprecateObjectProperties here because I want to keep the - // same code path between development and production, in that we just - // assign extra properties to the copy of the state object in both cases. - - var _loop = function _loop(prop) { - if (!Object.prototype.hasOwnProperty.call(location, prop)) { - return 'continue'; - } - - Object.defineProperty(stateWithLocation, prop, { - get: function get() { - process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, 'Accessing location properties directly from the first argument to `getComponent`, `getComponents`, `getChildRoutes`, and `getIndexRoute` is deprecated. That argument is now the router state (`nextState` or `partialNextState`) rather than the location. To access the location, use `nextState.location` or `partialNextState.location`.') : void 0; - return location[prop]; - } - }); - }; - - for (var prop in location) { - var _ret = _loop(prop); - - if (_ret === 'continue') continue; - } - - return stateWithLocation; - } - - return _extends({}, state, location); - } - module.exports = exports['default']; - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) - -/***/ }, -/* 122 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - exports.__esModule = true; - exports.default = useRouterHistory; - - var _useQueries = __webpack_require__(56); - - var _useQueries2 = _interopRequireDefault(_useQueries); - - var _useBasename = __webpack_require__(111); - - var _useBasename2 = _interopRequireDefault(_useBasename); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function useRouterHistory(createHistory) { - return function (options) { - var history = (0, _useQueries2.default)((0, _useBasename2.default)(createHistory))(options); - history.__v2_compatible__ = true; - return history; - }; - } - module.exports = exports['default']; - -/***/ }, -/* 123 */ +/* 125 */ /***/ function(module, exports) { /** @@ -13698,7 +13776,7 @@ module.exports = CSSProperty; /***/ }, -/* 124 */ +/* 126 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -13715,7 +13793,7 @@ 'use strict'; var _prodInvariant = __webpack_require__(6), - _assign = __webpack_require__(8); + _assign = __webpack_require__(9); var PooledClass = __webpack_require__(32); @@ -13810,7 +13888,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 125 */ +/* 127 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -13830,7 +13908,7 @@ var ReactDOMComponentTree = __webpack_require__(13); var ReactInstrumentation = __webpack_require__(19); - var quoteAttributeValueForBrowser = __webpack_require__(312); + var quoteAttributeValueForBrowser = __webpack_require__(330); var warning = __webpack_require__(4); var VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + DOMProperty.ATTRIBUTE_NAME_START_CHAR + '][' + DOMProperty.ATTRIBUTE_NAME_CHAR + ']*$'); @@ -14037,7 +14115,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 126 */ +/* 128 */ /***/ function(module, exports, __webpack_require__) { /** @@ -14057,7 +14135,7 @@ var ReactElement = __webpack_require__(21); var emptyFunction = __webpack_require__(22); - var traverseAllChildren = __webpack_require__(97); + var traverseAllChildren = __webpack_require__(98); var twoArgumentPooler = PooledClass.twoArgumentPooler; var fourArgumentPooler = PooledClass.fourArgumentPooler; @@ -14233,7 +14311,7 @@ module.exports = ReactChildren; /***/ }, -/* 127 */ +/* 129 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -14250,13 +14328,13 @@ 'use strict'; var _prodInvariant = __webpack_require__(6), - _assign = __webpack_require__(8); + _assign = __webpack_require__(9); - var ReactComponent = __webpack_require__(82); + var ReactComponent = __webpack_require__(83); var ReactElement = __webpack_require__(21); var ReactPropTypeLocations = __webpack_require__(62); - var ReactPropTypeLocationNames = __webpack_require__(86); - var ReactNoopUpdateQueue = __webpack_require__(85); + var ReactPropTypeLocationNames = __webpack_require__(87); + var ReactNoopUpdateQueue = __webpack_require__(86); var emptyObject = __webpack_require__(51); var invariant = __webpack_require__(3); @@ -14971,7 +15049,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 128 */ +/* 130 */ /***/ function(module, exports) { /** @@ -14994,7 +15072,7 @@ module.exports = ReactDOMComponentFlags; /***/ }, -/* 129 */ +/* 131 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -15010,10 +15088,10 @@ 'use strict'; - var _assign = __webpack_require__(8); + var _assign = __webpack_require__(9); var DisabledInputUtils = __webpack_require__(59); - var LinkedValueUtils = __webpack_require__(81); + var LinkedValueUtils = __webpack_require__(82); var ReactDOMComponentTree = __webpack_require__(13); var ReactUpdates = __webpack_require__(25); @@ -15201,7 +15279,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 130 */ +/* 132 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -15229,10 +15307,10 @@ var ReactElement = __webpack_require__(21); var ReactPropTypeLocations = __webpack_require__(62); - var checkReactTypeSpec = __webpack_require__(142); + var checkReactTypeSpec = __webpack_require__(144); - var canDefineProperty = __webpack_require__(89); - var getIteratorFn = __webpack_require__(94); + var canDefineProperty = __webpack_require__(90); + var getIteratorFn = __webpack_require__(95); var warning = __webpack_require__(4); function getDeclarationErrorAddendum() { @@ -15435,7 +15513,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 131 */ +/* 133 */ /***/ function(module, exports) { /** @@ -15470,7 +15548,7 @@ module.exports = ReactEmptyComponent; /***/ }, -/* 132 */ +/* 134 */ /***/ function(module, exports) { /** @@ -15497,7 +15575,7 @@ module.exports = ReactFeatureFlags; /***/ }, -/* 133 */ +/* 135 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -15514,7 +15592,7 @@ 'use strict'; var _prodInvariant = __webpack_require__(6), - _assign = __webpack_require__(8); + _assign = __webpack_require__(9); var invariant = __webpack_require__(3); @@ -15579,7 +15657,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 134 */ +/* 136 */ /***/ function(module, exports, __webpack_require__) { /** @@ -15595,11 +15673,11 @@ 'use strict'; - var ReactDOMSelection = __webpack_require__(270); + var ReactDOMSelection = __webpack_require__(288); - var containsNode = __webpack_require__(316); - var focusNode = __webpack_require__(150); - var getActiveElement = __webpack_require__(151); + var containsNode = __webpack_require__(334); + var focusNode = __webpack_require__(152); + var getActiveElement = __webpack_require__(153); function isInDocument(node) { return containsNode(document.documentElement, node); @@ -15708,7 +15786,7 @@ module.exports = ReactInputSelection; /***/ }, -/* 135 */ +/* 137 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -15731,22 +15809,22 @@ var ReactBrowserEventEmitter = __webpack_require__(61); var ReactCurrentOwner = __webpack_require__(28); var ReactDOMComponentTree = __webpack_require__(13); - var ReactDOMContainerInfo = __webpack_require__(262); - var ReactDOMFeatureFlags = __webpack_require__(265); + var ReactDOMContainerInfo = __webpack_require__(280); + var ReactDOMFeatureFlags = __webpack_require__(283); var ReactElement = __webpack_require__(21); - var ReactFeatureFlags = __webpack_require__(132); + var ReactFeatureFlags = __webpack_require__(134); var ReactInstanceMap = __webpack_require__(48); var ReactInstrumentation = __webpack_require__(19); - var ReactMarkupChecksum = __webpack_require__(283); + var ReactMarkupChecksum = __webpack_require__(301); var ReactReconciler = __webpack_require__(43); - var ReactUpdateQueue = __webpack_require__(88); + var ReactUpdateQueue = __webpack_require__(89); var ReactUpdates = __webpack_require__(25); var emptyObject = __webpack_require__(51); - var instantiateReactComponent = __webpack_require__(146); + var instantiateReactComponent = __webpack_require__(148); var invariant = __webpack_require__(3); var setInnerHTML = __webpack_require__(65); - var shouldUpdateReactComponent = __webpack_require__(96); + var shouldUpdateReactComponent = __webpack_require__(97); var warning = __webpack_require__(4); var ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME; @@ -16248,7 +16326,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 136 */ +/* 138 */ /***/ function(module, exports, __webpack_require__) { /** @@ -16285,7 +16363,7 @@ module.exports = ReactMultiChildUpdateTypes; /***/ }, -/* 137 */ +/* 139 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -16331,7 +16409,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 138 */ +/* 140 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -16348,11 +16426,11 @@ 'use strict'; var ReactElement = __webpack_require__(21); - var ReactPropTypeLocationNames = __webpack_require__(86); - var ReactPropTypesSecret = __webpack_require__(87); + var ReactPropTypeLocationNames = __webpack_require__(87); + var ReactPropTypesSecret = __webpack_require__(88); var emptyFunction = __webpack_require__(22); - var getIteratorFn = __webpack_require__(94); + var getIteratorFn = __webpack_require__(95); var warning = __webpack_require__(4); /** @@ -16768,7 +16846,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 139 */ +/* 141 */ /***/ function(module, exports) { /** @@ -16787,7 +16865,7 @@ module.exports = '15.3.2'; /***/ }, -/* 140 */ +/* 142 */ /***/ function(module, exports) { /** @@ -16819,7 +16897,7 @@ module.exports = ViewportMetrics; /***/ }, -/* 141 */ +/* 143 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -16883,7 +16961,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 142 */ +/* 144 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -16901,8 +16979,8 @@ var _prodInvariant = __webpack_require__(6); - var ReactPropTypeLocationNames = __webpack_require__(86); - var ReactPropTypesSecret = __webpack_require__(87); + var ReactPropTypeLocationNames = __webpack_require__(87); + var ReactPropTypesSecret = __webpack_require__(88); var invariant = __webpack_require__(3); var warning = __webpack_require__(4); @@ -16976,7 +17054,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 143 */ +/* 145 */ /***/ function(module, exports) { /** @@ -17012,7 +17090,7 @@ module.exports = forEachAccumulated; /***/ }, -/* 144 */ +/* 146 */ /***/ function(module, exports, __webpack_require__) { /** @@ -17028,7 +17106,7 @@ 'use strict'; - var ReactNodeTypes = __webpack_require__(137); + var ReactNodeTypes = __webpack_require__(139); function getHostComponentFromComposite(inst) { var type; @@ -17047,7 +17125,7 @@ module.exports = getHostComponentFromComposite; /***/ }, -/* 145 */ +/* 147 */ /***/ function(module, exports, __webpack_require__) { /** @@ -17085,7 +17163,7 @@ module.exports = getTextContentAccessor; /***/ }, -/* 146 */ +/* 148 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -17102,11 +17180,11 @@ 'use strict'; var _prodInvariant = __webpack_require__(6), - _assign = __webpack_require__(8); + _assign = __webpack_require__(9); - var ReactCompositeComponent = __webpack_require__(258); - var ReactEmptyComponent = __webpack_require__(131); - var ReactHostComponent = __webpack_require__(133); + var ReactCompositeComponent = __webpack_require__(276); + var ReactEmptyComponent = __webpack_require__(133); + var ReactHostComponent = __webpack_require__(135); var invariant = __webpack_require__(3); var warning = __webpack_require__(4); @@ -17210,7 +17288,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 147 */ +/* 149 */ /***/ function(module, exports) { /** @@ -17266,7 +17344,7 @@ module.exports = isTextInputElement; /***/ }, -/* 148 */ +/* 150 */ /***/ function(module, exports, __webpack_require__) { /** @@ -17319,7 +17397,7 @@ module.exports = setTextContent; /***/ }, -/* 149 */ +/* 151 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {'use strict'; @@ -17408,7 +17486,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 150 */ +/* 152 */ /***/ function(module, exports) { /** @@ -17439,7 +17517,7 @@ module.exports = focusNode; /***/ }, -/* 151 */ +/* 153 */ /***/ function(module, exports) { 'use strict'; @@ -17478,7 +17556,7 @@ module.exports = getActiveElement; /***/ }, -/* 152 */ +/* 154 */ /***/ function(module, exports) { "use strict"; @@ -17521,7 +17599,7 @@ } /***/ }, -/* 153 */ +/* 155 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -17530,11 +17608,11 @@ exports.ActionTypes = undefined; exports['default'] = createStore; - var _isPlainObject = __webpack_require__(155); + var _isPlainObject = __webpack_require__(157); var _isPlainObject2 = _interopRequireDefault(_isPlainObject); - var _symbolObservable = __webpack_require__(336); + var _symbolObservable = __webpack_require__(353); var _symbolObservable2 = _interopRequireDefault(_symbolObservable); @@ -17787,7 +17865,7 @@ } /***/ }, -/* 154 */ +/* 156 */ /***/ function(module, exports) { 'use strict'; @@ -17816,144 +17894,10 @@ /* eslint-enable no-empty */ } -/***/ }, -/* 155 */ -[381, 332, 334], -/* 156 */ -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ - /** @author Brian Cavalier */ - /** @author John Hann */ - - (function(define) { 'use strict'; - !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { - - /** - * Custom error type for promises rejected by promise.timeout - * @param {string} message - * @constructor - */ - function TimeoutError (message) { - Error.call(this); - this.message = message; - this.name = TimeoutError.name; - if (typeof Error.captureStackTrace === 'function') { - Error.captureStackTrace(this, TimeoutError); - } - } - - TimeoutError.prototype = Object.create(Error.prototype); - TimeoutError.prototype.constructor = TimeoutError; - - return TimeoutError; - }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - }(__webpack_require__(14))); - /***/ }, /* 157 */ -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ - /** @author Brian Cavalier */ - /** @author John Hann */ - - (function(define) { 'use strict'; - !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { - - makeApply.tryCatchResolve = tryCatchResolve; - - return makeApply; - - function makeApply(Promise, call) { - if(arguments.length < 2) { - call = tryCatchResolve; - } - - return apply; - - function apply(f, thisArg, args) { - var p = Promise._defer(); - var l = args.length; - var params = new Array(l); - callAndResolve({ f:f, thisArg:thisArg, args:args, params:params, i:l-1, call:call }, p._handler); - - return p; - } - - function callAndResolve(c, h) { - if(c.i < 0) { - return call(c.f, c.thisArg, c.params, h); - } - - var handler = Promise._handler(c.args[c.i]); - handler.fold(callAndResolveNext, c, void 0, h); - } - - function callAndResolveNext(c, x, h) { - c.params[c.i] = x; - c.i -= 1; - callAndResolve(c, h); - } - } - - function tryCatchResolve(f, thisArg, args, resolver) { - try { - resolver.resolve(f.apply(thisArg, args)); - } catch(e) { - resolver.reject(e); - } - } - - }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - }(__webpack_require__(14))); - - - - -/***/ }, +[382, 350, 352], /* 158 */ -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ - /** @author Brian Cavalier */ - /** @author John Hann */ - - (function(define) { 'use strict'; - !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { - - return { - pending: toPendingState, - fulfilled: toFulfilledState, - rejected: toRejectedState, - inspect: inspect - }; - - function toPendingState() { - return { state: 'pending' }; - } - - function toRejectedState(e) { - return { state: 'rejected', reason: e }; - } - - function toFulfilledState(x) { - return { state: 'fulfilled', value: x }; - } - - function inspect(handler) { - var state = handler.state(); - return state === 0 ? toPendingState() - : state > 0 ? toFulfilledState(handler.value) - : toRejectedState(handler.value); - } - - }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - }(__webpack_require__(14))); - - -/***/ }, -/* 159 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -17964,43 +17908,43 @@ var _redux = __webpack_require__(5); - var _reducer = __webpack_require__(181); + var _reducer = __webpack_require__(180); var _reducer2 = _interopRequireDefault(_reducer); - var _reducer3 = __webpack_require__(178); + var _reducer3 = __webpack_require__(177); var _reducer4 = _interopRequireDefault(_reducer3); - var _reducer5 = __webpack_require__(176); + var _reducer5 = __webpack_require__(175); var _reducer6 = _interopRequireDefault(_reducer5); - var _reducer7 = __webpack_require__(173); + var _reducer7 = __webpack_require__(172); var _reducer8 = _interopRequireDefault(_reducer7); - var _reducer9 = __webpack_require__(180); + var _reducer9 = __webpack_require__(179); var _reducer10 = _interopRequireDefault(_reducer9); - var _reduxThunk = __webpack_require__(328); + var _reduxThunk = __webpack_require__(346); var _reduxThunk2 = _interopRequireDefault(_reduxThunk); - var _middleware = __webpack_require__(177); + var _middleware = __webpack_require__(176); var _middleware2 = _interopRequireDefault(_middleware); - var _middleware3 = __webpack_require__(175); + var _middleware3 = __webpack_require__(174); var _middleware4 = _interopRequireDefault(_middleware3); - var _middleware5 = __webpack_require__(179); + var _middleware5 = __webpack_require__(178); var _middleware6 = _interopRequireDefault(_middleware5); - var _middleware7 = __webpack_require__(174); + var _middleware7 = __webpack_require__(173); var _middleware8 = _interopRequireDefault(_middleware7); @@ -18085,7 +18029,7 @@ exports.default = store; /***/ }, -/* 160 */ +/* 159 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -18100,7 +18044,7 @@ var _react2 = _interopRequireDefault(_react); - var _reactRouter = __webpack_require__(9); + var _reactRouter = __webpack_require__(8); var _Thumbnail = __webpack_require__(26); @@ -18154,7 +18098,7 @@ exports.default = ArtistList; /***/ }, -/* 161 */ +/* 160 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -18213,7 +18157,7 @@ exports.default = CategoryGrid; /***/ }, -/* 162 */ +/* 161 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -18326,7 +18270,7 @@ exports.default = ConfirmationButton; /***/ }, -/* 163 */ +/* 162 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -18529,7 +18473,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(ContextMenu); /***/ }, -/* 164 */ +/* 163 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -18548,7 +18492,7 @@ var _redux = __webpack_require__(5); - var _reactRouter = __webpack_require__(9); + var _reactRouter = __webpack_require__(8); var _reactFontawesome = __webpack_require__(12); @@ -18794,7 +18738,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(FullPlayer); /***/ }, -/* 165 */ +/* 164 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -18813,7 +18757,7 @@ var _redux = __webpack_require__(5); - var _reactRouter = __webpack_require__(9); + var _reactRouter = __webpack_require__(8); var _reactFontawesome = __webpack_require__(12); @@ -18823,7 +18767,7 @@ var _ProgressSlider2 = _interopRequireDefault(_ProgressSlider); - var _VolumeControl = __webpack_require__(172); + var _VolumeControl = __webpack_require__(171); var _VolumeControl2 = _interopRequireDefault(_VolumeControl); @@ -18945,7 +18889,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(MiniPlayer); /***/ }, -/* 166 */ +/* 165 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -18962,7 +18906,7 @@ var _reactRedux = __webpack_require__(7); - var _reactRouter = __webpack_require__(9); + var _reactRouter = __webpack_require__(8); var _redux = __webpack_require__(5); @@ -19069,7 +19013,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(PusherConnectionList); /***/ }, -/* 167 */ +/* 166 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -19086,7 +19030,7 @@ var _reactRedux = __webpack_require__(7); - var _reactRouter = __webpack_require__(9); + var _reactRouter = __webpack_require__(8); var _redux = __webpack_require__(5); @@ -19171,7 +19115,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(SearchForm); /***/ }, -/* 168 */ +/* 167 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -19190,9 +19134,9 @@ var _redux = __webpack_require__(5); - var _reactRouter = __webpack_require__(9); + var _reactRouter = __webpack_require__(8); - var _MiniPlayer = __webpack_require__(165); + var _MiniPlayer = __webpack_require__(164); var _MiniPlayer2 = _interopRequireDefault(_MiniPlayer); @@ -19204,7 +19148,7 @@ var _Thumbnail2 = _interopRequireDefault(_Thumbnail); - var _SearchForm = __webpack_require__(167); + var _SearchForm = __webpack_require__(166); var _SearchForm2 = _interopRequireDefault(_SearchForm); @@ -19373,7 +19317,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(Sidebar); /***/ }, -/* 169 */ +/* 168 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -19390,7 +19334,7 @@ var _reactRedux = __webpack_require__(7); - var _reactRouter = __webpack_require__(9); + var _reactRouter = __webpack_require__(8); var _redux = __webpack_require__(5); @@ -19587,7 +19531,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(SpotifyAuthenticationFrame); /***/ }, -/* 170 */ +/* 169 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -19666,7 +19610,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps)(URISchemesList); /***/ }, -/* 171 */ +/* 170 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -19683,7 +19627,7 @@ var _reactRedux = __webpack_require__(7); - var _reactRouter = __webpack_require__(9); + var _reactRouter = __webpack_require__(8); var _redux = __webpack_require__(5); @@ -19782,7 +19726,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(VersionManager); /***/ }, -/* 172 */ +/* 171 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -19801,7 +19745,7 @@ var _redux = __webpack_require__(5); - var _reactRouter = __webpack_require__(9); + var _reactRouter = __webpack_require__(8); var _reactFontawesome = __webpack_require__(12); @@ -19894,7 +19838,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(VolumeControl); /***/ }, -/* 173 */ +/* 172 */ /***/ function(module, exports) { 'use strict'; @@ -19921,7 +19865,7 @@ } /***/ }, -/* 174 */ +/* 173 */ /***/ function(module, exports) { 'use strict'; @@ -20047,7 +19991,7 @@ exports.default = localstorageMiddleware; /***/ }, -/* 175 */ +/* 174 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -20056,7 +20000,7 @@ value: true }); - var _mopidy = __webpack_require__(215); + var _mopidy = __webpack_require__(220); var _mopidy2 = _interopRequireDefault(_mopidy); @@ -20422,7 +20366,7 @@ exports.default = MopidyMiddleware; /***/ }, -/* 176 */ +/* 175 */ /***/ function(module, exports) { 'use strict'; @@ -20535,7 +20479,7 @@ } /***/ }, -/* 177 */ +/* 176 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -20639,7 +20583,7 @@ exports.default = PusherMiddleware; /***/ }, -/* 178 */ +/* 177 */ /***/ function(module, exports) { 'use strict'; @@ -20736,7 +20680,7 @@ } /***/ }, -/* 179 */ +/* 178 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -20786,7 +20730,7 @@ exports.default = SpotifyMiddleware; /***/ }, -/* 180 */ +/* 179 */ /***/ function(module, exports) { 'use strict'; @@ -20952,7 +20896,7 @@ } /***/ }, -/* 181 */ +/* 180 */ /***/ function(module, exports) { 'use strict'; @@ -20995,23 +20939,31 @@ * Playlists/albums/etc **/ - case 'SPOTIFY_ALBUM_LOADED': case 'MOPIDY_ALBUM_LOADED': return Object.assign({}, ui, { album: action.data }); case 'LASTFM_ALBUM_LOADED': - //if( !action.data.image ) return ui - var album = Object.assign(ui.album, { images: action.data.image }); + if (!action.data.image) return ui; + + var album = Object.assign({}, ui.album, { images: action.data.image }); + return Object.assign({}, ui, { album: album }); + + case 'SPOTIFY_ALBUM_LOADED': + if (!action.data) return Object.assign({}, ui, { album: false }); + + console.log(action.data); + var album = Object.assign({}, { images: [] }, action.data, { + tracks: action.data.tracks.items, + tracks_total: action.data.tracks.total, + tracks_more: action.data.tracks.next + }); return Object.assign({}, ui, { album: album }); case 'SPOTIFY_ALBUM_LOADED_MORE': - var album = ui.album; - Object.assign(album, { tracks: { - href: action.data.href, - next: action.data.next, - previous: action.data.previous, - items: [].concat(_toConsumableArray(ui.album.tracks.items), _toConsumableArray(action.data.items)) - } }); + var album = Object.assign({}, ui.album, { + tracks: [].concat(_toConsumableArray(ui.album.tracks), _toConsumableArray(action.data.items)), + tracks_more: action.data.next + }); return Object.assign({}, ui, { album: album }); /** @@ -21123,7 +21075,7 @@ } /***/ }, -/* 182 */ +/* 181 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -21211,7 +21163,6 @@ }, { key: 'componentWillReceiveProps', value: function componentWillReceiveProps(nextProps) { - console.log('componentWillReceiveProps'); // if our URI has changed, fetch new album if (nextProps.params.uri != this.props.params.uri) { @@ -21243,14 +21194,8 @@ }, { key: 'loadMore', value: function loadMore() { - if (!this.props.album.tracks.next) return; - this.props.spotifyActions.getURL(this.props.album.tracks.next, 'SPOTIFY_ALBUM_LOADED_MORE'); - } - }, { - key: 'renderThumbnail', - value: function renderThumbnail() { - if (!this.props.album.images) return _react2.default.createElement(_Thumbnail2.default, { size: 'large', images: [] }); - return _react2.default.createElement(_Thumbnail2.default, { size: 'large', images: this.props.album.images }); + if (!this.props.album.tracks_more) return; + this.props.spotifyActions.getURL(this.props.album.tracks_more, 'SPOTIFY_ALBUM_LOADED_MORE'); } }, { key: 'render', @@ -21265,7 +21210,7 @@ _react2.default.createElement( 'div', { className: 'intro' }, - this.renderThumbnail(), + _react2.default.createElement(_Thumbnail2.default, { size: 'large', images: this.props.album.images }), _react2.default.createElement(_ArtistGrid2.default, { artists: this.props.album.artists }), _react2.default.createElement( 'ul', @@ -21273,9 +21218,9 @@ _react2.default.createElement( 'li', null, - this.props.album.tracks.total, + this.props.album.tracks_total, ' tracks, ', - _react2.default.createElement(_Dater2.default, { type: 'total-time', data: this.props.album.tracks.items }) + _react2.default.createElement(_Dater2.default, { type: 'total-time', data: this.props.album.tracks }) ), this.props.album.release_date ? _react2.default.createElement( 'li', @@ -21313,7 +21258,7 @@ _react2.default.createElement( 'section', { className: 'list-wrapper' }, - _react2.default.createElement(_TrackList2.default, { tracks: this.props.album.tracks.items }), + this.props.album.tracks ? _react2.default.createElement(_TrackList2.default, { tracks: this.props.album.tracks }) : null, _react2.default.createElement(_LazyLoadListener2.default, { loadMore: function loadMore() { return _this2.loadMore(); } }) @@ -21349,7 +21294,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(Album); /***/ }, -/* 183 */ +/* 182 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -21364,21 +21309,21 @@ var _react2 = _interopRequireDefault(_react); - var _reactDom = __webpack_require__(113); + var _reactDom = __webpack_require__(110); var _reactDom2 = _interopRequireDefault(_reactDom); var _redux = __webpack_require__(5); - var _reactRouter = __webpack_require__(9); + var _reactRouter = __webpack_require__(8); var _reactRedux = __webpack_require__(7); - var _Sidebar = __webpack_require__(168); + var _Sidebar = __webpack_require__(167); var _Sidebar2 = _interopRequireDefault(_Sidebar); - var _ContextMenu = __webpack_require__(163); + var _ContextMenu = __webpack_require__(162); var _ContextMenu2 = _interopRequireDefault(_ContextMenu); @@ -21521,7 +21466,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(App); /***/ }, -/* 184 */ +/* 183 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -21568,7 +21513,7 @@ var _Parallax2 = _interopRequireDefault(_Parallax); - var _ArtistList = __webpack_require__(160); + var _ArtistList = __webpack_require__(159); var _ArtistList2 = _interopRequireDefault(_ArtistList); @@ -21810,7 +21755,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(Artist); /***/ }, -/* 185 */ +/* 184 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -22009,7 +21954,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(Playlist); /***/ }, -/* 186 */ +/* 185 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -22040,7 +21985,7 @@ var _Track2 = _interopRequireDefault(_Track); - var _FullPlayer = __webpack_require__(164); + var _FullPlayer = __webpack_require__(163); var _FullPlayer2 = _interopRequireDefault(_FullPlayer); @@ -22162,7 +22107,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(Queue); /***/ }, -/* 187 */ +/* 186 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -22179,7 +22124,7 @@ var _reactRedux = __webpack_require__(7); - var _reactRouter = __webpack_require__(9); + var _reactRouter = __webpack_require__(8); var _redux = __webpack_require__(5); @@ -22462,7 +22407,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(Search); /***/ }, -/* 188 */ +/* 187 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -22485,23 +22430,23 @@ var _reactFontawesome2 = _interopRequireDefault(_reactFontawesome); - var _SpotifyAuthenticationFrame = __webpack_require__(169); + var _SpotifyAuthenticationFrame = __webpack_require__(168); var _SpotifyAuthenticationFrame2 = _interopRequireDefault(_SpotifyAuthenticationFrame); - var _ConfirmationButton = __webpack_require__(162); + var _ConfirmationButton = __webpack_require__(161); var _ConfirmationButton2 = _interopRequireDefault(_ConfirmationButton); - var _PusherConnectionList = __webpack_require__(166); + var _PusherConnectionList = __webpack_require__(165); var _PusherConnectionList2 = _interopRequireDefault(_PusherConnectionList); - var _URISchemesList = __webpack_require__(170); + var _URISchemesList = __webpack_require__(169); var _URISchemesList2 = _interopRequireDefault(_URISchemesList); - var _VersionManager = __webpack_require__(171); + var _VersionManager = __webpack_require__(170); var _VersionManager2 = _interopRequireDefault(_VersionManager); @@ -22915,7 +22860,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(Settings); /***/ }, -/* 189 */ +/* 188 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -23020,7 +22965,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(Discover); /***/ }, -/* 190 */ +/* 189 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -23043,7 +22988,7 @@ var _Header2 = _interopRequireDefault(_Header); - var _CategoryGrid = __webpack_require__(161); + var _CategoryGrid = __webpack_require__(160); var _CategoryGrid2 = _interopRequireDefault(_CategoryGrid); @@ -23116,7 +23061,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(DiscoverCategories); /***/ }, -/* 191 */ +/* 190 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -23235,7 +23180,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(DiscoverCategory); /***/ }, -/* 192 */ +/* 191 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -23331,7 +23276,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(DiscoverFeatured); /***/ }, -/* 193 */ +/* 192 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -23444,7 +23389,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(DiscoverNewReleases); /***/ }, -/* 194 */ +/* 193 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -23463,7 +23408,7 @@ var _redux = __webpack_require__(5); - var _reactRouter = __webpack_require__(9); + var _reactRouter = __webpack_require__(8); var _AlbumGrid = __webpack_require__(52); @@ -23562,7 +23507,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(LibraryAlbums); /***/ }, -/* 195 */ +/* 194 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -23581,7 +23526,7 @@ var _redux = __webpack_require__(5); - var _reactRouter = __webpack_require__(9); + var _reactRouter = __webpack_require__(8); var _LazyLoadListener = __webpack_require__(30); @@ -23683,7 +23628,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(LibraryArtists); /***/ }, -/* 196 */ +/* 195 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -23702,7 +23647,7 @@ var _redux = __webpack_require__(5); - var _reactRouter = __webpack_require__(9); + var _reactRouter = __webpack_require__(8); var _Header = __webpack_require__(15); @@ -23772,7 +23717,7 @@ exports.default = LibraryLocal; /***/ }, -/* 197 */ +/* 196 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -23891,7 +23836,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(LibraryLocalAlbums); /***/ }, -/* 198 */ +/* 197 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -24010,7 +23955,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(LibraryLocalArtists); /***/ }, -/* 199 */ +/* 198 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -24029,7 +23974,7 @@ var _redux = __webpack_require__(5); - var _reactRouter = __webpack_require__(9); + var _reactRouter = __webpack_require__(8); var _Header = __webpack_require__(15); @@ -24138,7 +24083,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(LibraryLocalDirectory); /***/ }, -/* 200 */ +/* 199 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -24157,7 +24102,7 @@ var _redux = __webpack_require__(5); - var _reactRouter = __webpack_require__(9); + var _reactRouter = __webpack_require__(8); var _List = __webpack_require__(53); @@ -24286,7 +24231,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(LibraryPlaylists); /***/ }, -/* 201 */ +/* 200 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -24305,7 +24250,7 @@ var _redux = __webpack_require__(5); - var _reactRouter = __webpack_require__(9); + var _reactRouter = __webpack_require__(8); var _TrackList = __webpack_require__(34); @@ -24389,879 +24334,20 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(LibraryTracks); /***/ }, -/* 202 */ +/* 201 */ /***/ function(module, exports, __webpack_require__) { - var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;(("function" === "function" && __webpack_require__(362) && function (m) { !(__WEBPACK_AMD_DEFINE_FACTORY__ = (m), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); }) || - (typeof module === "object" && function (m) { module.exports = m(); }) || - function (m) { this.bane = m(); } - )(function () { - "use strict"; - var slice = Array.prototype.slice; - - function handleError(event, error, errbacks) { - var i, l = errbacks.length; - if (l > 0) { - for (i = 0; i < l; ++i) { errbacks[i](event, error); } - return; - } - setTimeout(function () { - error.message = event + " listener threw error: " + error.message; - throw error; - }, 0); - } - - function assertFunction(fn) { - if (typeof fn !== "function") { - throw new TypeError("Listener is not function"); - } - return fn; - } - - function supervisors(object) { - if (!object.supervisors) { object.supervisors = []; } - return object.supervisors; - } - - function listeners(object, event) { - if (!object.listeners) { object.listeners = {}; } - if (event && !object.listeners[event]) { object.listeners[event] = []; } - return event ? object.listeners[event] : object.listeners; - } - - function errbacks(object) { - if (!object.errbacks) { object.errbacks = []; } - return object.errbacks; - } - - /** - * @signature var emitter = bane.createEmitter([object]); - * - * Create a new event emitter. If an object is passed, it will be modified - * by adding the event emitter methods (see below). - */ - function createEventEmitter(object) { - object = object || {}; - - function notifyListener(event, listener, args) { - try { - listener.listener.apply(listener.thisp || object, args); - } catch (e) { - handleError(event, e, errbacks(object)); - } - } - - object.on = function (event, listener, thisp) { - if (typeof event === "function") { - return supervisors(this).push({ - listener: event, - thisp: listener - }); - } - listeners(this, event).push({ - listener: assertFunction(listener), - thisp: thisp - }); - }; - - object.off = function (event, listener) { - var fns, events, i, l; - if (!event) { - fns = supervisors(this); - fns.splice(0, fns.length); - - events = listeners(this); - for (i in events) { - if (events.hasOwnProperty(i)) { - fns = listeners(this, i); - fns.splice(0, fns.length); - } - } - - fns = errbacks(this); - fns.splice(0, fns.length); - - return; - } - if (typeof event === "function") { - fns = supervisors(this); - listener = event; - } else { - fns = listeners(this, event); - } - if (!listener) { - fns.splice(0, fns.length); - return; - } - for (i = 0, l = fns.length; i < l; ++i) { - if (fns[i].listener === listener) { - fns.splice(i, 1); - return; - } - } - }; - - object.once = function (event, listener, thisp) { - var wrapper = function () { - object.off(event, wrapper); - listener.apply(this, arguments); - }; - - object.on(event, wrapper, thisp); - }; - - object.bind = function (object, events) { - var prop, i, l; - if (!events) { - for (prop in object) { - if (typeof object[prop] === "function") { - this.on(prop, object[prop], object); - } - } - } else { - for (i = 0, l = events.length; i < l; ++i) { - if (typeof object[events[i]] === "function") { - this.on(events[i], object[events[i]], object); - } else { - throw new Error("No such method " + events[i]); - } - } - } - return object; - }; - - object.emit = function (event) { - var toNotify = supervisors(this); - var args = slice.call(arguments), i, l; - - for (i = 0, l = toNotify.length; i < l; ++i) { - notifyListener(event, toNotify[i], args); - } - - toNotify = listeners(this, event).slice(); - args = slice.call(arguments, 1); - for (i = 0, l = toNotify.length; i < l; ++i) { - notifyListener(event, toNotify[i], args); - } - }; - - object.errback = function (listener) { - if (!this.errbacks) { this.errbacks = []; } - this.errbacks.push(assertFunction(listener)); - }; - - return object; - } - - return { - createEventEmitter: createEventEmitter, - aggregate: function (emitters) { - var aggregate = createEventEmitter(); - emitters.forEach(function (emitter) { - emitter.on(function (event, data) { - aggregate.emit(event, data); - }); - }); - return aggregate; - } - }; - }); - - -/***/ }, -/* 203 */ -/***/ function(module, exports, __webpack_require__) { - - var pSlice = Array.prototype.slice; - var objectKeys = __webpack_require__(205); - var isArguments = __webpack_require__(204); - - var deepEqual = module.exports = function (actual, expected, opts) { - if (!opts) opts = {}; - // 7.1. All identical values are equivalent, as determined by ===. - if (actual === expected) { - return true; - - } else if (actual instanceof Date && expected instanceof Date) { - return actual.getTime() === expected.getTime(); - - // 7.3. Other pairs that do not both pass typeof value == 'object', - // equivalence is determined by ==. - } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') { - return opts.strict ? actual === expected : actual == expected; - - // 7.4. For all other Object pairs, including Array objects, equivalence is - // determined by having the same number of owned properties (as verified - // with Object.prototype.hasOwnProperty.call), the same set of keys - // (although not necessarily the same order), equivalent values for every - // corresponding key, and an identical 'prototype' property. Note: this - // accounts for both named and indexed properties on Arrays. - } else { - return objEquiv(actual, expected, opts); - } - } - - function isUndefinedOrNull(value) { - return value === null || value === undefined; - } - - function isBuffer (x) { - if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false; - if (typeof x.copy !== 'function' || typeof x.slice !== 'function') { - return false; - } - if (x.length > 0 && typeof x[0] !== 'number') return false; - return true; - } - - function objEquiv(a, b, opts) { - var i, key; - if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) - return false; - // an identical 'prototype' property. - if (a.prototype !== b.prototype) return false; - //~~~I've managed to break Object.keys through screwy arguments passing. - // Converting to array solves the problem. - if (isArguments(a)) { - if (!isArguments(b)) { - return false; - } - a = pSlice.call(a); - b = pSlice.call(b); - return deepEqual(a, b, opts); - } - if (isBuffer(a)) { - if (!isBuffer(b)) { - return false; - } - if (a.length !== b.length) return false; - for (i = 0; i < a.length; i++) { - if (a[i] !== b[i]) return false; - } - return true; - } - try { - var ka = objectKeys(a), - kb = objectKeys(b); - } catch (e) {//happens when one is a string literal and the other isn't - return false; - } - // having the same number of owned properties (keys incorporates - // hasOwnProperty) - if (ka.length != kb.length) - return false; - //the same set of keys (although not necessarily the same order), - ka.sort(); - kb.sort(); - //~~~cheap key test - for (i = ka.length - 1; i >= 0; i--) { - if (ka[i] != kb[i]) - return false; - } - //equivalent values for every corresponding key, and - //~~~possibly expensive deep test - for (i = ka.length - 1; i >= 0; i--) { - key = ka[i]; - if (!deepEqual(a[key], b[key], opts)) return false; - } - return typeof a === typeof b; - } - - -/***/ }, -/* 204 */ -/***/ function(module, exports) { - - var supportsArgumentsClass = (function(){ - return Object.prototype.toString.call(arguments) - })() == '[object Arguments]'; - - exports = module.exports = supportsArgumentsClass ? supported : unsupported; - - exports.supported = supported; - function supported(object) { - return Object.prototype.toString.call(object) == '[object Arguments]'; - }; - - exports.unsupported = unsupported; - function unsupported(object){ - return object && - typeof object == 'object' && - typeof object.length == 'number' && - Object.prototype.hasOwnProperty.call(object, 'callee') && - !Object.prototype.propertyIsEnumerable.call(object, 'callee') || - false; - }; - - -/***/ }, -/* 205 */ -/***/ function(module, exports) { - - exports = module.exports = typeof Object.keys === 'function' - ? Object.keys : shim; - - exports.shim = shim; - function shim (obj) { - var keys = []; - for (var key in obj) keys.push(key); - return keys; - } - - -/***/ }, -/* 206 */ -/***/ function(module, exports, __webpack_require__) { - - /* WEBPACK VAR INJECTION */(function(global) {module.exports = global["$"] = __webpack_require__(213); + /* WEBPACK VAR INJECTION */(function(global) {module.exports = global["$"] = __webpack_require__(203); /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) /***/ }, -/* 207 */ +/* 202 */ /***/ function(module, exports) { // removed by extract-text-webpack-plugin /***/ }, -/* 208 */ -/***/ function(module, exports) { - - "use strict"; - - exports.__esModule = true; - var _slice = Array.prototype.slice; - exports.loopAsync = loopAsync; - - function loopAsync(turns, work, callback) { - var currentTurn = 0, - isDone = false; - var sync = false, - hasNext = false, - doneArgs = undefined; - - function done() { - isDone = true; - if (sync) { - // Iterate instead of recursing if possible. - doneArgs = [].concat(_slice.call(arguments)); - return; - } - - callback.apply(this, arguments); - } - - function next() { - if (isDone) { - return; - } - - hasNext = true; - if (sync) { - // Iterate instead of recursing if possible. - return; - } - - sync = true; - - while (!isDone && currentTurn < turns && hasNext) { - hasNext = false; - work.call(this, currentTurn++, next, done); - } - - sync = false; - - if (isDone) { - // This means the loop finished synchronously. - callback.apply(this, doneArgs); - return; - } - - if (currentTurn >= turns && hasNext) { - isDone = true; - callback(); - } - } - - next(); - } - -/***/ }, -/* 209 */ -/***/ function(module, exports, __webpack_require__) { - - /* WEBPACK VAR INJECTION */(function(process) {'use strict'; - - exports.__esModule = true; - - var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _invariant = __webpack_require__(18); - - var _invariant2 = _interopRequireDefault(_invariant); - - var _Actions = __webpack_require__(40); - - var _PathUtils = __webpack_require__(36); - - var _ExecutionEnvironment = __webpack_require__(55); - - var _DOMUtils = __webpack_require__(71); - - var _DOMStateStorage = __webpack_require__(107); - - var _createDOMHistory = __webpack_require__(108); - - var _createDOMHistory2 = _interopRequireDefault(_createDOMHistory); - - /** - * Creates and returns a history object that uses HTML5's history API - * (pushState, replaceState, and the popstate event) to manage history. - * This is the recommended method of managing history in browsers because - * it provides the cleanest URLs. - * - * Note: In browsers that do not support the HTML5 history API full - * page reloads will be used to preserve URLs. - */ - function createBrowserHistory() { - var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; - - !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Browser history needs a DOM') : _invariant2['default'](false) : undefined; - - var forceRefresh = options.forceRefresh; - - var isSupported = _DOMUtils.supportsHistory(); - var useRefresh = !isSupported || forceRefresh; - - function getCurrentLocation(historyState) { - try { - historyState = historyState || window.history.state || {}; - } catch (e) { - historyState = {}; - } - - var path = _DOMUtils.getWindowPath(); - var _historyState = historyState; - var key = _historyState.key; - - var state = undefined; - if (key) { - state = _DOMStateStorage.readState(key); - } else { - state = null; - key = history.createKey(); - - if (isSupported) window.history.replaceState(_extends({}, historyState, { key: key }), null); - } - - var location = _PathUtils.parsePath(path); - - return history.createLocation(_extends({}, location, { state: state }), undefined, key); - } - - function startPopStateListener(_ref) { - var transitionTo = _ref.transitionTo; - - function popStateListener(event) { - if (event.state === undefined) return; // Ignore extraneous popstate events in WebKit. - - transitionTo(getCurrentLocation(event.state)); - } - - _DOMUtils.addEventListener(window, 'popstate', popStateListener); - - return function () { - _DOMUtils.removeEventListener(window, 'popstate', popStateListener); - }; - } - - function finishTransition(location) { - var basename = location.basename; - var pathname = location.pathname; - var search = location.search; - var hash = location.hash; - var state = location.state; - var action = location.action; - var key = location.key; - - if (action === _Actions.POP) return; // Nothing to do. - - _DOMStateStorage.saveState(key, state); - - var path = (basename || '') + pathname + search + hash; - var historyState = { - key: key - }; - - if (action === _Actions.PUSH) { - if (useRefresh) { - window.location.href = path; - return false; // Prevent location update. - } else { - window.history.pushState(historyState, null, path); - } - } else { - // REPLACE - if (useRefresh) { - window.location.replace(path); - return false; // Prevent location update. - } else { - window.history.replaceState(historyState, null, path); - } - } - } - - var history = _createDOMHistory2['default'](_extends({}, options, { - getCurrentLocation: getCurrentLocation, - finishTransition: finishTransition, - saveState: _DOMStateStorage.saveState - })); - - var listenerCount = 0, - stopPopStateListener = undefined; - - function listenBefore(listener) { - if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history); - - var unlisten = history.listenBefore(listener); - - return function () { - unlisten(); - - if (--listenerCount === 0) stopPopStateListener(); - }; - } - - function listen(listener) { - if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history); - - var unlisten = history.listen(listener); - - return function () { - unlisten(); - - if (--listenerCount === 0) stopPopStateListener(); - }; - } - - // deprecated - function registerTransitionHook(hook) { - if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history); - - history.registerTransitionHook(hook); - } - - // deprecated - function unregisterTransitionHook(hook) { - history.unregisterTransitionHook(hook); - - if (--listenerCount === 0) stopPopStateListener(); - } - - return _extends({}, history, { - listenBefore: listenBefore, - listen: listen, - registerTransitionHook: registerTransitionHook, - unregisterTransitionHook: unregisterTransitionHook - }); - } - - exports['default'] = createBrowserHistory; - module.exports = exports['default']; - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) - -/***/ }, -/* 210 */ -/***/ function(module, exports, __webpack_require__) { - - /* WEBPACK VAR INJECTION */(function(process) {'use strict'; - - exports.__esModule = true; - - var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _warning = __webpack_require__(24); - - var _warning2 = _interopRequireDefault(_warning); - - var _Actions = __webpack_require__(40); - - var _PathUtils = __webpack_require__(36); - - function createLocation() { - var location = arguments.length <= 0 || arguments[0] === undefined ? '/' : arguments[0]; - var action = arguments.length <= 1 || arguments[1] === undefined ? _Actions.POP : arguments[1]; - var key = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2]; - - var _fourthArg = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3]; - - if (typeof location === 'string') location = _PathUtils.parsePath(location); - - if (typeof action === 'object') { - process.env.NODE_ENV !== 'production' ? _warning2['default'](false, 'The state (2nd) argument to createLocation is deprecated; use a ' + 'location descriptor instead') : undefined; - - location = _extends({}, location, { state: action }); - - action = key || _Actions.POP; - key = _fourthArg; - } - - var pathname = location.pathname || '/'; - var search = location.search || ''; - var hash = location.hash || ''; - var state = location.state || null; - - return { - pathname: pathname, - search: search, - hash: hash, - state: state, - action: action, - key: key - }; - } - - exports['default'] = createLocation; - module.exports = exports['default']; - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) - -/***/ }, -/* 211 */ -/***/ function(module, exports, __webpack_require__) { - - /* WEBPACK VAR INJECTION */(function(process) {'use strict'; - - exports.__esModule = true; - - var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _warning = __webpack_require__(24); - - var _warning2 = _interopRequireDefault(_warning); - - var _invariant = __webpack_require__(18); - - var _invariant2 = _interopRequireDefault(_invariant); - - var _PathUtils = __webpack_require__(36); - - var _Actions = __webpack_require__(40); - - var _createHistory = __webpack_require__(110); - - var _createHistory2 = _interopRequireDefault(_createHistory); - - function createStateStorage(entries) { - return entries.filter(function (entry) { - return entry.state; - }).reduce(function (memo, entry) { - memo[entry.key] = entry.state; - return memo; - }, {}); - } - - function createMemoryHistory() { - var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; - - if (Array.isArray(options)) { - options = { entries: options }; - } else if (typeof options === 'string') { - options = { entries: [options] }; - } - - var history = _createHistory2['default'](_extends({}, options, { - getCurrentLocation: getCurrentLocation, - finishTransition: finishTransition, - saveState: saveState, - go: go - })); - - var _options = options; - var entries = _options.entries; - var current = _options.current; - - if (typeof entries === 'string') { - entries = [entries]; - } else if (!Array.isArray(entries)) { - entries = ['/']; - } - - entries = entries.map(function (entry) { - var key = history.createKey(); - - if (typeof entry === 'string') return { pathname: entry, key: key }; - - if (typeof entry === 'object' && entry) return _extends({}, entry, { key: key }); - - true ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Unable to create history entry from %s', entry) : _invariant2['default'](false) : undefined; - }); - - if (current == null) { - current = entries.length - 1; - } else { - !(current >= 0 && current < entries.length) ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Current index must be >= 0 and < %s, was %s', entries.length, current) : _invariant2['default'](false) : undefined; - } - - var storage = createStateStorage(entries); - - function saveState(key, state) { - storage[key] = state; - } - - function readState(key) { - return storage[key]; - } - - function getCurrentLocation() { - var entry = entries[current]; - var basename = entry.basename; - var pathname = entry.pathname; - var search = entry.search; - - var path = (basename || '') + pathname + (search || ''); - - var key = undefined, - state = undefined; - if (entry.key) { - key = entry.key; - state = readState(key); - } else { - key = history.createKey(); - state = null; - entry.key = key; - } - - var location = _PathUtils.parsePath(path); - - return history.createLocation(_extends({}, location, { state: state }), undefined, key); - } - - function canGo(n) { - var index = current + n; - return index >= 0 && index < entries.length; - } - - function go(n) { - if (n) { - if (!canGo(n)) { - process.env.NODE_ENV !== 'production' ? _warning2['default'](false, 'Cannot go(%s) there is not enough history', n) : undefined; - return; - } - - current += n; - - var currentLocation = getCurrentLocation(); - - // change action to POP - history.transitionTo(_extends({}, currentLocation, { action: _Actions.POP })); - } - } - - function finishTransition(location) { - switch (location.action) { - case _Actions.PUSH: - current += 1; - - // if we are not on the top of stack - // remove rest and push new - if (current < entries.length) entries.splice(current); - - entries.push(location); - saveState(location.key, location.state); - break; - case _Actions.REPLACE: - entries[current] = location; - saveState(location.key, location.state); - break; - } - } - - return history; - } - - exports['default'] = createMemoryHistory; - module.exports = exports['default']; - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) - -/***/ }, -/* 212 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - var strictUriEncode = __webpack_require__(335); - - exports.extract = function (str) { - return str.split('?')[1] || ''; - }; - - exports.parse = function (str) { - if (typeof str !== 'string') { - return {}; - } - - str = str.trim().replace(/^(\?|#|&)/, ''); - - if (!str) { - return {}; - } - - return str.split('&').reduce(function (ret, param) { - var parts = param.replace(/\+/g, ' ').split('='); - // Firefox (pre 40) decodes `%3D` to `=` - // https://github.com/sindresorhus/query-string/pull/37 - var key = parts.shift(); - var val = parts.length > 0 ? parts.join('=') : undefined; - - key = decodeURIComponent(key); - - // missing `=` should be `null`: - // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters - val = val === undefined ? null : decodeURIComponent(val); - - if (!ret.hasOwnProperty(key)) { - ret[key] = val; - } else if (Array.isArray(ret[key])) { - ret[key].push(val); - } else { - ret[key] = [ret[key], val]; - } - - return ret; - }, {}); - }; - - exports.stringify = function (obj) { - return obj ? Object.keys(obj).sort().map(function (key) { - var val = obj[key]; - - if (val === undefined) { - return ''; - } - - if (val === null) { - return key; - } - - if (Array.isArray(val)) { - return val.slice().sort().map(function (val2) { - return strictUriEncode(key) + '=' + strictUriEncode(val2); - }).join('&'); - } - - return strictUriEncode(key) + '=' + strictUriEncode(val); - }).filter(function (x) { - return x.length > 0; - }).join('&') : ''; - }; - - -/***/ }, -/* 213 */ +/* 203 */ /***/ function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! @@ -35487,21 +34573,2381 @@ /***/ }, -/* 214 */ +/* 204 */ /***/ function(module, exports) { module.exports = { Client: window.WebSocket }; +/***/ }, +/* 205 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;(("function" === "function" && __webpack_require__(378) && function (m) { !(__WEBPACK_AMD_DEFINE_FACTORY__ = (m), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); }) || + (typeof module === "object" && function (m) { module.exports = m(); }) || + function (m) { this.bane = m(); } + )(function () { + "use strict"; + var slice = Array.prototype.slice; + + function handleError(event, error, errbacks) { + var i, l = errbacks.length; + if (l > 0) { + for (i = 0; i < l; ++i) { errbacks[i](event, error); } + return; + } + setTimeout(function () { + error.message = event + " listener threw error: " + error.message; + throw error; + }, 0); + } + + function assertFunction(fn) { + if (typeof fn !== "function") { + throw new TypeError("Listener is not function"); + } + return fn; + } + + function supervisors(object) { + if (!object.supervisors) { object.supervisors = []; } + return object.supervisors; + } + + function listeners(object, event) { + if (!object.listeners) { object.listeners = {}; } + if (event && !object.listeners[event]) { object.listeners[event] = []; } + return event ? object.listeners[event] : object.listeners; + } + + function errbacks(object) { + if (!object.errbacks) { object.errbacks = []; } + return object.errbacks; + } + + /** + * @signature var emitter = bane.createEmitter([object]); + * + * Create a new event emitter. If an object is passed, it will be modified + * by adding the event emitter methods (see below). + */ + function createEventEmitter(object) { + object = object || {}; + + function notifyListener(event, listener, args) { + try { + listener.listener.apply(listener.thisp || object, args); + } catch (e) { + handleError(event, e, errbacks(object)); + } + } + + object.on = function (event, listener, thisp) { + if (typeof event === "function") { + return supervisors(this).push({ + listener: event, + thisp: listener + }); + } + listeners(this, event).push({ + listener: assertFunction(listener), + thisp: thisp + }); + }; + + object.off = function (event, listener) { + var fns, events, i, l; + if (!event) { + fns = supervisors(this); + fns.splice(0, fns.length); + + events = listeners(this); + for (i in events) { + if (events.hasOwnProperty(i)) { + fns = listeners(this, i); + fns.splice(0, fns.length); + } + } + + fns = errbacks(this); + fns.splice(0, fns.length); + + return; + } + if (typeof event === "function") { + fns = supervisors(this); + listener = event; + } else { + fns = listeners(this, event); + } + if (!listener) { + fns.splice(0, fns.length); + return; + } + for (i = 0, l = fns.length; i < l; ++i) { + if (fns[i].listener === listener) { + fns.splice(i, 1); + return; + } + } + }; + + object.once = function (event, listener, thisp) { + var wrapper = function () { + object.off(event, wrapper); + listener.apply(this, arguments); + }; + + object.on(event, wrapper, thisp); + }; + + object.bind = function (object, events) { + var prop, i, l; + if (!events) { + for (prop in object) { + if (typeof object[prop] === "function") { + this.on(prop, object[prop], object); + } + } + } else { + for (i = 0, l = events.length; i < l; ++i) { + if (typeof object[events[i]] === "function") { + this.on(events[i], object[events[i]], object); + } else { + throw new Error("No such method " + events[i]); + } + } + } + return object; + }; + + object.emit = function (event) { + var toNotify = supervisors(this); + var args = slice.call(arguments), i, l; + + for (i = 0, l = toNotify.length; i < l; ++i) { + notifyListener(event, toNotify[i], args); + } + + toNotify = listeners(this, event).slice(); + args = slice.call(arguments, 1); + for (i = 0, l = toNotify.length; i < l; ++i) { + notifyListener(event, toNotify[i], args); + } + }; + + object.errback = function (listener) { + if (!this.errbacks) { this.errbacks = []; } + this.errbacks.push(assertFunction(listener)); + }; + + return object; + } + + return { + createEventEmitter: createEventEmitter, + aggregate: function (emitters) { + var aggregate = createEventEmitter(); + emitters.forEach(function (emitter) { + emitter.on(function (event, data) { + aggregate.emit(event, data); + }); + }); + return aggregate; + } + }; + }); + + +/***/ }, +/* 206 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ + /** @author Brian Cavalier */ + /** @author John Hann */ + + (function(define) { 'use strict'; + !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) { + + var makePromise = __webpack_require__(218); + var Scheduler = __webpack_require__(207); + var async = __webpack_require__(71).asap; + + return makePromise({ + scheduler: new Scheduler(async) + }); + + }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + })(__webpack_require__(14)); + + +/***/ }, +/* 207 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ + /** @author Brian Cavalier */ + /** @author John Hann */ + + (function(define) { 'use strict'; + !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { + + // Credit to Twisol (https://github.com/Twisol) for suggesting + // this type of extensible queue + trampoline approach for next-tick conflation. + + /** + * Async task scheduler + * @param {function} async function to schedule a single async function + * @constructor + */ + function Scheduler(async) { + this._async = async; + this._running = false; + + this._queue = this; + this._queueLen = 0; + this._afterQueue = {}; + this._afterQueueLen = 0; + + var self = this; + this.drain = function() { + self._drain(); + }; + } + + /** + * Enqueue a task + * @param {{ run:function }} task + */ + Scheduler.prototype.enqueue = function(task) { + this._queue[this._queueLen++] = task; + this.run(); + }; + + /** + * Enqueue a task to run after the main task queue + * @param {{ run:function }} task + */ + Scheduler.prototype.afterQueue = function(task) { + this._afterQueue[this._afterQueueLen++] = task; + this.run(); + }; + + Scheduler.prototype.run = function() { + if (!this._running) { + this._running = true; + this._async(this.drain); + } + }; + + /** + * Drain the handler queue entirely, and then the after queue + */ + Scheduler.prototype._drain = function() { + var i = 0; + for (; i < this._queueLen; ++i) { + this._queue[i].run(); + this._queue[i] = void 0; + } + + this._queueLen = 0; + this._running = false; + + for (i = 0; i < this._afterQueueLen; ++i) { + this._afterQueue[i].run(); + this._afterQueue[i] = void 0; + } + + this._afterQueueLen = 0; + }; + + return Scheduler; + + }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + }(__webpack_require__(14))); + + +/***/ }, +/* 208 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ + /** @author Brian Cavalier */ + /** @author John Hann */ + + (function(define) { 'use strict'; + !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require) { + + var state = __webpack_require__(109); + var applier = __webpack_require__(108); + + return function array(Promise) { + + var applyFold = applier(Promise); + var toPromise = Promise.resolve; + var all = Promise.all; + + var ar = Array.prototype.reduce; + var arr = Array.prototype.reduceRight; + var slice = Array.prototype.slice; + + // Additional array combinators + + Promise.any = any; + Promise.some = some; + Promise.settle = settle; + + Promise.map = map; + Promise.filter = filter; + Promise.reduce = reduce; + Promise.reduceRight = reduceRight; + + /** + * When this promise fulfills with an array, do + * onFulfilled.apply(void 0, array) + * @param {function} onFulfilled function to apply + * @returns {Promise} promise for the result of applying onFulfilled + */ + Promise.prototype.spread = function(onFulfilled) { + return this.then(all).then(function(array) { + return onFulfilled.apply(this, array); + }); + }; + + return Promise; + + /** + * One-winner competitive race. + * Return a promise that will fulfill when one of the promises + * in the input array fulfills, or will reject when all promises + * have rejected. + * @param {array} promises + * @returns {Promise} promise for the first fulfilled value + */ + function any(promises) { + var p = Promise._defer(); + var resolver = p._handler; + var l = promises.length>>>0; + + var pending = l; + var errors = []; + + for (var h, x, i = 0; i < l; ++i) { + x = promises[i]; + if(x === void 0 && !(i in promises)) { + --pending; + continue; + } + + h = Promise._handler(x); + if(h.state() > 0) { + resolver.become(h); + Promise._visitRemaining(promises, i, h); + break; + } else { + h.visit(resolver, handleFulfill, handleReject); + } + } + + if(pending === 0) { + resolver.reject(new RangeError('any(): array must not be empty')); + } + + return p; + + function handleFulfill(x) { + /*jshint validthis:true*/ + errors = null; + this.resolve(x); // this === resolver + } + + function handleReject(e) { + /*jshint validthis:true*/ + if(this.resolved) { // this === resolver + return; + } + + errors.push(e); + if(--pending === 0) { + this.reject(errors); + } + } + } + + /** + * N-winner competitive race + * Return a promise that will fulfill when n input promises have + * fulfilled, or will reject when it becomes impossible for n + * input promises to fulfill (ie when promises.length - n + 1 + * have rejected) + * @param {array} promises + * @param {number} n + * @returns {Promise} promise for the earliest n fulfillment values + * + * @deprecated + */ + function some(promises, n) { + /*jshint maxcomplexity:7*/ + var p = Promise._defer(); + var resolver = p._handler; + + var results = []; + var errors = []; + + var l = promises.length>>>0; + var nFulfill = 0; + var nReject; + var x, i; // reused in both for() loops + + // First pass: count actual array items + for(i=0; i nFulfill) { + resolver.reject(new RangeError('some(): array must contain at least ' + + n + ' item(s), but had ' + nFulfill)); + } else if(nFulfill === 0) { + resolver.resolve(results); + } + + // Second pass: observe each array item, make progress toward goals + for(i=0; i 2 ? ar.call(promises, liftCombine(f), arguments[2]) + : ar.call(promises, liftCombine(f)); + } + + /** + * Traditional reduce function, similar to `Array.prototype.reduceRight()`, but + * input may contain promises and/or values, and reduceFunc + * may return either a value or a promise, *and* initialValue may + * be a promise for the starting value. + * @param {Array|Promise} promises array or promise for an array of anything, + * may contain a mix of promises and values. + * @param {function(accumulated:*, x:*, index:Number):*} f reduce function + * @returns {Promise} that will resolve to the final reduced value + */ + function reduceRight(promises, f /*, initialValue */) { + return arguments.length > 2 ? arr.call(promises, liftCombine(f), arguments[2]) + : arr.call(promises, liftCombine(f)); + } + + function liftCombine(f) { + return function(z, x, i) { + return applyFold(f, void 0, [z,x,i]); + }; + } + }; + + }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + }(__webpack_require__(14))); + + +/***/ }, +/* 209 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ + /** @author Brian Cavalier */ + /** @author John Hann */ + + (function(define) { 'use strict'; + !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { + + return function flow(Promise) { + + var resolve = Promise.resolve; + var reject = Promise.reject; + var origCatch = Promise.prototype['catch']; + + /** + * Handle the ultimate fulfillment value or rejection reason, and assume + * responsibility for all errors. If an error propagates out of result + * or handleFatalError, it will be rethrown to the host, resulting in a + * loud stack track on most platforms and a crash on some. + * @param {function?} onResult + * @param {function?} onError + * @returns {undefined} + */ + Promise.prototype.done = function(onResult, onError) { + this._handler.visit(this._handler.receiver, onResult, onError); + }; + + /** + * Add Error-type and predicate matching to catch. Examples: + * promise.catch(TypeError, handleTypeError) + * .catch(predicate, handleMatchedErrors) + * .catch(handleRemainingErrors) + * @param onRejected + * @returns {*} + */ + Promise.prototype['catch'] = Promise.prototype.otherwise = function(onRejected) { + if (arguments.length < 2) { + return origCatch.call(this, onRejected); + } + + if(typeof onRejected !== 'function') { + return this.ensure(rejectInvalidPredicate); + } + + return origCatch.call(this, createCatchFilter(arguments[1], onRejected)); + }; + + /** + * Wraps the provided catch handler, so that it will only be called + * if the predicate evaluates truthy + * @param {?function} handler + * @param {function} predicate + * @returns {function} conditional catch handler + */ + function createCatchFilter(handler, predicate) { + return function(e) { + return evaluatePredicate(e, predicate) + ? handler.call(this, e) + : reject(e); + }; + } + + /** + * Ensures that onFulfilledOrRejected will be called regardless of whether + * this promise is fulfilled or rejected. onFulfilledOrRejected WILL NOT + * receive the promises' value or reason. Any returned value will be disregarded. + * onFulfilledOrRejected may throw or return a rejected promise to signal + * an additional error. + * @param {function} handler handler to be called regardless of + * fulfillment or rejection + * @returns {Promise} + */ + Promise.prototype['finally'] = Promise.prototype.ensure = function(handler) { + if(typeof handler !== 'function') { + return this; + } + + return this.then(function(x) { + return runSideEffect(handler, this, identity, x); + }, function(e) { + return runSideEffect(handler, this, reject, e); + }); + }; + + function runSideEffect (handler, thisArg, propagate, value) { + var result = handler.call(thisArg); + return maybeThenable(result) + ? propagateValue(result, propagate, value) + : propagate(value); + } + + function propagateValue (result, propagate, x) { + return resolve(result).then(function () { + return propagate(x); + }); + } + + /** + * Recover from a failure by returning a defaultValue. If defaultValue + * is a promise, it's fulfillment value will be used. If defaultValue is + * a promise that rejects, the returned promise will reject with the + * same reason. + * @param {*} defaultValue + * @returns {Promise} new promise + */ + Promise.prototype['else'] = Promise.prototype.orElse = function(defaultValue) { + return this.then(void 0, function() { + return defaultValue; + }); + }; + + /** + * Shortcut for .then(function() { return value; }) + * @param {*} value + * @return {Promise} a promise that: + * - is fulfilled if value is not a promise, or + * - if value is a promise, will fulfill with its value, or reject + * with its reason. + */ + Promise.prototype['yield'] = function(value) { + return this.then(function() { + return value; + }); + }; + + /** + * Runs a side effect when this promise fulfills, without changing the + * fulfillment value. + * @param {function} onFulfilledSideEffect + * @returns {Promise} + */ + Promise.prototype.tap = function(onFulfilledSideEffect) { + return this.then(onFulfilledSideEffect)['yield'](this); + }; + + return Promise; + }; + + function rejectInvalidPredicate() { + throw new TypeError('catch predicate must be a function'); + } + + function evaluatePredicate(e, predicate) { + return isError(predicate) ? e instanceof predicate : predicate(e); + } + + function isError(predicate) { + return predicate === Error + || (predicate != null && predicate.prototype instanceof Error); + } + + function maybeThenable(x) { + return (typeof x === 'object' || typeof x === 'function') && x !== null; + } + + function identity(x) { + return x; + } + + }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + }(__webpack_require__(14))); + + +/***/ }, +/* 210 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ + /** @author Brian Cavalier */ + /** @author John Hann */ + /** @author Jeff Escalante */ + + (function(define) { 'use strict'; + !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { + + return function fold(Promise) { + + Promise.prototype.fold = function(f, z) { + var promise = this._beget(); + + this._handler.fold(function(z, x, to) { + Promise._handler(z).fold(function(x, z, to) { + to.resolve(f.call(this, z, x)); + }, x, this, to); + }, z, promise._handler.receiver, promise._handler); + + return promise; + }; + + return Promise; + }; + + }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + }(__webpack_require__(14))); + + +/***/ }, +/* 211 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ + /** @author Brian Cavalier */ + /** @author John Hann */ + + (function(define) { 'use strict'; + !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require) { + + var inspect = __webpack_require__(109).inspect; + + return function inspection(Promise) { + + Promise.prototype.inspect = function() { + return inspect(Promise._handler(this)); + }; + + return Promise; + }; + + }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + }(__webpack_require__(14))); + + +/***/ }, +/* 212 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ + /** @author Brian Cavalier */ + /** @author John Hann */ + + (function(define) { 'use strict'; + !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { + + return function generate(Promise) { + + var resolve = Promise.resolve; + + Promise.iterate = iterate; + Promise.unfold = unfold; + + return Promise; + + /** + * @deprecated Use github.com/cujojs/most streams and most.iterate + * Generate a (potentially infinite) stream of promised values: + * x, f(x), f(f(x)), etc. until condition(x) returns true + * @param {function} f function to generate a new x from the previous x + * @param {function} condition function that, given the current x, returns + * truthy when the iterate should stop + * @param {function} handler function to handle the value produced by f + * @param {*|Promise} x starting value, may be a promise + * @return {Promise} the result of the last call to f before + * condition returns true + */ + function iterate(f, condition, handler, x) { + return unfold(function(x) { + return [x, f(x)]; + }, condition, handler, x); + } + + /** + * @deprecated Use github.com/cujojs/most streams and most.unfold + * Generate a (potentially infinite) stream of promised values + * by applying handler(generator(seed)) iteratively until + * condition(seed) returns true. + * @param {function} unspool function that generates a [value, newSeed] + * given a seed. + * @param {function} condition function that, given the current seed, returns + * truthy when the unfold should stop + * @param {function} handler function to handle the value produced by unspool + * @param x {*|Promise} starting value, may be a promise + * @return {Promise} the result of the last value produced by unspool before + * condition returns true + */ + function unfold(unspool, condition, handler, x) { + return resolve(x).then(function(seed) { + return resolve(condition(seed)).then(function(done) { + return done ? seed : resolve(unspool(seed)).spread(next); + }); + }); + + function next(item, newSeed) { + return resolve(handler(item)).then(function() { + return unfold(unspool, condition, handler, newSeed); + }); + } + } + }; + + }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + }(__webpack_require__(14))); + + +/***/ }, +/* 213 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ + /** @author Brian Cavalier */ + /** @author John Hann */ + + (function(define) { 'use strict'; + !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { + + return function progress(Promise) { + + /** + * @deprecated + * Register a progress handler for this promise + * @param {function} onProgress + * @returns {Promise} + */ + Promise.prototype.progress = function(onProgress) { + return this.then(void 0, void 0, onProgress); + }; + + return Promise; + }; + + }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + }(__webpack_require__(14))); + + +/***/ }, +/* 214 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ + /** @author Brian Cavalier */ + /** @author John Hann */ + + (function(define) { 'use strict'; + !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require) { + + var env = __webpack_require__(71); + var TimeoutError = __webpack_require__(107); + + function setTimeout(f, ms, x, y) { + return env.setTimer(function() { + f(x, y, ms); + }, ms); + } + + return function timed(Promise) { + /** + * Return a new promise whose fulfillment value is revealed only + * after ms milliseconds + * @param {number} ms milliseconds + * @returns {Promise} + */ + Promise.prototype.delay = function(ms) { + var p = this._beget(); + this._handler.fold(handleDelay, ms, void 0, p._handler); + return p; + }; + + function handleDelay(ms, x, h) { + setTimeout(resolveDelay, ms, x, h); + } + + function resolveDelay(x, h) { + h.resolve(x); + } + + /** + * Return a new promise that rejects after ms milliseconds unless + * this promise fulfills earlier, in which case the returned promise + * fulfills with the same value. + * @param {number} ms milliseconds + * @param {Error|*=} reason optional rejection reason to use, defaults + * to a TimeoutError if not provided + * @returns {Promise} + */ + Promise.prototype.timeout = function(ms, reason) { + var p = this._beget(); + var h = p._handler; + + var t = setTimeout(onTimeout, ms, reason, p._handler); + + this._handler.visit(h, + function onFulfill(x) { + env.clearTimer(t); + this.resolve(x); // this = h + }, + function onReject(x) { + env.clearTimer(t); + this.reject(x); // this = h + }, + h.notify); + + return p; + }; + + function onTimeout(reason, h, ms) { + var e = typeof reason === 'undefined' + ? new TimeoutError('timed out after ' + ms + 'ms') + : reason; + h.reject(e); + } + + return Promise; + }; + + }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + }(__webpack_require__(14))); + + /***/ }, /* 215 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ + /** @author Brian Cavalier */ + /** @author John Hann */ + + (function(define) { 'use strict'; + !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require) { + + var setTimer = __webpack_require__(71).setTimer; + var format = __webpack_require__(217); + + return function unhandledRejection(Promise) { + + var logError = noop; + var logInfo = noop; + var localConsole; + + if(typeof console !== 'undefined') { + // Alias console to prevent things like uglify's drop_console option from + // removing console.log/error. Unhandled rejections fall into the same + // category as uncaught exceptions, and build tools shouldn't silence them. + localConsole = console; + logError = typeof localConsole.error !== 'undefined' + ? function (e) { localConsole.error(e); } + : function (e) { localConsole.log(e); }; + + logInfo = typeof localConsole.info !== 'undefined' + ? function (e) { localConsole.info(e); } + : function (e) { localConsole.log(e); }; + } + + Promise.onPotentiallyUnhandledRejection = function(rejection) { + enqueue(report, rejection); + }; + + Promise.onPotentiallyUnhandledRejectionHandled = function(rejection) { + enqueue(unreport, rejection); + }; + + Promise.onFatalRejection = function(rejection) { + enqueue(throwit, rejection.value); + }; + + var tasks = []; + var reported = []; + var running = null; + + function report(r) { + if(!r.handled) { + reported.push(r); + logError('Potentially unhandled rejection [' + r.id + '] ' + format.formatError(r.value)); + } + } + + function unreport(r) { + var i = reported.indexOf(r); + if(i >= 0) { + reported.splice(i, 1); + logInfo('Handled previous rejection [' + r.id + '] ' + format.formatObject(r.value)); + } + } + + function enqueue(f, x) { + tasks.push(f, x); + if(running === null) { + running = setTimer(flush, 0); + } + } + + function flush() { + running = null; + while(tasks.length > 0) { + tasks.shift()(tasks.shift()); + } + } + + return Promise; + }; + + function throwit(e) { + throw e; + } + + function noop() {} + + }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + }(__webpack_require__(14))); + + +/***/ }, +/* 216 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ + /** @author Brian Cavalier */ + /** @author John Hann */ + + (function(define) { 'use strict'; + !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { + + return function addWith(Promise) { + /** + * Returns a promise whose handlers will be called with `this` set to + * the supplied receiver. Subsequent promises derived from the + * returned promise will also have their handlers called with receiver + * as `this`. Calling `with` with undefined or no arguments will return + * a promise whose handlers will again be called in the usual Promises/A+ + * way (no `this`) thus safely undoing any previous `with` in the + * promise chain. + * + * WARNING: Promises returned from `with`/`withThis` are NOT Promises/A+ + * compliant, specifically violating 2.2.5 (http://promisesaplus.com/#point-41) + * + * @param {object} receiver `this` value for all handlers attached to + * the returned promise. + * @returns {Promise} + */ + Promise.prototype['with'] = Promise.prototype.withThis = function(receiver) { + var p = this._beget(); + var child = p._handler; + child.receiver = receiver; + this._handler.chain(child, receiver); + return p; + }; + + return Promise; + }; + + }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + }(__webpack_require__(14))); + + + +/***/ }, +/* 217 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ + /** @author Brian Cavalier */ + /** @author John Hann */ + + (function(define) { 'use strict'; + !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { + + return { + formatError: formatError, + formatObject: formatObject, + tryStringify: tryStringify + }; + + /** + * Format an error into a string. If e is an Error and has a stack property, + * it's returned. Otherwise, e is formatted using formatObject, with a + * warning added about e not being a proper Error. + * @param {*} e + * @returns {String} formatted string, suitable for output to developers + */ + function formatError(e) { + var s = typeof e === 'object' && e !== null && (e.stack || e.message) ? e.stack || e.message : formatObject(e); + return e instanceof Error ? s : s + ' (WARNING: non-Error used)'; + } + + /** + * Format an object, detecting "plain" objects and running them through + * JSON.stringify if possible. + * @param {Object} o + * @returns {string} + */ + function formatObject(o) { + var s = String(o); + if(s === '[object Object]' && typeof JSON !== 'undefined') { + s = tryStringify(o, s); + } + return s; + } + + /** + * Try to return the result of JSON.stringify(x). If that fails, return + * defaultValue + * @param {*} x + * @param {*} defaultValue + * @returns {String|*} JSON.stringify(x) or defaultValue + */ + function tryStringify(x, defaultValue) { + try { + return JSON.stringify(x); + } catch(e) { + return defaultValue; + } + } + + }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + }(__webpack_require__(14))); + + +/***/ }, +/* 218 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(process) {/** @license MIT License (c) copyright 2010-2014 original author or authors */ + /** @author Brian Cavalier */ + /** @author John Hann */ + + (function(define) { 'use strict'; + !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { + + return function makePromise(environment) { + + var tasks = environment.scheduler; + var emitRejection = initEmitRejection(); + + var objectCreate = Object.create || + function(proto) { + function Child() {} + Child.prototype = proto; + return new Child(); + }; + + /** + * Create a promise whose fate is determined by resolver + * @constructor + * @returns {Promise} promise + * @name Promise + */ + function Promise(resolver, handler) { + this._handler = resolver === Handler ? handler : init(resolver); + } + + /** + * Run the supplied resolver + * @param resolver + * @returns {Pending} + */ + function init(resolver) { + var handler = new Pending(); + + try { + resolver(promiseResolve, promiseReject, promiseNotify); + } catch (e) { + promiseReject(e); + } + + return handler; + + /** + * Transition from pre-resolution state to post-resolution state, notifying + * all listeners of the ultimate fulfillment or rejection + * @param {*} x resolution value + */ + function promiseResolve (x) { + handler.resolve(x); + } + /** + * Reject this promise with reason, which will be used verbatim + * @param {Error|*} reason rejection reason, strongly suggested + * to be an Error type + */ + function promiseReject (reason) { + handler.reject(reason); + } + + /** + * @deprecated + * Issue a progress event, notifying all progress listeners + * @param {*} x progress event payload to pass to all listeners + */ + function promiseNotify (x) { + handler.notify(x); + } + } + + // Creation + + Promise.resolve = resolve; + Promise.reject = reject; + Promise.never = never; + + Promise._defer = defer; + Promise._handler = getHandler; + + /** + * Returns a trusted promise. If x is already a trusted promise, it is + * returned, otherwise returns a new trusted Promise which follows x. + * @param {*} x + * @return {Promise} promise + */ + function resolve(x) { + return isPromise(x) ? x + : new Promise(Handler, new Async(getHandler(x))); + } + + /** + * Return a reject promise with x as its reason (x is used verbatim) + * @param {*} x + * @returns {Promise} rejected promise + */ + function reject(x) { + return new Promise(Handler, new Async(new Rejected(x))); + } + + /** + * Return a promise that remains pending forever + * @returns {Promise} forever-pending promise. + */ + function never() { + return foreverPendingPromise; // Should be frozen + } + + /** + * Creates an internal {promise, resolver} pair + * @private + * @returns {Promise} + */ + function defer() { + return new Promise(Handler, new Pending()); + } + + // Transformation and flow control + + /** + * Transform this promise's fulfillment value, returning a new Promise + * for the transformed result. If the promise cannot be fulfilled, onRejected + * is called with the reason. onProgress *may* be called with updates toward + * this promise's fulfillment. + * @param {function=} onFulfilled fulfillment handler + * @param {function=} onRejected rejection handler + * @param {function=} onProgress @deprecated progress handler + * @return {Promise} new promise + */ + Promise.prototype.then = function(onFulfilled, onRejected, onProgress) { + var parent = this._handler; + var state = parent.join().state(); + + if ((typeof onFulfilled !== 'function' && state > 0) || + (typeof onRejected !== 'function' && state < 0)) { + // Short circuit: value will not change, simply share handler + return new this.constructor(Handler, parent); + } + + var p = this._beget(); + var child = p._handler; + + parent.chain(child, parent.receiver, onFulfilled, onRejected, onProgress); + + return p; + }; + + /** + * If this promise cannot be fulfilled due to an error, call onRejected to + * handle the error. Shortcut for .then(undefined, onRejected) + * @param {function?} onRejected + * @return {Promise} + */ + Promise.prototype['catch'] = function(onRejected) { + return this.then(void 0, onRejected); + }; + + /** + * Creates a new, pending promise of the same type as this promise + * @private + * @returns {Promise} + */ + Promise.prototype._beget = function() { + return begetFrom(this._handler, this.constructor); + }; + + function begetFrom(parent, Promise) { + var child = new Pending(parent.receiver, parent.join().context); + return new Promise(Handler, child); + } + + // Array combinators + + Promise.all = all; + Promise.race = race; + Promise._traverse = traverse; + + /** + * Return a promise that will fulfill when all promises in the + * input array have fulfilled, or will reject when one of the + * promises rejects. + * @param {array} promises array of promises + * @returns {Promise} promise for array of fulfillment values + */ + function all(promises) { + return traverseWith(snd, null, promises); + } + + /** + * Array> -> Promise> + * @private + * @param {function} f function to apply to each promise's value + * @param {Array} promises array of promises + * @returns {Promise} promise for transformed values + */ + function traverse(f, promises) { + return traverseWith(tryCatch2, f, promises); + } + + function traverseWith(tryMap, f, promises) { + var handler = typeof f === 'function' ? mapAt : settleAt; + + var resolver = new Pending(); + var pending = promises.length >>> 0; + var results = new Array(pending); + + for (var i = 0, x; i < promises.length && !resolver.resolved; ++i) { + x = promises[i]; + + if (x === void 0 && !(i in promises)) { + --pending; + continue; + } + + traverseAt(promises, handler, i, x, resolver); + } + + if(pending === 0) { + resolver.become(new Fulfilled(results)); + } + + return new Promise(Handler, resolver); + + function mapAt(i, x, resolver) { + if(!resolver.resolved) { + traverseAt(promises, settleAt, i, tryMap(f, x, i), resolver); + } + } + + function settleAt(i, x, resolver) { + results[i] = x; + if(--pending === 0) { + resolver.become(new Fulfilled(results)); + } + } + } + + function traverseAt(promises, handler, i, x, resolver) { + if (maybeThenable(x)) { + var h = getHandlerMaybeThenable(x); + var s = h.state(); + + if (s === 0) { + h.fold(handler, i, void 0, resolver); + } else if (s > 0) { + handler(i, h.value, resolver); + } else { + resolver.become(h); + visitRemaining(promises, i+1, h); + } + } else { + handler(i, x, resolver); + } + } + + Promise._visitRemaining = visitRemaining; + function visitRemaining(promises, start, handler) { + for(var i=start; i= turns && hasNext) { + isDone = true; + callback(); + } + } + + next(); + } + +/***/ }, +/* 253 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _invariant = __webpack_require__(18); + + var _invariant2 = _interopRequireDefault(_invariant); + + var _Actions = __webpack_require__(41); + + var _PathUtils = __webpack_require__(37); + + var _ExecutionEnvironment = __webpack_require__(57); + + var _DOMUtils = __webpack_require__(75); + + var _DOMStateStorage = __webpack_require__(120); + + var _createDOMHistory = __webpack_require__(121); + + var _createDOMHistory2 = _interopRequireDefault(_createDOMHistory); + + /** + * Creates and returns a history object that uses HTML5's history API + * (pushState, replaceState, and the popstate event) to manage history. + * This is the recommended method of managing history in browsers because + * it provides the cleanest URLs. + * + * Note: In browsers that do not support the HTML5 history API full + * page reloads will be used to preserve URLs. + */ + function createBrowserHistory() { + var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + + !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Browser history needs a DOM') : _invariant2['default'](false) : undefined; + + var forceRefresh = options.forceRefresh; + + var isSupported = _DOMUtils.supportsHistory(); + var useRefresh = !isSupported || forceRefresh; + + function getCurrentLocation(historyState) { + try { + historyState = historyState || window.history.state || {}; + } catch (e) { + historyState = {}; + } + + var path = _DOMUtils.getWindowPath(); + var _historyState = historyState; + var key = _historyState.key; + + var state = undefined; + if (key) { + state = _DOMStateStorage.readState(key); + } else { + state = null; + key = history.createKey(); + + if (isSupported) window.history.replaceState(_extends({}, historyState, { key: key }), null); + } + + var location = _PathUtils.parsePath(path); + + return history.createLocation(_extends({}, location, { state: state }), undefined, key); + } + + function startPopStateListener(_ref) { + var transitionTo = _ref.transitionTo; + + function popStateListener(event) { + if (event.state === undefined) return; // Ignore extraneous popstate events in WebKit. + + transitionTo(getCurrentLocation(event.state)); + } + + _DOMUtils.addEventListener(window, 'popstate', popStateListener); + + return function () { + _DOMUtils.removeEventListener(window, 'popstate', popStateListener); + }; + } + + function finishTransition(location) { + var basename = location.basename; + var pathname = location.pathname; + var search = location.search; + var hash = location.hash; + var state = location.state; + var action = location.action; + var key = location.key; + + if (action === _Actions.POP) return; // Nothing to do. + + _DOMStateStorage.saveState(key, state); + + var path = (basename || '') + pathname + search + hash; + var historyState = { + key: key + }; + + if (action === _Actions.PUSH) { + if (useRefresh) { + window.location.href = path; + return false; // Prevent location update. + } else { + window.history.pushState(historyState, null, path); + } + } else { + // REPLACE + if (useRefresh) { + window.location.replace(path); + return false; // Prevent location update. + } else { + window.history.replaceState(historyState, null, path); + } + } + } + + var history = _createDOMHistory2['default'](_extends({}, options, { + getCurrentLocation: getCurrentLocation, + finishTransition: finishTransition, + saveState: _DOMStateStorage.saveState + })); + + var listenerCount = 0, + stopPopStateListener = undefined; + + function listenBefore(listener) { + if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history); + + var unlisten = history.listenBefore(listener); + + return function () { + unlisten(); + + if (--listenerCount === 0) stopPopStateListener(); + }; + } + + function listen(listener) { + if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history); + + var unlisten = history.listen(listener); + + return function () { + unlisten(); + + if (--listenerCount === 0) stopPopStateListener(); + }; + } + + // deprecated + function registerTransitionHook(hook) { + if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history); + + history.registerTransitionHook(hook); + } + + // deprecated + function unregisterTransitionHook(hook) { + history.unregisterTransitionHook(hook); + + if (--listenerCount === 0) stopPopStateListener(); + } + + return _extends({}, history, { + listenBefore: listenBefore, + listen: listen, + registerTransitionHook: registerTransitionHook, + unregisterTransitionHook: unregisterTransitionHook + }); + } + + exports['default'] = createBrowserHistory; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) + +/***/ }, +/* 254 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _warning = __webpack_require__(24); + + var _warning2 = _interopRequireDefault(_warning); + + var _Actions = __webpack_require__(41); + + var _PathUtils = __webpack_require__(37); + + function createLocation() { + var location = arguments.length <= 0 || arguments[0] === undefined ? '/' : arguments[0]; + var action = arguments.length <= 1 || arguments[1] === undefined ? _Actions.POP : arguments[1]; + var key = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2]; + + var _fourthArg = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3]; + + if (typeof location === 'string') location = _PathUtils.parsePath(location); + + if (typeof action === 'object') { + process.env.NODE_ENV !== 'production' ? _warning2['default'](false, 'The state (2nd) argument to createLocation is deprecated; use a ' + 'location descriptor instead') : undefined; + + location = _extends({}, location, { state: action }); + + action = key || _Actions.POP; + key = _fourthArg; + } + + var pathname = location.pathname || '/'; + var search = location.search || ''; + var hash = location.hash || ''; + var state = location.state || null; + + return { + pathname: pathname, + search: search, + hash: hash, + state: state, + action: action, + key: key + }; + } + + exports['default'] = createLocation; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) + +/***/ }, +/* 255 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _warning = __webpack_require__(24); + + var _warning2 = _interopRequireDefault(_warning); + + var _invariant = __webpack_require__(18); + + var _invariant2 = _interopRequireDefault(_invariant); + + var _PathUtils = __webpack_require__(37); + + var _Actions = __webpack_require__(41); + + var _createHistory = __webpack_require__(123); + + var _createHistory2 = _interopRequireDefault(_createHistory); + + function createStateStorage(entries) { + return entries.filter(function (entry) { + return entry.state; + }).reduce(function (memo, entry) { + memo[entry.key] = entry.state; + return memo; + }, {}); + } + + function createMemoryHistory() { + var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + + if (Array.isArray(options)) { + options = { entries: options }; + } else if (typeof options === 'string') { + options = { entries: [options] }; + } + + var history = _createHistory2['default'](_extends({}, options, { + getCurrentLocation: getCurrentLocation, + finishTransition: finishTransition, + saveState: saveState, + go: go + })); + + var _options = options; + var entries = _options.entries; + var current = _options.current; + + if (typeof entries === 'string') { + entries = [entries]; + } else if (!Array.isArray(entries)) { + entries = ['/']; + } + + entries = entries.map(function (entry) { + var key = history.createKey(); + + if (typeof entry === 'string') return { pathname: entry, key: key }; + + if (typeof entry === 'object' && entry) return _extends({}, entry, { key: key }); + + true ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Unable to create history entry from %s', entry) : _invariant2['default'](false) : undefined; + }); + + if (current == null) { + current = entries.length - 1; + } else { + !(current >= 0 && current < entries.length) ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Current index must be >= 0 and < %s, was %s', entries.length, current) : _invariant2['default'](false) : undefined; + } + + var storage = createStateStorage(entries); + + function saveState(key, state) { + storage[key] = state; + } + + function readState(key) { + return storage[key]; + } + + function getCurrentLocation() { + var entry = entries[current]; + var basename = entry.basename; + var pathname = entry.pathname; + var search = entry.search; + + var path = (basename || '') + pathname + (search || ''); + + var key = undefined, + state = undefined; + if (entry.key) { + key = entry.key; + state = readState(key); + } else { + key = history.createKey(); + state = null; + entry.key = key; + } + + var location = _PathUtils.parsePath(path); + + return history.createLocation(_extends({}, location, { state: state }), undefined, key); + } + + function canGo(n) { + var index = current + n; + return index >= 0 && index < entries.length; + } + + function go(n) { + if (n) { + if (!canGo(n)) { + process.env.NODE_ENV !== 'production' ? _warning2['default'](false, 'Cannot go(%s) there is not enough history', n) : undefined; + return; + } + + current += n; + + var currentLocation = getCurrentLocation(); + + // change action to POP + history.transitionTo(_extends({}, currentLocation, { action: _Actions.POP })); + } + } + + function finishTransition(location) { + switch (location.action) { + case _Actions.PUSH: + current += 1; + + // if we are not on the top of stack + // remove rest and push new + if (current < entries.length) entries.splice(current); + + entries.push(location); + saveState(location.key, location.state); + break; + case _Actions.REPLACE: + entries[current] = location; + saveState(location.key, location.state); + break; + } + } + + return history; + } + + exports['default'] = createMemoryHistory; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) + +/***/ }, +/* 256 */ +/***/ function(module, exports, __webpack_require__) { + + var pSlice = Array.prototype.slice; + var objectKeys = __webpack_require__(258); + var isArguments = __webpack_require__(257); + + var deepEqual = module.exports = function (actual, expected, opts) { + if (!opts) opts = {}; + // 7.1. All identical values are equivalent, as determined by ===. + if (actual === expected) { + return true; + + } else if (actual instanceof Date && expected instanceof Date) { + return actual.getTime() === expected.getTime(); + + // 7.3. Other pairs that do not both pass typeof value == 'object', + // equivalence is determined by ==. + } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') { + return opts.strict ? actual === expected : actual == expected; + + // 7.4. For all other Object pairs, including Array objects, equivalence is + // determined by having the same number of owned properties (as verified + // with Object.prototype.hasOwnProperty.call), the same set of keys + // (although not necessarily the same order), equivalent values for every + // corresponding key, and an identical 'prototype' property. Note: this + // accounts for both named and indexed properties on Arrays. + } else { + return objEquiv(actual, expected, opts); + } + } + + function isUndefinedOrNull(value) { + return value === null || value === undefined; + } + + function isBuffer (x) { + if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false; + if (typeof x.copy !== 'function' || typeof x.slice !== 'function') { + return false; + } + if (x.length > 0 && typeof x[0] !== 'number') return false; + return true; + } + + function objEquiv(a, b, opts) { + var i, key; + if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) + return false; + // an identical 'prototype' property. + if (a.prototype !== b.prototype) return false; + //~~~I've managed to break Object.keys through screwy arguments passing. + // Converting to array solves the problem. + if (isArguments(a)) { + if (!isArguments(b)) { + return false; + } + a = pSlice.call(a); + b = pSlice.call(b); + return deepEqual(a, b, opts); + } + if (isBuffer(a)) { + if (!isBuffer(b)) { + return false; + } + if (a.length !== b.length) return false; + for (i = 0; i < a.length; i++) { + if (a[i] !== b[i]) return false; + } + return true; + } + try { + var ka = objectKeys(a), + kb = objectKeys(b); + } catch (e) {//happens when one is a string literal and the other isn't + return false; + } + // having the same number of owned properties (keys incorporates + // hasOwnProperty) + if (ka.length != kb.length) + return false; + //the same set of keys (although not necessarily the same order), + ka.sort(); + kb.sort(); + //~~~cheap key test + for (i = ka.length - 1; i >= 0; i--) { + if (ka[i] != kb[i]) + return false; + } + //equivalent values for every corresponding key, and + //~~~possibly expensive deep test + for (i = ka.length - 1; i >= 0; i--) { + key = ka[i]; + if (!deepEqual(a[key], b[key], opts)) return false; + } + return typeof a === typeof b; + } + + +/***/ }, +/* 257 */ +/***/ function(module, exports) { + + var supportsArgumentsClass = (function(){ + return Object.prototype.toString.call(arguments) + })() == '[object Arguments]'; + + exports = module.exports = supportsArgumentsClass ? supported : unsupported; + + exports.supported = supported; + function supported(object) { + return Object.prototype.toString.call(object) == '[object Arguments]'; + }; + + exports.unsupported = unsupported; + function unsupported(object){ + return object && + typeof object == 'object' && + typeof object.length == 'number' && + Object.prototype.hasOwnProperty.call(object, 'callee') && + !Object.prototype.propertyIsEnumerable.call(object, 'callee') || + false; + }; + + +/***/ }, +/* 258 */ +/***/ function(module, exports) { + + exports = module.exports = typeof Object.keys === 'function' + ? Object.keys : shim; + + exports.shim = shim; + function shim (obj) { + var keys = []; + for (var key in obj) keys.push(key); + return keys; + } + + +/***/ }, +/* 259 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var strictUriEncode = __webpack_require__(260); + + exports.extract = function (str) { + return str.split('?')[1] || ''; + }; + + exports.parse = function (str) { + if (typeof str !== 'string') { + return {}; + } + + str = str.trim().replace(/^(\?|#|&)/, ''); + + if (!str) { + return {}; + } + + return str.split('&').reduce(function (ret, param) { + var parts = param.replace(/\+/g, ' ').split('='); + // Firefox (pre 40) decodes `%3D` to `=` + // https://github.com/sindresorhus/query-string/pull/37 + var key = parts.shift(); + var val = parts.length > 0 ? parts.join('=') : undefined; + + key = decodeURIComponent(key); + + // missing `=` should be `null`: + // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters + val = val === undefined ? null : decodeURIComponent(val); + + if (!ret.hasOwnProperty(key)) { + ret[key] = val; + } else if (Array.isArray(ret[key])) { + ret[key].push(val); + } else { + ret[key] = [ret[key], val]; + } + + return ret; + }, {}); + }; + + exports.stringify = function (obj) { + return obj ? Object.keys(obj).sort().map(function (key) { + var val = obj[key]; + + if (val === undefined) { + return ''; + } + + if (val === null) { + return key; + } + + if (Array.isArray(val)) { + return val.slice().sort().map(function (val2) { + return strictUriEncode(key) + '=' + strictUriEncode(val2); + }).join('&'); + } + + return strictUriEncode(key) + '=' + strictUriEncode(val); + }).filter(function (x) { + return x.length > 0; + }).join('&') : ''; + }; + + +/***/ }, +/* 260 */ +/***/ function(module, exports) { + + 'use strict'; + module.exports = function (str) { + return encodeURIComponent(str).replace(/[!'()*]/g, function (c) { + return '%' + c.charCodeAt(0).toString(16).toUpperCase(); + }); + }; + + +/***/ }, +/* 261 */ +225, +/* 262 */ +24, +/* 263 */ /***/ function(module, exports, __webpack_require__) { /** @@ -38128,7 +40327,7 @@ var ReactDOMComponentTree = __webpack_require__(13); - var focusNode = __webpack_require__(150); + var focusNode = __webpack_require__(152); var AutoFocusUtils = { focusDOMComponent: function () { @@ -38139,7 +40338,7 @@ module.exports = AutoFocusUtils; /***/ }, -/* 246 */ +/* 264 */ /***/ function(module, exports, __webpack_require__) { /** @@ -38158,9 +40357,9 @@ var EventConstants = __webpack_require__(27); var EventPropagators = __webpack_require__(47); var ExecutionEnvironment = __webpack_require__(17); - var FallbackCompositionState = __webpack_require__(252); - var SyntheticCompositionEvent = __webpack_require__(296); - var SyntheticInputEvent = __webpack_require__(299); + var FallbackCompositionState = __webpack_require__(270); + var SyntheticCompositionEvent = __webpack_require__(314); + var SyntheticInputEvent = __webpack_require__(317); var keyOf = __webpack_require__(33); @@ -38534,7 +40733,7 @@ module.exports = BeforeInputEventPlugin; /***/ }, -/* 247 */ +/* 265 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -38550,14 +40749,14 @@ 'use strict'; - var CSSProperty = __webpack_require__(123); + var CSSProperty = __webpack_require__(125); var ExecutionEnvironment = __webpack_require__(17); var ReactInstrumentation = __webpack_require__(19); - var camelizeStyleName = __webpack_require__(315); - var dangerousStyleValue = __webpack_require__(305); - var hyphenateStyleName = __webpack_require__(322); - var memoizeStringOnly = __webpack_require__(325); + var camelizeStyleName = __webpack_require__(333); + var dangerousStyleValue = __webpack_require__(323); + var hyphenateStyleName = __webpack_require__(340); + var memoizeStringOnly = __webpack_require__(343); var warning = __webpack_require__(4); var processStyleName = memoizeStringOnly(function (styleName) { @@ -38745,7 +40944,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 248 */ +/* 266 */ /***/ function(module, exports, __webpack_require__) { /** @@ -38769,9 +40968,9 @@ var ReactUpdates = __webpack_require__(25); var SyntheticEvent = __webpack_require__(29); - var getEventTarget = __webpack_require__(93); - var isEventSupported = __webpack_require__(95); - var isTextInputElement = __webpack_require__(147); + var getEventTarget = __webpack_require__(94); + var isEventSupported = __webpack_require__(96); + var isTextInputElement = __webpack_require__(149); var keyOf = __webpack_require__(33); var topLevelTypes = EventConstants.topLevelTypes; @@ -39075,7 +41274,7 @@ module.exports = ChangeEventPlugin; /***/ }, -/* 249 */ +/* 267 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -39096,7 +41295,7 @@ var DOMLazyTree = __webpack_require__(42); var ExecutionEnvironment = __webpack_require__(17); - var createNodesFromMarkup = __webpack_require__(318); + var createNodesFromMarkup = __webpack_require__(336); var emptyFunction = __webpack_require__(22); var invariant = __webpack_require__(3); @@ -39129,7 +41328,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 250 */ +/* 268 */ /***/ function(module, exports, __webpack_require__) { /** @@ -39161,7 +41360,7 @@ module.exports = DefaultEventPluginOrder; /***/ }, -/* 251 */ +/* 269 */ /***/ function(module, exports, __webpack_require__) { /** @@ -39271,7 +41470,7 @@ module.exports = EnterLeaveEventPlugin; /***/ }, -/* 252 */ +/* 270 */ /***/ function(module, exports, __webpack_require__) { /** @@ -39287,11 +41486,11 @@ 'use strict'; - var _assign = __webpack_require__(8); + var _assign = __webpack_require__(9); var PooledClass = __webpack_require__(32); - var getTextContentAccessor = __webpack_require__(145); + var getTextContentAccessor = __webpack_require__(147); /** * This helper class stores information about text content of a target node, @@ -39371,7 +41570,7 @@ module.exports = FallbackCompositionState; /***/ }, -/* 253 */ +/* 271 */ /***/ function(module, exports, __webpack_require__) { /** @@ -39588,7 +41787,7 @@ module.exports = HTMLDOMPropertyConfig; /***/ }, -/* 254 */ +/* 272 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -39604,18 +41803,18 @@ 'use strict'; - var _assign = __webpack_require__(8); + var _assign = __webpack_require__(9); - var ReactChildren = __webpack_require__(126); - var ReactComponent = __webpack_require__(82); - var ReactPureComponent = __webpack_require__(286); - var ReactClass = __webpack_require__(127); - var ReactDOMFactories = __webpack_require__(264); + var ReactChildren = __webpack_require__(128); + var ReactComponent = __webpack_require__(83); + var ReactPureComponent = __webpack_require__(304); + var ReactClass = __webpack_require__(129); + var ReactDOMFactories = __webpack_require__(282); var ReactElement = __webpack_require__(21); - var ReactPropTypes = __webpack_require__(138); - var ReactVersion = __webpack_require__(139); + var ReactPropTypes = __webpack_require__(140); + var ReactVersion = __webpack_require__(141); - var onlyChild = __webpack_require__(311); + var onlyChild = __webpack_require__(329); var warning = __webpack_require__(4); var createElement = ReactElement.createElement; @@ -39623,7 +41822,7 @@ var cloneElement = ReactElement.cloneElement; if (process.env.NODE_ENV !== 'production') { - var ReactElementValidator = __webpack_require__(130); + var ReactElementValidator = __webpack_require__(132); createElement = ReactElementValidator.createElement; createFactory = ReactElementValidator.createFactory; cloneElement = ReactElementValidator.cloneElement; @@ -39683,7 +41882,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 255 */ +/* 273 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -39701,10 +41900,10 @@ var ReactReconciler = __webpack_require__(43); - var instantiateReactComponent = __webpack_require__(146); - var KeyEscapeUtils = __webpack_require__(80); - var shouldUpdateReactComponent = __webpack_require__(96); - var traverseAllChildren = __webpack_require__(97); + var instantiateReactComponent = __webpack_require__(148); + var KeyEscapeUtils = __webpack_require__(81); + var shouldUpdateReactComponent = __webpack_require__(97); + var traverseAllChildren = __webpack_require__(98); var warning = __webpack_require__(4); var ReactComponentTreeHook; @@ -39843,7 +42042,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 256 */ +/* 274 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -39903,7 +42102,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 257 */ +/* 275 */ /***/ function(module, exports, __webpack_require__) { /** @@ -39919,8 +42118,8 @@ 'use strict'; - var DOMChildrenOperations = __webpack_require__(77); - var ReactDOMIDOperations = __webpack_require__(266); + var DOMChildrenOperations = __webpack_require__(78); + var ReactDOMIDOperations = __webpack_require__(284); /** * Abstracts away all functionality of the reconciler that requires knowledge of @@ -39938,7 +42137,7 @@ module.exports = ReactComponentBrowserEnvironment; /***/ }, -/* 258 */ +/* 276 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -39955,23 +42154,23 @@ 'use strict'; var _prodInvariant = __webpack_require__(6), - _assign = __webpack_require__(8); + _assign = __webpack_require__(9); - var ReactComponentEnvironment = __webpack_require__(83); + var ReactComponentEnvironment = __webpack_require__(84); var ReactCurrentOwner = __webpack_require__(28); var ReactElement = __webpack_require__(21); - var ReactErrorUtils = __webpack_require__(84); + var ReactErrorUtils = __webpack_require__(85); var ReactInstanceMap = __webpack_require__(48); var ReactInstrumentation = __webpack_require__(19); - var ReactNodeTypes = __webpack_require__(137); + var ReactNodeTypes = __webpack_require__(139); var ReactPropTypeLocations = __webpack_require__(62); var ReactReconciler = __webpack_require__(43); - var checkReactTypeSpec = __webpack_require__(142); + var checkReactTypeSpec = __webpack_require__(144); var emptyObject = __webpack_require__(51); var invariant = __webpack_require__(3); - var shallowEqual = __webpack_require__(99); - var shouldUpdateReactComponent = __webpack_require__(96); + var shallowEqual = __webpack_require__(100); + var shouldUpdateReactComponent = __webpack_require__(97); var warning = __webpack_require__(4); var CompositeTypes = { @@ -40848,7 +43047,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 259 */ +/* 277 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -40867,15 +43066,15 @@ 'use strict'; var ReactDOMComponentTree = __webpack_require__(13); - var ReactDefaultInjection = __webpack_require__(277); - var ReactMount = __webpack_require__(135); + var ReactDefaultInjection = __webpack_require__(295); + var ReactMount = __webpack_require__(137); var ReactReconciler = __webpack_require__(43); var ReactUpdates = __webpack_require__(25); - var ReactVersion = __webpack_require__(139); + var ReactVersion = __webpack_require__(141); - var findDOMNode = __webpack_require__(306); - var getHostComponentFromComposite = __webpack_require__(144); - var renderSubtreeIntoContainer = __webpack_require__(313); + var findDOMNode = __webpack_require__(324); + var getHostComponentFromComposite = __webpack_require__(146); + var renderSubtreeIntoContainer = __webpack_require__(331); var warning = __webpack_require__(4); ReactDefaultInjection.inject(); @@ -40953,8 +43152,8 @@ if (process.env.NODE_ENV !== 'production') { var ReactInstrumentation = __webpack_require__(19); - var ReactDOMUnknownPropertyHook = __webpack_require__(274); - var ReactDOMNullInputValuePropHook = __webpack_require__(268); + var ReactDOMUnknownPropertyHook = __webpack_require__(292); + var ReactDOMNullInputValuePropHook = __webpack_require__(286); ReactInstrumentation.debugTool.addHook(ReactDOMUnknownPropertyHook); ReactInstrumentation.debugTool.addHook(ReactDOMNullInputValuePropHook); @@ -40964,7 +43163,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 260 */ +/* 278 */ /***/ function(module, exports, __webpack_require__) { /** @@ -40993,7 +43192,7 @@ module.exports = ReactDOMButton; /***/ }, -/* 261 */ +/* 279 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -41012,36 +43211,36 @@ 'use strict'; var _prodInvariant = __webpack_require__(6), - _assign = __webpack_require__(8); + _assign = __webpack_require__(9); - var AutoFocusUtils = __webpack_require__(245); - var CSSPropertyOperations = __webpack_require__(247); + var AutoFocusUtils = __webpack_require__(263); + var CSSPropertyOperations = __webpack_require__(265); var DOMLazyTree = __webpack_require__(42); - var DOMNamespaces = __webpack_require__(78); + var DOMNamespaces = __webpack_require__(79); var DOMProperty = __webpack_require__(38); - var DOMPropertyOperations = __webpack_require__(125); + var DOMPropertyOperations = __webpack_require__(127); var EventConstants = __webpack_require__(27); var EventPluginHub = __webpack_require__(46); var EventPluginRegistry = __webpack_require__(60); var ReactBrowserEventEmitter = __webpack_require__(61); - var ReactDOMButton = __webpack_require__(260); - var ReactDOMComponentFlags = __webpack_require__(128); + var ReactDOMButton = __webpack_require__(278); + var ReactDOMComponentFlags = __webpack_require__(130); var ReactDOMComponentTree = __webpack_require__(13); - var ReactDOMInput = __webpack_require__(267); - var ReactDOMOption = __webpack_require__(269); - var ReactDOMSelect = __webpack_require__(129); - var ReactDOMTextarea = __webpack_require__(272); + var ReactDOMInput = __webpack_require__(285); + var ReactDOMOption = __webpack_require__(287); + var ReactDOMSelect = __webpack_require__(131); + var ReactDOMTextarea = __webpack_require__(290); var ReactInstrumentation = __webpack_require__(19); - var ReactMultiChild = __webpack_require__(284); - var ReactServerRenderingTransaction = __webpack_require__(289); + var ReactMultiChild = __webpack_require__(302); + var ReactServerRenderingTransaction = __webpack_require__(307); var emptyFunction = __webpack_require__(22); var escapeTextContentForBrowser = __webpack_require__(64); var invariant = __webpack_require__(3); - var isEventSupported = __webpack_require__(95); + var isEventSupported = __webpack_require__(96); var keyOf = __webpack_require__(33); - var shallowEqual = __webpack_require__(99); - var validateDOMNesting = __webpack_require__(98); + var shallowEqual = __webpack_require__(100); + var validateDOMNesting = __webpack_require__(99); var warning = __webpack_require__(4); var Flags = ReactDOMComponentFlags; @@ -42005,7 +44204,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 262 */ +/* 280 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -42021,7 +44220,7 @@ 'use strict'; - var validateDOMNesting = __webpack_require__(98); + var validateDOMNesting = __webpack_require__(99); var DOC_NODE_TYPE = 9; @@ -42044,7 +44243,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 263 */ +/* 281 */ /***/ function(module, exports, __webpack_require__) { /** @@ -42060,7 +44259,7 @@ 'use strict'; - var _assign = __webpack_require__(8); + var _assign = __webpack_require__(9); var DOMLazyTree = __webpack_require__(42); var ReactDOMComponentTree = __webpack_require__(13); @@ -42109,7 +44308,7 @@ module.exports = ReactDOMEmptyComponent; /***/ }, -/* 264 */ +/* 282 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -42134,7 +44333,7 @@ */ var createDOMFactory = ReactElement.createFactory; if (process.env.NODE_ENV !== 'production') { - var ReactElementValidator = __webpack_require__(130); + var ReactElementValidator = __webpack_require__(132); createDOMFactory = ReactElementValidator.createFactory; } @@ -42285,7 +44484,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 265 */ +/* 283 */ /***/ function(module, exports) { /** @@ -42308,7 +44507,7 @@ module.exports = ReactDOMFeatureFlags; /***/ }, -/* 266 */ +/* 284 */ /***/ function(module, exports, __webpack_require__) { /** @@ -42324,7 +44523,7 @@ 'use strict'; - var DOMChildrenOperations = __webpack_require__(77); + var DOMChildrenOperations = __webpack_require__(78); var ReactDOMComponentTree = __webpack_require__(13); /** @@ -42347,7 +44546,7 @@ module.exports = ReactDOMIDOperations; /***/ }, -/* 267 */ +/* 285 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -42364,11 +44563,11 @@ 'use strict'; var _prodInvariant = __webpack_require__(6), - _assign = __webpack_require__(8); + _assign = __webpack_require__(9); var DisabledInputUtils = __webpack_require__(59); - var DOMPropertyOperations = __webpack_require__(125); - var LinkedValueUtils = __webpack_require__(81); + var DOMPropertyOperations = __webpack_require__(127); + var LinkedValueUtils = __webpack_require__(82); var ReactDOMComponentTree = __webpack_require__(13); var ReactUpdates = __webpack_require__(25); @@ -42622,7 +44821,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 268 */ +/* 286 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -42671,7 +44870,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 269 */ +/* 287 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -42687,11 +44886,11 @@ 'use strict'; - var _assign = __webpack_require__(8); + var _assign = __webpack_require__(9); - var ReactChildren = __webpack_require__(126); + var ReactChildren = __webpack_require__(128); var ReactDOMComponentTree = __webpack_require__(13); - var ReactDOMSelect = __webpack_require__(129); + var ReactDOMSelect = __webpack_require__(131); var warning = __webpack_require__(4); var didWarnInvalidOptionChildren = false; @@ -42800,7 +44999,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 270 */ +/* 288 */ /***/ function(module, exports, __webpack_require__) { /** @@ -42818,8 +45017,8 @@ var ExecutionEnvironment = __webpack_require__(17); - var getNodeForCharacterOffset = __webpack_require__(309); - var getTextContentAccessor = __webpack_require__(145); + var getNodeForCharacterOffset = __webpack_require__(327); + var getTextContentAccessor = __webpack_require__(147); /** * While `isCollapsed` is available on the Selection object and `collapsed` @@ -43017,7 +45216,7 @@ module.exports = ReactDOMSelection; /***/ }, -/* 271 */ +/* 289 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -43034,15 +45233,15 @@ 'use strict'; var _prodInvariant = __webpack_require__(6), - _assign = __webpack_require__(8); + _assign = __webpack_require__(9); - var DOMChildrenOperations = __webpack_require__(77); + var DOMChildrenOperations = __webpack_require__(78); var DOMLazyTree = __webpack_require__(42); var ReactDOMComponentTree = __webpack_require__(13); var escapeTextContentForBrowser = __webpack_require__(64); var invariant = __webpack_require__(3); - var validateDOMNesting = __webpack_require__(98); + var validateDOMNesting = __webpack_require__(99); /** * Text nodes violate a couple assumptions that React makes about components: @@ -43187,7 +45386,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 272 */ +/* 290 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -43204,10 +45403,10 @@ 'use strict'; var _prodInvariant = __webpack_require__(6), - _assign = __webpack_require__(8); + _assign = __webpack_require__(9); var DisabledInputUtils = __webpack_require__(59); - var LinkedValueUtils = __webpack_require__(81); + var LinkedValueUtils = __webpack_require__(82); var ReactDOMComponentTree = __webpack_require__(13); var ReactUpdates = __webpack_require__(25); @@ -43348,7 +45547,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 273 */ +/* 291 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -43490,7 +45689,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 274 */ +/* 292 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -43608,7 +45807,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 275 */ +/* 293 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -43624,13 +45823,13 @@ 'use strict'; - var ReactInvalidSetStateWarningHook = __webpack_require__(282); - var ReactHostOperationHistoryHook = __webpack_require__(280); + var ReactInvalidSetStateWarningHook = __webpack_require__(300); + var ReactHostOperationHistoryHook = __webpack_require__(298); var ReactComponentTreeHook = __webpack_require__(20); - var ReactChildrenMutationWarningHook = __webpack_require__(256); + var ReactChildrenMutationWarningHook = __webpack_require__(274); var ExecutionEnvironment = __webpack_require__(17); - var performanceNow = __webpack_require__(327); + var performanceNow = __webpack_require__(345); var warning = __webpack_require__(4); var hooks = []; @@ -43915,7 +46114,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 276 */ +/* 294 */ /***/ function(module, exports, __webpack_require__) { /** @@ -43931,7 +46130,7 @@ 'use strict'; - var _assign = __webpack_require__(8); + var _assign = __webpack_require__(9); var ReactUpdates = __webpack_require__(25); var Transaction = __webpack_require__(50); @@ -43988,7 +46187,7 @@ module.exports = ReactDefaultBatchingStrategy; /***/ }, -/* 277 */ +/* 295 */ /***/ function(module, exports, __webpack_require__) { /** @@ -44004,24 +46203,24 @@ 'use strict'; - var BeforeInputEventPlugin = __webpack_require__(246); - var ChangeEventPlugin = __webpack_require__(248); - var DefaultEventPluginOrder = __webpack_require__(250); - var EnterLeaveEventPlugin = __webpack_require__(251); - var HTMLDOMPropertyConfig = __webpack_require__(253); - var ReactComponentBrowserEnvironment = __webpack_require__(257); - var ReactDOMComponent = __webpack_require__(261); + var BeforeInputEventPlugin = __webpack_require__(264); + var ChangeEventPlugin = __webpack_require__(266); + var DefaultEventPluginOrder = __webpack_require__(268); + var EnterLeaveEventPlugin = __webpack_require__(269); + var HTMLDOMPropertyConfig = __webpack_require__(271); + var ReactComponentBrowserEnvironment = __webpack_require__(275); + var ReactDOMComponent = __webpack_require__(279); var ReactDOMComponentTree = __webpack_require__(13); - var ReactDOMEmptyComponent = __webpack_require__(263); - var ReactDOMTreeTraversal = __webpack_require__(273); - var ReactDOMTextComponent = __webpack_require__(271); - var ReactDefaultBatchingStrategy = __webpack_require__(276); - var ReactEventListener = __webpack_require__(279); - var ReactInjection = __webpack_require__(281); - var ReactReconcileTransaction = __webpack_require__(287); - var SVGDOMPropertyConfig = __webpack_require__(291); - var SelectEventPlugin = __webpack_require__(292); - var SimpleEventPlugin = __webpack_require__(293); + var ReactDOMEmptyComponent = __webpack_require__(281); + var ReactDOMTreeTraversal = __webpack_require__(291); + var ReactDOMTextComponent = __webpack_require__(289); + var ReactDefaultBatchingStrategy = __webpack_require__(294); + var ReactEventListener = __webpack_require__(297); + var ReactInjection = __webpack_require__(299); + var ReactReconcileTransaction = __webpack_require__(305); + var SVGDOMPropertyConfig = __webpack_require__(309); + var SelectEventPlugin = __webpack_require__(310); + var SimpleEventPlugin = __webpack_require__(311); var alreadyInjected = false; @@ -44077,7 +46276,7 @@ }; /***/ }, -/* 278 */ +/* 296 */ /***/ function(module, exports, __webpack_require__) { /** @@ -44115,7 +46314,7 @@ module.exports = ReactEventEmitterMixin; /***/ }, -/* 279 */ +/* 297 */ /***/ function(module, exports, __webpack_require__) { /** @@ -44131,16 +46330,16 @@ 'use strict'; - var _assign = __webpack_require__(8); + var _assign = __webpack_require__(9); - var EventListener = __webpack_require__(149); + var EventListener = __webpack_require__(151); var ExecutionEnvironment = __webpack_require__(17); var PooledClass = __webpack_require__(32); var ReactDOMComponentTree = __webpack_require__(13); var ReactUpdates = __webpack_require__(25); - var getEventTarget = __webpack_require__(93); - var getUnboundedScrollPosition = __webpack_require__(320); + var getEventTarget = __webpack_require__(94); + var getUnboundedScrollPosition = __webpack_require__(338); /** * Find the deepest React component completely containing the root of the @@ -44277,7 +46476,7 @@ module.exports = ReactEventListener; /***/ }, -/* 280 */ +/* 298 */ /***/ function(module, exports) { /** @@ -44319,7 +46518,7 @@ module.exports = ReactHostOperationHistoryHook; /***/ }, -/* 281 */ +/* 299 */ /***/ function(module, exports, __webpack_require__) { /** @@ -44337,12 +46536,12 @@ var DOMProperty = __webpack_require__(38); var EventPluginHub = __webpack_require__(46); - var EventPluginUtils = __webpack_require__(79); - var ReactComponentEnvironment = __webpack_require__(83); - var ReactClass = __webpack_require__(127); - var ReactEmptyComponent = __webpack_require__(131); + var EventPluginUtils = __webpack_require__(80); + var ReactComponentEnvironment = __webpack_require__(84); + var ReactClass = __webpack_require__(129); + var ReactEmptyComponent = __webpack_require__(133); var ReactBrowserEventEmitter = __webpack_require__(61); - var ReactHostComponent = __webpack_require__(133); + var ReactHostComponent = __webpack_require__(135); var ReactUpdates = __webpack_require__(25); var ReactInjection = { @@ -44360,7 +46559,7 @@ module.exports = ReactInjection; /***/ }, -/* 282 */ +/* 300 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -44402,7 +46601,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 283 */ +/* 301 */ /***/ function(module, exports, __webpack_require__) { /** @@ -44418,7 +46617,7 @@ 'use strict'; - var adler32 = __webpack_require__(304); + var adler32 = __webpack_require__(322); var TAG_END = /\/?>/; var COMMENT_START = /^<\!\-\-/; @@ -44457,7 +46656,7 @@ module.exports = ReactMarkupChecksum; /***/ }, -/* 284 */ +/* 302 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -44475,17 +46674,17 @@ var _prodInvariant = __webpack_require__(6); - var ReactComponentEnvironment = __webpack_require__(83); + var ReactComponentEnvironment = __webpack_require__(84); var ReactInstanceMap = __webpack_require__(48); var ReactInstrumentation = __webpack_require__(19); - var ReactMultiChildUpdateTypes = __webpack_require__(136); + var ReactMultiChildUpdateTypes = __webpack_require__(138); var ReactCurrentOwner = __webpack_require__(28); var ReactReconciler = __webpack_require__(43); - var ReactChildReconciler = __webpack_require__(255); + var ReactChildReconciler = __webpack_require__(273); var emptyFunction = __webpack_require__(22); - var flattenChildren = __webpack_require__(307); + var flattenChildren = __webpack_require__(325); var invariant = __webpack_require__(3); /** @@ -44914,7 +47113,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 285 */ +/* 303 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -45014,7 +47213,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 286 */ +/* 304 */ /***/ function(module, exports, __webpack_require__) { /** @@ -45030,10 +47229,10 @@ 'use strict'; - var _assign = __webpack_require__(8); + var _assign = __webpack_require__(9); - var ReactComponent = __webpack_require__(82); - var ReactNoopUpdateQueue = __webpack_require__(85); + var ReactComponent = __webpack_require__(83); + var ReactNoopUpdateQueue = __webpack_require__(86); var emptyObject = __webpack_require__(51); @@ -45061,7 +47260,7 @@ module.exports = ReactPureComponent; /***/ }, -/* 287 */ +/* 305 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -45077,15 +47276,15 @@ 'use strict'; - var _assign = __webpack_require__(8); + var _assign = __webpack_require__(9); - var CallbackQueue = __webpack_require__(124); + var CallbackQueue = __webpack_require__(126); var PooledClass = __webpack_require__(32); var ReactBrowserEventEmitter = __webpack_require__(61); - var ReactInputSelection = __webpack_require__(134); + var ReactInputSelection = __webpack_require__(136); var ReactInstrumentation = __webpack_require__(19); var Transaction = __webpack_require__(50); - var ReactUpdateQueue = __webpack_require__(88); + var ReactUpdateQueue = __webpack_require__(89); /** * Ensures that, when possible, the selection range (currently selected text @@ -45245,7 +47444,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 288 */ +/* 306 */ /***/ function(module, exports, __webpack_require__) { /** @@ -45261,7 +47460,7 @@ 'use strict'; - var ReactOwner = __webpack_require__(285); + var ReactOwner = __webpack_require__(303); var ReactRef = {}; @@ -45330,7 +47529,7 @@ module.exports = ReactRef; /***/ }, -/* 289 */ +/* 307 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -45346,12 +47545,12 @@ 'use strict'; - var _assign = __webpack_require__(8); + var _assign = __webpack_require__(9); var PooledClass = __webpack_require__(32); var Transaction = __webpack_require__(50); var ReactInstrumentation = __webpack_require__(19); - var ReactServerUpdateQueue = __webpack_require__(290); + var ReactServerUpdateQueue = __webpack_require__(308); /** * Executed within the scope of the `Transaction` instance. Consider these as @@ -45426,7 +47625,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 290 */ +/* 308 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -45445,7 +47644,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var ReactUpdateQueue = __webpack_require__(88); + var ReactUpdateQueue = __webpack_require__(89); var Transaction = __webpack_require__(50); var warning = __webpack_require__(4); @@ -45573,7 +47772,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 291 */ +/* 309 */ /***/ function(module, exports) { /** @@ -45880,7 +48079,7 @@ module.exports = SVGDOMPropertyConfig; /***/ }, -/* 292 */ +/* 310 */ /***/ function(module, exports, __webpack_require__) { /** @@ -45900,13 +48099,13 @@ var EventPropagators = __webpack_require__(47); var ExecutionEnvironment = __webpack_require__(17); var ReactDOMComponentTree = __webpack_require__(13); - var ReactInputSelection = __webpack_require__(134); + var ReactInputSelection = __webpack_require__(136); var SyntheticEvent = __webpack_require__(29); - var getActiveElement = __webpack_require__(151); - var isTextInputElement = __webpack_require__(147); + var getActiveElement = __webpack_require__(153); + var isTextInputElement = __webpack_require__(149); var keyOf = __webpack_require__(33); - var shallowEqual = __webpack_require__(99); + var shallowEqual = __webpack_require__(100); var topLevelTypes = EventConstants.topLevelTypes; @@ -46081,7 +48280,7 @@ module.exports = SelectEventPlugin; /***/ }, -/* 293 */ +/* 311 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -46100,23 +48299,23 @@ var _prodInvariant = __webpack_require__(6); var EventConstants = __webpack_require__(27); - var EventListener = __webpack_require__(149); + var EventListener = __webpack_require__(151); var EventPropagators = __webpack_require__(47); var ReactDOMComponentTree = __webpack_require__(13); - var SyntheticAnimationEvent = __webpack_require__(294); - var SyntheticClipboardEvent = __webpack_require__(295); + var SyntheticAnimationEvent = __webpack_require__(312); + var SyntheticClipboardEvent = __webpack_require__(313); var SyntheticEvent = __webpack_require__(29); - var SyntheticFocusEvent = __webpack_require__(298); - var SyntheticKeyboardEvent = __webpack_require__(300); + var SyntheticFocusEvent = __webpack_require__(316); + var SyntheticKeyboardEvent = __webpack_require__(318); var SyntheticMouseEvent = __webpack_require__(63); - var SyntheticDragEvent = __webpack_require__(297); - var SyntheticTouchEvent = __webpack_require__(301); - var SyntheticTransitionEvent = __webpack_require__(302); + var SyntheticDragEvent = __webpack_require__(315); + var SyntheticTouchEvent = __webpack_require__(319); + var SyntheticTransitionEvent = __webpack_require__(320); var SyntheticUIEvent = __webpack_require__(49); - var SyntheticWheelEvent = __webpack_require__(303); + var SyntheticWheelEvent = __webpack_require__(321); var emptyFunction = __webpack_require__(22); - var getEventCharCode = __webpack_require__(91); + var getEventCharCode = __webpack_require__(92); var invariant = __webpack_require__(3); var keyOf = __webpack_require__(33); @@ -46722,7 +48921,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 294 */ +/* 312 */ /***/ function(module, exports, __webpack_require__) { /** @@ -46766,7 +48965,7 @@ module.exports = SyntheticAnimationEvent; /***/ }, -/* 295 */ +/* 313 */ /***/ function(module, exports, __webpack_require__) { /** @@ -46809,7 +49008,7 @@ module.exports = SyntheticClipboardEvent; /***/ }, -/* 296 */ +/* 314 */ /***/ function(module, exports, __webpack_require__) { /** @@ -46850,7 +49049,7 @@ module.exports = SyntheticCompositionEvent; /***/ }, -/* 297 */ +/* 315 */ /***/ function(module, exports, __webpack_require__) { /** @@ -46891,7 +49090,7 @@ module.exports = SyntheticDragEvent; /***/ }, -/* 298 */ +/* 316 */ /***/ function(module, exports, __webpack_require__) { /** @@ -46932,7 +49131,7 @@ module.exports = SyntheticFocusEvent; /***/ }, -/* 299 */ +/* 317 */ /***/ function(module, exports, __webpack_require__) { /** @@ -46974,7 +49173,7 @@ module.exports = SyntheticInputEvent; /***/ }, -/* 300 */ +/* 318 */ /***/ function(module, exports, __webpack_require__) { /** @@ -46992,9 +49191,9 @@ var SyntheticUIEvent = __webpack_require__(49); - var getEventCharCode = __webpack_require__(91); - var getEventKey = __webpack_require__(308); - var getEventModifierState = __webpack_require__(92); + var getEventCharCode = __webpack_require__(92); + var getEventKey = __webpack_require__(326); + var getEventModifierState = __webpack_require__(93); /** * @interface KeyboardEvent @@ -47063,7 +49262,7 @@ module.exports = SyntheticKeyboardEvent; /***/ }, -/* 301 */ +/* 319 */ /***/ function(module, exports, __webpack_require__) { /** @@ -47081,7 +49280,7 @@ var SyntheticUIEvent = __webpack_require__(49); - var getEventModifierState = __webpack_require__(92); + var getEventModifierState = __webpack_require__(93); /** * @interface TouchEvent @@ -47113,7 +49312,7 @@ module.exports = SyntheticTouchEvent; /***/ }, -/* 302 */ +/* 320 */ /***/ function(module, exports, __webpack_require__) { /** @@ -47157,7 +49356,7 @@ module.exports = SyntheticTransitionEvent; /***/ }, -/* 303 */ +/* 321 */ /***/ function(module, exports, __webpack_require__) { /** @@ -47216,7 +49415,7 @@ module.exports = SyntheticWheelEvent; /***/ }, -/* 304 */ +/* 322 */ /***/ function(module, exports) { /** @@ -47265,7 +49464,7 @@ module.exports = adler32; /***/ }, -/* 305 */ +/* 323 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -47281,7 +49480,7 @@ 'use strict'; - var CSSProperty = __webpack_require__(123); + var CSSProperty = __webpack_require__(125); var warning = __webpack_require__(4); var isUnitlessNumber = CSSProperty.isUnitlessNumber; @@ -47350,7 +49549,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 306 */ +/* 324 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -47372,7 +49571,7 @@ var ReactDOMComponentTree = __webpack_require__(13); var ReactInstanceMap = __webpack_require__(48); - var getHostComponentFromComposite = __webpack_require__(144); + var getHostComponentFromComposite = __webpack_require__(146); var invariant = __webpack_require__(3); var warning = __webpack_require__(4); @@ -47416,7 +49615,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 307 */ +/* 325 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -47433,8 +49632,8 @@ 'use strict'; - var KeyEscapeUtils = __webpack_require__(80); - var traverseAllChildren = __webpack_require__(97); + var KeyEscapeUtils = __webpack_require__(81); + var traverseAllChildren = __webpack_require__(98); var warning = __webpack_require__(4); var ReactComponentTreeHook; @@ -47498,7 +49697,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 308 */ +/* 326 */ /***/ function(module, exports, __webpack_require__) { /** @@ -47514,7 +49713,7 @@ 'use strict'; - var getEventCharCode = __webpack_require__(91); + var getEventCharCode = __webpack_require__(92); /** * Normalization of deprecated HTML5 `key` values @@ -47605,7 +49804,7 @@ module.exports = getEventKey; /***/ }, -/* 309 */ +/* 327 */ /***/ function(module, exports) { /** @@ -47684,7 +49883,7 @@ module.exports = getNodeForCharacterOffset; /***/ }, -/* 310 */ +/* 328 */ /***/ function(module, exports, __webpack_require__) { /** @@ -47790,7 +49989,7 @@ module.exports = getVendorPrefixedEventName; /***/ }, -/* 311 */ +/* 329 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** @@ -47834,7 +50033,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 312 */ +/* 330 */ /***/ function(module, exports, __webpack_require__) { /** @@ -47865,7 +50064,7 @@ module.exports = quoteAttributeValueForBrowser; /***/ }, -/* 313 */ +/* 331 */ /***/ function(module, exports, __webpack_require__) { /** @@ -47881,12 +50080,12 @@ 'use strict'; - var ReactMount = __webpack_require__(135); + var ReactMount = __webpack_require__(137); module.exports = ReactMount.renderSubtreeIntoContainer; /***/ }, -/* 314 */ +/* 332 */ /***/ function(module, exports) { "use strict"; @@ -47922,7 +50121,7 @@ module.exports = camelize; /***/ }, -/* 315 */ +/* 333 */ /***/ function(module, exports, __webpack_require__) { /** @@ -47938,7 +50137,7 @@ 'use strict'; - var camelize = __webpack_require__(314); + var camelize = __webpack_require__(332); var msPattern = /^-ms-/; @@ -47966,7 +50165,7 @@ module.exports = camelizeStyleName; /***/ }, -/* 316 */ +/* 334 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -47982,7 +50181,7 @@ * */ - var isTextNode = __webpack_require__(324); + var isTextNode = __webpack_require__(342); /*eslint-disable no-bitwise */ @@ -48010,7 +50209,7 @@ module.exports = containsNode; /***/ }, -/* 317 */ +/* 335 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {'use strict'; @@ -48142,7 +50341,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 318 */ +/* 336 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {'use strict'; @@ -48162,8 +50361,8 @@ var ExecutionEnvironment = __webpack_require__(17); - var createArrayFromMixed = __webpack_require__(317); - var getMarkupWrap = __webpack_require__(319); + var createArrayFromMixed = __webpack_require__(335); + var getMarkupWrap = __webpack_require__(337); var invariant = __webpack_require__(3); /** @@ -48231,7 +50430,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 319 */ +/* 337 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {'use strict'; @@ -48331,7 +50530,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 320 */ +/* 338 */ /***/ function(module, exports) { /** @@ -48374,7 +50573,7 @@ module.exports = getUnboundedScrollPosition; /***/ }, -/* 321 */ +/* 339 */ /***/ function(module, exports) { 'use strict'; @@ -48411,7 +50610,7 @@ module.exports = hyphenate; /***/ }, -/* 322 */ +/* 340 */ /***/ function(module, exports, __webpack_require__) { /** @@ -48427,7 +50626,7 @@ 'use strict'; - var hyphenate = __webpack_require__(321); + var hyphenate = __webpack_require__(339); var msPattern = /^ms-/; @@ -48454,7 +50653,7 @@ module.exports = hyphenateStyleName; /***/ }, -/* 323 */ +/* 341 */ /***/ function(module, exports) { 'use strict'; @@ -48481,7 +50680,7 @@ module.exports = isNode; /***/ }, -/* 324 */ +/* 342 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -48497,7 +50696,7 @@ * @typechecks */ - var isNode = __webpack_require__(323); + var isNode = __webpack_require__(341); /** * @param {*} object The object to check. @@ -48510,7 +50709,7 @@ module.exports = isTextNode; /***/ }, -/* 325 */ +/* 343 */ /***/ function(module, exports) { /** @@ -48544,7 +50743,7 @@ module.exports = memoizeStringOnly; /***/ }, -/* 326 */ +/* 344 */ /***/ function(module, exports, __webpack_require__) { /** @@ -48571,7 +50770,7 @@ module.exports = performance || {}; /***/ }, -/* 327 */ +/* 345 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -48587,7 +50786,7 @@ * @typechecks */ - var performance = __webpack_require__(326); + var performance = __webpack_require__(344); var performanceNow; @@ -48609,7 +50808,7 @@ module.exports = performanceNow; /***/ }, -/* 328 */ +/* 346 */ /***/ function(module, exports) { 'use strict'; @@ -48637,7 +50836,7 @@ exports['default'] = thunk; /***/ }, -/* 329 */ +/* 347 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -48648,7 +50847,7 @@ exports['default'] = applyMiddleware; - var _compose = __webpack_require__(152); + var _compose = __webpack_require__(154); var _compose2 = _interopRequireDefault(_compose); @@ -48700,7 +50899,7 @@ } /***/ }, -/* 330 */ +/* 348 */ /***/ function(module, exports) { 'use strict'; @@ -48756,7 +50955,7 @@ } /***/ }, -/* 331 */ +/* 349 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {'use strict'; @@ -48764,13 +50963,13 @@ exports.__esModule = true; exports['default'] = combineReducers; - var _createStore = __webpack_require__(153); + var _createStore = __webpack_require__(155); - var _isPlainObject = __webpack_require__(155); + var _isPlainObject = __webpack_require__(157); var _isPlainObject2 = _interopRequireDefault(_isPlainObject); - var _warning = __webpack_require__(154); + var _warning = __webpack_require__(156); var _warning2 = _interopRequireDefault(_warning); @@ -48904,67 +51103,48 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) /***/ }, -/* 332 */ -[380, 333], -/* 333 */ -221, -/* 334 */ -222, -/* 335 */ -/***/ function(module, exports) { +/* 350 */ +[381, 351], +/* 351 */ +228, +/* 352 */ +229, +/* 353 */ +/***/ function(module, exports, __webpack_require__) { - 'use strict'; - module.exports = function (str) { - return encodeURIComponent(str).replace(/[!'()*]/g, function (c) { - return '%' + c.charCodeAt(0).toString(16).toUpperCase(); - }); - }; + module.exports = __webpack_require__(354); /***/ }, -/* 336 */ +/* 354 */ /***/ function(module, exports, __webpack_require__) { - module.exports = __webpack_require__(337); - - -/***/ }, -/* 337 */ -/***/ function(module, exports, __webpack_require__) { - - /* WEBPACK VAR INJECTION */(function(global, module) {'use strict'; + /* WEBPACK VAR INJECTION */(function(global) {'use strict'; Object.defineProperty(exports, "__esModule", { - value: true + value: true }); - var _ponyfill = __webpack_require__(338); + var _ponyfill = __webpack_require__(355); var _ponyfill2 = _interopRequireDefault(_ponyfill); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - var root; /* global window */ + var root = undefined; /* global window */ - - if (typeof self !== 'undefined') { - root = self; + if (typeof global !== 'undefined') { + root = global; } else if (typeof window !== 'undefined') { - root = window; - } else if (typeof global !== 'undefined') { - root = global; - } else if (true) { - root = module; - } else { - root = Function('return this')(); + root = window; } var result = (0, _ponyfill2['default'])(root); exports['default'] = result; - /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(363)(module))) + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) /***/ }, -/* 338 */ +/* 355 */ /***/ function(module, exports) { 'use strict'; @@ -48992,141 +51172,139 @@ }; /***/ }, -/* 339 */ +/* 356 */ /***/ function(module, exports) { module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE2IDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik04LjAyNiwyLjEwNWMzLjIxNiwwLDUuODMzLDIuNjE3LDUuODMzLDUuODMzcy0yLjYxNyw1LjgzMy01LjgzMyw1LjgzM2MtMy4yMTcsMC01LjgzMi0yLjYxNy01LjgzMi01LjgzMw0KCQlTNC44MSwyLjEwNSw4LjAyNiwyLjEwNSBNOC4wMjYsMC42ODhjLTQuMDA0LDAtNy4yNSwzLjI0Ni03LjI1LDcuMjVzMy4yNDUsNy4yNDksNy4yNSw3LjI0OWM0LjAwNSwwLDcuMjUtMy4yNDUsNy4yNS03LjI0OQ0KCQlTMTIuMDMxLDAuNjg4LDguMDI2LDAuNjg4TDguMDI2LDAuNjg4eiIvPg0KPC9nPg0KPGc+DQoJPHBhdGggZD0iTTguMDI2LDYuNWMwLjc5NCwwLDEuNDM4LDAuNjQ2LDEuNDM4LDEuNDM4UzguODE4LDkuMzc1LDguMDI2LDkuMzc1Yy0wLjc5MywwLTEuNDM4LTAuNjQ2LTEuNDM4LTEuNDM4DQoJCVM3LjIzMyw2LjUsOC4wMjYsNi41IE04LjAyNiw1LjA4M2MtMS41NzcsMC0yLjg1NSwxLjI3OC0yLjg1NSwyLjg1NWMwLDEuNTc3LDEuMjc4LDIuODU0LDIuODU1LDIuODU0czIuODU1LTEuMjc3LDIuODU1LTIuODU0DQoJCUMxMC44ODIsNi4zNjEsOS42MDQsNS4wODMsOC4wMjYsNS4wODNMOC4wMjYsNS4wODN6Ii8+DQo8L2c+DQo8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMC43MDg3IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik00Ljc0LDUuMDgxDQoJYzAuNzk4LTAuOTE4LDEuOTc0LTEuNDk4LDMuMjg2LTEuNDk4Ii8+DQo8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMC43MDg3IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik0xMS4zMTMsMTAuNzk2DQoJYy0wLjc5NywwLjkxOC0xLjk3NCwxLjQ5OC0zLjI4NiwxLjQ5OCIvPg0KPC9zdmc+DQo=" /***/ }, -/* 340 */ +/* 357 */ /***/ function(module, exports) { module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE2IDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwb2x5bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMTAxMDEiIHN0cm9rZS13aWR0aD0iMS44NTQ2IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRzPSINCgkxMS4yMDcsMTQuMjk5IDQuODQ1LDcuOTM2IDExLjIwNywxLjU3NiAiLz4NCjwvc3ZnPg0K" /***/ }, -/* 341 */ +/* 358 */ /***/ function(module, exports) { module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE2IDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwb2x5bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMTAxMDEiIHN0cm9rZS13aWR0aD0iMS44NTQ2IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRzPSINCgk0Ljg0NSwxLjU3NiAxMS4yMDcsNy45MzggNC44NDUsMTQuMjk5ICIvPg0KPC9zdmc+DQo=" /***/ }, -/* 342 */ +/* 359 */ /***/ function(module, exports) { module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iNTBweCIgaGVpZ2h0PSI1MHB4IiB2aWV3Qm94PSIwIDAgNTAgNTAiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDUwIDUwIiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIyLjgzNDYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgeDE9IjYiIHkxPSI2IiB4Mj0iNDQiIHkyPSI0NCIvPg0KPGxpbmUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjIuODM0NiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiB4MT0iNiIgeTE9IjQ0IiB4Mj0iNDQiIHkyPSI2Ii8+DQo8L3N2Zz4NCg==" /***/ }, -/* 343 */ +/* 360 */ /***/ function(module, exports) { module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iNTBweCIgaGVpZ2h0PSI1MHB4IiB2aWV3Qm94PSIwIDAgNTAgNTAiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDUwIDUwIiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iI0ZGRkZGRiIgc3Ryb2tlLXdpZHRoPSIyLjgzNDYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgeDE9IjYiIHkxPSI2IiB4Mj0iNDQiIHkyPSI0NCIvPg0KPGxpbmUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjRkZGRkZGIiBzdHJva2Utd2lkdGg9IjIuODM0NiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiB4MT0iNiIgeTE9IjQ0IiB4Mj0iNDQiIHkyPSI2Ii8+DQo8L3N2Zz4NCg==" /***/ }, -/* 344 */ +/* 361 */ /***/ function(module, exports) { module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE2IDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxnPg0KCQk8cGF0aCBkPSJNNy45MzgsNi45NDhjMC41MzIsMCwwLjk2NiwwLjQzNSwwLjk2NiwwLjk2OGMwLDAuNTMyLTAuNDM0LDAuOTY3LTAuOTY2LDAuOTY3Yy0wLjUzMywwLTAuOTY3LTAuNDM1LTAuOTY3LTAuOTY3DQoJCQlDNi45NzIsNy4zODMsNy40MDUsNi45NDgsNy45MzgsNi45NDggTTcuOTM4LDUuODE1Yy0xLjE2LDAtMi4xMDIsMC45NDEtMi4xMDIsMi4xMDJjMCwxLjE2LDAuOTQsMi4xMDIsMi4xMDIsMi4xMDINCgkJCWMxLjE1OSwwLDIuMTAxLTAuOTQxLDIuMTAxLTIuMTAyQzEwLjAzOSw2Ljc1Niw5LjA5OCw1LjgxNSw3LjkzOCw1LjgxNUw3LjkzOCw1LjgxNXoiLz4NCgk8L2c+DQoJPGc+DQoJCTxwYXRoIGQ9Ik03LjkzOCw0LjIzNWMyLjAyOSwwLDMuNjgxLDEuNjUyLDMuNjgxLDMuNjgyYzAsMi4wMjktMS42NSwzLjY4Mi0zLjY4MSwzLjY4MmMtMi4wMjksMC0zLjY4LTEuNjUyLTMuNjgtMy42ODINCgkJCUM0LjI1OSw1Ljg4Nyw1LjkwOCw0LjIzNSw3LjkzOCw0LjIzNSBNNy45MzgsMi44MThjLTIuODE1LDAtNS4wOTgsMi4yODMtNS4wOTgsNS4wOTlzMi4yODIsNS4wOTksNS4wOTgsNS4wOTkNCgkJCXM1LjA5OS0yLjI4Miw1LjA5OS01LjA5OVMxMC43NTQsMi44MTgsNy45MzgsMi44MThMNy45MzgsMi44MTh6Ii8+DQoJPC9nPg0KCTxnPg0KCQk8Zz4NCgkJCTxwb2x5Z29uIHBvaW50cz0iOS4zMTgsMTIuNzg4IDYuNTQ4LDEyLjc4OCA2LjU0OCwxNC45MTYgOS4zMTgsMTQuOTE2IAkJCSIvPg0KCQk8L2c+DQoJCTxnPg0KCQkJPHBvbHlnb24gcG9pbnRzPSI5LjMxOCwwLjk1OSA2LjU0OCwwLjk1OSA2LjU0OCwzLjA4NiA5LjMxOCwzLjA4NiAJCQkiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwb2x5Z29uIHBvaW50cz0iMy4wOCw2LjU1MiAwLjk1Myw2LjU1MiAwLjk1NCw5LjMyMyAzLjA4MSw5LjMyMyAJCQkiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwb2x5Z29uIHBvaW50cz0iMTUuMDk4LDYuNTUyIDEyLjc4MSw2LjU1MiAxMi43ODMsOS4zMjMgMTUuMDk5LDkuMzIzIAkJCSIvPg0KCQk8L2c+DQoJCTxnPg0KCQkJPHBvbHlnb24gcG9pbnRzPSIzLjUyMywxMC4zOSAyLjAxOSwxMS44OTQgMy45NzgsMTMuODUzIDUuNDgyLDEyLjM0OSAJCQkiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwb2x5Z29uIHBvaW50cz0iMTEuODg3LDIuMDI1IDEwLjM4MywzLjUyOSAxMi4zNDIsNS40ODggMTMuODQ3LDMuOTg0IAkJCSIvPg0KCQk8L2c+DQoJCTxnPg0KCQkJPHBvbHlnb24gcG9pbnRzPSIzLjk3OCwyLjAyNCAyLjAxOSwzLjk4MyAzLjUyMyw1LjQ4NyA1LjQ4MSwzLjUyOCAJCQkiLz4NCgkJPC9nPg0KCQk8Zz4NCgkJCTxwb2x5Z29uIHBvaW50cz0iMTIuMzQyLDEwLjM4OSAxMC4zODMsMTIuMzQ4IDExLjg4NywxMy44NTIgMTMuODQ2LDExLjg5MyAJCQkiLz4NCgkJPC9nPg0KCTwvZz4NCjwvZz4NCjwvc3ZnPg0K" /***/ }, -/* 345 */ +/* 362 */ /***/ function(module, exports) { module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE2IDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxnPg0KCQk8cGF0aCBkPSJNOC4wMjYsMi4xMDRjMy4yMTUsMCw1LjgzMiwyLjYxNyw1LjgzMiw1LjgzM2MwLDMuMjE2LTIuNjE3LDUuODMxLTUuODMyLDUuODMxYy0zLjIxNiwwLTUuODMyLTIuNjE1LTUuODMyLTUuODMxDQoJCQlDMi4xOTQsNC43MjEsNC44MTEsMi4xMDQsOC4wMjYsMi4xMDQgTTguMDI2LDAuNjg4Yy00LjAwNCwwLTcuMjUsMy4yNDYtNy4yNSw3LjI1YzAsNC4wMDQsMy4yNDUsNy4yNSw3LjI1LDcuMjUNCgkJCWM0LjAwMywwLDcuMjQ5LTMuMjQ2LDcuMjQ5LTcuMjVDMTUuMjc1LDMuOTMyLDEyLjAyOSwwLjY4OCw4LjAyNiwwLjY4OEw4LjAyNiwwLjY4OHoiLz4NCgk8L2c+DQoJPHBhdGggZD0iTTYuNTE3LDYuNDI4bC0yLjA3LDUuMDg5bDUuMDktMi4wNjlsMi4wNjktNS4wOTFMNi41MTcsNi40Mjh6IE04LjAyNiw4Ljc3NWMtMC40NjIsMC0wLjgzNy0wLjM3NS0wLjgzNy0wLjgzNg0KCQljMC0wLjQ2MywwLjM3NS0wLjgzOCwwLjgzNy0wLjgzOGMwLjQ2MSwwLDAuODM2LDAuMzc1LDAuODM2LDAuODM4QzguODYyLDguNCw4LjQ4Nyw4Ljc3NSw4LjAyNiw4Ljc3NXoiLz4NCjwvZz4NCjwvc3ZnPg0K" /***/ }, -/* 346 */ +/* 363 */ /***/ function(module, exports) { module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE2IDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwYXRoIGQ9Ik0xMy45NTQsMi4xMzljLTAuMDg1LTAuMTYzLTAuMjUzLTAuMjY0LTAuNDM3LTAuMjY0SDIuNDhjLTAuMTgzLDAtMC4zNTIsMC4xMDItMC40MzcsMC4yNjRzLTAuMDc0LDAuMzU5LDAuMDMsMC41MQ0KCUw2Ljg2LDkuNjA0YzAsMS4zLDAsNC4wMTMsMCw0LjMyYzEuMDIxLTAuMjU0LDEuMjU4LDEuMTY1LDIuMjc4LDAuNDI5YzAtMC40MjYsMC0zLjM4NCwwLTQuNzQ4bDQuNzg1LTYuOTU3DQoJQzE0LjAyOCwyLjQ5OCwxNC4wNCwyLjMwMiwxMy45NTQsMi4xMzl6IE04LDguNjA0TDUuMzUxLDQuNzU0aDUuMjk3TDgsOC42MDR6Ii8+DQo8L3N2Zz4NCg==" /***/ }, -/* 347 */ +/* 364 */ /***/ function(module, exports) { module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE2IDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxnPg0KCQk8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMS40MTczIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik0xMy45NCwxMy4xMjVjMCwwLjI3NC0wLjIyNSwwLjUtMC41LDAuNQ0KCQkJSDIuNjEyYy0wLjI3NSwwLTAuNS0wLjIyNi0wLjUtMC41di03Ljc1YzAtMC4yNzUsMC4yMjUtMC41LDAuNS0wLjVIMTMuNDRjMC4yNzUsMCwwLjUsMC4yMjUsMC41LDAuNVYxMy4xMjV6Ii8+DQoJPC9nPg0KCQ0KCQk8cmVjdCB4PSIyLjcwNiIgeT0iMi4yNSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjEuNDE3MyIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiB3aWR0aD0iNC44NTQiIGhlaWdodD0iMi42MjUiLz4NCjwvZz4NCjwvc3ZnPg0K" /***/ }, -/* 348 */ +/* 365 */ /***/ function(module, exports) { module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE2IDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxyZWN0IHg9IjEuOTk1IiB5PSIxLjkwOCIgd2lkdGg9IjQuOTY5IiBoZWlnaHQ9IjQuOTcxIi8+DQoJPHJlY3QgeD0iOS4wODYiIHk9IjguOTk5IiB3aWR0aD0iNC45NzEiIGhlaWdodD0iNC45NjkiLz4NCgk8cmVjdCB4PSIxLjk5NSIgeT0iOC45OTkiIHdpZHRoPSI0Ljk2OSIgaGVpZ2h0PSI0Ljk2OSIvPg0KCTxyZWN0IHg9IjkuMDg2IiB5PSIxLjkwNyIgd2lkdGg9IjQuOTY5IiBoZWlnaHQ9IjQuOTcyIi8+DQo8L2c+DQo8L3N2Zz4NCg==" /***/ }, -/* 349 */ +/* 366 */ /***/ function(module, exports) { module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE2IDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwYXRoIGQ9Ik0xLjc4LDQuMDZjMCwwLDQuMjA1LTMuNzg1LDguMjMyLTEuNDAzYzQuMDI2LDIuMzgxLDUuMjI5LDUuNDg2LDMuNDc2LDcuNzRjLTIuMDIzLTMuMTczLTMuMDk2LTQuNzAxLTcuMzI3LTYuMDAzDQoJYzAsMCw2LjYzLDQuMTUzLDcuNzc4LDkuMDU4Yy0wLjE3NSwxLjA0Ny0xLjE1MiwwLjI4OS0xLjE1MiwwLjI4OWwtMS4wNjctMS43N2MwLDAtMi4wNSwxLjU4My00LjQ3MS0wLjUwOA0KCUMzLjE0NCw3LjkxNiw2LjQ0NCwzLjk1MSwxLjc4LDQuMDZ6Ii8+DQo8L3N2Zz4NCg==" /***/ }, -/* 350 */ +/* 367 */ /***/ function(module, exports) { module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE2IDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAxMDEwMSIgc3Ryb2tlLXdpZHRoPSIxLjg1NDYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgeDE9IjEuNzI5IiB5MT0iMy4zNTkiIHgyPSIxNC4zMjMiIHkyPSIzLjM1OSIvPg0KCTxsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAxMDEwMSIgc3Ryb2tlLXdpZHRoPSIxLjg1NDYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgeDE9IjEuNzI5IiB5MT0iNy45MzgiIHgyPSIxNC4zMjMiIHkyPSI3LjkzOCIvPg0KCQ0KCQk8bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMTAxMDEiIHN0cm9rZS13aWR0aD0iMS44NTQ2IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHgxPSIxLjcyOSIgeTE9IjEyLjUxNiIgeDI9IjE0LjMyMyIgeTI9IjEyLjUxNiIvPg0KPC9nPg0KPC9zdmc+DQo=" /***/ }, -/* 351 */ +/* 368 */ /***/ function(module, exports) { module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE2IDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwYXRoIGlkPSJsb2NhbCIgZD0iTTE0LjI2OCw0LjI5M0g5LjY1TDguMTEsMi43NTRIMy40OTR2MS41MzlIMS45NTV2OS4yMzRoMTAuNzczdi0xLjUzOGgxLjUzOVY0LjI5M0wxNC4yNjgsNC4yOTN6IE0xMy40OTksMTEuMjE5DQoJaC0wLjc3MVY1LjgzMkg4LjExbC0xLjUzOC0xLjU0SDQuMjY0VjMuNTIzaDMuNTI5bDEuNTM5LDEuNTM5aDQuMTY3VjExLjIxOXoiLz4NCjwvc3ZnPg0K" /***/ }, -/* 352 */ +/* 369 */ /***/ function(module, exports) { module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE2IDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwb2x5bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMS40MTczIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRzPSINCgkJMTEuODEzLDcuNjQ4IDUuNDI4LDEyLjU4MiAzLjQ1MiwxMC42MDUgOC42MTksNC40NTQgCSIvPg0KCTxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIwLjg1MDQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNNC40NiwxMS42MTENCgkJYy0xLjgwMywwLjk3MS0wLjc3NiwyLjYyNS0yLjg0NCwyLjYyNSIvPg0KCTxjaXJjbGUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjEuNDE3MyIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBjeD0iMTEuNTM1IiBjeT0iNC41MzkiIHI9IjIuOSIvPg0KCTxsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIxLjQxNzMiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgeDE9IjkuNDg0IiB5MT0iMi40ODciIHgyPSIxMy41ODUiIHkyPSI2LjU4OCIvPg0KPC9nPg0KPC9zdmc+DQo=" /***/ }, -/* 353 */ +/* 370 */ /***/ function(module, exports) { module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE2IDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxjaXJjbGUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjEuNDE3MyIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBjeD0iMTIuMjg2IiBjeT0iMTAuMzIiIHI9IjIuNDEiLz4NCjxjaXJjbGUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjEuNDE3MyIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBjeD0iMy43NjciIGN5PSIxMi4zMiIgcj0iMi40MSIvPg0KPHBvbHlsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIxLjQxNzMiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRzPSI2LjE3NywxMi4zMiANCgk2LjE3NywzLjE0NCAxNC42OTYsMS4xNDQgMTQuNjk2LDEwLjMyICIvPg0KPC9zdmc+DQo=" /***/ }, -/* 354 */ +/* 371 */ /***/ function(module, exports) { module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE2IDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxnPg0KCQk8cGF0aCBkPSJNNC4xODEsMy4xOWw3LjE1Miw0Ljc0OWwtNy4xNTIsNC43NDhWMy4xOSBNMi43NjQsMC41NDh2MTQuNzc5bDExLjEzMi03LjM4OUwyLjc2NCwwLjU0OEwyLjc2NCwwLjU0OHoiLz4NCgk8L2c+DQo8L2c+DQo8L3N2Zz4NCg==" /***/ }, -/* 355 */ +/* 372 */ /***/ function(module, exports) { module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE2IDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxjaXJjbGUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjEuNDE3MyIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBjeD0iOC4wNjgiIGN5PSIxMS44MiIgcj0iMi40MSIvPg0KPHBvbHlsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIxLjQxNzMiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRzPSINCgkxMC40NzksMTEuODIgMTAuNDc5LDEuNjQ0IDE0LjQ5NSw1LjY2MSAiLz4NCjxsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIxLjQxNzMiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgeDE9IjEuNTU4IiB5MT0iMS45MTIiIHgyPSI3LjY5MiIgeTI9IjEuOTEyIi8+DQo8bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMS40MTczIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHgxPSIxLjU1OCIgeTE9IjQuMzIyIiB4Mj0iNy42OTIiIHkyPSI0LjMyMiIvPg0KPGxpbmUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjEuNDE3MyIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiB4MT0iMS41NTgiIHkxPSI2LjczMiIgeDI9IjcuNjkyIiB5Mj0iNi43MzIiLz4NCjwvc3ZnPg0K" /***/ }, -/* 356 */ +/* 373 */ /***/ function(module, exports) { module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE2IDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxjaXJjbGUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjEuNDE3MyIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBjeD0iNi42MyIgY3k9IjYuNzU4IiByPSI1LjA2MSIvPg0KCTxsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIxLjQxNzMiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgeDE9IjEwLjA4NiIgeTE9IjkuNzgiIHgyPSIxNC40ODMiIHkyPSIxNC4xNzgiLz4NCjwvZz4NCjwvc3ZnPg0K" /***/ }, -/* 357 */ +/* 374 */ /***/ function(module, exports) { module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE2IDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxyZWN0IHg9IjIuMDE4IiB5PSIyLjEyOCIgZmlsbD0iIzAxMDEwMSIgd2lkdGg9IjQuMjg5IiBoZWlnaHQ9IjQuMjg5Ii8+DQo8Zz4NCgk8cmVjdCB4PSI3LjMwNSIgeT0iMi4xMjgiIGZpbGw9IiMwMTAxMDEiIHdpZHRoPSI2LjY3OCIgaGVpZ2h0PSIwLjg1MSIvPg0KPC9nPg0KPGc+DQoJPHJlY3QgeD0iNy4zMDUiIHk9IjQuMTI4IiBmaWxsPSIjMDEwMTAxIiB3aWR0aD0iNi42NzgiIGhlaWdodD0iMC44NTEiLz4NCjwvZz4NCjxnPg0KCTxyZWN0IHg9IjcuMzA1IiB5PSI2LjEyOCIgZmlsbD0iIzAxMDEwMSIgd2lkdGg9IjYuNjc4IiBoZWlnaHQ9IjAuODUxIi8+DQo8L2c+DQo8cmVjdCB4PSIyLjAxOCIgeT0iOS4yMTEiIGZpbGw9IiMwMTAxMDEiIHdpZHRoPSI0LjI4OSIgaGVpZ2h0PSI0LjI4OSIvPg0KPGc+DQoJPHJlY3QgeD0iNy4zMDUiIHk9IjkuMjExIiBmaWxsPSIjMDEwMTAxIiB3aWR0aD0iNi42NzgiIGhlaWdodD0iMC44NTEiLz4NCjwvZz4NCjxnPg0KCTxyZWN0IHg9IjcuMzA1IiB5PSIxMS4yMTEiIGZpbGw9IiMwMTAxMDEiIHdpZHRoPSI2LjY3OCIgaGVpZ2h0PSIwLjg1MSIvPg0KPC9nPg0KPGc+DQoJPHJlY3QgeD0iNy4zMDUiIHk9IjEzLjIxMSIgZmlsbD0iIzAxMDEwMSIgd2lkdGg9IjYuNjc4IiBoZWlnaHQ9IjAuODUxIi8+DQo8L2c+DQo8L3N2Zz4NCg==" /***/ }, -/* 358 */ +/* 375 */ /***/ function(module, exports) { module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE2IDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwYXRoIGlkPSJzb3VuZGNsb3VkIiBkPSJNMC4wMjcsMTAuOTQ1YzAsMC4xOTcsMC4wNzIsMC4zNDcsMC4yMTUsMC40NDdjMC4xNDUsMC4xMDQsMC4yOTgsMC4xMzksMC40NjIsMC4xMDgNCgljMC4xNTMtMC4wMjgsMC4yNjEtMC4wODQsMC4zMjMtMC4xNjRjMC4wNjMtMC4wNzksMC4wOTMtMC4yMTEsMC4wOTMtMC4zOTRWOC43ODljMC0wLjE1NC0wLjA1My0wLjI4My0wLjE1OS0wLjM5MQ0KCWMtMC4xMDctMC4xMDctMC4yMzctMC4xNi0wLjM5MS0wLjE2Yy0wLjE0NywwLTAuMjc1LDAuMDUzLTAuMzgyLDAuMTZDMC4wODEsOC41MDYsMC4wMjcsOC42MzUsMC4wMjcsOC43ODlWMTAuOTQ1TDAuMDI3LDEwLjk0NXoNCgkgTTEuNzM2LDExLjg2NWMwLDAuMTQ1LDAuMDUzLDAuMjUyLDAuMTU0LDAuMzIyYzAuMTAxLDAuMDcxLDAuMjMsMC4xMDgsMC4zODksMC4xMDhjMC4xNjUsMCwwLjI5Ny0wLjAzNywwLjM5Ny0wLjEwOA0KCWMwLjEwMy0wLjA3LDAuMTUzLTAuMTc5LDAuMTUzLTAuMzIyVjYuODQyYzAtMC4xNDgtMC4wNTUtMC4yNzYtMC4xNTktMC4zODNDMi41NjMsNi4zNTIsMi40MzQsNi4yOTgsMi4yNzksNi4yOTgNCgljLTAuMTQ4LDAtMC4yNzUsMC4wNTQtMC4zODMsMC4xNjFjLTAuMTA1LDAuMTA2LTAuMTYsMC4yMzQtMC4xNiwwLjM4M1YxMS44NjV6IE0zLjQzOCwxMi4xMDRjMCwwLjE0NSwwLjA1NCwwLjI1MiwwLjE1NiwwLjMyNA0KCWMwLjEwNSwwLjA3MSwwLjIzOCwwLjEwNywwLjQwMiwwLjEwN2MwLjE1NywwLDAuMjg4LTAuMDM2LDAuMzkxLTAuMTA3YzAuMTAxLTAuMDcyLDAuMTUxLTAuMTgxLDAuMTUxLTAuMzI0VjcuNTE4DQoJYzAtMC4xNTMtMC4wNTQtMC4yODUtMC4xNi0wLjM5NEM0LjI3MSw3LjAxNiw0LjE0NSw2Ljk2LDMuOTk3LDYuOTZjLTAuMTU0LDAtMC4yODUsMC4wNTYtMC4zOTUsMC4xNjQNCgljLTAuMTA4LDAuMTA4LTAuMTY0LDAuMjQtMC4xNjQsMC4zOTRWMTIuMTA0eiBNNS4xNDgsMTIuMTI1YzAsMC4yNzMsMC4xODUsMC40MSwwLjU1MSwwLjQxYzAuMzY3LDAsMC41NS0wLjEzNywwLjU1LTAuNDFWNC42OTQNCgljMC0wLjQxOC0wLjEyOC0wLjY1My0wLjM4LTAuNzA3QzUuNzA3LDMuOTQ4LDUuNTQ1LDMuOTk0LDUuMzg3LDQuMTI5QzUuMjI4LDQuMjYyLDUuMTQ4LDQuNDUsNS4xNDgsNC42OTRWMTIuMTI1eiBNNi44ODgsMTIuMzQyDQoJVjQuMjU2YzAtMC4yNTksMC4wNzctMC40MTIsMC4yMy0wLjQ2MWMwLjMzMy0wLjA4LDAuNjYzLTAuMTIsMC45ODktMC4xMmMwLjc1OCwwLDEuNDYzLDAuMTc5LDIuMTE4LDAuNTM1DQoJYzAuNjU0LDAuMzU3LDEuMTg1LDAuODQ1LDEuNTg4LDEuNDYyYzAuNDAxLDAuNjE1LDAuNjM4LDEuMjk1LDAuNzAxLDIuMDM5YzAuMzAzLTAuMTI5LDAuNjI1LTAuMTkzLDAuOTY5LTAuMTkzDQoJYzAuNjksMCwxLjI4NSwwLjI0NiwxLjc3NywwLjczNUMxNS43NTQsOC43NDQsMTYsOS4zMzQsMTYsMTAuMDIxYzAsMC42OTMtMC4yNDYsMS4yODctMC43MzksMS43NzYNCgljLTAuNDkzLDAuNDktMS4wODUsMC43MzYtMS43NzEsMC43MzZsLTYuNDY4LTAuMDA5Yy0wLjA0My0wLjAxNi0wLjA3Ny0wLjA0MS0wLjEwMi0wLjA4MkM2Ljg5OCwxMi40MDYsNi44ODgsMTIuMzcxLDYuODg4LDEyLjM0Mg0KCUw2Ljg4OCwxMi4zNDJ6Ii8+DQo8L3N2Zz4NCg==" /***/ }, -/* 359 */ +/* 376 */ /***/ function(module, exports) { module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE2IDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwYXRoIGlkPSJzcG90aWZ5IiBkPSJNNy45NCwxLjg4N2MtMy4zODksMC02LjE2LDIuNzcyLTYuMTYsNi4xNjJjMCwzLjM5MSwyLjc3MSw2LjE2MSw2LjE2LDYuMTYxYzMuMzg4LDAsNi4xNi0yLjc3MSw2LjE2LTYuMTYxDQoJQzE0LjEsNC42NTksMTEuMzU3LDEuODg3LDcuOTQsMS44ODd6IE0xMC43NzMsMTAuNzg5Yy0wLjEyMywwLjE4Ni0wLjM0LDAuMjQ2LTAuNTIyLDAuMTIzYy0xLjQ0OS0wLjg5My0zLjI2Ny0xLjA3OC01LjQyMi0wLjU4NA0KCWMtMC4yMTUsMC4wNjEtMC4zOTktMC4wOTQtMC40NjEtMC4yNzlDNC4zMDYsOS44MzQsNC40NTgsOS42NSw0LjY0NSw5LjU4OGMyLjM0LTAuNTIzLDQuMzc1LTAuMzA5LDUuOTc1LDAuNjc4DQoJQzEwLjgzNiwxMC4zNTksMTAuODY2LDEwLjYwNSwxMC43NzMsMTAuNzg5eiBNMTEuNTE0LDkuMDk0Yy0wLjE1NCwwLjIxOS0wLjQzMywwLjMwOS0wLjY0NiwwLjE1Ng0KCWMtMS42NjQtMS4wMTgtNC4xOS0xLjMyNy02LjEzLTAuNzA5QzQuNDksOC42MDQsNC4yMTMsOC40OCw0LjE1MSw4LjIzMkM0LjA4OSw3Ljk4Niw0LjIxMyw3LjcwOCw0LjQ1OCw3LjY0OA0KCWMyLjI1LTAuNjc4LDUuMDIxLTAuMzQsNi45MzMsMC44MzJDMTEuNTc0LDguNTcyLDExLjY2Nyw4Ljg3OCwxMS41MTQsOS4wOTR6IE0xMS41NzQsNy4zNzFDOS42MDQsNi4xOTgsNi4zMDgsNi4wNzUsNC40Myw2LjY2MQ0KCUM0LjEyMSw2Ljc1NCwzLjgxMiw2LjU2OSwzLjcyLDYuMjkyQzMuNjI4LDUuOTgzLDMuODEyLDUuNjc2LDQuMDg5LDUuNTgzQzYuMjc2LDQuOTM3LDkuODgsNS4wNiwxMi4xNiw2LjQxNQ0KCWMwLjI3NywwLjE1NCwwLjM2OSwwLjUyMywwLjIxNSwwLjgwMUMxMi4yMjMsNy40MzEsMTEuODUyLDcuNTIzLDExLjU3NCw3LjM3MXoiLz4NCjwvc3ZnPg0K" /***/ }, -/* 360 */ +/* 377 */ /***/ function(module, exports) { module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE2IDE2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik04LjAyNCwzLjQ2NGwxLjE5OCwyLjQyMmwwLjMzLDAuNjY4bDAuNzM2LDAuMTA2bDIuNjcyLDAuMzg5bC0xLjkzNiwxLjg4OGwtMC41MzMsMC41MjFsMC4xMjcsMC43MzRsMC40NTcsMi42NjENCgkJbC0yLjM5My0xLjI1N2wtMC42NTktMC4zNDhsLTAuNjU4LDAuMzQ4bC0yLjM5NCwxLjI1OGwwLjQ1OC0yLjY2MmwwLjEyNi0wLjczNkw1LjAyMSw4LjkzNUwzLjA4MSw3LjA1TDUuNzYsNi42NmwwLjczNS0wLjEwNg0KCQlsMC4zMy0wLjY2OEw4LjAyNCwzLjQ2NCBNOC4wMjUsMC43OWMtMC4xOCwwLTAuMzI3LDAuMTIyLTAuNDQsMC4zNjlMNS41NTgsNS4yNThMMS4wMzYsNS45MTVDMC43LDUuOTcsMC41MzIsNi4xMDYsMC41MzIsNi4zMjkNCgkJYzAsMC4xMjcsMC4wNzQsMC4yNzEsMC4yMjUsMC40MzRMNC4wMzYsOS45NWwtMC43NzQsNC41MDRjLTAuMDEzLDAuMDg0LTAuMDE5LDAuMTQ0LTAuMDE5LDAuMTgyYzAsMC4xMjUsMC4wMzIsMC4yMywwLjA5NiwwLjMxOA0KCQljMC4wNjMsMC4wODgsMC4xNTgsMC4xMzEsMC4yODMsMC4xMzFjMC4xMDcsMCwwLjIyOS0wLjAzNywwLjM2LTAuMTA4bDQuMDQ0LTIuMTI1bDQuMDQ0LDIuMTI1DQoJCWMwLjEyNywwLjA3MSwwLjI0NiwwLjEwOCwwLjM1OSwwLjEwOGMwLjEyLDAsMC4yMTMtMC4wNDMsMC4yNzUtMC4xMzFzMC4wOTYtMC4xOTMsMC4wOTYtMC4zMThjMC0wLjA3OS0wLjAwNi0wLjE0MS0wLjAxMi0wLjE4Mg0KCQlMMTIuMDE3LDkuOTVsMy4yNzEtMy4xODhjMC4xNTQtMC4xNTgsMC4yMzItMC4zLDAuMjMyLTAuNDM0YzAtMC4yMjItMC4xNjctMC4zNTktMC41MDMtMC40MTRsLTQuNTIyLTAuNjU3TDguNDY5LDEuMTU5DQoJCUM4LjM1MiwwLjkxMiw4LjIwNiwwLjc5LDguMDI1LDAuNzlMOC4wMjUsMC43OXoiLz4NCjwvZz4NCjwvc3ZnPg0K" /***/ }, -/* 361 */ -24, -/* 362 */ +/* 378 */ /***/ function(module, exports) { /* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {module.exports = __webpack_amd_options__; @@ -49134,2228 +51312,32 @@ /* WEBPACK VAR INJECTION */}.call(exports, {})) /***/ }, -/* 363 */ -/***/ function(module, exports) { - - module.exports = function(module) { - if(!module.webpackPolyfill) { - module.deprecate = function() {}; - module.paths = []; - // module.parent = undefined by default - module.children = []; - module.webpackPolyfill = 1; - } - return module; - } - - -/***/ }, -/* 364 */ -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ - /** @author Brian Cavalier */ - /** @author John Hann */ - - (function(define) { 'use strict'; - !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) { - - var makePromise = __webpack_require__(376); - var Scheduler = __webpack_require__(365); - var async = __webpack_require__(100).asap; - - return makePromise({ - scheduler: new Scheduler(async) - }); - - }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - })(__webpack_require__(14)); - - -/***/ }, -/* 365 */ -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ - /** @author Brian Cavalier */ - /** @author John Hann */ - - (function(define) { 'use strict'; - !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { - - // Credit to Twisol (https://github.com/Twisol) for suggesting - // this type of extensible queue + trampoline approach for next-tick conflation. - - /** - * Async task scheduler - * @param {function} async function to schedule a single async function - * @constructor - */ - function Scheduler(async) { - this._async = async; - this._running = false; - - this._queue = this; - this._queueLen = 0; - this._afterQueue = {}; - this._afterQueueLen = 0; - - var self = this; - this.drain = function() { - self._drain(); - }; - } - - /** - * Enqueue a task - * @param {{ run:function }} task - */ - Scheduler.prototype.enqueue = function(task) { - this._queue[this._queueLen++] = task; - this.run(); - }; - - /** - * Enqueue a task to run after the main task queue - * @param {{ run:function }} task - */ - Scheduler.prototype.afterQueue = function(task) { - this._afterQueue[this._afterQueueLen++] = task; - this.run(); - }; - - Scheduler.prototype.run = function() { - if (!this._running) { - this._running = true; - this._async(this.drain); - } - }; - - /** - * Drain the handler queue entirely, and then the after queue - */ - Scheduler.prototype._drain = function() { - var i = 0; - for (; i < this._queueLen; ++i) { - this._queue[i].run(); - this._queue[i] = void 0; - } - - this._queueLen = 0; - this._running = false; - - for (i = 0; i < this._afterQueueLen; ++i) { - this._afterQueue[i].run(); - this._afterQueue[i] = void 0; - } - - this._afterQueueLen = 0; - }; - - return Scheduler; - - }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - }(__webpack_require__(14))); - - -/***/ }, -/* 366 */ -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ - /** @author Brian Cavalier */ - /** @author John Hann */ - - (function(define) { 'use strict'; - !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require) { - - var state = __webpack_require__(158); - var applier = __webpack_require__(157); - - return function array(Promise) { - - var applyFold = applier(Promise); - var toPromise = Promise.resolve; - var all = Promise.all; - - var ar = Array.prototype.reduce; - var arr = Array.prototype.reduceRight; - var slice = Array.prototype.slice; - - // Additional array combinators - - Promise.any = any; - Promise.some = some; - Promise.settle = settle; - - Promise.map = map; - Promise.filter = filter; - Promise.reduce = reduce; - Promise.reduceRight = reduceRight; - - /** - * When this promise fulfills with an array, do - * onFulfilled.apply(void 0, array) - * @param {function} onFulfilled function to apply - * @returns {Promise} promise for the result of applying onFulfilled - */ - Promise.prototype.spread = function(onFulfilled) { - return this.then(all).then(function(array) { - return onFulfilled.apply(this, array); - }); - }; - - return Promise; - - /** - * One-winner competitive race. - * Return a promise that will fulfill when one of the promises - * in the input array fulfills, or will reject when all promises - * have rejected. - * @param {array} promises - * @returns {Promise} promise for the first fulfilled value - */ - function any(promises) { - var p = Promise._defer(); - var resolver = p._handler; - var l = promises.length>>>0; - - var pending = l; - var errors = []; - - for (var h, x, i = 0; i < l; ++i) { - x = promises[i]; - if(x === void 0 && !(i in promises)) { - --pending; - continue; - } - - h = Promise._handler(x); - if(h.state() > 0) { - resolver.become(h); - Promise._visitRemaining(promises, i, h); - break; - } else { - h.visit(resolver, handleFulfill, handleReject); - } - } - - if(pending === 0) { - resolver.reject(new RangeError('any(): array must not be empty')); - } - - return p; - - function handleFulfill(x) { - /*jshint validthis:true*/ - errors = null; - this.resolve(x); // this === resolver - } - - function handleReject(e) { - /*jshint validthis:true*/ - if(this.resolved) { // this === resolver - return; - } - - errors.push(e); - if(--pending === 0) { - this.reject(errors); - } - } - } - - /** - * N-winner competitive race - * Return a promise that will fulfill when n input promises have - * fulfilled, or will reject when it becomes impossible for n - * input promises to fulfill (ie when promises.length - n + 1 - * have rejected) - * @param {array} promises - * @param {number} n - * @returns {Promise} promise for the earliest n fulfillment values - * - * @deprecated - */ - function some(promises, n) { - /*jshint maxcomplexity:7*/ - var p = Promise._defer(); - var resolver = p._handler; - - var results = []; - var errors = []; - - var l = promises.length>>>0; - var nFulfill = 0; - var nReject; - var x, i; // reused in both for() loops - - // First pass: count actual array items - for(i=0; i nFulfill) { - resolver.reject(new RangeError('some(): array must contain at least ' - + n + ' item(s), but had ' + nFulfill)); - } else if(nFulfill === 0) { - resolver.resolve(results); - } - - // Second pass: observe each array item, make progress toward goals - for(i=0; i 2 ? ar.call(promises, liftCombine(f), arguments[2]) - : ar.call(promises, liftCombine(f)); - } - - /** - * Traditional reduce function, similar to `Array.prototype.reduceRight()`, but - * input may contain promises and/or values, and reduceFunc - * may return either a value or a promise, *and* initialValue may - * be a promise for the starting value. - * @param {Array|Promise} promises array or promise for an array of anything, - * may contain a mix of promises and values. - * @param {function(accumulated:*, x:*, index:Number):*} f reduce function - * @returns {Promise} that will resolve to the final reduced value - */ - function reduceRight(promises, f /*, initialValue */) { - return arguments.length > 2 ? arr.call(promises, liftCombine(f), arguments[2]) - : arr.call(promises, liftCombine(f)); - } - - function liftCombine(f) { - return function(z, x, i) { - return applyFold(f, void 0, [z,x,i]); - }; - } - }; - - }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - }(__webpack_require__(14))); - - -/***/ }, -/* 367 */ -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ - /** @author Brian Cavalier */ - /** @author John Hann */ - - (function(define) { 'use strict'; - !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { - - return function flow(Promise) { - - var resolve = Promise.resolve; - var reject = Promise.reject; - var origCatch = Promise.prototype['catch']; - - /** - * Handle the ultimate fulfillment value or rejection reason, and assume - * responsibility for all errors. If an error propagates out of result - * or handleFatalError, it will be rethrown to the host, resulting in a - * loud stack track on most platforms and a crash on some. - * @param {function?} onResult - * @param {function?} onError - * @returns {undefined} - */ - Promise.prototype.done = function(onResult, onError) { - this._handler.visit(this._handler.receiver, onResult, onError); - }; - - /** - * Add Error-type and predicate matching to catch. Examples: - * promise.catch(TypeError, handleTypeError) - * .catch(predicate, handleMatchedErrors) - * .catch(handleRemainingErrors) - * @param onRejected - * @returns {*} - */ - Promise.prototype['catch'] = Promise.prototype.otherwise = function(onRejected) { - if (arguments.length < 2) { - return origCatch.call(this, onRejected); - } - - if(typeof onRejected !== 'function') { - return this.ensure(rejectInvalidPredicate); - } - - return origCatch.call(this, createCatchFilter(arguments[1], onRejected)); - }; - - /** - * Wraps the provided catch handler, so that it will only be called - * if the predicate evaluates truthy - * @param {?function} handler - * @param {function} predicate - * @returns {function} conditional catch handler - */ - function createCatchFilter(handler, predicate) { - return function(e) { - return evaluatePredicate(e, predicate) - ? handler.call(this, e) - : reject(e); - }; - } - - /** - * Ensures that onFulfilledOrRejected will be called regardless of whether - * this promise is fulfilled or rejected. onFulfilledOrRejected WILL NOT - * receive the promises' value or reason. Any returned value will be disregarded. - * onFulfilledOrRejected may throw or return a rejected promise to signal - * an additional error. - * @param {function} handler handler to be called regardless of - * fulfillment or rejection - * @returns {Promise} - */ - Promise.prototype['finally'] = Promise.prototype.ensure = function(handler) { - if(typeof handler !== 'function') { - return this; - } - - return this.then(function(x) { - return runSideEffect(handler, this, identity, x); - }, function(e) { - return runSideEffect(handler, this, reject, e); - }); - }; - - function runSideEffect (handler, thisArg, propagate, value) { - var result = handler.call(thisArg); - return maybeThenable(result) - ? propagateValue(result, propagate, value) - : propagate(value); - } - - function propagateValue (result, propagate, x) { - return resolve(result).then(function () { - return propagate(x); - }); - } - - /** - * Recover from a failure by returning a defaultValue. If defaultValue - * is a promise, it's fulfillment value will be used. If defaultValue is - * a promise that rejects, the returned promise will reject with the - * same reason. - * @param {*} defaultValue - * @returns {Promise} new promise - */ - Promise.prototype['else'] = Promise.prototype.orElse = function(defaultValue) { - return this.then(void 0, function() { - return defaultValue; - }); - }; - - /** - * Shortcut for .then(function() { return value; }) - * @param {*} value - * @return {Promise} a promise that: - * - is fulfilled if value is not a promise, or - * - if value is a promise, will fulfill with its value, or reject - * with its reason. - */ - Promise.prototype['yield'] = function(value) { - return this.then(function() { - return value; - }); - }; - - /** - * Runs a side effect when this promise fulfills, without changing the - * fulfillment value. - * @param {function} onFulfilledSideEffect - * @returns {Promise} - */ - Promise.prototype.tap = function(onFulfilledSideEffect) { - return this.then(onFulfilledSideEffect)['yield'](this); - }; - - return Promise; - }; - - function rejectInvalidPredicate() { - throw new TypeError('catch predicate must be a function'); - } - - function evaluatePredicate(e, predicate) { - return isError(predicate) ? e instanceof predicate : predicate(e); - } - - function isError(predicate) { - return predicate === Error - || (predicate != null && predicate.prototype instanceof Error); - } - - function maybeThenable(x) { - return (typeof x === 'object' || typeof x === 'function') && x !== null; - } - - function identity(x) { - return x; - } - - }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - }(__webpack_require__(14))); - - -/***/ }, -/* 368 */ -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ - /** @author Brian Cavalier */ - /** @author John Hann */ - /** @author Jeff Escalante */ - - (function(define) { 'use strict'; - !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { - - return function fold(Promise) { - - Promise.prototype.fold = function(f, z) { - var promise = this._beget(); - - this._handler.fold(function(z, x, to) { - Promise._handler(z).fold(function(x, z, to) { - to.resolve(f.call(this, z, x)); - }, x, this, to); - }, z, promise._handler.receiver, promise._handler); - - return promise; - }; - - return Promise; - }; - - }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - }(__webpack_require__(14))); - - -/***/ }, -/* 369 */ -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ - /** @author Brian Cavalier */ - /** @author John Hann */ - - (function(define) { 'use strict'; - !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require) { - - var inspect = __webpack_require__(158).inspect; - - return function inspection(Promise) { - - Promise.prototype.inspect = function() { - return inspect(Promise._handler(this)); - }; - - return Promise; - }; - - }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - }(__webpack_require__(14))); - - -/***/ }, -/* 370 */ -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ - /** @author Brian Cavalier */ - /** @author John Hann */ - - (function(define) { 'use strict'; - !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { - - return function generate(Promise) { - - var resolve = Promise.resolve; - - Promise.iterate = iterate; - Promise.unfold = unfold; - - return Promise; - - /** - * @deprecated Use github.com/cujojs/most streams and most.iterate - * Generate a (potentially infinite) stream of promised values: - * x, f(x), f(f(x)), etc. until condition(x) returns true - * @param {function} f function to generate a new x from the previous x - * @param {function} condition function that, given the current x, returns - * truthy when the iterate should stop - * @param {function} handler function to handle the value produced by f - * @param {*|Promise} x starting value, may be a promise - * @return {Promise} the result of the last call to f before - * condition returns true - */ - function iterate(f, condition, handler, x) { - return unfold(function(x) { - return [x, f(x)]; - }, condition, handler, x); - } - - /** - * @deprecated Use github.com/cujojs/most streams and most.unfold - * Generate a (potentially infinite) stream of promised values - * by applying handler(generator(seed)) iteratively until - * condition(seed) returns true. - * @param {function} unspool function that generates a [value, newSeed] - * given a seed. - * @param {function} condition function that, given the current seed, returns - * truthy when the unfold should stop - * @param {function} handler function to handle the value produced by unspool - * @param x {*|Promise} starting value, may be a promise - * @return {Promise} the result of the last value produced by unspool before - * condition returns true - */ - function unfold(unspool, condition, handler, x) { - return resolve(x).then(function(seed) { - return resolve(condition(seed)).then(function(done) { - return done ? seed : resolve(unspool(seed)).spread(next); - }); - }); - - function next(item, newSeed) { - return resolve(handler(item)).then(function() { - return unfold(unspool, condition, handler, newSeed); - }); - } - } - }; - - }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - }(__webpack_require__(14))); - - -/***/ }, -/* 371 */ -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ - /** @author Brian Cavalier */ - /** @author John Hann */ - - (function(define) { 'use strict'; - !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { - - return function progress(Promise) { - - /** - * @deprecated - * Register a progress handler for this promise - * @param {function} onProgress - * @returns {Promise} - */ - Promise.prototype.progress = function(onProgress) { - return this.then(void 0, void 0, onProgress); - }; - - return Promise; - }; - - }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - }(__webpack_require__(14))); - - -/***/ }, -/* 372 */ -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ - /** @author Brian Cavalier */ - /** @author John Hann */ - - (function(define) { 'use strict'; - !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require) { - - var env = __webpack_require__(100); - var TimeoutError = __webpack_require__(156); - - function setTimeout(f, ms, x, y) { - return env.setTimer(function() { - f(x, y, ms); - }, ms); - } - - return function timed(Promise) { - /** - * Return a new promise whose fulfillment value is revealed only - * after ms milliseconds - * @param {number} ms milliseconds - * @returns {Promise} - */ - Promise.prototype.delay = function(ms) { - var p = this._beget(); - this._handler.fold(handleDelay, ms, void 0, p._handler); - return p; - }; - - function handleDelay(ms, x, h) { - setTimeout(resolveDelay, ms, x, h); - } - - function resolveDelay(x, h) { - h.resolve(x); - } - - /** - * Return a new promise that rejects after ms milliseconds unless - * this promise fulfills earlier, in which case the returned promise - * fulfills with the same value. - * @param {number} ms milliseconds - * @param {Error|*=} reason optional rejection reason to use, defaults - * to a TimeoutError if not provided - * @returns {Promise} - */ - Promise.prototype.timeout = function(ms, reason) { - var p = this._beget(); - var h = p._handler; - - var t = setTimeout(onTimeout, ms, reason, p._handler); - - this._handler.visit(h, - function onFulfill(x) { - env.clearTimer(t); - this.resolve(x); // this = h - }, - function onReject(x) { - env.clearTimer(t); - this.reject(x); // this = h - }, - h.notify); - - return p; - }; - - function onTimeout(reason, h, ms) { - var e = typeof reason === 'undefined' - ? new TimeoutError('timed out after ' + ms + 'ms') - : reason; - h.reject(e); - } - - return Promise; - }; - - }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - }(__webpack_require__(14))); - - -/***/ }, -/* 373 */ -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ - /** @author Brian Cavalier */ - /** @author John Hann */ - - (function(define) { 'use strict'; - !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require) { - - var setTimer = __webpack_require__(100).setTimer; - var format = __webpack_require__(375); - - return function unhandledRejection(Promise) { - - var logError = noop; - var logInfo = noop; - var localConsole; - - if(typeof console !== 'undefined') { - // Alias console to prevent things like uglify's drop_console option from - // removing console.log/error. Unhandled rejections fall into the same - // category as uncaught exceptions, and build tools shouldn't silence them. - localConsole = console; - logError = typeof localConsole.error !== 'undefined' - ? function (e) { localConsole.error(e); } - : function (e) { localConsole.log(e); }; - - logInfo = typeof localConsole.info !== 'undefined' - ? function (e) { localConsole.info(e); } - : function (e) { localConsole.log(e); }; - } - - Promise.onPotentiallyUnhandledRejection = function(rejection) { - enqueue(report, rejection); - }; - - Promise.onPotentiallyUnhandledRejectionHandled = function(rejection) { - enqueue(unreport, rejection); - }; - - Promise.onFatalRejection = function(rejection) { - enqueue(throwit, rejection.value); - }; - - var tasks = []; - var reported = []; - var running = null; - - function report(r) { - if(!r.handled) { - reported.push(r); - logError('Potentially unhandled rejection [' + r.id + '] ' + format.formatError(r.value)); - } - } - - function unreport(r) { - var i = reported.indexOf(r); - if(i >= 0) { - reported.splice(i, 1); - logInfo('Handled previous rejection [' + r.id + '] ' + format.formatObject(r.value)); - } - } - - function enqueue(f, x) { - tasks.push(f, x); - if(running === null) { - running = setTimer(flush, 0); - } - } - - function flush() { - running = null; - while(tasks.length > 0) { - tasks.shift()(tasks.shift()); - } - } - - return Promise; - }; - - function throwit(e) { - throw e; - } - - function noop() {} - - }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - }(__webpack_require__(14))); - - -/***/ }, -/* 374 */ -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ - /** @author Brian Cavalier */ - /** @author John Hann */ - - (function(define) { 'use strict'; - !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { - - return function addWith(Promise) { - /** - * Returns a promise whose handlers will be called with `this` set to - * the supplied receiver. Subsequent promises derived from the - * returned promise will also have their handlers called with receiver - * as `this`. Calling `with` with undefined or no arguments will return - * a promise whose handlers will again be called in the usual Promises/A+ - * way (no `this`) thus safely undoing any previous `with` in the - * promise chain. - * - * WARNING: Promises returned from `with`/`withThis` are NOT Promises/A+ - * compliant, specifically violating 2.2.5 (http://promisesaplus.com/#point-41) - * - * @param {object} receiver `this` value for all handlers attached to - * the returned promise. - * @returns {Promise} - */ - Promise.prototype['with'] = Promise.prototype.withThis = function(receiver) { - var p = this._beget(); - var child = p._handler; - child.receiver = receiver; - this._handler.chain(child, receiver); - return p; - }; - - return Promise; - }; - - }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - }(__webpack_require__(14))); - - - -/***/ }, -/* 375 */ -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ - /** @author Brian Cavalier */ - /** @author John Hann */ - - (function(define) { 'use strict'; - !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { - - return { - formatError: formatError, - formatObject: formatObject, - tryStringify: tryStringify - }; - - /** - * Format an error into a string. If e is an Error and has a stack property, - * it's returned. Otherwise, e is formatted using formatObject, with a - * warning added about e not being a proper Error. - * @param {*} e - * @returns {String} formatted string, suitable for output to developers - */ - function formatError(e) { - var s = typeof e === 'object' && e !== null && (e.stack || e.message) ? e.stack || e.message : formatObject(e); - return e instanceof Error ? s : s + ' (WARNING: non-Error used)'; - } - - /** - * Format an object, detecting "plain" objects and running them through - * JSON.stringify if possible. - * @param {Object} o - * @returns {string} - */ - function formatObject(o) { - var s = String(o); - if(s === '[object Object]' && typeof JSON !== 'undefined') { - s = tryStringify(o, s); - } - return s; - } - - /** - * Try to return the result of JSON.stringify(x). If that fails, return - * defaultValue - * @param {*} x - * @param {*} defaultValue - * @returns {String|*} JSON.stringify(x) or defaultValue - */ - function tryStringify(x, defaultValue) { - try { - return JSON.stringify(x); - } catch(e) { - return defaultValue; - } - } - - }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - }(__webpack_require__(14))); - - -/***/ }, -/* 376 */ -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(process) {/** @license MIT License (c) copyright 2010-2014 original author or authors */ - /** @author Brian Cavalier */ - /** @author John Hann */ - - (function(define) { 'use strict'; - !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { - - return function makePromise(environment) { - - var tasks = environment.scheduler; - var emitRejection = initEmitRejection(); - - var objectCreate = Object.create || - function(proto) { - function Child() {} - Child.prototype = proto; - return new Child(); - }; - - /** - * Create a promise whose fate is determined by resolver - * @constructor - * @returns {Promise} promise - * @name Promise - */ - function Promise(resolver, handler) { - this._handler = resolver === Handler ? handler : init(resolver); - } - - /** - * Run the supplied resolver - * @param resolver - * @returns {Pending} - */ - function init(resolver) { - var handler = new Pending(); - - try { - resolver(promiseResolve, promiseReject, promiseNotify); - } catch (e) { - promiseReject(e); - } - - return handler; - - /** - * Transition from pre-resolution state to post-resolution state, notifying - * all listeners of the ultimate fulfillment or rejection - * @param {*} x resolution value - */ - function promiseResolve (x) { - handler.resolve(x); - } - /** - * Reject this promise with reason, which will be used verbatim - * @param {Error|*} reason rejection reason, strongly suggested - * to be an Error type - */ - function promiseReject (reason) { - handler.reject(reason); - } - - /** - * @deprecated - * Issue a progress event, notifying all progress listeners - * @param {*} x progress event payload to pass to all listeners - */ - function promiseNotify (x) { - handler.notify(x); - } - } - - // Creation - - Promise.resolve = resolve; - Promise.reject = reject; - Promise.never = never; - - Promise._defer = defer; - Promise._handler = getHandler; - - /** - * Returns a trusted promise. If x is already a trusted promise, it is - * returned, otherwise returns a new trusted Promise which follows x. - * @param {*} x - * @return {Promise} promise - */ - function resolve(x) { - return isPromise(x) ? x - : new Promise(Handler, new Async(getHandler(x))); - } - - /** - * Return a reject promise with x as its reason (x is used verbatim) - * @param {*} x - * @returns {Promise} rejected promise - */ - function reject(x) { - return new Promise(Handler, new Async(new Rejected(x))); - } - - /** - * Return a promise that remains pending forever - * @returns {Promise} forever-pending promise. - */ - function never() { - return foreverPendingPromise; // Should be frozen - } - - /** - * Creates an internal {promise, resolver} pair - * @private - * @returns {Promise} - */ - function defer() { - return new Promise(Handler, new Pending()); - } - - // Transformation and flow control - - /** - * Transform this promise's fulfillment value, returning a new Promise - * for the transformed result. If the promise cannot be fulfilled, onRejected - * is called with the reason. onProgress *may* be called with updates toward - * this promise's fulfillment. - * @param {function=} onFulfilled fulfillment handler - * @param {function=} onRejected rejection handler - * @param {function=} onProgress @deprecated progress handler - * @return {Promise} new promise - */ - Promise.prototype.then = function(onFulfilled, onRejected, onProgress) { - var parent = this._handler; - var state = parent.join().state(); - - if ((typeof onFulfilled !== 'function' && state > 0) || - (typeof onRejected !== 'function' && state < 0)) { - // Short circuit: value will not change, simply share handler - return new this.constructor(Handler, parent); - } - - var p = this._beget(); - var child = p._handler; - - parent.chain(child, parent.receiver, onFulfilled, onRejected, onProgress); - - return p; - }; - - /** - * If this promise cannot be fulfilled due to an error, call onRejected to - * handle the error. Shortcut for .then(undefined, onRejected) - * @param {function?} onRejected - * @return {Promise} - */ - Promise.prototype['catch'] = function(onRejected) { - return this.then(void 0, onRejected); - }; - - /** - * Creates a new, pending promise of the same type as this promise - * @private - * @returns {Promise} - */ - Promise.prototype._beget = function() { - return begetFrom(this._handler, this.constructor); - }; - - function begetFrom(parent, Promise) { - var child = new Pending(parent.receiver, parent.join().context); - return new Promise(Handler, child); - } - - // Array combinators - - Promise.all = all; - Promise.race = race; - Promise._traverse = traverse; - - /** - * Return a promise that will fulfill when all promises in the - * input array have fulfilled, or will reject when one of the - * promises rejects. - * @param {array} promises array of promises - * @returns {Promise} promise for array of fulfillment values - */ - function all(promises) { - return traverseWith(snd, null, promises); - } - - /** - * Array> -> Promise> - * @private - * @param {function} f function to apply to each promise's value - * @param {Array} promises array of promises - * @returns {Promise} promise for transformed values - */ - function traverse(f, promises) { - return traverseWith(tryCatch2, f, promises); - } - - function traverseWith(tryMap, f, promises) { - var handler = typeof f === 'function' ? mapAt : settleAt; - - var resolver = new Pending(); - var pending = promises.length >>> 0; - var results = new Array(pending); - - for (var i = 0, x; i < promises.length && !resolver.resolved; ++i) { - x = promises[i]; - - if (x === void 0 && !(i in promises)) { - --pending; - continue; - } - - traverseAt(promises, handler, i, x, resolver); - } - - if(pending === 0) { - resolver.become(new Fulfilled(results)); - } - - return new Promise(Handler, resolver); - - function mapAt(i, x, resolver) { - if(!resolver.resolved) { - traverseAt(promises, settleAt, i, tryMap(f, x, i), resolver); - } - } - - function settleAt(i, x, resolver) { - results[i] = x; - if(--pending === 0) { - resolver.become(new Fulfilled(results)); - } - } - } - - function traverseAt(promises, handler, i, x, resolver) { - if (maybeThenable(x)) { - var h = getHandlerMaybeThenable(x); - var s = h.state(); - - if (s === 0) { - h.fold(handler, i, void 0, resolver); - } else if (s > 0) { - handler(i, h.value, resolver); - } else { - resolver.become(h); - visitRemaining(promises, i+1, h); - } - } else { - handler(i, x, resolver); - } - } - - Promise._visitRemaining = visitRemaining; - function visitRemaining(promises, start, handler) { - for(var i=start; i\n\t\t\n\t\t\t\n\n \t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\n\t\t\t\n\t\t\n\t,\n\tdocument.getElementById('app')\n);\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/index.js\n **/","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/process/browser.js\n ** module id = 1\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = require('./lib/React');\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/react.js\n ** module id = 2\n ** module chunks = 0\n **/","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nfunction invariant(condition, format, a, b, c, d, e, f) {\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n\nmodule.exports = invariant;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/invariant.js\n ** module id = 3\n ** module chunks = 0\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar emptyFunction = require('./emptyFunction');\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = emptyFunction;\n\nif (process.env.NODE_ENV !== 'production') {\n (function () {\n var printWarning = function printWarning(format) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n\n warning = function warning(condition, format) {\n if (format === undefined) {\n throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n }\n\n if (format.indexOf('Failed Composite propType: ') === 0) {\n return; // Ignore CompositeComponent proptype check.\n }\n\n if (!condition) {\n for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n args[_key2 - 2] = arguments[_key2];\n }\n\n printWarning.apply(undefined, [format].concat(args));\n }\n };\n })();\n}\n\nmodule.exports = warning;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/warning.js\n ** module id = 4\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\nexports.compose = exports.applyMiddleware = exports.bindActionCreators = exports.combineReducers = exports.createStore = undefined;\n\nvar _createStore = require('./createStore');\n\nvar _createStore2 = _interopRequireDefault(_createStore);\n\nvar _combineReducers = require('./combineReducers');\n\nvar _combineReducers2 = _interopRequireDefault(_combineReducers);\n\nvar _bindActionCreators = require('./bindActionCreators');\n\nvar _bindActionCreators2 = _interopRequireDefault(_bindActionCreators);\n\nvar _applyMiddleware = require('./applyMiddleware');\n\nvar _applyMiddleware2 = _interopRequireDefault(_applyMiddleware);\n\nvar _compose = require('./compose');\n\nvar _compose2 = _interopRequireDefault(_compose);\n\nvar _warning = require('./utils/warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/*\n* This is a dummy function to check if the function name has been altered by minification.\n* If the function has been minified and NODE_ENV !== 'production', warn the user.\n*/\nfunction isCrushed() {}\n\nif (process.env.NODE_ENV !== 'production' && typeof isCrushed.name === 'string' && isCrushed.name !== 'isCrushed') {\n (0, _warning2['default'])('You are currently using minified code outside of NODE_ENV === \\'production\\'. ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or DefinePlugin for webpack (http://stackoverflow.com/questions/30030031) ' + 'to ensure you have the correct code for your production build.');\n}\n\nexports.createStore = _createStore2['default'];\nexports.combineReducers = _combineReducers2['default'];\nexports.bindActionCreators = _bindActionCreators2['default'];\nexports.applyMiddleware = _applyMiddleware2['default'];\nexports.compose = _compose2['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/redux/lib/index.js\n ** module id = 5\n ** module chunks = 0\n **/","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule reactProdInvariant\n * \n */\n'use strict';\n\n/**\n * WARNING: DO NOT manually require this module.\n * This is a replacement for `invariant(...)` used by the error code system\n * and will _only_ be required by the corresponding babel pass.\n * It always throws.\n */\n\nfunction reactProdInvariant(code) {\n var argCount = arguments.length - 1;\n\n var message = 'Minified React error #' + code + '; visit ' + 'http://facebook.github.io/react/docs/error-decoder.html?invariant=' + code;\n\n for (var argIdx = 0; argIdx < argCount; argIdx++) {\n message += '&args[]=' + encodeURIComponent(arguments[argIdx + 1]);\n }\n\n message += ' for the full message or use the non-minified dev environment' + ' for full errors and additional helpful warnings.';\n\n var error = new Error(message);\n error.name = 'Invariant Violation';\n error.framesToPop = 1; // we don't care about reactProdInvariant's own frame\n\n throw error;\n}\n\nmodule.exports = reactProdInvariant;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/reactProdInvariant.js\n ** module id = 6\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\nexports.connect = exports.Provider = undefined;\n\nvar _Provider = require('./components/Provider');\n\nvar _Provider2 = _interopRequireDefault(_Provider);\n\nvar _connect = require('./components/connect');\n\nvar _connect2 = _interopRequireDefault(_connect);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nexports.Provider = _Provider2[\"default\"];\nexports.connect = _connect2[\"default\"];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-redux/lib/index.js\n ** module id = 7\n ** module chunks = 0\n **/","'use strict';\n/* eslint-disable no-unused-vars */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (e) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (Object.getOwnPropertySymbols) {\n\t\t\tsymbols = Object.getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/object-assign/index.js\n ** module id = 8\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\nexports.createMemoryHistory = exports.hashHistory = exports.browserHistory = exports.applyRouterMiddleware = exports.formatPattern = exports.useRouterHistory = exports.match = exports.routerShape = exports.locationShape = exports.PropTypes = exports.RoutingContext = exports.RouterContext = exports.createRoutes = exports.useRoutes = exports.RouteContext = exports.Lifecycle = exports.History = exports.Route = exports.Redirect = exports.IndexRoute = exports.IndexRedirect = exports.withRouter = exports.IndexLink = exports.Link = exports.Router = undefined;\n\nvar _RouteUtils = require('./RouteUtils');\n\nObject.defineProperty(exports, 'createRoutes', {\n enumerable: true,\n get: function get() {\n return _RouteUtils.createRoutes;\n }\n});\n\nvar _PropTypes2 = require('./PropTypes');\n\nObject.defineProperty(exports, 'locationShape', {\n enumerable: true,\n get: function get() {\n return _PropTypes2.locationShape;\n }\n});\nObject.defineProperty(exports, 'routerShape', {\n enumerable: true,\n get: function get() {\n return _PropTypes2.routerShape;\n }\n});\n\nvar _PatternUtils = require('./PatternUtils');\n\nObject.defineProperty(exports, 'formatPattern', {\n enumerable: true,\n get: function get() {\n return _PatternUtils.formatPattern;\n }\n});\n\nvar _Router2 = require('./Router');\n\nvar _Router3 = _interopRequireDefault(_Router2);\n\nvar _Link2 = require('./Link');\n\nvar _Link3 = _interopRequireDefault(_Link2);\n\nvar _IndexLink2 = require('./IndexLink');\n\nvar _IndexLink3 = _interopRequireDefault(_IndexLink2);\n\nvar _withRouter2 = require('./withRouter');\n\nvar _withRouter3 = _interopRequireDefault(_withRouter2);\n\nvar _IndexRedirect2 = require('./IndexRedirect');\n\nvar _IndexRedirect3 = _interopRequireDefault(_IndexRedirect2);\n\nvar _IndexRoute2 = require('./IndexRoute');\n\nvar _IndexRoute3 = _interopRequireDefault(_IndexRoute2);\n\nvar _Redirect2 = require('./Redirect');\n\nvar _Redirect3 = _interopRequireDefault(_Redirect2);\n\nvar _Route2 = require('./Route');\n\nvar _Route3 = _interopRequireDefault(_Route2);\n\nvar _History2 = require('./History');\n\nvar _History3 = _interopRequireDefault(_History2);\n\nvar _Lifecycle2 = require('./Lifecycle');\n\nvar _Lifecycle3 = _interopRequireDefault(_Lifecycle2);\n\nvar _RouteContext2 = require('./RouteContext');\n\nvar _RouteContext3 = _interopRequireDefault(_RouteContext2);\n\nvar _useRoutes2 = require('./useRoutes');\n\nvar _useRoutes3 = _interopRequireDefault(_useRoutes2);\n\nvar _RouterContext2 = require('./RouterContext');\n\nvar _RouterContext3 = _interopRequireDefault(_RouterContext2);\n\nvar _RoutingContext2 = require('./RoutingContext');\n\nvar _RoutingContext3 = _interopRequireDefault(_RoutingContext2);\n\nvar _PropTypes3 = _interopRequireDefault(_PropTypes2);\n\nvar _match2 = require('./match');\n\nvar _match3 = _interopRequireDefault(_match2);\n\nvar _useRouterHistory2 = require('./useRouterHistory');\n\nvar _useRouterHistory3 = _interopRequireDefault(_useRouterHistory2);\n\nvar _applyRouterMiddleware2 = require('./applyRouterMiddleware');\n\nvar _applyRouterMiddleware3 = _interopRequireDefault(_applyRouterMiddleware2);\n\nvar _browserHistory2 = require('./browserHistory');\n\nvar _browserHistory3 = _interopRequireDefault(_browserHistory2);\n\nvar _hashHistory2 = require('./hashHistory');\n\nvar _hashHistory3 = _interopRequireDefault(_hashHistory2);\n\nvar _createMemoryHistory2 = require('./createMemoryHistory');\n\nvar _createMemoryHistory3 = _interopRequireDefault(_createMemoryHistory2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.Router = _Router3.default; /* components */\n\nexports.Link = _Link3.default;\nexports.IndexLink = _IndexLink3.default;\nexports.withRouter = _withRouter3.default;\n\n/* components (configuration) */\n\nexports.IndexRedirect = _IndexRedirect3.default;\nexports.IndexRoute = _IndexRoute3.default;\nexports.Redirect = _Redirect3.default;\nexports.Route = _Route3.default;\n\n/* mixins */\n\nexports.History = _History3.default;\nexports.Lifecycle = _Lifecycle3.default;\nexports.RouteContext = _RouteContext3.default;\n\n/* utils */\n\nexports.useRoutes = _useRoutes3.default;\nexports.RouterContext = _RouterContext3.default;\nexports.RoutingContext = _RoutingContext3.default;\nexports.PropTypes = _PropTypes3.default;\nexports.match = _match3.default;\nexports.useRouterHistory = _useRouterHistory3.default;\nexports.applyRouterMiddleware = _applyRouterMiddleware3.default;\n\n/* histories */\n\nexports.browserHistory = _browserHistory3.default;\nexports.hashHistory = _hashHistory3.default;\nexports.createMemoryHistory = _createMemoryHistory3.default;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-router/lib/index.js\n ** module id = 9\n ** module chunks = 0\n **/","\r\nvar helpers = require('../../helpers.js')\r\n\r\n/**\r\n * Send an ajax request to the Spotify API\r\n *\r\n * @param dispatch obj\r\n * @param getState obj\r\n * @param endpoint string = the url to query (ie /albums/:uri)\r\n * @param method string\r\n * @param data mixed = request payload\r\n * @return Promise\r\n **/\r\nconst sendRequest = ( dispatch, getState, endpoint, method = 'GET', data = false) => {\r\n return new Promise( (resolve, reject) => { \r\n getToken( dispatch, getState )\r\n .then( response => {\r\n\r\n var url = 'https://api.spotify.com/v1/'+endpoint\r\n if( endpoint.startsWith('https://api.spotify.com/') ) url = endpoint;\r\n\r\n $.ajax({\r\n method: method,\r\n cache: true,\r\n url: url,\r\n headers: {\r\n Authorization: 'Bearer '+ response\r\n },\r\n data: data\r\n }).then( \r\n response => resolve(response),\r\n (xhr, status, error) => {\r\n console.error( endpoint+' failed', xhr.responseText)\r\n reject(error)\r\n }\r\n )\r\n });\r\n }\r\n );\r\n}\r\n\r\n\r\n/**\r\n* Check an access token validity\r\n*\r\n* @return Promise\r\n**/\r\nfunction getToken( dispatch, getState ){\r\n return new Promise( (resolve, reject) => {\r\n\r\n // token is okay for now, so just resolve with the current token\r\n if( new Date().getTime() < getState().spotify.token_expiry ){\r\n resolve(getState().spotify.access_token);\r\n return\r\n }\r\n\r\n // token is expiring/expired, so go get a new one and resolve that\r\n refreshToken( dispatch, getState )\r\n .then(\r\n response => resolve(response.access_token),\r\n error => {\r\n dispatch({ type: 'SPOTIFY_DISCONNECTED' })\r\n reject(error)\r\n }\r\n );\r\n });\r\n}\r\n\r\nfunction refreshToken( dispatch, getState ){\r\n return new Promise( (resolve, reject) => {\r\n\r\n if( getState().spotify.authorized ){\r\n\r\n $.ajax({\r\n method: 'GET',\r\n url: '//jamesbarnsley.co.nz/auth.php?action=refresh&refresh_token='+getState().spotify.refresh_token,\r\n dataType: \"json\",\r\n timeout: 10000\r\n })\r\n .then(\r\n response => {\r\n response.token_expiry = new Date().getTime() + ( response.expires_in * 1000 );\r\n response.source = 'spotify';\r\n dispatch({\r\n type: 'SPOTIFY_TOKEN_REFRESHED',\r\n data: response\r\n });\r\n resolve(response);\r\n },\r\n error => {\r\n console.error('Could not refresh token', error)\r\n reject(error)\r\n }\r\n );\r\n\r\n }else{\r\n\r\n $.ajax({\r\n method: 'GET',\r\n url: '//'+getState().mopidy.host+':'+getState().mopidy.port+'/iris/http/refresh_spotify_token',\r\n dataType: \"json\",\r\n timeout: 10000\r\n })\r\n .then(\r\n response => {\r\n response.token_expiry = new Date().getTime() + ( response.expires_in * 1000 );\r\n response.source = 'mopidy';\r\n dispatch({\r\n type: 'SPOTIFY_TOKEN_REFRESHED',\r\n data: response\r\n });\r\n resolve(response);\r\n },\r\n error => {\r\n console.error('Could not refresh token', error)\r\n reject(error)\r\n }\r\n );\r\n }\r\n\r\n })\r\n}\r\n\r\n\r\n/**\r\n * Actions and Action Creators\r\n **/\r\n\r\nexport function setConfig( config ){\r\n return {\r\n type: 'SPOTIFY_SET_CONFIG',\r\n config: config\r\n }\r\n}\r\n\r\nexport function connect(){\r\n return (dispatch, getState) => {\r\n\r\n dispatch({ type: 'SPOTIFY_CONNECTING' });\r\n\r\n // send a generic request to ensure spotify is up and running\r\n // there is no 'test' or 'ping' endpoint on the Spotify API\r\n sendRequest( dispatch, getState, 'browse/categories?limit=1' )\r\n .then( response => {\r\n dispatch({\r\n type: 'SPOTIFY_CONNECTED'\r\n });\r\n });\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Handle authorization process\r\n **/\r\n\r\nexport function startAuthorization(){\r\n return { type: 'SPOTIFY_START_AUTHORIZATION' }\r\n}\r\n\r\nexport function authorizationGranted( data ){\r\n data.token_expiry = new Date().getTime() + data.expires_in;\r\n return { type: 'SPOTIFY_AUTHORIZATION_GRANTED', data: data }\r\n}\r\n\r\nexport function authorizationRevoked(){\r\n return { type: 'SPOTIFY_AUTHORIZATION_REVOKED' }\r\n}\r\n\r\nexport function refreshingToken(){\r\n return (dispatch, getState) => {\r\n dispatch({ type: 'SPOTIFY_TOKEN_REFRESHING' });\r\n refreshToken( dispatch, getState );\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Get current user\r\n **/\r\nexport function getMe(){\r\n return (dispatch, getState) => {\r\n\r\n // flush out the previous store value\r\n dispatch({ type: 'SPOTIFY_ME_LOADED', data: false });\r\n\r\n sendRequest( dispatch, getState, 'me' )\r\n .then( response => {\r\n dispatch({\r\n type: 'SPOTIFY_ME_LOADED',\r\n data: response\r\n });\r\n });\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Get a single track\r\n *\r\n * @param uri string\r\n **/\r\nexport function getTrack( uri ){\r\n return (dispatch, getState) => {\r\n\r\n // flush out the previous store value\r\n dispatch({ type: 'SPOTIFY_TRACK_LOADED', data: false });\r\n\r\n sendRequest( dispatch, getState, 'tracks/'+ helpers.getFromUri('trackid', uri) )\r\n .then( response => {\r\n dispatch({\r\n type: 'SPOTIFY_TRACK_LOADED',\r\n data: response\r\n });\r\n }\r\n );\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Get a single artist\r\n *\r\n * @param uri string\r\n **/\r\nexport function getArtist( uri ){\r\n return (dispatch, getState) => {\r\n\r\n // flush out the previous store value\r\n dispatch({ type: 'SPOTIFY_ARTIST_LOADED', data: false });\r\n\r\n var artist = {};\r\n\r\n // while we're fiddling about, go get the albums\r\n dispatch(getArtistAlbums(uri));\r\n\r\n // get both the artist and the top tracks\r\n $.when(\r\n\r\n sendRequest( dispatch, getState, 'artists/'+ helpers.getFromUri('artistid', uri) )\r\n .then( response => {\r\n Object.assign(artist, response);\r\n }),\r\n\r\n sendRequest( dispatch, getState, 'artists/'+ helpers.getFromUri('artistid', uri) +'/top-tracks?country='+getState().spotify.country )\r\n .then( response => {\r\n Object.assign(artist, response);\r\n }),\r\n\r\n sendRequest( dispatch, getState, 'artists/'+ helpers.getFromUri('artistid', uri) +'/related-artists' )\r\n .then( response => {\r\n Object.assign(artist, { related_artists: response.artists });\r\n })\r\n\r\n ).then( () => {\r\n dispatch({\r\n type: 'SPOTIFY_ARTIST_LOADED',\r\n data: artist\r\n });\r\n });\r\n }\r\n}\r\n\r\nexport function getArtists( uris ){\r\n\treturn (dispatch, getState) => {\r\n\r\n\t\t// flush out the previous store value\r\n dispatch({ type: 'SPOTIFY_ARTISTS_LOADED', data: false });\r\n\r\n // now get all the artists for this album (full objects)\r\n var ids = '';\r\n for( var i = 0; i < uris.length; i++ ){\r\n if( ids != '' ) ids += ','\r\n ids += helpers.getFromUri( 'artistid', uris[i] );\r\n }\r\n\r\n sendRequest( dispatch, getState, 'artists/?ids='+ids )\r\n .then( response => {\r\n dispatch({\r\n type: 'SPOTIFY_ARTISTS_LOADED',\r\n data: response.artists\r\n });\r\n });\r\n\t}\r\n}\r\n\r\nexport function getArtistAlbums( uri ){\r\n return (dispatch, getState) => {\r\n sendRequest( dispatch, getState, 'artists/'+ helpers.getFromUri('artistid', uri) +'/albums' )\r\n .then( response => {\r\n dispatch({\r\n \ttype: 'SPOTIFY_ARTIST_ALBUMS_LOADED',\r\n \tdata: response\r\n });\r\n });\r\n\t}\r\n}\r\n\r\n/**\r\n * Single album\r\n *\r\n * @oaram uri string\r\n **/\r\nexport function getAlbum( uri ){\r\n return (dispatch, getState) => {\r\n\r\n // flush out the previous store value\r\n dispatch({ type: 'SPOTIFY_ALBUM_LOADED', data: false });\r\n\r\n sendRequest( dispatch, getState, 'albums/'+ helpers.getFromUri('albumid', uri) )\r\n .then( response => {\r\n\r\n // now get all the artists for this album (full objects)\r\n var artist_uris = [];\r\n for( var i = 0; i < response.artists.length; i++ ){\r\n artist_uris.push( response.artists[i].uri )\r\n }\r\n dispatch(getArtists(artist_uris));\r\n\r\n // inject the parent album object into each track for consistent track objects\r\n for( var i = 0; i < response.tracks.items.length; i++ ){\r\n response.tracks.items[i].album = {\r\n name: response.name,\r\n uri: response.uri\r\n }\r\n }\r\n\r\n dispatch({\r\n type: 'SPOTIFY_ALBUM_LOADED',\r\n data: response\r\n });\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Single playlist\r\n *\r\n * @oaram uri string\r\n **/\r\nexport function getPlaylist( uri ){\r\n return (dispatch, getState) => {\r\n\r\n\t\t// flush out the previous store value\r\n dispatch({ type: 'SPOTIFY_PLAYLIST_LOADED', data: false });\r\n\r\n sendRequest( dispatch, getState, 'users/'+ helpers.getFromUri('userid',uri) +'/playlists/'+ helpers.getFromUri('playlistid',uri) +'?market='+getState().spotify.country )\r\n .then( response => {\r\n dispatch({\r\n \ttype: 'SPOTIFY_PLAYLIST_LOADED',\r\n \tdata: response\r\n });\r\n });\r\n\t}\r\n}\r\n\r\n\r\nexport function getLibraryPlaylists(){\r\n return (dispatch, getState) => {\r\n\r\n dispatch({ type: 'SPOTIFY_LIBRARY_PLAYLISTS_LOADED', data: false });\r\n\r\n sendRequest( dispatch, getState, 'me/playlists' )\r\n .then( response => {\r\n dispatch({\r\n type: 'SPOTIFY_LIBRARY_PLAYLISTS_LOADED',\r\n data: response\r\n });\r\n });\r\n }\r\n}\r\n\r\n\r\nexport function getLibraryArtists(){\r\n\treturn (dispatch, getState) => {\r\n\r\n dispatch({ type: 'SPOTIFY_LIBRARY_ARTISTS_LOADED', data: false });\r\n\r\n sendRequest( dispatch, getState, 'me/following?type=artist' )\r\n .then( response => {\r\n dispatch({\r\n \ttype: 'SPOTIFY_LIBRARY_ARTISTS_LOADED',\r\n \tdata: response.artists\r\n });\r\n });\r\n\t}\r\n}\r\n\r\n\r\nexport function getLibraryAlbums(){\r\n\treturn (dispatch, getState) => {\r\n\r\n dispatch({ type: 'SPOTIFY_LIBRARY_ALBUMS_LOADED', data: false });\r\n\r\n sendRequest( dispatch, getState, 'me/albums' )\r\n .then( response => {\r\n dispatch({\r\n \ttype: 'SPOTIFY_LIBRARY_ALBUMS_LOADED',\r\n \tdata: response\r\n });\r\n });\r\n\t}\r\n}\r\n\r\nexport function getLibraryTracks(){\r\n return (dispatch, getState) => {\r\n\r\n dispatch({ type: 'SPOTIFY_LIBRARY_TRACKS_LOADED', data: false });\r\n\r\n sendRequest( dispatch, getState, 'me/tracks?limit=50' )\r\n .then( response => {\r\n dispatch({\r\n type: 'SPOTIFY_LIBRARY_TRACKS_LOADED',\r\n data: response\r\n });\r\n });\r\n }\r\n}\r\n\r\nexport function getFeaturedPlaylists(){\r\n return (dispatch, getState) => {\r\n\r\n dispatch({ type: 'SPOTIFY_FEATURED_PLAYLISTS_LOADED', data: false });\r\n\r\n var date = new Date();\r\n var year = date.getFullYear();\r\n var month = date.getMonth();\r\n if( month < 10 ) month = '0'+month;\r\n var day = date.getDay();\r\n if( day < 10 ) day = '0'+day;\r\n var hour = date.getHours();\r\n if( hour < 10 ) hour = '0'+hour;\r\n var min = date.getMinutes();\r\n if( min < 10 ) min = '0'+min;\r\n var sec = date.getSeconds();\r\n if( sec < 10 ) sec = '0'+sec;\r\n\r\n var timestamp = year+'-'+month+'-'+day+'T'+hour+':'+min+':'+sec;\r\n\r\n sendRequest( dispatch, getState, 'browse/featured-playlists?timestamp='+timestamp+'&country='+getState().spotify.country+'&limit=50' )\r\n .then( response => {\r\n dispatch({\r\n type: 'SPOTIFY_FEATURED_PLAYLISTS_LOADED',\r\n data: response\r\n });\r\n });\r\n }\r\n}\r\n\r\nexport function getCategories(){\r\n return (dispatch, getState) => {\r\n\r\n dispatch({ type: 'SPOTIFY_CATEGORIES_LOADED', data: false });\r\n\r\n sendRequest( dispatch, getState, 'browse/categories?limit=50' )\r\n .then( response => {\r\n dispatch({\r\n type: 'SPOTIFY_CATEGORIES_LOADED',\r\n data: response.categories\r\n });\r\n });\r\n }\r\n}\r\n\r\nexport function getCategory( id ){\r\n return (dispatch, getState) => {\r\n\r\n dispatch({ type: 'SPOTIFY_CATEGORY_LOADED', data: false });\r\n\r\n sendRequest( dispatch, getState, 'browse/categories/'+id )\r\n .then( response => {\r\n dispatch({\r\n type: 'SPOTIFY_CATEGORY_LOADED',\r\n data: response\r\n });\r\n });\r\n }\r\n}\r\n\r\nexport function getCategoryPlaylists( id ){\r\n return (dispatch, getState) => {\r\n\r\n dispatch({ type: 'SPOTIFY_CATEGORY_PLAYLISTS_LOADED', data: false });\r\n\r\n sendRequest( dispatch, getState, 'browse/categories/'+id+'/playlists?limit=50' )\r\n .then( response => {\r\n dispatch({\r\n type: 'SPOTIFY_CATEGORY_PLAYLISTS_LOADED',\r\n data: response.playlists\r\n });\r\n });\r\n }\r\n}\r\n\r\nexport function getNewReleases(){\r\n return (dispatch, getState) => {\r\n\r\n dispatch({ type: 'SPOTIFY_NEW_RELEASES_LOADED', data: false });\r\n\r\n sendRequest( dispatch, getState, 'browse/new-releases?country='+getState().spotify.country+'&limit=50' )\r\n .then( response => {\r\n dispatch({\r\n type: 'SPOTIFY_NEW_RELEASES_LOADED',\r\n data: response.albums\r\n });\r\n });\r\n }\r\n}\r\n\r\nexport function getURL( url, action_name ){\r\n return (dispatch, getState) => {\r\n sendRequest( dispatch, getState, url )\r\n .then( response => {\r\n dispatch({\r\n type: action_name,\r\n data: response\r\n });\r\n });\r\n }\r\n}\r\n\r\nexport function getSearchResults( query, type = 'album,artist,playlist,track', limit = 50, offset = 0 ){\r\n\treturn (dispatch, getState) => {\r\n\r\n dispatch({ type: 'SPOTIFY_SEARCH_RESULTS_LOADED', data: false });\r\n\r\n var url = 'search?q='+query\r\n url += '&type='+type\r\n url += '&country='+getState().spotify.country\r\n url += '&limit='+limit\r\n url += '&offset='+offset\r\n\r\n sendRequest( dispatch, getState, url )\r\n .then( response => {\r\n dispatch({\r\n type: 'SPOTIFY_SEARCH_RESULTS_LOADED',\r\n data: response\r\n });\r\n });\r\n\t}\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/services/spotify/actions.js\n **/","\r\n/**\r\n * Actions and Action Creators\r\n **/\r\n\r\nexport function setConfig( config ){\r\n\treturn {\r\n\t\ttype: 'MOPIDY_SET_CONFIG',\r\n\t\tconfig: config\r\n\t}\r\n}\r\n\r\nexport function connect(){\r\n\treturn {\r\n\t\ttype: 'MOPIDY_CONNECT'\r\n\t}\r\n}\r\n\r\nexport function disconnect(){\r\n\treturn {\r\n\t\ttype: 'MOPIDY_DISCONNECT'\r\n\t}\r\n}\r\n\r\nexport function instruct( call, value ){\r\n\treturn {\r\n\t\ttype: 'MOPIDY_INSTRUCT',\r\n\t\tcall: call,\r\n\t\tvalue: value\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Playback-oriented actions\r\n **/\r\n\r\nexport function changeTrack( tlid ){\r\n\treturn {\r\n\t\ttype: 'MOPIDY_INSTRUCT',\r\n\t\tcall: 'playback.play',\r\n\t\tvalue: { tlid: tlid }\r\n\t}\r\n}\r\n\r\nexport function playTracks( uris ){\r\n\treturn {\r\n\t\ttype: 'MOPIDY_PLAY_TRACKS',\r\n\t\turis: uris\r\n\t}\r\n}\r\n\r\nexport function enqueueTracks( uris, at_position = false ){\r\n\tif( typeof(uris) !== 'object' ) uris = [uris];\r\n\tvar value = { uris: uris };\r\n\tif( at_position ) value.at_position = at_position;\r\n\treturn {\r\n\t\ttype: 'MOPIDY_INSTRUCT',\r\n\t\tcall: 'tracklist.add',\r\n\t\tvalue: value\r\n\t}\r\n}\r\n\r\nexport function removeTracks( tlids ){\r\n\treturn {\r\n\t\ttype: 'MOPIDY_INSTRUCT',\r\n\t\tcall: 'tracklist.remove',\r\n\t\tvalue: { tlid: tlids }\r\n\t}\r\n}\r\n\r\nexport function play(){\r\n\treturn instruct('playback.play');\r\n}\r\n\r\nexport function pause(){\r\n\treturn instruct('playback.pause');\r\n}\r\n\r\nexport function stop(){\r\n\treturn instruct('playback.stop');\r\n}\r\n\r\nexport function next(){\r\n\treturn instruct('playback.next');\r\n}\r\n\r\nexport function previous(){\r\n\treturn instruct('playback.previous');\r\n}\r\n\r\nexport function setVolume( volume ){\r\n\treturn {\r\n\t\ttype: 'MOPIDY_INSTRUCT',\r\n\t\tcall: 'playback.setVolume',\r\n\t\tvalue: { volume: volume }\r\n\t}\r\n}\r\n\r\nexport function seek( time_position ){\r\n\treturn {\r\n\t\ttype: 'MOPIDY_INSTRUCT',\r\n\t\tcall: 'playback.seek',\r\n\t\tvalue: { time_position: time_position }\r\n\t}\r\n}\r\n\r\nexport function getTimePosition(){\r\n\treturn {\r\n\t\ttype: 'MOPIDY_INSTRUCT',\r\n\t\tcall: 'playback.getTimePosition'\r\n\t}\r\n}\r\n\r\nexport function setTimePosition( time_position ){\r\n\treturn {\r\n\t\ttype: 'MOPIDY_TIMEPOSITION',\r\n\t\tdata: time_position\r\n\t}\r\n}\r\n\r\n\r\n\r\n/**\r\n * Asset-oriented actions\r\n **/\r\n\r\nexport function getPlaylists(){\r\n\treturn { type: 'MOPIDY_PLAYLISTS' }\r\n}\r\n\r\nexport function getPlaylist( uri ){\r\n\treturn { \r\n\t\ttype: 'MOPIDY_PLAYLIST', \r\n\t\tdata: { uri: uri } \r\n\t}\r\n}\r\n\r\nexport function getDirectory( uri ){\r\n\treturn { \r\n\t\ttype: 'MOPIDY_DIRECTORY', \r\n\t\tdata: { uri: uri } \r\n\t}\r\n}\r\n\r\nexport function getAlbum( uri ){\r\n\treturn { \r\n\t\ttype: 'MOPIDY_ALBUM', \r\n\t\tdata: { uri: uri } \r\n\t}\r\n}\r\n\r\nexport function getArtist( uri ){\r\n\treturn { \r\n\t\ttype: 'MOPIDY_ARTIST', \r\n\t\tdata: { uri: uri } \r\n\t}\r\n}\r\n\r\nexport function getArtists(){\r\n\treturn { \r\n\t\ttype: 'MOPIDY_ARTISTS'\r\n\t}\r\n}\r\n\r\nexport function getAlbums(){\r\n\treturn { \r\n\t\ttype: 'MOPIDY_ALBUMS'\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Other general actions\r\n **/\r\n\r\nexport function getSearchResults(query, backends = null, fields = ['any']){\r\n\tvar queryObj = {};\r\n\tfor( var i = 0; i < fields.length; i++ ){\r\n\t\tqueryObj[fields[i]] = [query];\r\n\t}\r\n\r\n\treturn {\r\n\t\ttype: 'MOPIDY_INSTRUCT',\r\n\t\tcall: 'library.search',\r\n\t\tvalue: { query: queryObj, uris: backends }\r\n\t}\r\n}\r\n \n\n\n/** WEBPACK FOOTER **\n ** ./src/js/services/mopidy/actions.js\n **/","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\n/**\n * A React component for the font-awesome icon library.\n *\n *\n * @param {Boolean} [border=false] Whether or not to show a border radius\n * @param {String} [className] An extra set of CSS classes to add to the component\n * @param {Object} [cssModule] Option to pass FontAwesome CSS as a module\n * @param {Boolean} [fixedWidth=false] Make buttons fixed width\n * @param {String} [flip=false] Flip the icon's orientation.\n * @param {Boolean} [inverse=false]Inverse the icon's color\n * @param {String} name Name of the icon to use\n * @param {Boolean} [pulse=false] Rotate icon with 8 steps (rather than smoothly)\n * @param {Number} [rotate] The degress to rotate the icon by\n * @param {String} [size] The icon scaling size\n * @param {Boolean} [spin=false] Spin the icon\n * @param {String} [stack] Stack an icon on top of another\n * @module FontAwesome\n * @type {ReactClass}\n */\nexports.default = _react2.default.createClass({\n\n displayName: 'FontAwesome',\n\n propTypes: {\n border: _react2.default.PropTypes.bool,\n className: _react2.default.PropTypes.string,\n cssModule: _react2.default.PropTypes.object,\n fixedWidth: _react2.default.PropTypes.bool,\n flip: _react2.default.PropTypes.oneOf(['horizontal', 'vertical']),\n inverse: _react2.default.PropTypes.bool,\n name: _react2.default.PropTypes.string.isRequired,\n pulse: _react2.default.PropTypes.bool,\n rotate: _react2.default.PropTypes.oneOf([90, 180, 270]),\n size: _react2.default.PropTypes.oneOf(['lg', '2x', '3x', '4x', '5x']),\n spin: _react2.default.PropTypes.bool,\n stack: _react2.default.PropTypes.oneOf(['1x', '2x'])\n },\n\n render: function render() {\n var _props = this.props;\n var border = _props.border;\n var cssModule = _props.cssModule;\n var className = _props.className;\n var fixedWidth = _props.fixedWidth;\n var flip = _props.flip;\n var inverse = _props.inverse;\n var name = _props.name;\n var pulse = _props.pulse;\n var rotate = _props.rotate;\n var size = _props.size;\n var spin = _props.spin;\n var stack = _props.stack;\n\n var props = _objectWithoutProperties(_props, ['border', 'cssModule', 'className', 'fixedWidth', 'flip', 'inverse', 'name', 'pulse', 'rotate', 'size', 'spin', 'stack']);\n\n var classNames = [];\n\n if (cssModule) {\n classNames.push(cssModule['fa']);\n classNames.push(cssModule['fa-' + name]);\n size && classNames.push(cssModule['fa-' + size]);\n spin && classNames.push(cssModule['fa-spin']);\n pulse && classNames.push(cssModule['fa-pulse']);\n border && classNames.push(cssModule['fa-border']);\n fixedWidth && classNames.push(cssModule['fa-fw']);\n inverse && classNames.push(cssModule['fa-inverse']);\n flip && classNames.push(cssModule['fa-flip-' + flip]);\n rotate && classNames.push(cssModule['fa-rotate-' + rotate]);\n stack && classNames.push(cssModule['fa-stack-' + stack]);\n } else {\n classNames.push('fa');\n classNames.push('fa-' + name);\n size && classNames.push('fa-' + size);\n spin && classNames.push('fa-spin');\n pulse && classNames.push('fa-pulse');\n border && classNames.push('fa-border');\n fixedWidth && classNames.push('fa-fw');\n inverse && classNames.push('fa-inverse');\n flip && classNames.push('fa-flip-' + flip);\n rotate && classNames.push('fa-rotate-' + rotate);\n stack && classNames.push('fa-stack-' + stack);\n }\n\n // Add any custom class names at the end.\n className && classNames.push(className);\n\n return _react2.default.createElement('span', _extends({}, props, {\n className: classNames.join(' ')\n }));\n }\n});\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-fontawesome/lib/index.js\n ** module id = 12\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMComponentTree\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar DOMProperty = require('./DOMProperty');\nvar ReactDOMComponentFlags = require('./ReactDOMComponentFlags');\n\nvar invariant = require('fbjs/lib/invariant');\n\nvar ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;\nvar Flags = ReactDOMComponentFlags;\n\nvar internalInstanceKey = '__reactInternalInstance$' + Math.random().toString(36).slice(2);\n\n/**\n * Drill down (through composites and empty components) until we get a host or\n * host text component.\n *\n * This is pretty polymorphic but unavoidable with the current structure we have\n * for `_renderedChildren`.\n */\nfunction getRenderedHostOrTextFromComponent(component) {\n var rendered;\n while (rendered = component._renderedComponent) {\n component = rendered;\n }\n return component;\n}\n\n/**\n * Populate `_hostNode` on the rendered host/text component with the given\n * DOM node. The passed `inst` can be a composite.\n */\nfunction precacheNode(inst, node) {\n var hostInst = getRenderedHostOrTextFromComponent(inst);\n hostInst._hostNode = node;\n node[internalInstanceKey] = hostInst;\n}\n\nfunction uncacheNode(inst) {\n var node = inst._hostNode;\n if (node) {\n delete node[internalInstanceKey];\n inst._hostNode = null;\n }\n}\n\n/**\n * Populate `_hostNode` on each child of `inst`, assuming that the children\n * match up with the DOM (element) children of `node`.\n *\n * We cache entire levels at once to avoid an n^2 problem where we access the\n * children of a node sequentially and have to walk from the start to our target\n * node every time.\n *\n * Since we update `_renderedChildren` and the actual DOM at (slightly)\n * different times, we could race here and see a newer `_renderedChildren` than\n * the DOM nodes we see. To avoid this, ReactMultiChild calls\n * `prepareToManageChildren` before we change `_renderedChildren`, at which\n * time the container's child nodes are always cached (until it unmounts).\n */\nfunction precacheChildNodes(inst, node) {\n if (inst._flags & Flags.hasCachedChildNodes) {\n return;\n }\n var children = inst._renderedChildren;\n var childNode = node.firstChild;\n outer: for (var name in children) {\n if (!children.hasOwnProperty(name)) {\n continue;\n }\n var childInst = children[name];\n var childID = getRenderedHostOrTextFromComponent(childInst)._domID;\n if (childID === 0) {\n // We're currently unmounting this child in ReactMultiChild; skip it.\n continue;\n }\n // We assume the child nodes are in the same order as the child instances.\n for (; childNode !== null; childNode = childNode.nextSibling) {\n if (childNode.nodeType === 1 && childNode.getAttribute(ATTR_NAME) === String(childID) || childNode.nodeType === 8 && childNode.nodeValue === ' react-text: ' + childID + ' ' || childNode.nodeType === 8 && childNode.nodeValue === ' react-empty: ' + childID + ' ') {\n precacheNode(childInst, childNode);\n continue outer;\n }\n }\n // We reached the end of the DOM children without finding an ID match.\n !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Unable to find element with ID %s.', childID) : _prodInvariant('32', childID) : void 0;\n }\n inst._flags |= Flags.hasCachedChildNodes;\n}\n\n/**\n * Given a DOM node, return the closest ReactDOMComponent or\n * ReactDOMTextComponent instance ancestor.\n */\nfunction getClosestInstanceFromNode(node) {\n if (node[internalInstanceKey]) {\n return node[internalInstanceKey];\n }\n\n // Walk up the tree until we find an ancestor whose instance we have cached.\n var parents = [];\n while (!node[internalInstanceKey]) {\n parents.push(node);\n if (node.parentNode) {\n node = node.parentNode;\n } else {\n // Top of the tree. This node must not be part of a React tree (or is\n // unmounted, potentially).\n return null;\n }\n }\n\n var closest;\n var inst;\n for (; node && (inst = node[internalInstanceKey]); node = parents.pop()) {\n closest = inst;\n if (parents.length) {\n precacheChildNodes(inst, node);\n }\n }\n\n return closest;\n}\n\n/**\n * Given a DOM node, return the ReactDOMComponent or ReactDOMTextComponent\n * instance, or null if the node was not rendered by this React.\n */\nfunction getInstanceFromNode(node) {\n var inst = getClosestInstanceFromNode(node);\n if (inst != null && inst._hostNode === node) {\n return inst;\n } else {\n return null;\n }\n}\n\n/**\n * Given a ReactDOMComponent or ReactDOMTextComponent, return the corresponding\n * DOM node.\n */\nfunction getNodeFromInstance(inst) {\n // Without this first invariant, passing a non-DOM-component triggers the next\n // invariant for a missing parent, which is super confusing.\n !(inst._hostNode !== undefined) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;\n\n if (inst._hostNode) {\n return inst._hostNode;\n }\n\n // Walk up the tree until we find an ancestor whose DOM node we have cached.\n var parents = [];\n while (!inst._hostNode) {\n parents.push(inst);\n !inst._hostParent ? process.env.NODE_ENV !== 'production' ? invariant(false, 'React DOM tree root should always have a node reference.') : _prodInvariant('34') : void 0;\n inst = inst._hostParent;\n }\n\n // Now parents contains each ancestor that does *not* have a cached native\n // node, and `inst` is the deepest ancestor that does.\n for (; parents.length; inst = parents.pop()) {\n precacheChildNodes(inst, inst._hostNode);\n }\n\n return inst._hostNode;\n}\n\nvar ReactDOMComponentTree = {\n getClosestInstanceFromNode: getClosestInstanceFromNode,\n getInstanceFromNode: getInstanceFromNode,\n getNodeFromInstance: getNodeFromInstance,\n precacheChildNodes: precacheChildNodes,\n precacheNode: precacheNode,\n uncacheNode: uncacheNode\n};\n\nmodule.exports = ReactDOMComponentTree;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMComponentTree.js\n ** module id = 13\n ** module chunks = 0\n **/","module.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/buildin/amd-define.js\n ** module id = 14\n ** module chunks = 0\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport Icon from './Icon'\r\n\r\nexport default class Header extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\trender(){\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t

{ this.props.title }

\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/Header.js\n **/","'use strict';\n\nexports.__esModule = true;\nexports.default = routerWarning;\nexports._resetWarned = _resetWarned;\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar warned = {};\n\nfunction routerWarning(falseToWarn, message) {\n // Only issue deprecation warnings once.\n if (message.indexOf('deprecated') !== -1) {\n if (warned[message]) {\n return;\n }\n\n warned[message] = true;\n }\n\n message = '[react-router] ' + message;\n\n for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n _warning2.default.apply(undefined, [falseToWarn, message].concat(args));\n}\n\nfunction _resetWarned() {\n warned = {};\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-router/lib/routerWarning.js\n ** module id = 16\n ** module chunks = 0\n **/","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n canUseDOM: canUseDOM,\n\n canUseWorkers: typeof Worker !== 'undefined',\n\n canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n canUseViewport: canUseDOM && !!window.screen,\n\n isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/ExecutionEnvironment.js\n ** module id = 17\n ** module chunks = 0\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/invariant/browser.js\n ** module id = 18\n ** module chunks = 0\n **/","/**\n * Copyright 2016-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInstrumentation\n */\n\n'use strict';\n\nvar debugTool = null;\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactDebugTool = require('./ReactDebugTool');\n debugTool = ReactDebugTool;\n}\n\nmodule.exports = { debugTool: debugTool };\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactInstrumentation.js\n ** module id = 19\n ** module chunks = 0\n **/","/**\n * Copyright 2016-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactComponentTreeHook\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nfunction isNative(fn) {\n // Based on isNative() from Lodash\n var funcToString = Function.prototype.toString;\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n var reIsNative = RegExp('^' + funcToString\n // Take an example native function source for comparison\n .call(hasOwnProperty)\n // Strip regex characters so we can use it for regex\n .replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n // Remove hasOwnProperty from the template to make it generic\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$');\n try {\n var source = funcToString.call(fn);\n return reIsNative.test(source);\n } catch (err) {\n return false;\n }\n}\n\nvar canUseCollections =\n// Array.from\ntypeof Array.from === 'function' &&\n// Map\ntypeof Map === 'function' && isNative(Map) &&\n// Map.prototype.keys\nMap.prototype != null && typeof Map.prototype.keys === 'function' && isNative(Map.prototype.keys) &&\n// Set\ntypeof Set === 'function' && isNative(Set) &&\n// Set.prototype.keys\nSet.prototype != null && typeof Set.prototype.keys === 'function' && isNative(Set.prototype.keys);\n\nvar itemMap;\nvar rootIDSet;\n\nvar itemByKey;\nvar rootByKey;\n\nif (canUseCollections) {\n itemMap = new Map();\n rootIDSet = new Set();\n} else {\n itemByKey = {};\n rootByKey = {};\n}\n\nvar unmountedIDs = [];\n\n// Use non-numeric keys to prevent V8 performance issues:\n// https://github.com/facebook/react/pull/7232\nfunction getKeyFromID(id) {\n return '.' + id;\n}\nfunction getIDFromKey(key) {\n return parseInt(key.substr(1), 10);\n}\n\nfunction get(id) {\n if (canUseCollections) {\n return itemMap.get(id);\n } else {\n var key = getKeyFromID(id);\n return itemByKey[key];\n }\n}\n\nfunction remove(id) {\n if (canUseCollections) {\n itemMap['delete'](id);\n } else {\n var key = getKeyFromID(id);\n delete itemByKey[key];\n }\n}\n\nfunction create(id, element, parentID) {\n var item = {\n element: element,\n parentID: parentID,\n text: null,\n childIDs: [],\n isMounted: false,\n updateCount: 0\n };\n\n if (canUseCollections) {\n itemMap.set(id, item);\n } else {\n var key = getKeyFromID(id);\n itemByKey[key] = item;\n }\n}\n\nfunction addRoot(id) {\n if (canUseCollections) {\n rootIDSet.add(id);\n } else {\n var key = getKeyFromID(id);\n rootByKey[key] = true;\n }\n}\n\nfunction removeRoot(id) {\n if (canUseCollections) {\n rootIDSet['delete'](id);\n } else {\n var key = getKeyFromID(id);\n delete rootByKey[key];\n }\n}\n\nfunction getRegisteredIDs() {\n if (canUseCollections) {\n return Array.from(itemMap.keys());\n } else {\n return Object.keys(itemByKey).map(getIDFromKey);\n }\n}\n\nfunction getRootIDs() {\n if (canUseCollections) {\n return Array.from(rootIDSet.keys());\n } else {\n return Object.keys(rootByKey).map(getIDFromKey);\n }\n}\n\nfunction purgeDeep(id) {\n var item = get(id);\n if (item) {\n var childIDs = item.childIDs;\n\n remove(id);\n childIDs.forEach(purgeDeep);\n }\n}\n\nfunction describeComponentFrame(name, source, ownerName) {\n return '\\n in ' + name + (source ? ' (at ' + source.fileName.replace(/^.*[\\\\\\/]/, '') + ':' + source.lineNumber + ')' : ownerName ? ' (created by ' + ownerName + ')' : '');\n}\n\nfunction getDisplayName(element) {\n if (element == null) {\n return '#empty';\n } else if (typeof element === 'string' || typeof element === 'number') {\n return '#text';\n } else if (typeof element.type === 'string') {\n return element.type;\n } else {\n return element.type.displayName || element.type.name || 'Unknown';\n }\n}\n\nfunction describeID(id) {\n var name = ReactComponentTreeHook.getDisplayName(id);\n var element = ReactComponentTreeHook.getElement(id);\n var ownerID = ReactComponentTreeHook.getOwnerID(id);\n var ownerName;\n if (ownerID) {\n ownerName = ReactComponentTreeHook.getDisplayName(ownerID);\n }\n process.env.NODE_ENV !== 'production' ? warning(element, 'ReactComponentTreeHook: Missing React element for debugID %s when ' + 'building stack', id) : void 0;\n return describeComponentFrame(name, element && element._source, ownerName);\n}\n\nvar ReactComponentTreeHook = {\n onSetChildren: function (id, nextChildIDs) {\n var item = get(id);\n item.childIDs = nextChildIDs;\n\n for (var i = 0; i < nextChildIDs.length; i++) {\n var nextChildID = nextChildIDs[i];\n var nextChild = get(nextChildID);\n !nextChild ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected hook events to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('140') : void 0;\n !(nextChild.childIDs != null || typeof nextChild.element !== 'object' || nextChild.element == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected onSetChildren() to fire for a container child before its parent includes it in onSetChildren().') : _prodInvariant('141') : void 0;\n !nextChild.isMounted ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected onMountComponent() to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('71') : void 0;\n if (nextChild.parentID == null) {\n nextChild.parentID = id;\n // TODO: This shouldn't be necessary but mounting a new root during in\n // componentWillMount currently causes not-yet-mounted components to\n // be purged from our tree data so their parent ID is missing.\n }\n !(nextChild.parentID === id) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected onBeforeMountComponent() parent and onSetChildren() to be consistent (%s has parents %s and %s).', nextChildID, nextChild.parentID, id) : _prodInvariant('142', nextChildID, nextChild.parentID, id) : void 0;\n }\n },\n onBeforeMountComponent: function (id, element, parentID) {\n create(id, element, parentID);\n },\n onBeforeUpdateComponent: function (id, element) {\n var item = get(id);\n if (!item || !item.isMounted) {\n // We may end up here as a result of setState() in componentWillUnmount().\n // In this case, ignore the element.\n return;\n }\n item.element = element;\n },\n onMountComponent: function (id) {\n var item = get(id);\n item.isMounted = true;\n var isRoot = item.parentID === 0;\n if (isRoot) {\n addRoot(id);\n }\n },\n onUpdateComponent: function (id) {\n var item = get(id);\n if (!item || !item.isMounted) {\n // We may end up here as a result of setState() in componentWillUnmount().\n // In this case, ignore the element.\n return;\n }\n item.updateCount++;\n },\n onUnmountComponent: function (id) {\n var item = get(id);\n if (item) {\n // We need to check if it exists.\n // `item` might not exist if it is inside an error boundary, and a sibling\n // error boundary child threw while mounting. Then this instance never\n // got a chance to mount, but it still gets an unmounting event during\n // the error boundary cleanup.\n item.isMounted = false;\n var isRoot = item.parentID === 0;\n if (isRoot) {\n removeRoot(id);\n }\n }\n unmountedIDs.push(id);\n },\n purgeUnmountedComponents: function () {\n if (ReactComponentTreeHook._preventPurging) {\n // Should only be used for testing.\n return;\n }\n\n for (var i = 0; i < unmountedIDs.length; i++) {\n var id = unmountedIDs[i];\n purgeDeep(id);\n }\n unmountedIDs.length = 0;\n },\n isMounted: function (id) {\n var item = get(id);\n return item ? item.isMounted : false;\n },\n getCurrentStackAddendum: function (topElement) {\n var info = '';\n if (topElement) {\n var type = topElement.type;\n var name = typeof type === 'function' ? type.displayName || type.name : type;\n var owner = topElement._owner;\n info += describeComponentFrame(name || 'Unknown', topElement._source, owner && owner.getName());\n }\n\n var currentOwner = ReactCurrentOwner.current;\n var id = currentOwner && currentOwner._debugID;\n\n info += ReactComponentTreeHook.getStackAddendumByID(id);\n return info;\n },\n getStackAddendumByID: function (id) {\n var info = '';\n while (id) {\n info += describeID(id);\n id = ReactComponentTreeHook.getParentID(id);\n }\n return info;\n },\n getChildIDs: function (id) {\n var item = get(id);\n return item ? item.childIDs : [];\n },\n getDisplayName: function (id) {\n var element = ReactComponentTreeHook.getElement(id);\n if (!element) {\n return null;\n }\n return getDisplayName(element);\n },\n getElement: function (id) {\n var item = get(id);\n return item ? item.element : null;\n },\n getOwnerID: function (id) {\n var element = ReactComponentTreeHook.getElement(id);\n if (!element || !element._owner) {\n return null;\n }\n return element._owner._debugID;\n },\n getParentID: function (id) {\n var item = get(id);\n return item ? item.parentID : null;\n },\n getSource: function (id) {\n var item = get(id);\n var element = item ? item.element : null;\n var source = element != null ? element._source : null;\n return source;\n },\n getText: function (id) {\n var element = ReactComponentTreeHook.getElement(id);\n if (typeof element === 'string') {\n return element;\n } else if (typeof element === 'number') {\n return '' + element;\n } else {\n return null;\n }\n },\n getUpdateCount: function (id) {\n var item = get(id);\n return item ? item.updateCount : 0;\n },\n\n\n getRegisteredIDs: getRegisteredIDs,\n\n getRootIDs: getRootIDs\n};\n\nmodule.exports = ReactComponentTreeHook;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactComponentTreeHook.js\n ** module id = 20\n ** module chunks = 0\n **/","/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactElement\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\n\nvar warning = require('fbjs/lib/warning');\nvar canDefineProperty = require('./canDefineProperty');\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n// The Symbol used to tag the ReactElement type. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element') || 0xeac7;\n\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\n\nvar specialPropKeyWarningShown, specialPropRefWarningShown;\n\nfunction hasValidRef(config) {\n if (process.env.NODE_ENV !== 'production') {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n if (process.env.NODE_ENV !== 'production') {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n return config.key !== undefined;\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n process.env.NODE_ENV !== 'production' ? warning(false, '%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName) : void 0;\n }\n };\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n process.env.NODE_ENV !== 'production' ? warning(false, '%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName) : void 0;\n }\n };\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n}\n\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, no instanceof check\n * will work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} key\n * @param {string|object} ref\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @param {*} owner\n * @param {*} props\n * @internal\n */\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allow us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n if (process.env.NODE_ENV !== 'production') {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {};\n var shadowChildren = Array.isArray(props.children) ? props.children.slice(0) : props.children;\n\n // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n if (canDefineProperty) {\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n });\n // self and source are DEV only properties.\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n });\n Object.defineProperty(element, '_shadowChildren', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: shadowChildren\n });\n // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n } else {\n element._store.validated = false;\n element._self = self;\n element._shadowChildren = shadowChildren;\n element._source = source;\n }\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n};\n\n/**\n * Create and return a new ReactElement of the given type.\n * See https://facebook.github.io/react/docs/top-level-api.html#react.createelement\n */\nReactElement.createElement = function (type, config, children) {\n var propName;\n\n // Reserved names are extracted\n var props = {};\n\n var key = null;\n var ref = null;\n var self = null;\n var source = null;\n\n if (config != null) {\n if (hasValidRef(config)) {\n ref = config.ref;\n }\n if (hasValidKey(config)) {\n key = '' + config.key;\n }\n\n self = config.__self === undefined ? null : config.__self;\n source = config.__source === undefined ? null : config.__source;\n // Remaining properties are added to a new props object\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n }\n }\n\n // Children can be more than one argument, and those are transferred onto\n // the newly allocated props object.\n var childrenLength = arguments.length - 2;\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n props.children = childArray;\n }\n\n // Resolve default props\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n if (key || ref) {\n if (typeof props.$$typeof === 'undefined' || props.$$typeof !== REACT_ELEMENT_TYPE) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n }\n }\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n};\n\n/**\n * Return a function that produces ReactElements of a given type.\n * See https://facebook.github.io/react/docs/top-level-api.html#react.createfactory\n */\nReactElement.createFactory = function (type) {\n var factory = ReactElement.createElement.bind(null, type);\n // Expose the type on the factory and the prototype so that it can be\n // easily accessed on elements. E.g. `.type === Foo`.\n // This should not be named `constructor` since this may not be the function\n // that created the element, and it may not even be a constructor.\n // Legacy hook TODO: Warn if this is accessed\n factory.type = type;\n return factory;\n};\n\nReactElement.cloneAndReplaceKey = function (oldElement, newKey) {\n var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);\n\n return newElement;\n};\n\n/**\n * Clone and return a new ReactElement using element as the starting point.\n * See https://facebook.github.io/react/docs/top-level-api.html#react.cloneelement\n */\nReactElement.cloneElement = function (element, config, children) {\n var propName;\n\n // Original props are copied\n var props = _assign({}, element.props);\n\n // Reserved names are extracted\n var key = element.key;\n var ref = element.ref;\n // Self is preserved since the owner is preserved.\n var self = element._self;\n // Source is preserved since cloneElement is unlikely to be targeted by a\n // transpiler, and the original source is probably a better indicator of the\n // true owner.\n var source = element._source;\n\n // Owner will be preserved, unless ref is overridden\n var owner = element._owner;\n\n if (config != null) {\n if (hasValidRef(config)) {\n // Silently steal the ref from the parent.\n ref = config.ref;\n owner = ReactCurrentOwner.current;\n }\n if (hasValidKey(config)) {\n key = '' + config.key;\n }\n\n // Remaining properties override existing props\n var defaultProps;\n if (element.type && element.type.defaultProps) {\n defaultProps = element.type.defaultProps;\n }\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n if (config[propName] === undefined && defaultProps !== undefined) {\n // Resolve default props\n props[propName] = defaultProps[propName];\n } else {\n props[propName] = config[propName];\n }\n }\n }\n }\n\n // Children can be more than one argument, and those are transferred onto\n // the newly allocated props object.\n var childrenLength = arguments.length - 2;\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n props.children = childArray;\n }\n\n return ReactElement(element.type, key, ref, self, source, owner, props);\n};\n\n/**\n * Verifies the object is a ReactElement.\n * See https://facebook.github.io/react/docs/top-level-api.html#react.isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a valid component.\n * @final\n */\nReactElement.isValidElement = function (object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n};\n\nReactElement.REACT_ELEMENT_TYPE = REACT_ELEMENT_TYPE;\n\nmodule.exports = ReactElement;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactElement.js\n ** module id = 21\n ** module chunks = 0\n **/","\"use strict\";\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\nfunction makeEmptyFunction(arg) {\n return function () {\n return arg;\n };\n}\n\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\nvar emptyFunction = function emptyFunction() {};\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\nemptyFunction.thatReturnsThis = function () {\n return this;\n};\nemptyFunction.thatReturnsArgument = function (arg) {\n return arg;\n};\n\nmodule.exports = emptyFunction;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/emptyFunction.js\n ** module id = 22\n ** module chunks = 0\n **/","\r\n\r\nexport let sizedImages = function( images ){\r\n\r\n\tvar sizes = {\r\n\t\tsmall: false,\r\n\t\tmedium: false,\r\n\t\tlarge: false,\r\n\t\thuge: false\r\n\t}\r\n\r\n\tif( images.length <= 0 ) return sizes;\r\n\r\n\tfor( var i = 0; i < images.length; i++ ){\r\n\r\n\t\t// spotify-styled images\r\n\t\tif( typeof(images[i].height) !== 'undefined' ){\r\n\t\t\tif( images[i].height > 800 ){\r\n\t\t\t\tsizes.huge = images[i].url;\r\n\t\t\t}else if( images[i].height > 600 ){\r\n\t\t\t\tsizes.large = images[i].url;\r\n\t\t\t}else if( images[i].height > 280 ){\r\n\t\t\t\tsizes.medium = images[i].url;\r\n\t\t\t}else{\r\n\t\t\t\tsizes.small = images[i].url;\r\n\t\t\t}\r\n\r\n\t\t// lastfm-styled images\r\n\t\t}else if( typeof(images[i].size) !== 'undefined' ){\r\n\t\t\tswitch( images[i].size ){\r\n\t\t\t\tcase 'mega':\r\n\t\t\t\tcase 'extralarge':\r\n\t\t\t\t\tsizes.huge = images[i]['#text']\r\n\t\t\t\t\tbreak\r\n\t\t\t\tcase 'large':\r\n\t\t\t\t\tsizes.large = images[i]['#text']\r\n\t\t\t\t\tbreak\r\n\t\t\t\tcase 'medium':\r\n\t\t\t\t\tsizes.medium = images[i]['#text']\r\n\t\t\t\t\tbreak\r\n\t\t\t\tcase 'small':\r\n\t\t\t\t\tsizes.small = images[i]['#text']\r\n\t\t\t\t\tbreak\r\n\t\t\t}\r\n\r\n\t\t// Mopidy-Images styled images\r\n\t\t}else if( typeof(images[i]) == 'string' ){\r\n\t\t\tsizes.small = images[i]\r\n\t\t}\r\n\t}\r\n\r\n\tif( !sizes.medium )\tsizes.medium = sizes.small;\r\n\tif( !sizes.large ) sizes.large = sizes.medium;\r\n\tif( !sizes.huge ) sizes.huge = sizes.large;\r\n\t\r\n\treturn sizes;\r\n}\r\n\r\nexport let generateGuid = function(){\r\n\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\r\n\t\tvar r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);\r\n\t\treturn v.toString(16);\r\n\t});\r\n}\r\n\r\n\r\nexport let getCurrentPusherConnection = function( connections, connectionid ){\r\n\tfunction isCurrentConnection(connection){\r\n\t\treturn connection.connectionid == newProps.pusher.connectionid;\r\n\t}\r\n\t\r\n\tvar currentConnection = newProps.pusher.connections.find(isCurrentConnection);\r\n\tif( !currentConnection ) return false;\r\n\r\n\treturn currentConnection;\r\n}\r\n\r\n\r\n\r\n\r\n/**\r\n * Figure out a URI's source namespace\r\n * @param uri = string\r\n **/\r\nexport let uriSource = function( uri ){\r\n var exploded = uri.split(':');\r\n return exploded[0]\r\n}\r\n\r\nexport let sourceIcon = function( uri ){\r\n\tvar source = uriSource(uri)\r\n\tswitch( source ){\r\n\t\tcase 'local':\r\n\t\tcase 'm3u':\r\n\t\t\treturn 'folder'\r\n\t\t\tbreak\r\n\t\tdefault:\r\n\t\t\treturn source\r\n\t}\r\n}\r\n\r\n\r\n\r\n/**\r\n * Get an element from a URI\r\n * @param element = string, the element we wish to extract\r\n * @param uri = string\r\n **/\r\nexport let getFromUri = function( element, uri ){\r\n var exploded = uri.split(':');\r\n\r\n if( element == 'mbid'){\r\n var index = exploded.indexOf('mbid')\r\n return exploded[index+1]\r\n }\r\n\r\n if( exploded[0] == 'spotify' ){\r\n\t if( element == 'userid' && exploded[1] == 'user' ) return exploded[2];\r\n\t if( element == 'playlistid' && exploded[3] == 'playlist' ) return exploded[4];\r\n\t if( element == 'artistid' && exploded[1] == 'artist' ) return exploded[2];\r\n\t if( element == 'albumid' && exploded[1] == 'album' ) return exploded[2];\r\n\t if( element == 'trackid' && exploded[1] == 'track' ) return exploded[2];\r\n\t return null;\r\n\t}\r\n\r\n\treturn null\r\n}\r\n\r\n/**\r\n * Identify what kind of asset a URI is (playlist, album, etc)\r\n * @param uri = string\r\n * @return string\r\n **/\r\nexport let uriType = function( uri ){\r\n var exploded = uri.split(':');\r\n\r\n if( exploded[0] == 'spotify' ){\r\n \tswitch( exploded[1] ){\r\n \t\tcase 'track':\r\n \t\t\treturn 'track'\r\n \t\t\tbreak;\r\n \t\tcase 'artist':\r\n \t\t\treturn 'artist'\r\n \t\t\tbreak;\r\n \t\tcase 'album':\r\n \t\t\treturn 'album'\r\n \t\t\tbreak;\r\n \t\tcase 'user':\r\n \t\t\tif( exploded[3] == 'playlist' ) return 'playlist'\r\n \t\t\tif( exploded.length == 3 ) return 'user'\r\n \t\t\treturn null\r\n \t\t\tbreak;\r\n \t}\r\n }\r\n\r\n return null;\r\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/helpers.js\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n warning = function(condition, format, args) {\n var len = arguments.length;\n args = new Array(len > 2 ? len - 2 : 0);\n for (var key = 2; key < len; key++) {\n args[key - 2] = arguments[key];\n }\n if (format === undefined) {\n throw new Error(\n '`warning(condition, format, ...args)` requires a warning ' +\n 'message argument'\n );\n }\n\n if (format.length < 10 || (/^[s\\W]*$/).test(format)) {\n throw new Error(\n 'The warning format should be able to uniquely identify this ' +\n 'warning. Please, use a more descriptive format than: ' + format\n );\n }\n\n if (!condition) {\n var argIndex = 0;\n var message = 'Warning: ' +\n format.replace(/%s/g, function() {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch(x) {}\n }\n };\n}\n\nmodule.exports = warning;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/~/warning/browser.js\n ** module id = 24\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactUpdates\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant'),\n _assign = require('object-assign');\n\nvar CallbackQueue = require('./CallbackQueue');\nvar PooledClass = require('./PooledClass');\nvar ReactFeatureFlags = require('./ReactFeatureFlags');\nvar ReactReconciler = require('./ReactReconciler');\nvar Transaction = require('./Transaction');\n\nvar invariant = require('fbjs/lib/invariant');\n\nvar dirtyComponents = [];\nvar updateBatchNumber = 0;\nvar asapCallbackQueue = CallbackQueue.getPooled();\nvar asapEnqueued = false;\n\nvar batchingStrategy = null;\n\nfunction ensureInjected() {\n !(ReactUpdates.ReactReconcileTransaction && batchingStrategy) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must inject a reconcile transaction class and batching strategy') : _prodInvariant('123') : void 0;\n}\n\nvar NESTED_UPDATES = {\n initialize: function () {\n this.dirtyComponentsLength = dirtyComponents.length;\n },\n close: function () {\n if (this.dirtyComponentsLength !== dirtyComponents.length) {\n // Additional updates were enqueued by componentDidUpdate handlers or\n // similar; before our own UPDATE_QUEUEING wrapper closes, we want to run\n // these new updates so that if A's componentDidUpdate calls setState on\n // B, B will update before the callback A's updater provided when calling\n // setState.\n dirtyComponents.splice(0, this.dirtyComponentsLength);\n flushBatchedUpdates();\n } else {\n dirtyComponents.length = 0;\n }\n }\n};\n\nvar UPDATE_QUEUEING = {\n initialize: function () {\n this.callbackQueue.reset();\n },\n close: function () {\n this.callbackQueue.notifyAll();\n }\n};\n\nvar TRANSACTION_WRAPPERS = [NESTED_UPDATES, UPDATE_QUEUEING];\n\nfunction ReactUpdatesFlushTransaction() {\n this.reinitializeTransaction();\n this.dirtyComponentsLength = null;\n this.callbackQueue = CallbackQueue.getPooled();\n this.reconcileTransaction = ReactUpdates.ReactReconcileTransaction.getPooled(\n /* useCreateElement */true);\n}\n\n_assign(ReactUpdatesFlushTransaction.prototype, Transaction.Mixin, {\n getTransactionWrappers: function () {\n return TRANSACTION_WRAPPERS;\n },\n\n destructor: function () {\n this.dirtyComponentsLength = null;\n CallbackQueue.release(this.callbackQueue);\n this.callbackQueue = null;\n ReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction);\n this.reconcileTransaction = null;\n },\n\n perform: function (method, scope, a) {\n // Essentially calls `this.reconcileTransaction.perform(method, scope, a)`\n // with this transaction's wrappers around it.\n return Transaction.Mixin.perform.call(this, this.reconcileTransaction.perform, this.reconcileTransaction, method, scope, a);\n }\n});\n\nPooledClass.addPoolingTo(ReactUpdatesFlushTransaction);\n\nfunction batchedUpdates(callback, a, b, c, d, e) {\n ensureInjected();\n batchingStrategy.batchedUpdates(callback, a, b, c, d, e);\n}\n\n/**\n * Array comparator for ReactComponents by mount ordering.\n *\n * @param {ReactComponent} c1 first component you're comparing\n * @param {ReactComponent} c2 second component you're comparing\n * @return {number} Return value usable by Array.prototype.sort().\n */\nfunction mountOrderComparator(c1, c2) {\n return c1._mountOrder - c2._mountOrder;\n}\n\nfunction runBatchedUpdates(transaction) {\n var len = transaction.dirtyComponentsLength;\n !(len === dirtyComponents.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected flush transaction\\'s stored dirty-components length (%s) to match dirty-components array length (%s).', len, dirtyComponents.length) : _prodInvariant('124', len, dirtyComponents.length) : void 0;\n\n // Since reconciling a component higher in the owner hierarchy usually (not\n // always -- see shouldComponentUpdate()) will reconcile children, reconcile\n // them before their children by sorting the array.\n dirtyComponents.sort(mountOrderComparator);\n\n // Any updates enqueued while reconciling must be performed after this entire\n // batch. Otherwise, if dirtyComponents is [A, B] where A has children B and\n // C, B could update twice in a single batch if C's render enqueues an update\n // to B (since B would have already updated, we should skip it, and the only\n // way we can know to do so is by checking the batch counter).\n updateBatchNumber++;\n\n for (var i = 0; i < len; i++) {\n // If a component is unmounted before pending changes apply, it will still\n // be here, but we assume that it has cleared its _pendingCallbacks and\n // that performUpdateIfNecessary is a noop.\n var component = dirtyComponents[i];\n\n // If performUpdateIfNecessary happens to enqueue any new updates, we\n // shouldn't execute the callbacks until the next render happens, so\n // stash the callbacks first\n var callbacks = component._pendingCallbacks;\n component._pendingCallbacks = null;\n\n var markerName;\n if (ReactFeatureFlags.logTopLevelRenders) {\n var namedComponent = component;\n // Duck type TopLevelWrapper. This is probably always true.\n if (component._currentElement.props === component._renderedComponent._currentElement) {\n namedComponent = component._renderedComponent;\n }\n markerName = 'React update: ' + namedComponent.getName();\n console.time(markerName);\n }\n\n ReactReconciler.performUpdateIfNecessary(component, transaction.reconcileTransaction, updateBatchNumber);\n\n if (markerName) {\n console.timeEnd(markerName);\n }\n\n if (callbacks) {\n for (var j = 0; j < callbacks.length; j++) {\n transaction.callbackQueue.enqueue(callbacks[j], component.getPublicInstance());\n }\n }\n }\n}\n\nvar flushBatchedUpdates = function () {\n // ReactUpdatesFlushTransaction's wrappers will clear the dirtyComponents\n // array and perform any updates enqueued by mount-ready handlers (i.e.,\n // componentDidUpdate) but we need to check here too in order to catch\n // updates enqueued by setState callbacks and asap calls.\n while (dirtyComponents.length || asapEnqueued) {\n if (dirtyComponents.length) {\n var transaction = ReactUpdatesFlushTransaction.getPooled();\n transaction.perform(runBatchedUpdates, null, transaction);\n ReactUpdatesFlushTransaction.release(transaction);\n }\n\n if (asapEnqueued) {\n asapEnqueued = false;\n var queue = asapCallbackQueue;\n asapCallbackQueue = CallbackQueue.getPooled();\n queue.notifyAll();\n CallbackQueue.release(queue);\n }\n }\n};\n\n/**\n * Mark a component as needing a rerender, adding an optional callback to a\n * list of functions which will be executed once the rerender occurs.\n */\nfunction enqueueUpdate(component) {\n ensureInjected();\n\n // Various parts of our code (such as ReactCompositeComponent's\n // _renderValidatedComponent) assume that calls to render aren't nested;\n // verify that that's the case. (This is called by each top-level update\n // function, like setState, forceUpdate, etc.; creation and\n // destruction of top-level components is guarded in ReactMount.)\n\n if (!batchingStrategy.isBatchingUpdates) {\n batchingStrategy.batchedUpdates(enqueueUpdate, component);\n return;\n }\n\n dirtyComponents.push(component);\n if (component._updateBatchNumber == null) {\n component._updateBatchNumber = updateBatchNumber + 1;\n }\n}\n\n/**\n * Enqueue a callback to be run at the end of the current batching cycle. Throws\n * if no updates are currently being performed.\n */\nfunction asap(callback, context) {\n !batchingStrategy.isBatchingUpdates ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates.asap: Can\\'t enqueue an asap callback in a context whereupdates are not being batched.') : _prodInvariant('125') : void 0;\n asapCallbackQueue.enqueue(callback, context);\n asapEnqueued = true;\n}\n\nvar ReactUpdatesInjection = {\n injectReconcileTransaction: function (ReconcileTransaction) {\n !ReconcileTransaction ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a reconcile transaction class') : _prodInvariant('126') : void 0;\n ReactUpdates.ReactReconcileTransaction = ReconcileTransaction;\n },\n\n injectBatchingStrategy: function (_batchingStrategy) {\n !_batchingStrategy ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batching strategy') : _prodInvariant('127') : void 0;\n !(typeof _batchingStrategy.batchedUpdates === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batchedUpdates() function') : _prodInvariant('128') : void 0;\n !(typeof _batchingStrategy.isBatchingUpdates === 'boolean') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide an isBatchingUpdates boolean attribute') : _prodInvariant('129') : void 0;\n batchingStrategy = _batchingStrategy;\n }\n};\n\nvar ReactUpdates = {\n /**\n * React references `ReactReconcileTransaction` using this property in order\n * to allow dependency injection.\n *\n * @internal\n */\n ReactReconcileTransaction: null,\n\n batchedUpdates: batchedUpdates,\n enqueueUpdate: enqueueUpdate,\n flushBatchedUpdates: flushBatchedUpdates,\n injection: ReactUpdatesInjection,\n asap: asap\n};\n\nmodule.exports = ReactUpdates;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactUpdates.js\n ** module id = 25\n ** module chunks = 0\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport * as helpers from '../helpers'\r\n\r\nexport default class Thumbnail extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tsmall: false,\r\n\t\t\tmedium: false,\r\n\t\t\tlarge: false,\r\n\t\t\thuge: false\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentDidMount(){\r\n\t\tthis.mapImageSizes();\r\n\t}\r\n\r\n\tcomponentWillReceiveProps( nextProps ){\r\n\t\tthis.mapImageSizes( nextProps.images );\r\n\t}\r\n\r\n\tmapImageSizes( images = this.props.images ){\r\n\t\tvar state = this.state;\r\n\r\n\t\tif( images.length <= 0 ){\r\n\t\t\tstate = {\r\n\t\t\t\tsmall: require('../../assets/no-image.svg'),\r\n\t\t\t\tmedium: require('../../assets/no-image.svg'),\r\n\t\t\t\tlarge: require('../../assets/no-image.svg'),\r\n\t\t\t\thuge: require('../../assets/no-image.svg')\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tstate = helpers.sizedImages( images );\r\n\t\t}\r\n\r\n\t\tthis.setState( state );\r\n\t}\r\n\r\n\trender(){\r\n\t\tvar style = {\r\n\t\t\tbackgroundImage: 'url(\"'+this.state[this.props.size]+'\")'\r\n\t\t}\r\n\t\tvar className = 'thumbnail '+this.props.size;\r\n\t\tif( this.props.circle ) className += ' circle';\r\n\t\t\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/Thumbnail.js\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventConstants\n */\n\n'use strict';\n\nvar keyMirror = require('fbjs/lib/keyMirror');\n\nvar PropagationPhases = keyMirror({ bubbled: null, captured: null });\n\n/**\n * Types of raw signals from the browser caught at the top level.\n */\nvar topLevelTypes = keyMirror({\n topAbort: null,\n topAnimationEnd: null,\n topAnimationIteration: null,\n topAnimationStart: null,\n topBlur: null,\n topCanPlay: null,\n topCanPlayThrough: null,\n topChange: null,\n topClick: null,\n topCompositionEnd: null,\n topCompositionStart: null,\n topCompositionUpdate: null,\n topContextMenu: null,\n topCopy: null,\n topCut: null,\n topDoubleClick: null,\n topDrag: null,\n topDragEnd: null,\n topDragEnter: null,\n topDragExit: null,\n topDragLeave: null,\n topDragOver: null,\n topDragStart: null,\n topDrop: null,\n topDurationChange: null,\n topEmptied: null,\n topEncrypted: null,\n topEnded: null,\n topError: null,\n topFocus: null,\n topInput: null,\n topInvalid: null,\n topKeyDown: null,\n topKeyPress: null,\n topKeyUp: null,\n topLoad: null,\n topLoadedData: null,\n topLoadedMetadata: null,\n topLoadStart: null,\n topMouseDown: null,\n topMouseMove: null,\n topMouseOut: null,\n topMouseOver: null,\n topMouseUp: null,\n topPaste: null,\n topPause: null,\n topPlay: null,\n topPlaying: null,\n topProgress: null,\n topRateChange: null,\n topReset: null,\n topScroll: null,\n topSeeked: null,\n topSeeking: null,\n topSelectionChange: null,\n topStalled: null,\n topSubmit: null,\n topSuspend: null,\n topTextInput: null,\n topTimeUpdate: null,\n topTouchCancel: null,\n topTouchEnd: null,\n topTouchMove: null,\n topTouchStart: null,\n topTransitionEnd: null,\n topVolumeChange: null,\n topWaiting: null,\n topWheel: null\n});\n\nvar EventConstants = {\n topLevelTypes: topLevelTypes,\n PropagationPhases: PropagationPhases\n};\n\nmodule.exports = EventConstants;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventConstants.js\n ** module id = 27\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactCurrentOwner\n */\n\n'use strict';\n\n/**\n * Keeps track of the current owner.\n *\n * The current owner is the component who should own any components that are\n * currently being constructed.\n */\n\nvar ReactCurrentOwner = {\n\n /**\n * @internal\n * @type {ReactComponent}\n */\n current: null\n\n};\n\nmodule.exports = ReactCurrentOwner;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactCurrentOwner.js\n ** module id = 28\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticEvent\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar PooledClass = require('./PooledClass');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar warning = require('fbjs/lib/warning');\n\nvar didWarnForAddedNewProperty = false;\nvar isProxySupported = typeof Proxy === 'function';\n\nvar shouldBeReleasedProperties = ['dispatchConfig', '_targetInst', 'nativeEvent', 'isDefaultPrevented', 'isPropagationStopped', '_dispatchListeners', '_dispatchInstances'];\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar EventInterface = {\n type: null,\n target: null,\n // currentTarget is set when dispatching; no use in copying it here\n currentTarget: emptyFunction.thatReturnsNull,\n eventPhase: null,\n bubbles: null,\n cancelable: null,\n timeStamp: function (event) {\n return event.timeStamp || Date.now();\n },\n defaultPrevented: null,\n isTrusted: null\n};\n\n/**\n * Synthetic events are dispatched by event plugins, typically in response to a\n * top-level event delegation handler.\n *\n * These systems should generally use pooling to reduce the frequency of garbage\n * collection. The system should check `isPersistent` to determine whether the\n * event should be released into the pool after being dispatched. Users that\n * need a persisted event should invoke `persist`.\n *\n * Synthetic events (and subclasses) implement the DOM Level 3 Events API by\n * normalizing browser quirks. Subclasses do not necessarily have to implement a\n * DOM interface; custom application-specific events can also subclass this.\n *\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {*} targetInst Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @param {DOMEventTarget} nativeEventTarget Target node.\n */\nfunction SyntheticEvent(dispatchConfig, targetInst, nativeEvent, nativeEventTarget) {\n if (process.env.NODE_ENV !== 'production') {\n // these have a getter/setter for warnings\n delete this.nativeEvent;\n delete this.preventDefault;\n delete this.stopPropagation;\n }\n\n this.dispatchConfig = dispatchConfig;\n this._targetInst = targetInst;\n this.nativeEvent = nativeEvent;\n\n var Interface = this.constructor.Interface;\n for (var propName in Interface) {\n if (!Interface.hasOwnProperty(propName)) {\n continue;\n }\n if (process.env.NODE_ENV !== 'production') {\n delete this[propName]; // this has a getter/setter for warnings\n }\n var normalize = Interface[propName];\n if (normalize) {\n this[propName] = normalize(nativeEvent);\n } else {\n if (propName === 'target') {\n this.target = nativeEventTarget;\n } else {\n this[propName] = nativeEvent[propName];\n }\n }\n }\n\n var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;\n if (defaultPrevented) {\n this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\n } else {\n this.isDefaultPrevented = emptyFunction.thatReturnsFalse;\n }\n this.isPropagationStopped = emptyFunction.thatReturnsFalse;\n return this;\n}\n\n_assign(SyntheticEvent.prototype, {\n\n preventDefault: function () {\n this.defaultPrevented = true;\n var event = this.nativeEvent;\n if (!event) {\n return;\n }\n\n if (event.preventDefault) {\n event.preventDefault();\n } else if (typeof event.returnValue !== 'unknown') {\n // eslint-disable-line valid-typeof\n event.returnValue = false;\n }\n this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\n },\n\n stopPropagation: function () {\n var event = this.nativeEvent;\n if (!event) {\n return;\n }\n\n if (event.stopPropagation) {\n event.stopPropagation();\n } else if (typeof event.cancelBubble !== 'unknown') {\n // eslint-disable-line valid-typeof\n // The ChangeEventPlugin registers a \"propertychange\" event for\n // IE. This event does not support bubbling or cancelling, and\n // any references to cancelBubble throw \"Member not found\". A\n // typeof check of \"unknown\" circumvents this issue (and is also\n // IE specific).\n event.cancelBubble = true;\n }\n\n this.isPropagationStopped = emptyFunction.thatReturnsTrue;\n },\n\n /**\n * We release all dispatched `SyntheticEvent`s after each event loop, adding\n * them back into the pool. This allows a way to hold onto a reference that\n * won't be added back into the pool.\n */\n persist: function () {\n this.isPersistent = emptyFunction.thatReturnsTrue;\n },\n\n /**\n * Checks if this event should be released back into the pool.\n *\n * @return {boolean} True if this should not be released, false otherwise.\n */\n isPersistent: emptyFunction.thatReturnsFalse,\n\n /**\n * `PooledClass` looks for `destructor` on each instance it releases.\n */\n destructor: function () {\n var Interface = this.constructor.Interface;\n for (var propName in Interface) {\n if (process.env.NODE_ENV !== 'production') {\n Object.defineProperty(this, propName, getPooledWarningPropertyDefinition(propName, Interface[propName]));\n } else {\n this[propName] = null;\n }\n }\n for (var i = 0; i < shouldBeReleasedProperties.length; i++) {\n this[shouldBeReleasedProperties[i]] = null;\n }\n if (process.env.NODE_ENV !== 'production') {\n Object.defineProperty(this, 'nativeEvent', getPooledWarningPropertyDefinition('nativeEvent', null));\n Object.defineProperty(this, 'preventDefault', getPooledWarningPropertyDefinition('preventDefault', emptyFunction));\n Object.defineProperty(this, 'stopPropagation', getPooledWarningPropertyDefinition('stopPropagation', emptyFunction));\n }\n }\n\n});\n\nSyntheticEvent.Interface = EventInterface;\n\nif (process.env.NODE_ENV !== 'production') {\n if (isProxySupported) {\n /*eslint-disable no-func-assign */\n SyntheticEvent = new Proxy(SyntheticEvent, {\n construct: function (target, args) {\n return this.apply(target, Object.create(target.prototype), args);\n },\n apply: function (constructor, that, args) {\n return new Proxy(constructor.apply(that, args), {\n set: function (target, prop, value) {\n if (prop !== 'isPersistent' && !target.constructor.Interface.hasOwnProperty(prop) && shouldBeReleasedProperties.indexOf(prop) === -1) {\n process.env.NODE_ENV !== 'production' ? warning(didWarnForAddedNewProperty || target.isPersistent(), 'This synthetic event is reused for performance reasons. If you\\'re ' + 'seeing this, you\\'re adding a new property in the synthetic event object. ' + 'The property is never released. See ' + 'https://fb.me/react-event-pooling for more information.') : void 0;\n didWarnForAddedNewProperty = true;\n }\n target[prop] = value;\n return true;\n }\n });\n }\n });\n /*eslint-enable no-func-assign */\n }\n}\n/**\n * Helper to reduce boilerplate when creating subclasses.\n *\n * @param {function} Class\n * @param {?object} Interface\n */\nSyntheticEvent.augmentClass = function (Class, Interface) {\n var Super = this;\n\n var E = function () {};\n E.prototype = Super.prototype;\n var prototype = new E();\n\n _assign(prototype, Class.prototype);\n Class.prototype = prototype;\n Class.prototype.constructor = Class;\n\n Class.Interface = _assign({}, Super.Interface, Interface);\n Class.augmentClass = Super.augmentClass;\n\n PooledClass.addPoolingTo(Class, PooledClass.fourArgumentPooler);\n};\n\nPooledClass.addPoolingTo(SyntheticEvent, PooledClass.fourArgumentPooler);\n\nmodule.exports = SyntheticEvent;\n\n/**\n * Helper to nullify syntheticEvent instance properties when destructing\n *\n * @param {object} SyntheticEvent\n * @param {String} propName\n * @return {object} defineProperty object\n */\nfunction getPooledWarningPropertyDefinition(propName, getVal) {\n var isFunction = typeof getVal === 'function';\n return {\n configurable: true,\n set: set,\n get: get\n };\n\n function set(val) {\n var action = isFunction ? 'setting the method' : 'setting the property';\n warn(action, 'This is effectively a no-op');\n return val;\n }\n\n function get() {\n var action = isFunction ? 'accessing the method' : 'accessing the property';\n var result = isFunction ? 'This is a no-op function' : 'This is set to null';\n warn(action, result);\n return getVal;\n }\n\n function warn(action, result) {\n var warningCondition = false;\n process.env.NODE_ENV !== 'production' ? warning(warningCondition, 'This synthetic event is reused for performance reasons. If you\\'re seeing this, ' + 'you\\'re %s `%s` on a released/nullified synthetic event. %s. ' + 'If you must keep the original synthetic event around, use event.persist(). ' + 'See https://fb.me/react-event-pooling for more information.', action, propName, result) : void 0;\n }\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticEvent.js\n ** module id = 29\n ** module chunks = 0\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport FontAwesome from 'react-fontawesome'\r\n\r\nexport default class LazyLoadListener extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t\tthis.state = { loading: false }\r\n\t\tthis.handleScroll = this.handleScroll.bind(this);\r\n\t}\r\n\r\n\tcomponentWillMount(){\r\n\t\twindow.addEventListener(\"scroll\", this.handleScroll, false);\r\n\t}\r\n\r\n\tcomponentWillUnmount(){\r\n\t\twindow.removeEventListener(\"scroll\", this.handleScroll, false);\r\n\t}\r\n\r\n\thandleScroll(e){\r\n\t if( (window.innerHeight + window.scrollY) >= document.body.offsetHeight ){\r\n\t \tif( !this.state.loading ){\r\n\t\t\t\tthis.setState({ loading: true })\r\n\t\t\t\tthis.props.loadMore();\r\n\t\t\t}\r\n\t }else if( this.state.loading ){\r\n\t\t\tthis.setState({ loading: false })\r\n\t }\r\n\t}\r\n\r\n\trender(){\r\n\t\treturn
\r\n\t}\r\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/LazyLoadListener.js\n **/","'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nexports.isReactChildren = isReactChildren;\nexports.createRouteFromReactElement = createRouteFromReactElement;\nexports.createRoutesFromReactChildren = createRoutesFromReactChildren;\nexports.createRoutes = createRoutes;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction isValidChild(object) {\n return object == null || _react2.default.isValidElement(object);\n}\n\nfunction isReactChildren(object) {\n return isValidChild(object) || Array.isArray(object) && object.every(isValidChild);\n}\n\nfunction createRoute(defaultProps, props) {\n return _extends({}, defaultProps, props);\n}\n\nfunction createRouteFromReactElement(element) {\n var type = element.type;\n var route = createRoute(type.defaultProps, element.props);\n\n if (route.children) {\n var childRoutes = createRoutesFromReactChildren(route.children, route);\n\n if (childRoutes.length) route.childRoutes = childRoutes;\n\n delete route.children;\n }\n\n return route;\n}\n\n/**\n * Creates and returns a routes object from the given ReactChildren. JSX\n * provides a convenient way to visualize how routes in the hierarchy are\n * nested.\n *\n * import { Route, createRoutesFromReactChildren } from 'react-router'\n *\n * const routes = createRoutesFromReactChildren(\n * \n * \n * \n * \n * )\n *\n * Note: This method is automatically used when you provide children\n * to a component.\n */\nfunction createRoutesFromReactChildren(children, parentRoute) {\n var routes = [];\n\n _react2.default.Children.forEach(children, function (element) {\n if (_react2.default.isValidElement(element)) {\n // Component classes may have a static create* method.\n if (element.type.createRouteFromReactElement) {\n var route = element.type.createRouteFromReactElement(element, parentRoute);\n\n if (route) routes.push(route);\n } else {\n routes.push(createRouteFromReactElement(element));\n }\n }\n });\n\n return routes;\n}\n\n/**\n * Creates and returns an array of routes from the given object which\n * may be a JSX route, a plain object route, or an array of either.\n */\nfunction createRoutes(routes) {\n if (isReactChildren(routes)) {\n routes = createRoutesFromReactChildren(routes);\n } else if (routes && !Array.isArray(routes)) {\n routes = [routes];\n }\n\n return routes;\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-router/lib/RouteUtils.js\n ** module id = 31\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule PooledClass\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Static poolers. Several custom versions for each potential number of\n * arguments. A completely generic pooler is easy to implement, but would\n * require accessing the `arguments` object. In each of these, `this` refers to\n * the Class itself, not an instance. If any others are needed, simply add them\n * here, or in their own files.\n */\nvar oneArgumentPooler = function (copyFieldsFrom) {\n var Klass = this;\n if (Klass.instancePool.length) {\n var instance = Klass.instancePool.pop();\n Klass.call(instance, copyFieldsFrom);\n return instance;\n } else {\n return new Klass(copyFieldsFrom);\n }\n};\n\nvar twoArgumentPooler = function (a1, a2) {\n var Klass = this;\n if (Klass.instancePool.length) {\n var instance = Klass.instancePool.pop();\n Klass.call(instance, a1, a2);\n return instance;\n } else {\n return new Klass(a1, a2);\n }\n};\n\nvar threeArgumentPooler = function (a1, a2, a3) {\n var Klass = this;\n if (Klass.instancePool.length) {\n var instance = Klass.instancePool.pop();\n Klass.call(instance, a1, a2, a3);\n return instance;\n } else {\n return new Klass(a1, a2, a3);\n }\n};\n\nvar fourArgumentPooler = function (a1, a2, a3, a4) {\n var Klass = this;\n if (Klass.instancePool.length) {\n var instance = Klass.instancePool.pop();\n Klass.call(instance, a1, a2, a3, a4);\n return instance;\n } else {\n return new Klass(a1, a2, a3, a4);\n }\n};\n\nvar fiveArgumentPooler = function (a1, a2, a3, a4, a5) {\n var Klass = this;\n if (Klass.instancePool.length) {\n var instance = Klass.instancePool.pop();\n Klass.call(instance, a1, a2, a3, a4, a5);\n return instance;\n } else {\n return new Klass(a1, a2, a3, a4, a5);\n }\n};\n\nvar standardReleaser = function (instance) {\n var Klass = this;\n !(instance instanceof Klass) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : _prodInvariant('25') : void 0;\n instance.destructor();\n if (Klass.instancePool.length < Klass.poolSize) {\n Klass.instancePool.push(instance);\n }\n};\n\nvar DEFAULT_POOL_SIZE = 10;\nvar DEFAULT_POOLER = oneArgumentPooler;\n\n/**\n * Augments `CopyConstructor` to be a poolable class, augmenting only the class\n * itself (statically) not adding any prototypical fields. Any CopyConstructor\n * you give this may have a `poolSize` property, and will look for a\n * prototypical `destructor` on instances.\n *\n * @param {Function} CopyConstructor Constructor that can be used to reset.\n * @param {Function} pooler Customizable pooler.\n */\nvar addPoolingTo = function (CopyConstructor, pooler) {\n var NewKlass = CopyConstructor;\n NewKlass.instancePool = [];\n NewKlass.getPooled = pooler || DEFAULT_POOLER;\n if (!NewKlass.poolSize) {\n NewKlass.poolSize = DEFAULT_POOL_SIZE;\n }\n NewKlass.release = standardReleaser;\n return NewKlass;\n};\n\nvar PooledClass = {\n addPoolingTo: addPoolingTo,\n oneArgumentPooler: oneArgumentPooler,\n twoArgumentPooler: twoArgumentPooler,\n threeArgumentPooler: threeArgumentPooler,\n fourArgumentPooler: fourArgumentPooler,\n fiveArgumentPooler: fiveArgumentPooler\n};\n\nmodule.exports = PooledClass;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/PooledClass.js\n ** module id = 32\n ** module chunks = 0\n **/","\"use strict\";\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n/**\n * Allows extraction of a minified key. Let's the build system minify keys\n * without losing the ability to dynamically use key strings as values\n * themselves. Pass in an object with a single key/val pair and it will return\n * you the string key of that single record. Suppose you want to grab the\n * value for a key 'className' inside of an object. Key/val minification may\n * have aliased that key to be 'xa12'. keyOf({className: null}) will return\n * 'xa12' in that case. Resolve keys you want to use once at startup time, then\n * reuse those resolutions.\n */\nvar keyOf = function keyOf(oneKeyObj) {\n var key;\n for (key in oneKeyObj) {\n if (!oneKeyObj.hasOwnProperty(key)) {\n continue;\n }\n return key;\n }\n return null;\n};\n\nmodule.exports = keyOf;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/keyOf.js\n ** module id = 33\n ** module chunks = 0\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport * as mopidyActions from '../services/mopidy/actions'\r\nimport * as uiActions from '../services/ui/actions'\r\n\r\nimport Track from './Track'\r\n\r\nclass TrackList extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\ttracks: this.props.tracks,\r\n\t\t\tlastSelectedTrack: false\r\n\t\t}\r\n\r\n\t\tthis.handleKeyUp = this.handleKeyUp.bind(this)\r\n\t}\r\n\r\n\tcomponentWillMount(){\r\n\t\twindow.addEventListener(\"keyup\", this.handleKeyUp, false);\r\n\t}\r\n\r\n\tcomponentWillUnmount(){\r\n\t\twindow.removeEventListener(\"keyup\", this.handleKeyUp, false);\r\n\t}\r\n\r\n\thandleKeyUp(e){\r\n\t\tif( this.selectedTracks().length <= 0 ) return;\r\n\r\n\t\tswitch(e.keyCode){\r\n\t\t\t\r\n\t\t\tcase 13: // enter\r\n\t\t\t\t this.playTracks();\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase 46: // delete\r\n\t\t\t\t this.removeTracks();\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentWillReceiveProps( nextProps ){\r\n\t\tthis.setState({ tracks: nextProps.tracks });\r\n\t}\r\n\r\n\thandleClick( e, index ){\r\n\t\tif( this.props.context_menu.show ) this.props.uiActions.hideContextMenu();\r\n\r\n\t\tvar tracks = this.state.tracks;\r\n\r\n\t\tif( e.ctrlKey ){\r\n\r\n\t\t\ttracks[index].selected = !tracks[index].selected;\r\n\r\n\t\t}else if( e.shiftKey ){\r\n\r\n\t\t\tif( this.state.lastSelectedTrack < index ){\r\n\t\t\t\tvar start = this.state.lastSelectedTrack;\r\n\t\t\t\tvar end = index;\r\n\t\t\t}else{\r\n\t\t\t\tvar start = index;\r\n\t\t\t\tvar end = this.state.lastSelectedTrack;\r\n\t\t\t}\r\n\r\n\t\t\tfor( var i = start; i <= end; i++ ){\r\n\t\t\t\ttracks[i].selected = true;\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\r\n\t\t\tfor( var i = 0; i < tracks.length; i++ ){\r\n\t\t\t\ttracks[i].selected = false;\r\n\t\t\t}\r\n\t\t\ttracks[index].selected = !tracks[index].selected;\r\n\t\t}\r\n\r\n\t\tthis.setState({ tracks: tracks, lastSelectedTrack: index });\r\n\t}\r\n\r\n\thandleDoubleClick( e, index ){\r\n\t\tif( this.props.context_menu.show ) this.props.uiActions.hideContextMenu();\r\n\t\tthis.playTracks()\r\n\t}\r\n\r\n\thandleContextMenu( e, index ){\r\n\t\tvar data = {\r\n\t\t\tselected_tracks: this.selectedTracks()\r\n\t\t}\r\n\t\tthis.props.uiActions.showContextMenu( e, this.props.context, data )\r\n\t}\r\n\r\n\tselectedTracks(){\r\n\t\tfunction isSelected( track ){\r\n\t\t\treturn ( typeof(track.selected) !== 'undefined' && track.selected );\r\n\t\t}\r\n\t\treturn this.state.tracks.filter(isSelected)\r\n\t}\r\n\r\n\tplayTracks(){\r\n\r\n\t\tvar tracks = this.selectedTracks();\r\n\r\n\t\t// if we've got a specific action, run it\r\n\t\tif( typeof(this.props.playTracks) !== 'undefined' ){\r\n\t\t\treturn this.props.playTracks( tracks );\r\n\t\t}\r\n\r\n\t\t// default to playing a bunch of uris\r\n\t\tvar uris = [];\r\n\t\tfor( var i = 0; i < tracks.length; i++ ){\r\n\t\t\turis.push( tracks[i].uri )\r\n\t\t}\r\n\t\treturn this.props.mopidyActions.playTracks( uris )\r\n\t}\r\n\r\n\tremoveTracks(){\r\n\r\n\t\tvar tracks = this.selectedTracks();\r\n\t\t\r\n\t\t// if we've got a specific action, run it\r\n\t\tif( typeof(this.props.removeTracks) !== 'undefined' ){\r\n\t\t\treturn this.props.removeTracks( tracks );\r\n\t\t}\r\n\r\n\t\t// by default, do nothing\r\n\t}\r\n\r\n\trender(){\r\n\t\tif( !this.state.tracks ) return null\r\n\r\n\t\tlet self = this;\r\n\t\treturn (\r\n\t\t\t
    \r\n\t\t\t\t
  • \r\n\t\t\t\t\tName\r\n\t\t\t\t\tArtists\r\n\t\t\t\t\tAlbum\r\n\t\t\t\t\tLength\r\n\t\t\t\t
  • \r\n\t\t\t\t{\r\n\t\t\t\t\tthis.state.tracks.map(\r\n\t\t\t\t\t\t(track, index) => {\r\n\t\t\t\t\t\t\treturn self.handleDoubleClick(e, index)}\r\n\t\t\t\t\t\t\t\t\thandleClick={(e) => self.handleClick(e, index)}\r\n\t\t\t\t\t\t\t\t\thandleContextMenu={(e) => self.handleContextMenu(e, index)} />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t)\r\n\t\t\t\t}\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Export our component\r\n *\r\n * We also integrate our global store, using connect()\r\n **/\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn {\r\n\t\tcurrent_track: state.ui.current_track,\r\n\t\tcontext_menu: state.ui.context_menu\r\n\t}\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tmopidyActions: bindActionCreators(mopidyActions, dispatch),\r\n\t\tuiActions: bindActionCreators(uiActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(TrackList)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/TrackList.js\n **/","\r\n\r\nexport function showContextMenu( e, context = false, data ){\r\n return {\r\n type: 'SHOW_CONTEXT_MENU',\r\n position_x: e.clientX,\r\n position_y: e.clientY,\r\n context: context,\r\n data: data\r\n }\r\n}\r\n\r\nexport function hideContextMenu(){\r\n return {\r\n type: 'HIDE_CONTEXT_MENU'\r\n }\r\n}\r\n\r\nexport function searchStarted(){\r\n\treturn {\r\n\t\ttype: 'SEARCH_STARTED',\r\n data: {\r\n artists: [],\r\n albums: [],\r\n playlists: [],\r\n tracks: [],\r\n artists_more: false,\r\n albums_more: false,\r\n playlists_more: false,\r\n tracks_more: false\r\n }\r\n\t}\r\n}\r\n\r\nexport function lazyLoading( start ){\r\n return {\r\n type: 'LAZY_LOADING',\r\n start: start\r\n }\r\n}\r\n\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/services/ui/actions.js\n **/","'use strict';\n\nexports.__esModule = true;\nexports.extractPath = extractPath;\nexports.parsePath = parsePath;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction extractPath(string) {\n var match = string.match(/^https?:\\/\\/[^\\/]*/);\n\n if (match == null) return string;\n\n return string.substring(match[0].length);\n}\n\nfunction parsePath(path) {\n var pathname = extractPath(path);\n var search = '';\n var hash = '';\n\n process.env.NODE_ENV !== 'production' ? _warning2['default'](path === pathname, 'A path must be pathname + search + hash only, not a fully qualified URL like \"%s\"', path) : undefined;\n\n var hashIndex = pathname.indexOf('#');\n if (hashIndex !== -1) {\n hash = pathname.substring(hashIndex);\n pathname = pathname.substring(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf('?');\n if (searchIndex !== -1) {\n search = pathname.substring(searchIndex);\n pathname = pathname.substring(0, searchIndex);\n }\n\n if (pathname === '') pathname = '/';\n\n return {\n pathname: pathname,\n search: search,\n hash: hash\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/PathUtils.js\n ** module id = 36\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\nexports.routes = exports.route = exports.components = exports.component = exports.history = undefined;\nexports.falsy = falsy;\n\nvar _react = require('react');\n\nvar func = _react.PropTypes.func;\nvar object = _react.PropTypes.object;\nvar arrayOf = _react.PropTypes.arrayOf;\nvar oneOfType = _react.PropTypes.oneOfType;\nvar element = _react.PropTypes.element;\nvar shape = _react.PropTypes.shape;\nvar string = _react.PropTypes.string;\nfunction falsy(props, propName, componentName) {\n if (props[propName]) return new Error('<' + componentName + '> should not have a \"' + propName + '\" prop');\n}\n\nvar history = exports.history = shape({\n listen: func.isRequired,\n push: func.isRequired,\n replace: func.isRequired,\n go: func.isRequired,\n goBack: func.isRequired,\n goForward: func.isRequired\n});\n\nvar component = exports.component = oneOfType([func, string]);\nvar components = exports.components = oneOfType([component, object]);\nvar route = exports.route = oneOfType([object, element]);\nvar routes = exports.routes = oneOfType([route, arrayOf(route)]);\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-router/lib/InternalPropTypes.js\n ** module id = 37\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMProperty\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\nfunction checkMask(value, bitmask) {\n return (value & bitmask) === bitmask;\n}\n\nvar DOMPropertyInjection = {\n /**\n * Mapping from normalized, camelcased property names to a configuration that\n * specifies how the associated DOM property should be accessed or rendered.\n */\n MUST_USE_PROPERTY: 0x1,\n HAS_BOOLEAN_VALUE: 0x4,\n HAS_NUMERIC_VALUE: 0x8,\n HAS_POSITIVE_NUMERIC_VALUE: 0x10 | 0x8,\n HAS_OVERLOADED_BOOLEAN_VALUE: 0x20,\n\n /**\n * Inject some specialized knowledge about the DOM. This takes a config object\n * with the following properties:\n *\n * isCustomAttribute: function that given an attribute name will return true\n * if it can be inserted into the DOM verbatim. Useful for data-* or aria-*\n * attributes where it's impossible to enumerate all of the possible\n * attribute names,\n *\n * Properties: object mapping DOM property name to one of the\n * DOMPropertyInjection constants or null. If your attribute isn't in here,\n * it won't get written to the DOM.\n *\n * DOMAttributeNames: object mapping React attribute name to the DOM\n * attribute name. Attribute names not specified use the **lowercase**\n * normalized name.\n *\n * DOMAttributeNamespaces: object mapping React attribute name to the DOM\n * attribute namespace URL. (Attribute names not specified use no namespace.)\n *\n * DOMPropertyNames: similar to DOMAttributeNames but for DOM properties.\n * Property names not specified use the normalized name.\n *\n * DOMMutationMethods: Properties that require special mutation methods. If\n * `value` is undefined, the mutation method should unset the property.\n *\n * @param {object} domPropertyConfig the config as described above.\n */\n injectDOMPropertyConfig: function (domPropertyConfig) {\n var Injection = DOMPropertyInjection;\n var Properties = domPropertyConfig.Properties || {};\n var DOMAttributeNamespaces = domPropertyConfig.DOMAttributeNamespaces || {};\n var DOMAttributeNames = domPropertyConfig.DOMAttributeNames || {};\n var DOMPropertyNames = domPropertyConfig.DOMPropertyNames || {};\n var DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {};\n\n if (domPropertyConfig.isCustomAttribute) {\n DOMProperty._isCustomAttributeFunctions.push(domPropertyConfig.isCustomAttribute);\n }\n\n for (var propName in Properties) {\n !!DOMProperty.properties.hasOwnProperty(propName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'injectDOMPropertyConfig(...): You\\'re trying to inject DOM property \\'%s\\' which has already been injected. You may be accidentally injecting the same DOM property config twice, or you may be injecting two configs that have conflicting property names.', propName) : _prodInvariant('48', propName) : void 0;\n\n var lowerCased = propName.toLowerCase();\n var propConfig = Properties[propName];\n\n var propertyInfo = {\n attributeName: lowerCased,\n attributeNamespace: null,\n propertyName: propName,\n mutationMethod: null,\n\n mustUseProperty: checkMask(propConfig, Injection.MUST_USE_PROPERTY),\n hasBooleanValue: checkMask(propConfig, Injection.HAS_BOOLEAN_VALUE),\n hasNumericValue: checkMask(propConfig, Injection.HAS_NUMERIC_VALUE),\n hasPositiveNumericValue: checkMask(propConfig, Injection.HAS_POSITIVE_NUMERIC_VALUE),\n hasOverloadedBooleanValue: checkMask(propConfig, Injection.HAS_OVERLOADED_BOOLEAN_VALUE)\n };\n !(propertyInfo.hasBooleanValue + propertyInfo.hasNumericValue + propertyInfo.hasOverloadedBooleanValue <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Value can be one of boolean, overloaded boolean, or numeric value, but not a combination: %s', propName) : _prodInvariant('50', propName) : void 0;\n\n if (process.env.NODE_ENV !== 'production') {\n DOMProperty.getPossibleStandardName[lowerCased] = propName;\n }\n\n if (DOMAttributeNames.hasOwnProperty(propName)) {\n var attributeName = DOMAttributeNames[propName];\n propertyInfo.attributeName = attributeName;\n if (process.env.NODE_ENV !== 'production') {\n DOMProperty.getPossibleStandardName[attributeName] = propName;\n }\n }\n\n if (DOMAttributeNamespaces.hasOwnProperty(propName)) {\n propertyInfo.attributeNamespace = DOMAttributeNamespaces[propName];\n }\n\n if (DOMPropertyNames.hasOwnProperty(propName)) {\n propertyInfo.propertyName = DOMPropertyNames[propName];\n }\n\n if (DOMMutationMethods.hasOwnProperty(propName)) {\n propertyInfo.mutationMethod = DOMMutationMethods[propName];\n }\n\n DOMProperty.properties[propName] = propertyInfo;\n }\n }\n};\n\n/* eslint-disable max-len */\nvar ATTRIBUTE_NAME_START_CHAR = ':A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD';\n/* eslint-enable max-len */\n\n/**\n * DOMProperty exports lookup objects that can be used like functions:\n *\n * > DOMProperty.isValid['id']\n * true\n * > DOMProperty.isValid['foobar']\n * undefined\n *\n * Although this may be confusing, it performs better in general.\n *\n * @see http://jsperf.com/key-exists\n * @see http://jsperf.com/key-missing\n */\nvar DOMProperty = {\n\n ID_ATTRIBUTE_NAME: 'data-reactid',\n ROOT_ATTRIBUTE_NAME: 'data-reactroot',\n\n ATTRIBUTE_NAME_START_CHAR: ATTRIBUTE_NAME_START_CHAR,\n ATTRIBUTE_NAME_CHAR: ATTRIBUTE_NAME_START_CHAR + '\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040',\n\n /**\n * Map from property \"standard name\" to an object with info about how to set\n * the property in the DOM. Each object contains:\n *\n * attributeName:\n * Used when rendering markup or with `*Attribute()`.\n * attributeNamespace\n * propertyName:\n * Used on DOM node instances. (This includes properties that mutate due to\n * external factors.)\n * mutationMethod:\n * If non-null, used instead of the property or `setAttribute()` after\n * initial render.\n * mustUseProperty:\n * Whether the property must be accessed and mutated as an object property.\n * hasBooleanValue:\n * Whether the property should be removed when set to a falsey value.\n * hasNumericValue:\n * Whether the property must be numeric or parse as a numeric and should be\n * removed when set to a falsey value.\n * hasPositiveNumericValue:\n * Whether the property must be positive numeric or parse as a positive\n * numeric and should be removed when set to a falsey value.\n * hasOverloadedBooleanValue:\n * Whether the property can be used as a flag as well as with a value.\n * Removed when strictly equal to false; present without a value when\n * strictly equal to true; present with a value otherwise.\n */\n properties: {},\n\n /**\n * Mapping from lowercase property names to the properly cased version, used\n * to warn in the case of missing properties. Available only in __DEV__.\n * @type {Object}\n */\n getPossibleStandardName: process.env.NODE_ENV !== 'production' ? {} : null,\n\n /**\n * All of the isCustomAttribute() functions that have been injected.\n */\n _isCustomAttributeFunctions: [],\n\n /**\n * Checks whether a property name is a custom attribute.\n * @method\n */\n isCustomAttribute: function (attributeName) {\n for (var i = 0; i < DOMProperty._isCustomAttributeFunctions.length; i++) {\n var isCustomAttributeFn = DOMProperty._isCustomAttributeFunctions[i];\n if (isCustomAttributeFn(attributeName)) {\n return true;\n }\n }\n return false;\n },\n\n injection: DOMPropertyInjection\n};\n\nmodule.exports = DOMProperty;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DOMProperty.js\n ** module id = 38\n ** module chunks = 0\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport FontAwesome from 'react-fontawesome'\r\nimport { Link } from 'react-router'\r\n\r\nexport default class ArtistSentence extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\trender(){\r\n\t\tif( !this.props.artists ) return -\r\n\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.props.artists.map( (artist, index) => {\r\n\t\t\t\t\t\tvar separator = null;\r\n\t\t\t\t\t\tif( index == this.props.artists.length - 2 ){\r\n\t\t\t\t\t\t\tseparator = ' and ';\r\n\t\t\t\t\t\t}else if( index < this.props.artists.length - 2 ){\r\n\t\t\t\t\t\t\tseparator = ', ';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif( !artist.name ) artist.name = '-'\r\n\t\t\t\t\t\tif( artist.uri ){\r\n\t\t\t\t\t\t\tvar content = { artist.name }\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tvar content = { artist.name }\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{ content }\r\n\t\t\t\t\t\t\t\t{ separator }\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/ArtistSentence.js\n **/","/**\n * Indicates that navigation was caused by a call to history.push.\n */\n'use strict';\n\nexports.__esModule = true;\nvar PUSH = 'PUSH';\n\nexports.PUSH = PUSH;\n/**\n * Indicates that navigation was caused by a call to history.replace.\n */\nvar REPLACE = 'REPLACE';\n\nexports.REPLACE = REPLACE;\n/**\n * Indicates that navigation was caused by some other action such\n * as using a browser's back/forward buttons and/or manually manipulating\n * the URL in a browser's location bar. This is the default.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate\n * for more information.\n */\nvar POP = 'POP';\n\nexports.POP = POP;\nexports['default'] = {\n PUSH: PUSH,\n REPLACE: REPLACE,\n POP: POP\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/Actions.js\n ** module id = 40\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\nexports.compilePattern = compilePattern;\nexports.matchPattern = matchPattern;\nexports.getParamNames = getParamNames;\nexports.getParams = getParams;\nexports.formatPattern = formatPattern;\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction escapeRegExp(string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction _compilePattern(pattern) {\n var regexpSource = '';\n var paramNames = [];\n var tokens = [];\n\n var match = void 0,\n lastIndex = 0,\n matcher = /:([a-zA-Z_$][a-zA-Z0-9_$]*)|\\*\\*|\\*|\\(|\\)/g;\n while (match = matcher.exec(pattern)) {\n if (match.index !== lastIndex) {\n tokens.push(pattern.slice(lastIndex, match.index));\n regexpSource += escapeRegExp(pattern.slice(lastIndex, match.index));\n }\n\n if (match[1]) {\n regexpSource += '([^/]+)';\n paramNames.push(match[1]);\n } else if (match[0] === '**') {\n regexpSource += '(.*)';\n paramNames.push('splat');\n } else if (match[0] === '*') {\n regexpSource += '(.*?)';\n paramNames.push('splat');\n } else if (match[0] === '(') {\n regexpSource += '(?:';\n } else if (match[0] === ')') {\n regexpSource += ')?';\n }\n\n tokens.push(match[0]);\n\n lastIndex = matcher.lastIndex;\n }\n\n if (lastIndex !== pattern.length) {\n tokens.push(pattern.slice(lastIndex, pattern.length));\n regexpSource += escapeRegExp(pattern.slice(lastIndex, pattern.length));\n }\n\n return {\n pattern: pattern,\n regexpSource: regexpSource,\n paramNames: paramNames,\n tokens: tokens\n };\n}\n\nvar CompiledPatternsCache = Object.create(null);\n\nfunction compilePattern(pattern) {\n if (!CompiledPatternsCache[pattern]) CompiledPatternsCache[pattern] = _compilePattern(pattern);\n\n return CompiledPatternsCache[pattern];\n}\n\n/**\n * Attempts to match a pattern on the given pathname. Patterns may use\n * the following special characters:\n *\n * - :paramName Matches a URL segment up to the next /, ?, or #. The\n * captured string is considered a \"param\"\n * - () Wraps a segment of the URL that is optional\n * - * Consumes (non-greedy) all characters up to the next\n * character in the pattern, or to the end of the URL if\n * there is none\n * - ** Consumes (greedy) all characters up to the next character\n * in the pattern, or to the end of the URL if there is none\n *\n * The function calls callback(error, matched) when finished.\n * The return value is an object with the following properties:\n *\n * - remainingPathname\n * - paramNames\n * - paramValues\n */\nfunction matchPattern(pattern, pathname) {\n // Ensure pattern starts with leading slash for consistency with pathname.\n if (pattern.charAt(0) !== '/') {\n pattern = '/' + pattern;\n }\n\n var _compilePattern2 = compilePattern(pattern);\n\n var regexpSource = _compilePattern2.regexpSource;\n var paramNames = _compilePattern2.paramNames;\n var tokens = _compilePattern2.tokens;\n\n\n if (pattern.charAt(pattern.length - 1) !== '/') {\n regexpSource += '/?'; // Allow optional path separator at end.\n }\n\n // Special-case patterns like '*' for catch-all routes.\n if (tokens[tokens.length - 1] === '*') {\n regexpSource += '$';\n }\n\n var match = pathname.match(new RegExp('^' + regexpSource, 'i'));\n if (match == null) {\n return null;\n }\n\n var matchedPath = match[0];\n var remainingPathname = pathname.substr(matchedPath.length);\n\n if (remainingPathname) {\n // Require that the match ends at a path separator, if we didn't match\n // the full path, so any remaining pathname is a new path segment.\n if (matchedPath.charAt(matchedPath.length - 1) !== '/') {\n return null;\n }\n\n // If there is a remaining pathname, treat the path separator as part of\n // the remaining pathname for properly continuing the match.\n remainingPathname = '/' + remainingPathname;\n }\n\n return {\n remainingPathname: remainingPathname,\n paramNames: paramNames,\n paramValues: match.slice(1).map(function (v) {\n return v && decodeURIComponent(v);\n })\n };\n}\n\nfunction getParamNames(pattern) {\n return compilePattern(pattern).paramNames;\n}\n\nfunction getParams(pattern, pathname) {\n var match = matchPattern(pattern, pathname);\n if (!match) {\n return null;\n }\n\n var paramNames = match.paramNames;\n var paramValues = match.paramValues;\n\n var params = {};\n\n paramNames.forEach(function (paramName, index) {\n params[paramName] = paramValues[index];\n });\n\n return params;\n}\n\n/**\n * Returns a version of the given pattern with params interpolated. Throws\n * if there is a dynamic segment of the pattern for which there is no param.\n */\nfunction formatPattern(pattern, params) {\n params = params || {};\n\n var _compilePattern3 = compilePattern(pattern);\n\n var tokens = _compilePattern3.tokens;\n\n var parenCount = 0,\n pathname = '',\n splatIndex = 0;\n\n var token = void 0,\n paramName = void 0,\n paramValue = void 0;\n for (var i = 0, len = tokens.length; i < len; ++i) {\n token = tokens[i];\n\n if (token === '*' || token === '**') {\n paramValue = Array.isArray(params.splat) ? params.splat[splatIndex++] : params.splat;\n\n !(paramValue != null || parenCount > 0) ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'Missing splat #%s for path \"%s\"', splatIndex, pattern) : (0, _invariant2.default)(false) : void 0;\n\n if (paramValue != null) pathname += encodeURI(paramValue);\n } else if (token === '(') {\n parenCount += 1;\n } else if (token === ')') {\n parenCount -= 1;\n } else if (token.charAt(0) === ':') {\n paramName = token.substring(1);\n paramValue = params[paramName];\n\n !(paramValue != null || parenCount > 0) ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'Missing \"%s\" parameter for path \"%s\"', paramName, pattern) : (0, _invariant2.default)(false) : void 0;\n\n if (paramValue != null) pathname += encodeURIComponent(paramValue);\n } else {\n pathname += token;\n }\n }\n\n return pathname.replace(/\\/+/g, '/');\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-router/lib/PatternUtils.js\n ** module id = 41\n ** module chunks = 0\n **/","/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMLazyTree\n */\n\n'use strict';\n\nvar DOMNamespaces = require('./DOMNamespaces');\nvar setInnerHTML = require('./setInnerHTML');\n\nvar createMicrosoftUnsafeLocalFunction = require('./createMicrosoftUnsafeLocalFunction');\nvar setTextContent = require('./setTextContent');\n\nvar ELEMENT_NODE_TYPE = 1;\nvar DOCUMENT_FRAGMENT_NODE_TYPE = 11;\n\n/**\n * In IE (8-11) and Edge, appending nodes with no children is dramatically\n * faster than appending a full subtree, so we essentially queue up the\n * .appendChild calls here and apply them so each node is added to its parent\n * before any children are added.\n *\n * In other browsers, doing so is slower or neutral compared to the other order\n * (in Firefox, twice as slow) so we only do this inversion in IE.\n *\n * See https://github.com/spicyj/innerhtml-vs-createelement-vs-clonenode.\n */\nvar enableLazy = typeof document !== 'undefined' && typeof document.documentMode === 'number' || typeof navigator !== 'undefined' && typeof navigator.userAgent === 'string' && /\\bEdge\\/\\d/.test(navigator.userAgent);\n\nfunction insertTreeChildren(tree) {\n if (!enableLazy) {\n return;\n }\n var node = tree.node;\n var children = tree.children;\n if (children.length) {\n for (var i = 0; i < children.length; i++) {\n insertTreeBefore(node, children[i], null);\n }\n } else if (tree.html != null) {\n setInnerHTML(node, tree.html);\n } else if (tree.text != null) {\n setTextContent(node, tree.text);\n }\n}\n\nvar insertTreeBefore = createMicrosoftUnsafeLocalFunction(function (parentNode, tree, referenceNode) {\n // DocumentFragments aren't actually part of the DOM after insertion so\n // appending children won't update the DOM. We need to ensure the fragment\n // is properly populated first, breaking out of our lazy approach for just\n // this level. Also, some plugins (like Flash Player) will read\n // nodes immediately upon insertion into the DOM, so \n // must also be populated prior to insertion into the DOM.\n if (tree.node.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE || tree.node.nodeType === ELEMENT_NODE_TYPE && tree.node.nodeName.toLowerCase() === 'object' && (tree.node.namespaceURI == null || tree.node.namespaceURI === DOMNamespaces.html)) {\n insertTreeChildren(tree);\n parentNode.insertBefore(tree.node, referenceNode);\n } else {\n parentNode.insertBefore(tree.node, referenceNode);\n insertTreeChildren(tree);\n }\n});\n\nfunction replaceChildWithTree(oldNode, newTree) {\n oldNode.parentNode.replaceChild(newTree.node, oldNode);\n insertTreeChildren(newTree);\n}\n\nfunction queueChild(parentTree, childTree) {\n if (enableLazy) {\n parentTree.children.push(childTree);\n } else {\n parentTree.node.appendChild(childTree.node);\n }\n}\n\nfunction queueHTML(tree, html) {\n if (enableLazy) {\n tree.html = html;\n } else {\n setInnerHTML(tree.node, html);\n }\n}\n\nfunction queueText(tree, text) {\n if (enableLazy) {\n tree.text = text;\n } else {\n setTextContent(tree.node, text);\n }\n}\n\nfunction toString() {\n return this.node.nodeName;\n}\n\nfunction DOMLazyTree(node) {\n return {\n node: node,\n children: [],\n html: null,\n text: null,\n toString: toString\n };\n}\n\nDOMLazyTree.insertTreeBefore = insertTreeBefore;\nDOMLazyTree.replaceChildWithTree = replaceChildWithTree;\nDOMLazyTree.queueChild = queueChild;\nDOMLazyTree.queueHTML = queueHTML;\nDOMLazyTree.queueText = queueText;\n\nmodule.exports = DOMLazyTree;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DOMLazyTree.js\n ** module id = 42\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactReconciler\n */\n\n'use strict';\n\nvar ReactRef = require('./ReactRef');\nvar ReactInstrumentation = require('./ReactInstrumentation');\n\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Helper to call ReactRef.attachRefs with this composite component, split out\n * to avoid allocations in the transaction mount-ready queue.\n */\nfunction attachRefs() {\n ReactRef.attachRefs(this, this._currentElement);\n}\n\nvar ReactReconciler = {\n\n /**\n * Initializes the component, renders markup, and registers event listeners.\n *\n * @param {ReactComponent} internalInstance\n * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n * @param {?object} the containing host component instance\n * @param {?object} info about the host container\n * @return {?string} Rendered markup to be inserted into the DOM.\n * @final\n * @internal\n */\n mountComponent: function (internalInstance, transaction, hostParent, hostContainerInfo, context, parentDebugID // 0 in production and for roots\n ) {\n if (process.env.NODE_ENV !== 'production') {\n if (internalInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onBeforeMountComponent(internalInstance._debugID, internalInstance._currentElement, parentDebugID);\n }\n }\n var markup = internalInstance.mountComponent(transaction, hostParent, hostContainerInfo, context, parentDebugID);\n if (internalInstance._currentElement && internalInstance._currentElement.ref != null) {\n transaction.getReactMountReady().enqueue(attachRefs, internalInstance);\n }\n if (process.env.NODE_ENV !== 'production') {\n if (internalInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onMountComponent(internalInstance._debugID);\n }\n }\n return markup;\n },\n\n /**\n * Returns a value that can be passed to\n * ReactComponentEnvironment.replaceNodeWithMarkup.\n */\n getHostNode: function (internalInstance) {\n return internalInstance.getHostNode();\n },\n\n /**\n * Releases any resources allocated by `mountComponent`.\n *\n * @final\n * @internal\n */\n unmountComponent: function (internalInstance, safely) {\n if (process.env.NODE_ENV !== 'production') {\n if (internalInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onBeforeUnmountComponent(internalInstance._debugID);\n }\n }\n ReactRef.detachRefs(internalInstance, internalInstance._currentElement);\n internalInstance.unmountComponent(safely);\n if (process.env.NODE_ENV !== 'production') {\n if (internalInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onUnmountComponent(internalInstance._debugID);\n }\n }\n },\n\n /**\n * Update a component using a new element.\n *\n * @param {ReactComponent} internalInstance\n * @param {ReactElement} nextElement\n * @param {ReactReconcileTransaction} transaction\n * @param {object} context\n * @internal\n */\n receiveComponent: function (internalInstance, nextElement, transaction, context) {\n var prevElement = internalInstance._currentElement;\n\n if (nextElement === prevElement && context === internalInstance._context) {\n // Since elements are immutable after the owner is rendered,\n // we can do a cheap identity compare here to determine if this is a\n // superfluous reconcile. It's possible for state to be mutable but such\n // change should trigger an update of the owner which would recreate\n // the element. We explicitly check for the existence of an owner since\n // it's possible for an element created outside a composite to be\n // deeply mutated and reused.\n\n // TODO: Bailing out early is just a perf optimization right?\n // TODO: Removing the return statement should affect correctness?\n return;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (internalInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onBeforeUpdateComponent(internalInstance._debugID, nextElement);\n }\n }\n\n var refsChanged = ReactRef.shouldUpdateRefs(prevElement, nextElement);\n\n if (refsChanged) {\n ReactRef.detachRefs(internalInstance, prevElement);\n }\n\n internalInstance.receiveComponent(nextElement, transaction, context);\n\n if (refsChanged && internalInstance._currentElement && internalInstance._currentElement.ref != null) {\n transaction.getReactMountReady().enqueue(attachRefs, internalInstance);\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (internalInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onUpdateComponent(internalInstance._debugID);\n }\n }\n },\n\n /**\n * Flush any dirty changes in a component.\n *\n * @param {ReactComponent} internalInstance\n * @param {ReactReconcileTransaction} transaction\n * @internal\n */\n performUpdateIfNecessary: function (internalInstance, transaction, updateBatchNumber) {\n if (internalInstance._updateBatchNumber !== updateBatchNumber) {\n // The component's enqueued batch number should always be the current\n // batch or the following one.\n process.env.NODE_ENV !== 'production' ? warning(internalInstance._updateBatchNumber == null || internalInstance._updateBatchNumber === updateBatchNumber + 1, 'performUpdateIfNecessary: Unexpected batch number (current %s, ' + 'pending %s)', updateBatchNumber, internalInstance._updateBatchNumber) : void 0;\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (internalInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onBeforeUpdateComponent(internalInstance._debugID, internalInstance._currentElement);\n }\n }\n internalInstance.performUpdateIfNecessary(transaction);\n if (process.env.NODE_ENV !== 'production') {\n if (internalInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onUpdateComponent(internalInstance._debugID);\n }\n }\n }\n\n};\n\nmodule.exports = ReactReconciler;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactReconciler.js\n ** module id = 43\n ** module chunks = 0\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { Link, browserHistory } from 'react-router'\r\n\r\nimport Thumbnail from './Thumbnail'\r\nimport ArtistSentence from './ArtistSentence'\r\n\r\nexport default class GridItem extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\thandleClick(e){\r\n\t\tif( e.target.tagName.toLowerCase() !== 'a' ){\r\n\t\t\tbrowserHistory.push( this.props.link );\r\n\t\t}\r\n\t}\r\n\r\n\trenderThumbnail(){\r\n\t\tif( this.props.item.images ) return \r\n\t\tif( this.props.item.icons ) return \r\n\t\treturn \r\n\t}\r\n\r\n\trender(){\r\n\t\tif( !this.props.item ) return null\r\n\r\n\t\tvar item = this.props.item;\r\n\t\tif( typeof(item.album) !== 'undefined' ){\r\n\t\t\titem.album.added_at = item.added_at;\r\n\t\t\titem = item.album;\r\n\t\t}\r\n\t\treturn (\r\n\t\t\t
this.handleClick(e) }>\r\n\t\t\t\t{ this.renderThumbnail() }\r\n\t\t\t\t
{ item.name }
\r\n\t\t\t\t
\r\n\t\t\t\t\t{ item.artists ? : null }\r\n\t\t\t\t\t{ item.type == 'playlist' ? item.tracks.total+' tracks' : null }\r\n\t\t\t\t\t{ item.followers ? item.followers.total.toLocaleString()+' followers' : null }\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/GridItem.js\n **/","\r\n/**\r\n * Actions and Action Creators\r\n **/\r\n\r\nexport function setPort( port ){\r\n\treturn {\r\n\t\ttype: 'PUSHER_SET_PORT',\r\n\t\tport: port\r\n\t}\r\n}\r\n\r\nexport function changeUsername( username ){\r\n\treturn {\r\n\t\ttype: 'PUSHER_INSTRUCT',\r\n\t\taction: 'change_username',\r\n\t\tdata: username\r\n\t}\r\n}\r\n\r\nexport function connect(){\r\n\treturn {\r\n\t\ttype: 'PUSHER_CONNECT'\r\n\t}\r\n}\r\n\r\nexport function disconnect(){\r\n\treturn {\r\n\t\ttype: 'PUSHER_DISCONNECT'\r\n\t}\r\n}\r\n\r\nexport function performUpgrade(){\r\n\treturn {\r\n\t\ttype: 'PUSHER_UPGRADING'\r\n\t}\r\n}\r\n\r\nexport function getConnectionList(){\r\n\treturn {\r\n\t\ttype: 'PUSHER_INSTRUCT',\r\n\t\taction: 'get_connections'\r\n\t}\r\n}\r\n\r\nexport function instruct( action, data = null ){\r\n\treturn {\r\n\t\ttype: 'PUSHER_INSTRUCT',\r\n\t\taction: action,\r\n\t\tdata: data\r\n\t}\r\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/services/pusher/actions.js\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPluginHub\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar EventPluginRegistry = require('./EventPluginRegistry');\nvar EventPluginUtils = require('./EventPluginUtils');\nvar ReactErrorUtils = require('./ReactErrorUtils');\n\nvar accumulateInto = require('./accumulateInto');\nvar forEachAccumulated = require('./forEachAccumulated');\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Internal store for event listeners\n */\nvar listenerBank = {};\n\n/**\n * Internal queue of events that have accumulated their dispatches and are\n * waiting to have their dispatches executed.\n */\nvar eventQueue = null;\n\n/**\n * Dispatches an event and releases it back into the pool, unless persistent.\n *\n * @param {?object} event Synthetic event to be dispatched.\n * @param {boolean} simulated If the event is simulated (changes exn behavior)\n * @private\n */\nvar executeDispatchesAndRelease = function (event, simulated) {\n if (event) {\n EventPluginUtils.executeDispatchesInOrder(event, simulated);\n\n if (!event.isPersistent()) {\n event.constructor.release(event);\n }\n }\n};\nvar executeDispatchesAndReleaseSimulated = function (e) {\n return executeDispatchesAndRelease(e, true);\n};\nvar executeDispatchesAndReleaseTopLevel = function (e) {\n return executeDispatchesAndRelease(e, false);\n};\n\nvar getDictionaryKey = function (inst) {\n // Prevents V8 performance issue:\n // https://github.com/facebook/react/pull/7232\n return '.' + inst._rootNodeID;\n};\n\n/**\n * This is a unified interface for event plugins to be installed and configured.\n *\n * Event plugins can implement the following properties:\n *\n * `extractEvents` {function(string, DOMEventTarget, string, object): *}\n * Required. When a top-level event is fired, this method is expected to\n * extract synthetic events that will in turn be queued and dispatched.\n *\n * `eventTypes` {object}\n * Optional, plugins that fire events must publish a mapping of registration\n * names that are used to register listeners. Values of this mapping must\n * be objects that contain `registrationName` or `phasedRegistrationNames`.\n *\n * `executeDispatch` {function(object, function, string)}\n * Optional, allows plugins to override how an event gets dispatched. By\n * default, the listener is simply invoked.\n *\n * Each plugin that is injected into `EventsPluginHub` is immediately operable.\n *\n * @public\n */\nvar EventPluginHub = {\n\n /**\n * Methods for injecting dependencies.\n */\n injection: {\n\n /**\n * @param {array} InjectedEventPluginOrder\n * @public\n */\n injectEventPluginOrder: EventPluginRegistry.injectEventPluginOrder,\n\n /**\n * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n */\n injectEventPluginsByName: EventPluginRegistry.injectEventPluginsByName\n\n },\n\n /**\n * Stores `listener` at `listenerBank[registrationName][key]`. Is idempotent.\n *\n * @param {object} inst The instance, which is the source of events.\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @param {function} listener The callback to store.\n */\n putListener: function (inst, registrationName, listener) {\n !(typeof listener === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected %s listener to be a function, instead got type %s', registrationName, typeof listener) : _prodInvariant('94', registrationName, typeof listener) : void 0;\n\n var key = getDictionaryKey(inst);\n var bankForRegistrationName = listenerBank[registrationName] || (listenerBank[registrationName] = {});\n bankForRegistrationName[key] = listener;\n\n var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\n if (PluginModule && PluginModule.didPutListener) {\n PluginModule.didPutListener(inst, registrationName, listener);\n }\n },\n\n /**\n * @param {object} inst The instance, which is the source of events.\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @return {?function} The stored callback.\n */\n getListener: function (inst, registrationName) {\n var bankForRegistrationName = listenerBank[registrationName];\n var key = getDictionaryKey(inst);\n return bankForRegistrationName && bankForRegistrationName[key];\n },\n\n /**\n * Deletes a listener from the registration bank.\n *\n * @param {object} inst The instance, which is the source of events.\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n */\n deleteListener: function (inst, registrationName) {\n var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\n if (PluginModule && PluginModule.willDeleteListener) {\n PluginModule.willDeleteListener(inst, registrationName);\n }\n\n var bankForRegistrationName = listenerBank[registrationName];\n // TODO: This should never be null -- when is it?\n if (bankForRegistrationName) {\n var key = getDictionaryKey(inst);\n delete bankForRegistrationName[key];\n }\n },\n\n /**\n * Deletes all listeners for the DOM element with the supplied ID.\n *\n * @param {object} inst The instance, which is the source of events.\n */\n deleteAllListeners: function (inst) {\n var key = getDictionaryKey(inst);\n for (var registrationName in listenerBank) {\n if (!listenerBank.hasOwnProperty(registrationName)) {\n continue;\n }\n\n if (!listenerBank[registrationName][key]) {\n continue;\n }\n\n var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\n if (PluginModule && PluginModule.willDeleteListener) {\n PluginModule.willDeleteListener(inst, registrationName);\n }\n\n delete listenerBank[registrationName][key];\n }\n },\n\n /**\n * Allows registered plugins an opportunity to extract events from top-level\n * native browser events.\n *\n * @return {*} An accumulation of synthetic events.\n * @internal\n */\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var events;\n var plugins = EventPluginRegistry.plugins;\n for (var i = 0; i < plugins.length; i++) {\n // Not every plugin in the ordering may be loaded at runtime.\n var possiblePlugin = plugins[i];\n if (possiblePlugin) {\n var extractedEvents = possiblePlugin.extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget);\n if (extractedEvents) {\n events = accumulateInto(events, extractedEvents);\n }\n }\n }\n return events;\n },\n\n /**\n * Enqueues a synthetic event that should be dispatched when\n * `processEventQueue` is invoked.\n *\n * @param {*} events An accumulation of synthetic events.\n * @internal\n */\n enqueueEvents: function (events) {\n if (events) {\n eventQueue = accumulateInto(eventQueue, events);\n }\n },\n\n /**\n * Dispatches all synthetic events on the event queue.\n *\n * @internal\n */\n processEventQueue: function (simulated) {\n // Set `eventQueue` to null before processing it so that we can tell if more\n // events get enqueued while processing.\n var processingEventQueue = eventQueue;\n eventQueue = null;\n if (simulated) {\n forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseSimulated);\n } else {\n forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseTopLevel);\n }\n !!eventQueue ? process.env.NODE_ENV !== 'production' ? invariant(false, 'processEventQueue(): Additional events were enqueued while processing an event queue. Support for this has not yet been implemented.') : _prodInvariant('95') : void 0;\n // This would be a good time to rethrow if any of the event handlers threw.\n ReactErrorUtils.rethrowCaughtError();\n },\n\n /**\n * These are needed for tests only. Do not use!\n */\n __purge: function () {\n listenerBank = {};\n },\n\n __getListenerBank: function () {\n return listenerBank;\n }\n\n};\n\nmodule.exports = EventPluginHub;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventPluginHub.js\n ** module id = 46\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPropagators\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPluginHub = require('./EventPluginHub');\nvar EventPluginUtils = require('./EventPluginUtils');\n\nvar accumulateInto = require('./accumulateInto');\nvar forEachAccumulated = require('./forEachAccumulated');\nvar warning = require('fbjs/lib/warning');\n\nvar PropagationPhases = EventConstants.PropagationPhases;\nvar getListener = EventPluginHub.getListener;\n\n/**\n * Some event types have a notion of different registration names for different\n * \"phases\" of propagation. This finds listeners by a given phase.\n */\nfunction listenerAtPhase(inst, event, propagationPhase) {\n var registrationName = event.dispatchConfig.phasedRegistrationNames[propagationPhase];\n return getListener(inst, registrationName);\n}\n\n/**\n * Tags a `SyntheticEvent` with dispatched listeners. Creating this function\n * here, allows us to not have to bind or create functions for each event.\n * Mutating the event's members allows us to not have to create a wrapping\n * \"dispatch\" object that pairs the event with the listener.\n */\nfunction accumulateDirectionalDispatches(inst, upwards, event) {\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(inst, 'Dispatching inst must not be null') : void 0;\n }\n var phase = upwards ? PropagationPhases.bubbled : PropagationPhases.captured;\n var listener = listenerAtPhase(inst, event, phase);\n if (listener) {\n event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);\n }\n}\n\n/**\n * Collect dispatches (must be entirely collected before dispatching - see unit\n * tests). Lazily allocate the array to conserve memory. We must loop through\n * each event and perform the traversal for each one. We cannot perform a\n * single traversal for the entire collection of events because each event may\n * have a different target.\n */\nfunction accumulateTwoPhaseDispatchesSingle(event) {\n if (event && event.dispatchConfig.phasedRegistrationNames) {\n EventPluginUtils.traverseTwoPhase(event._targetInst, accumulateDirectionalDispatches, event);\n }\n}\n\n/**\n * Same as `accumulateTwoPhaseDispatchesSingle`, but skips over the targetID.\n */\nfunction accumulateTwoPhaseDispatchesSingleSkipTarget(event) {\n if (event && event.dispatchConfig.phasedRegistrationNames) {\n var targetInst = event._targetInst;\n var parentInst = targetInst ? EventPluginUtils.getParentInstance(targetInst) : null;\n EventPluginUtils.traverseTwoPhase(parentInst, accumulateDirectionalDispatches, event);\n }\n}\n\n/**\n * Accumulates without regard to direction, does not look for phased\n * registration names. Same as `accumulateDirectDispatchesSingle` but without\n * requiring that the `dispatchMarker` be the same as the dispatched ID.\n */\nfunction accumulateDispatches(inst, ignoredDirection, event) {\n if (event && event.dispatchConfig.registrationName) {\n var registrationName = event.dispatchConfig.registrationName;\n var listener = getListener(inst, registrationName);\n if (listener) {\n event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);\n }\n }\n}\n\n/**\n * Accumulates dispatches on an `SyntheticEvent`, but only for the\n * `dispatchMarker`.\n * @param {SyntheticEvent} event\n */\nfunction accumulateDirectDispatchesSingle(event) {\n if (event && event.dispatchConfig.registrationName) {\n accumulateDispatches(event._targetInst, null, event);\n }\n}\n\nfunction accumulateTwoPhaseDispatches(events) {\n forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle);\n}\n\nfunction accumulateTwoPhaseDispatchesSkipTarget(events) {\n forEachAccumulated(events, accumulateTwoPhaseDispatchesSingleSkipTarget);\n}\n\nfunction accumulateEnterLeaveDispatches(leave, enter, from, to) {\n EventPluginUtils.traverseEnterLeave(from, to, accumulateDispatches, leave, enter);\n}\n\nfunction accumulateDirectDispatches(events) {\n forEachAccumulated(events, accumulateDirectDispatchesSingle);\n}\n\n/**\n * A small set of propagation patterns, each of which will accept a small amount\n * of information, and generate a set of \"dispatch ready event objects\" - which\n * are sets of events that have already been annotated with a set of dispatched\n * listener functions/ids. The API is designed this way to discourage these\n * propagation strategies from actually executing the dispatches, since we\n * always want to collect the entire set of dispatches before executing event a\n * single one.\n *\n * @constructor EventPropagators\n */\nvar EventPropagators = {\n accumulateTwoPhaseDispatches: accumulateTwoPhaseDispatches,\n accumulateTwoPhaseDispatchesSkipTarget: accumulateTwoPhaseDispatchesSkipTarget,\n accumulateDirectDispatches: accumulateDirectDispatches,\n accumulateEnterLeaveDispatches: accumulateEnterLeaveDispatches\n};\n\nmodule.exports = EventPropagators;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventPropagators.js\n ** module id = 47\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInstanceMap\n */\n\n'use strict';\n\n/**\n * `ReactInstanceMap` maintains a mapping from a public facing stateful\n * instance (key) and the internal representation (value). This allows public\n * methods to accept the user facing instance as an argument and map them back\n * to internal methods.\n */\n\n// TODO: Replace this with ES6: var ReactInstanceMap = new Map();\n\nvar ReactInstanceMap = {\n\n /**\n * This API should be called `delete` but we'd have to make sure to always\n * transform these to strings for IE support. When this transform is fully\n * supported we can rename it.\n */\n remove: function (key) {\n key._reactInternalInstance = undefined;\n },\n\n get: function (key) {\n return key._reactInternalInstance;\n },\n\n has: function (key) {\n return key._reactInternalInstance !== undefined;\n },\n\n set: function (key, value) {\n key._reactInternalInstance = value;\n }\n\n};\n\nmodule.exports = ReactInstanceMap;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactInstanceMap.js\n ** module id = 48\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticUIEvent\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\nvar getEventTarget = require('./getEventTarget');\n\n/**\n * @interface UIEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar UIEventInterface = {\n view: function (event) {\n if (event.view) {\n return event.view;\n }\n\n var target = getEventTarget(event);\n if (target.window === target) {\n // target is a window object\n return target;\n }\n\n var doc = target.ownerDocument;\n // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\n if (doc) {\n return doc.defaultView || doc.parentWindow;\n } else {\n return window;\n }\n },\n detail: function (event) {\n return event.detail || 0;\n }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticEvent}\n */\nfunction SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticUIEvent, UIEventInterface);\n\nmodule.exports = SyntheticUIEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticUIEvent.js\n ** module id = 49\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule Transaction\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * `Transaction` creates a black box that is able to wrap any method such that\n * certain invariants are maintained before and after the method is invoked\n * (Even if an exception is thrown while invoking the wrapped method). Whoever\n * instantiates a transaction can provide enforcers of the invariants at\n * creation time. The `Transaction` class itself will supply one additional\n * automatic invariant for you - the invariant that any transaction instance\n * should not be run while it is already being run. You would typically create a\n * single instance of a `Transaction` for reuse multiple times, that potentially\n * is used to wrap several different methods. Wrappers are extremely simple -\n * they only require implementing two methods.\n *\n *
\n *                       wrappers (injected at creation time)\n *                                      +        +\n *                                      |        |\n *                    +-----------------|--------|--------------+\n *                    |                 v        |              |\n *                    |      +---------------+   |              |\n *                    |   +--|    wrapper1   |---|----+         |\n *                    |   |  +---------------+   v    |         |\n *                    |   |          +-------------+  |         |\n *                    |   |     +----|   wrapper2  |--------+   |\n *                    |   |     |    +-------------+  |     |   |\n *                    |   |     |                     |     |   |\n *                    |   v     v                     v     v   | wrapper\n *                    | +---+ +---+   +---------+   +---+ +---+ | invariants\n * perform(anyMethod) | |   | |   |   |         |   |   | |   | | maintained\n * +----------------->|-|---|-|---|-->|anyMethod|---|---|-|---|-|-------->\n *                    | |   | |   |   |         |   |   | |   | |\n *                    | |   | |   |   |         |   |   | |   | |\n *                    | |   | |   |   |         |   |   | |   | |\n *                    | +---+ +---+   +---------+   +---+ +---+ |\n *                    |  initialize                    close    |\n *                    +-----------------------------------------+\n * 
\n *\n * Use cases:\n * - Preserving the input selection ranges before/after reconciliation.\n * Restoring selection even in the event of an unexpected error.\n * - Deactivating events while rearranging the DOM, preventing blurs/focuses,\n * while guaranteeing that afterwards, the event system is reactivated.\n * - Flushing a queue of collected DOM mutations to the main UI thread after a\n * reconciliation takes place in a worker thread.\n * - Invoking any collected `componentDidUpdate` callbacks after rendering new\n * content.\n * - (Future use case): Wrapping particular flushes of the `ReactWorker` queue\n * to preserve the `scrollTop` (an automatic scroll aware DOM).\n * - (Future use case): Layout calculations before and after DOM updates.\n *\n * Transactional plugin API:\n * - A module that has an `initialize` method that returns any precomputation.\n * - and a `close` method that accepts the precomputation. `close` is invoked\n * when the wrapped process is completed, or has failed.\n *\n * @param {Array} transactionWrapper Wrapper modules\n * that implement `initialize` and `close`.\n * @return {Transaction} Single transaction for reuse in thread.\n *\n * @class Transaction\n */\nvar Mixin = {\n /**\n * Sets up this instance so that it is prepared for collecting metrics. Does\n * so such that this setup method may be used on an instance that is already\n * initialized, in a way that does not consume additional memory upon reuse.\n * That can be useful if you decide to make your subclass of this mixin a\n * \"PooledClass\".\n */\n reinitializeTransaction: function () {\n this.transactionWrappers = this.getTransactionWrappers();\n if (this.wrapperInitData) {\n this.wrapperInitData.length = 0;\n } else {\n this.wrapperInitData = [];\n }\n this._isInTransaction = false;\n },\n\n _isInTransaction: false,\n\n /**\n * @abstract\n * @return {Array} Array of transaction wrappers.\n */\n getTransactionWrappers: null,\n\n isInTransaction: function () {\n return !!this._isInTransaction;\n },\n\n /**\n * Executes the function within a safety window. Use this for the top level\n * methods that result in large amounts of computation/mutations that would\n * need to be safety checked. The optional arguments helps prevent the need\n * to bind in many cases.\n *\n * @param {function} method Member of scope to call.\n * @param {Object} scope Scope to invoke from.\n * @param {Object?=} a Argument to pass to the method.\n * @param {Object?=} b Argument to pass to the method.\n * @param {Object?=} c Argument to pass to the method.\n * @param {Object?=} d Argument to pass to the method.\n * @param {Object?=} e Argument to pass to the method.\n * @param {Object?=} f Argument to pass to the method.\n *\n * @return {*} Return value from `method`.\n */\n perform: function (method, scope, a, b, c, d, e, f) {\n !!this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.perform(...): Cannot initialize a transaction when there is already an outstanding transaction.') : _prodInvariant('27') : void 0;\n var errorThrown;\n var ret;\n try {\n this._isInTransaction = true;\n // Catching errors makes debugging more difficult, so we start with\n // errorThrown set to true before setting it to false after calling\n // close -- if it's still set to true in the finally block, it means\n // one of these calls threw.\n errorThrown = true;\n this.initializeAll(0);\n ret = method.call(scope, a, b, c, d, e, f);\n errorThrown = false;\n } finally {\n try {\n if (errorThrown) {\n // If `method` throws, prefer to show that stack trace over any thrown\n // by invoking `closeAll`.\n try {\n this.closeAll(0);\n } catch (err) {}\n } else {\n // Since `method` didn't throw, we don't want to silence the exception\n // here.\n this.closeAll(0);\n }\n } finally {\n this._isInTransaction = false;\n }\n }\n return ret;\n },\n\n initializeAll: function (startIndex) {\n var transactionWrappers = this.transactionWrappers;\n for (var i = startIndex; i < transactionWrappers.length; i++) {\n var wrapper = transactionWrappers[i];\n try {\n // Catching errors makes debugging more difficult, so we start with the\n // OBSERVED_ERROR state before overwriting it with the real return value\n // of initialize -- if it's still set to OBSERVED_ERROR in the finally\n // block, it means wrapper.initialize threw.\n this.wrapperInitData[i] = Transaction.OBSERVED_ERROR;\n this.wrapperInitData[i] = wrapper.initialize ? wrapper.initialize.call(this) : null;\n } finally {\n if (this.wrapperInitData[i] === Transaction.OBSERVED_ERROR) {\n // The initializer for wrapper i threw an error; initialize the\n // remaining wrappers but silence any exceptions from them to ensure\n // that the first error is the one to bubble up.\n try {\n this.initializeAll(i + 1);\n } catch (err) {}\n }\n }\n }\n },\n\n /**\n * Invokes each of `this.transactionWrappers.close[i]` functions, passing into\n * them the respective return values of `this.transactionWrappers.init[i]`\n * (`close`rs that correspond to initializers that failed will not be\n * invoked).\n */\n closeAll: function (startIndex) {\n !this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.closeAll(): Cannot close transaction when none are open.') : _prodInvariant('28') : void 0;\n var transactionWrappers = this.transactionWrappers;\n for (var i = startIndex; i < transactionWrappers.length; i++) {\n var wrapper = transactionWrappers[i];\n var initData = this.wrapperInitData[i];\n var errorThrown;\n try {\n // Catching errors makes debugging more difficult, so we start with\n // errorThrown set to true before setting it to false after calling\n // close -- if it's still set to true in the finally block, it means\n // wrapper.close threw.\n errorThrown = true;\n if (initData !== Transaction.OBSERVED_ERROR && wrapper.close) {\n wrapper.close.call(this, initData);\n }\n errorThrown = false;\n } finally {\n if (errorThrown) {\n // The closer for wrapper i threw an error; close the remaining\n // wrappers but silence any exceptions from them to ensure that the\n // first error is the one to bubble up.\n try {\n this.closeAll(i + 1);\n } catch (e) {}\n }\n }\n }\n this.wrapperInitData.length = 0;\n }\n};\n\nvar Transaction = {\n\n Mixin: Mixin,\n\n /**\n * Token to look for to determine if an error occurred.\n */\n OBSERVED_ERROR: {}\n\n};\n\nmodule.exports = Transaction;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/Transaction.js\n ** module id = 50\n ** module chunks = 0\n **/","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar emptyObject = {};\n\nif (process.env.NODE_ENV !== 'production') {\n Object.freeze(emptyObject);\n}\n\nmodule.exports = emptyObject;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/emptyObject.js\n ** module id = 51\n ** module chunks = 0\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport GridItem from './GridItem'\r\n\r\nexport default class AlbumGrid extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\trender(){\r\n\t\tif( this.props.albums ){\r\n\t\t\tvar className = \"grid album-grid\"\r\n\t\t\tif( this.props.className ) className += ' '+this.props.className\r\n\t\t\treturn (\r\n\t\t\t\t
\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.props.albums.map(\r\n\t\t\t\t\t\t\t(album, index) => {\r\n\r\n\t\t\t\t\t\t\t\t// handle nested album objects (as in Album Library)\r\n\t\t\t\t\t\t\t\tif( album.album ){\r\n\t\t\t\t\t\t\t\t\tvar flatAlbum = album.album;\r\n\t\t\t\t\t\t\t\t\tflatAlbum.added_at = album.added_at;\r\n\t\t\t\t\t\t\t\t\talbum = flatAlbum;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\treturn \r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t}\r\n\t\t\t\t
\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n}\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/AlbumGrid.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { Link } from 'react-router'\r\n\r\nexport default class List extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\trenderHeader(){\r\n\t\tif( !this.props.columns ) return null\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.props.columns.map( (col, col_index) => {\r\n\t\t\t\t\t\treturn
{ col.name }
\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t
\r\n\t\t)\r\n\t}\r\n\r\n\trender(){\r\n\t\tif( !this.props.rows ) return null\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{ this.renderHeader() }\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.props.rows.map( (row, row_index) => {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tthis.props.columns.map( (col, col_index) => {\r\n\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t{ row[col.name] ? row[col.name] : - }\r\n\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/List.js\n **/","module.exports = global[\"jQuery\"] = require(\"-!/var/www/iris/node_modules/expose-loader/index.js?$!/var/www/iris/node_modules/jquery/dist/jquery.js\");\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/jquery/dist/jquery.js\n ** module id = 54\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nexports.canUseDOM = canUseDOM;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/ExecutionEnvironment.js\n ** module id = 55\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _queryString = require('query-string');\n\nvar _runTransitionHook = require('./runTransitionHook');\n\nvar _runTransitionHook2 = _interopRequireDefault(_runTransitionHook);\n\nvar _PathUtils = require('./PathUtils');\n\nvar _deprecate = require('./deprecate');\n\nvar _deprecate2 = _interopRequireDefault(_deprecate);\n\nvar SEARCH_BASE_KEY = '$searchBase';\n\nfunction defaultStringifyQuery(query) {\n return _queryString.stringify(query).replace(/%20/g, '+');\n}\n\nvar defaultParseQueryString = _queryString.parse;\n\nfunction isNestedObject(object) {\n for (var p in object) {\n if (Object.prototype.hasOwnProperty.call(object, p) && typeof object[p] === 'object' && !Array.isArray(object[p]) && object[p] !== null) return true;\n }return false;\n}\n\n/**\n * Returns a new createHistory function that may be used to create\n * history objects that know how to handle URL queries.\n */\nfunction useQueries(createHistory) {\n return function () {\n var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n var history = createHistory(options);\n\n var stringifyQuery = options.stringifyQuery;\n var parseQueryString = options.parseQueryString;\n\n if (typeof stringifyQuery !== 'function') stringifyQuery = defaultStringifyQuery;\n\n if (typeof parseQueryString !== 'function') parseQueryString = defaultParseQueryString;\n\n function addQuery(location) {\n if (location.query == null) {\n var search = location.search;\n\n location.query = parseQueryString(search.substring(1));\n location[SEARCH_BASE_KEY] = { search: search, searchBase: '' };\n }\n\n // TODO: Instead of all the book-keeping here, this should just strip the\n // stringified query from the search.\n\n return location;\n }\n\n function appendQuery(location, query) {\n var _extends2;\n\n var searchBaseSpec = location[SEARCH_BASE_KEY];\n var queryString = query ? stringifyQuery(query) : '';\n if (!searchBaseSpec && !queryString) {\n return location;\n }\n\n process.env.NODE_ENV !== 'production' ? _warning2['default'](stringifyQuery !== defaultStringifyQuery || !isNestedObject(query), 'useQueries does not stringify nested query objects by default; ' + 'use a custom stringifyQuery function') : undefined;\n\n if (typeof location === 'string') location = _PathUtils.parsePath(location);\n\n var searchBase = undefined;\n if (searchBaseSpec && location.search === searchBaseSpec.search) {\n searchBase = searchBaseSpec.searchBase;\n } else {\n searchBase = location.search || '';\n }\n\n var search = searchBase;\n if (queryString) {\n search += (search ? '&' : '?') + queryString;\n }\n\n return _extends({}, location, (_extends2 = {\n search: search\n }, _extends2[SEARCH_BASE_KEY] = { search: search, searchBase: searchBase }, _extends2));\n }\n\n // Override all read methods with query-aware versions.\n function listenBefore(hook) {\n return history.listenBefore(function (location, callback) {\n _runTransitionHook2['default'](hook, addQuery(location), callback);\n });\n }\n\n function listen(listener) {\n return history.listen(function (location) {\n listener(addQuery(location));\n });\n }\n\n // Override all write methods with query-aware versions.\n function push(location) {\n history.push(appendQuery(location, location.query));\n }\n\n function replace(location) {\n history.replace(appendQuery(location, location.query));\n }\n\n function createPath(location, query) {\n process.env.NODE_ENV !== 'production' ? _warning2['default'](!query, 'the query argument to createPath is deprecated; use a location descriptor instead') : undefined;\n\n return history.createPath(appendQuery(location, query || location.query));\n }\n\n function createHref(location, query) {\n process.env.NODE_ENV !== 'production' ? _warning2['default'](!query, 'the query argument to createHref is deprecated; use a location descriptor instead') : undefined;\n\n return history.createHref(appendQuery(location, query || location.query));\n }\n\n function createLocation(location) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var fullLocation = history.createLocation.apply(history, [appendQuery(location, location.query)].concat(args));\n if (location.query) {\n fullLocation.query = location.query;\n }\n return addQuery(fullLocation);\n }\n\n // deprecated\n function pushState(state, path, query) {\n if (typeof path === 'string') path = _PathUtils.parsePath(path);\n\n push(_extends({ state: state }, path, { query: query }));\n }\n\n // deprecated\n function replaceState(state, path, query) {\n if (typeof path === 'string') path = _PathUtils.parsePath(path);\n\n replace(_extends({ state: state }, path, { query: query }));\n }\n\n return _extends({}, history, {\n listenBefore: listenBefore,\n listen: listen,\n push: push,\n replace: replace,\n createPath: createPath,\n createHref: createHref,\n createLocation: createLocation,\n\n pushState: _deprecate2['default'](pushState, 'pushState is deprecated; use push instead'),\n replaceState: _deprecate2['default'](replaceState, 'replaceState is deprecated; use replace instead')\n });\n };\n}\n\nexports['default'] = useQueries;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/useQueries.js\n ** module id = 56\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _deprecateObjectProperties = require('./deprecateObjectProperties');\n\nvar _deprecateObjectProperties2 = _interopRequireDefault(_deprecateObjectProperties);\n\nvar _getRouteParams = require('./getRouteParams');\n\nvar _getRouteParams2 = _interopRequireDefault(_getRouteParams);\n\nvar _RouteUtils = require('./RouteUtils');\n\nvar _routerWarning = require('./routerWarning');\n\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _React$PropTypes = _react2.default.PropTypes;\nvar array = _React$PropTypes.array;\nvar func = _React$PropTypes.func;\nvar object = _React$PropTypes.object;\n\n/**\n * A renders the component tree for a given router state\n * and sets the history object and the current location in context.\n */\n\nvar RouterContext = _react2.default.createClass({\n displayName: 'RouterContext',\n\n\n propTypes: {\n history: object,\n router: object.isRequired,\n location: object.isRequired,\n routes: array.isRequired,\n params: object.isRequired,\n components: array.isRequired,\n createElement: func.isRequired\n },\n\n getDefaultProps: function getDefaultProps() {\n return {\n createElement: _react2.default.createElement\n };\n },\n\n\n childContextTypes: {\n history: object,\n location: object.isRequired,\n router: object.isRequired\n },\n\n getChildContext: function getChildContext() {\n var _props = this.props;\n var router = _props.router;\n var history = _props.history;\n var location = _props.location;\n\n if (!router) {\n process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, '`` expects a `router` rather than a `history`') : void 0;\n\n router = _extends({}, history, {\n setRouteLeaveHook: history.listenBeforeLeavingRoute\n });\n delete router.listenBeforeLeavingRoute;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n location = (0, _deprecateObjectProperties2.default)(location, '`context.location` is deprecated, please use a route component\\'s `props.location` instead. http://tiny.cc/router-accessinglocation');\n }\n\n return { history: history, location: location, router: router };\n },\n createElement: function createElement(component, props) {\n return component == null ? null : this.props.createElement(component, props);\n },\n render: function render() {\n var _this = this;\n\n var _props2 = this.props;\n var history = _props2.history;\n var location = _props2.location;\n var routes = _props2.routes;\n var params = _props2.params;\n var components = _props2.components;\n\n var element = null;\n\n if (components) {\n element = components.reduceRight(function (element, components, index) {\n if (components == null) return element; // Don't create new children; use the grandchildren.\n\n var route = routes[index];\n var routeParams = (0, _getRouteParams2.default)(route, params);\n var props = {\n history: history,\n location: location,\n params: params,\n route: route,\n routeParams: routeParams,\n routes: routes\n };\n\n if ((0, _RouteUtils.isReactChildren)(element)) {\n props.children = element;\n } else if (element) {\n for (var prop in element) {\n if (Object.prototype.hasOwnProperty.call(element, prop)) props[prop] = element[prop];\n }\n }\n\n if ((typeof components === 'undefined' ? 'undefined' : _typeof(components)) === 'object') {\n var elements = {};\n\n for (var key in components) {\n if (Object.prototype.hasOwnProperty.call(components, key)) {\n // Pass through the key as a prop to createElement to allow\n // custom createElement functions to know which named component\n // they're rendering, for e.g. matching up to fetched data.\n elements[key] = _this.createElement(components[key], _extends({\n key: key }, props));\n }\n }\n\n return elements;\n }\n\n return _this.createElement(components, props);\n }, element);\n }\n\n !(element === null || element === false || _react2.default.isValidElement(element)) ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'The root route must render a single element') : (0, _invariant2.default)(false) : void 0;\n\n return element;\n }\n});\n\nexports.default = RouterContext;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-router/lib/RouterContext.js\n ** module id = 57\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\nexports.canUseMembrane = undefined;\n\nvar _routerWarning = require('./routerWarning');\n\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar canUseMembrane = exports.canUseMembrane = false;\n\n// No-op by default.\nvar deprecateObjectProperties = function deprecateObjectProperties(object) {\n return object;\n};\n\nif (process.env.NODE_ENV !== 'production') {\n try {\n if (Object.defineProperty({}, 'x', {\n get: function get() {\n return true;\n }\n }).x) {\n exports.canUseMembrane = canUseMembrane = true;\n }\n /* eslint-disable no-empty */\n } catch (e) {}\n /* eslint-enable no-empty */\n\n if (canUseMembrane) {\n deprecateObjectProperties = function deprecateObjectProperties(object, message) {\n // Wrap the deprecated object in a membrane to warn on property access.\n var membrane = {};\n\n var _loop = function _loop(prop) {\n if (!Object.prototype.hasOwnProperty.call(object, prop)) {\n return 'continue';\n }\n\n if (typeof object[prop] === 'function') {\n // Can't use fat arrow here because of use of arguments below.\n membrane[prop] = function () {\n process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, message) : void 0;\n return object[prop].apply(object, arguments);\n };\n return 'continue';\n }\n\n // These properties are non-enumerable to prevent React dev tools from\n // seeing them and causing spurious warnings when accessing them. In\n // principle this could be done with a proxy, but support for the\n // ownKeys trap on proxies is not universal, even among browsers that\n // otherwise support proxies.\n Object.defineProperty(membrane, prop, {\n get: function get() {\n process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, message) : void 0;\n return object[prop];\n }\n });\n };\n\n for (var prop in object) {\n var _ret = _loop(prop);\n\n if (_ret === 'continue') continue;\n }\n\n return membrane;\n };\n }\n}\n\nexports.default = deprecateObjectProperties;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-router/lib/deprecateObjectProperties.js\n ** module id = 58\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DisabledInputUtils\n */\n\n'use strict';\n\nvar disableableMouseListenerNames = {\n onClick: true,\n onDoubleClick: true,\n onMouseDown: true,\n onMouseMove: true,\n onMouseUp: true,\n\n onClickCapture: true,\n onDoubleClickCapture: true,\n onMouseDownCapture: true,\n onMouseMoveCapture: true,\n onMouseUpCapture: true\n};\n\n/**\n * Implements a host component that does not receive mouse events\n * when `disabled` is set.\n */\nvar DisabledInputUtils = {\n getHostProps: function (inst, props) {\n if (!props.disabled) {\n return props;\n }\n\n // Copy the props, except the mouse listeners\n var hostProps = {};\n for (var key in props) {\n if (!disableableMouseListenerNames[key] && props.hasOwnProperty(key)) {\n hostProps[key] = props[key];\n }\n }\n\n return hostProps;\n }\n};\n\nmodule.exports = DisabledInputUtils;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DisabledInputUtils.js\n ** module id = 59\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPluginRegistry\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Injectable ordering of event plugins.\n */\nvar EventPluginOrder = null;\n\n/**\n * Injectable mapping from names to event plugin modules.\n */\nvar namesToPlugins = {};\n\n/**\n * Recomputes the plugin list using the injected plugins and plugin ordering.\n *\n * @private\n */\nfunction recomputePluginOrdering() {\n if (!EventPluginOrder) {\n // Wait until an `EventPluginOrder` is injected.\n return;\n }\n for (var pluginName in namesToPlugins) {\n var PluginModule = namesToPlugins[pluginName];\n var pluginIndex = EventPluginOrder.indexOf(pluginName);\n !(pluginIndex > -1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `%s`.', pluginName) : _prodInvariant('96', pluginName) : void 0;\n if (EventPluginRegistry.plugins[pluginIndex]) {\n continue;\n }\n !PluginModule.extractEvents ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `%s` does not.', pluginName) : _prodInvariant('97', pluginName) : void 0;\n EventPluginRegistry.plugins[pluginIndex] = PluginModule;\n var publishedEvents = PluginModule.eventTypes;\n for (var eventName in publishedEvents) {\n !publishEventForPlugin(publishedEvents[eventName], PluginModule, eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.', eventName, pluginName) : _prodInvariant('98', eventName, pluginName) : void 0;\n }\n }\n}\n\n/**\n * Publishes an event so that it can be dispatched by the supplied plugin.\n *\n * @param {object} dispatchConfig Dispatch configuration for the event.\n * @param {object} PluginModule Plugin publishing the event.\n * @return {boolean} True if the event was successfully published.\n * @private\n */\nfunction publishEventForPlugin(dispatchConfig, PluginModule, eventName) {\n !!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same event name, `%s`.', eventName) : _prodInvariant('99', eventName) : void 0;\n EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig;\n\n var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;\n if (phasedRegistrationNames) {\n for (var phaseName in phasedRegistrationNames) {\n if (phasedRegistrationNames.hasOwnProperty(phaseName)) {\n var phasedRegistrationName = phasedRegistrationNames[phaseName];\n publishRegistrationName(phasedRegistrationName, PluginModule, eventName);\n }\n }\n return true;\n } else if (dispatchConfig.registrationName) {\n publishRegistrationName(dispatchConfig.registrationName, PluginModule, eventName);\n return true;\n }\n return false;\n}\n\n/**\n * Publishes a registration name that is used to identify dispatched events and\n * can be used with `EventPluginHub.putListener` to register listeners.\n *\n * @param {string} registrationName Registration name to add.\n * @param {object} PluginModule Plugin publishing the event.\n * @private\n */\nfunction publishRegistrationName(registrationName, PluginModule, eventName) {\n !!EventPluginRegistry.registrationNameModules[registrationName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same registration name, `%s`.', registrationName) : _prodInvariant('100', registrationName) : void 0;\n EventPluginRegistry.registrationNameModules[registrationName] = PluginModule;\n EventPluginRegistry.registrationNameDependencies[registrationName] = PluginModule.eventTypes[eventName].dependencies;\n\n if (process.env.NODE_ENV !== 'production') {\n var lowerCasedName = registrationName.toLowerCase();\n EventPluginRegistry.possibleRegistrationNames[lowerCasedName] = registrationName;\n\n if (registrationName === 'onDoubleClick') {\n EventPluginRegistry.possibleRegistrationNames.ondblclick = registrationName;\n }\n }\n}\n\n/**\n * Registers plugins so that they can extract and dispatch events.\n *\n * @see {EventPluginHub}\n */\nvar EventPluginRegistry = {\n\n /**\n * Ordered list of injected plugins.\n */\n plugins: [],\n\n /**\n * Mapping from event name to dispatch config\n */\n eventNameDispatchConfigs: {},\n\n /**\n * Mapping from registration name to plugin module\n */\n registrationNameModules: {},\n\n /**\n * Mapping from registration name to event name\n */\n registrationNameDependencies: {},\n\n /**\n * Mapping from lowercase registration names to the properly cased version,\n * used to warn in the case of missing event handlers. Available\n * only in __DEV__.\n * @type {Object}\n */\n possibleRegistrationNames: process.env.NODE_ENV !== 'production' ? {} : null,\n\n /**\n * Injects an ordering of plugins (by plugin name). This allows the ordering\n * to be decoupled from injection of the actual plugins so that ordering is\n * always deterministic regardless of packaging, on-the-fly injection, etc.\n *\n * @param {array} InjectedEventPluginOrder\n * @internal\n * @see {EventPluginHub.injection.injectEventPluginOrder}\n */\n injectEventPluginOrder: function (InjectedEventPluginOrder) {\n !!EventPluginOrder ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React.') : _prodInvariant('101') : void 0;\n // Clone the ordering so it cannot be dynamically mutated.\n EventPluginOrder = Array.prototype.slice.call(InjectedEventPluginOrder);\n recomputePluginOrdering();\n },\n\n /**\n * Injects plugins to be used by `EventPluginHub`. The plugin names must be\n * in the ordering injected by `injectEventPluginOrder`.\n *\n * Plugins can be injected as part of page initialization or on-the-fly.\n *\n * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n * @internal\n * @see {EventPluginHub.injection.injectEventPluginsByName}\n */\n injectEventPluginsByName: function (injectedNamesToPlugins) {\n var isOrderingDirty = false;\n for (var pluginName in injectedNamesToPlugins) {\n if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {\n continue;\n }\n var PluginModule = injectedNamesToPlugins[pluginName];\n if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== PluginModule) {\n !!namesToPlugins[pluginName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject two different event plugins using the same name, `%s`.', pluginName) : _prodInvariant('102', pluginName) : void 0;\n namesToPlugins[pluginName] = PluginModule;\n isOrderingDirty = true;\n }\n }\n if (isOrderingDirty) {\n recomputePluginOrdering();\n }\n },\n\n /**\n * Looks up the plugin for the supplied event.\n *\n * @param {object} event A synthetic event.\n * @return {?object} The plugin that created the supplied event.\n * @internal\n */\n getPluginModuleForEvent: function (event) {\n var dispatchConfig = event.dispatchConfig;\n if (dispatchConfig.registrationName) {\n return EventPluginRegistry.registrationNameModules[dispatchConfig.registrationName] || null;\n }\n for (var phase in dispatchConfig.phasedRegistrationNames) {\n if (!dispatchConfig.phasedRegistrationNames.hasOwnProperty(phase)) {\n continue;\n }\n var PluginModule = EventPluginRegistry.registrationNameModules[dispatchConfig.phasedRegistrationNames[phase]];\n if (PluginModule) {\n return PluginModule;\n }\n }\n return null;\n },\n\n /**\n * Exposed for unit testing.\n * @private\n */\n _resetEventPlugins: function () {\n EventPluginOrder = null;\n for (var pluginName in namesToPlugins) {\n if (namesToPlugins.hasOwnProperty(pluginName)) {\n delete namesToPlugins[pluginName];\n }\n }\n EventPluginRegistry.plugins.length = 0;\n\n var eventNameDispatchConfigs = EventPluginRegistry.eventNameDispatchConfigs;\n for (var eventName in eventNameDispatchConfigs) {\n if (eventNameDispatchConfigs.hasOwnProperty(eventName)) {\n delete eventNameDispatchConfigs[eventName];\n }\n }\n\n var registrationNameModules = EventPluginRegistry.registrationNameModules;\n for (var registrationName in registrationNameModules) {\n if (registrationNameModules.hasOwnProperty(registrationName)) {\n delete registrationNameModules[registrationName];\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var possibleRegistrationNames = EventPluginRegistry.possibleRegistrationNames;\n for (var lowerCasedName in possibleRegistrationNames) {\n if (possibleRegistrationNames.hasOwnProperty(lowerCasedName)) {\n delete possibleRegistrationNames[lowerCasedName];\n }\n }\n }\n }\n\n};\n\nmodule.exports = EventPluginRegistry;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventPluginRegistry.js\n ** module id = 60\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactBrowserEventEmitter\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar EventConstants = require('./EventConstants');\nvar EventPluginRegistry = require('./EventPluginRegistry');\nvar ReactEventEmitterMixin = require('./ReactEventEmitterMixin');\nvar ViewportMetrics = require('./ViewportMetrics');\n\nvar getVendorPrefixedEventName = require('./getVendorPrefixedEventName');\nvar isEventSupported = require('./isEventSupported');\n\n/**\n * Summary of `ReactBrowserEventEmitter` event handling:\n *\n * - Top-level delegation is used to trap most native browser events. This\n * may only occur in the main thread and is the responsibility of\n * ReactEventListener, which is injected and can therefore support pluggable\n * event sources. This is the only work that occurs in the main thread.\n *\n * - We normalize and de-duplicate events to account for browser quirks. This\n * may be done in the worker thread.\n *\n * - Forward these native events (with the associated top-level type used to\n * trap it) to `EventPluginHub`, which in turn will ask plugins if they want\n * to extract any synthetic events.\n *\n * - The `EventPluginHub` will then process each event by annotating them with\n * \"dispatches\", a sequence of listeners and IDs that care about that event.\n *\n * - The `EventPluginHub` then dispatches the events.\n *\n * Overview of React and the event system:\n *\n * +------------+ .\n * | DOM | .\n * +------------+ .\n * | .\n * v .\n * +------------+ .\n * | ReactEvent | .\n * | Listener | .\n * +------------+ . +-----------+\n * | . +--------+|SimpleEvent|\n * | . | |Plugin |\n * +-----|------+ . v +-----------+\n * | | | . +--------------+ +------------+\n * | +-----------.--->|EventPluginHub| | Event |\n * | | . | | +-----------+ | Propagators|\n * | ReactEvent | . | | |TapEvent | |------------|\n * | Emitter | . | |<---+|Plugin | |other plugin|\n * | | . | | +-----------+ | utilities |\n * | +-----------.--->| | +------------+\n * | | | . +--------------+\n * +-----|------+ . ^ +-----------+\n * | . | |Enter/Leave|\n * + . +-------+|Plugin |\n * +-------------+ . +-----------+\n * | application | .\n * |-------------| .\n * | | .\n * | | .\n * +-------------+ .\n * .\n * React Core . General Purpose Event Plugin System\n */\n\nvar hasEventPageXY;\nvar alreadyListeningTo = {};\nvar isMonitoringScrollValue = false;\nvar reactTopListenersCounter = 0;\n\n// For events like 'submit' which don't consistently bubble (which we trap at a\n// lower node than `document`), binding at `document` would cause duplicate\n// events so we don't include them here\nvar topEventMapping = {\n topAbort: 'abort',\n topAnimationEnd: getVendorPrefixedEventName('animationend') || 'animationend',\n topAnimationIteration: getVendorPrefixedEventName('animationiteration') || 'animationiteration',\n topAnimationStart: getVendorPrefixedEventName('animationstart') || 'animationstart',\n topBlur: 'blur',\n topCanPlay: 'canplay',\n topCanPlayThrough: 'canplaythrough',\n topChange: 'change',\n topClick: 'click',\n topCompositionEnd: 'compositionend',\n topCompositionStart: 'compositionstart',\n topCompositionUpdate: 'compositionupdate',\n topContextMenu: 'contextmenu',\n topCopy: 'copy',\n topCut: 'cut',\n topDoubleClick: 'dblclick',\n topDrag: 'drag',\n topDragEnd: 'dragend',\n topDragEnter: 'dragenter',\n topDragExit: 'dragexit',\n topDragLeave: 'dragleave',\n topDragOver: 'dragover',\n topDragStart: 'dragstart',\n topDrop: 'drop',\n topDurationChange: 'durationchange',\n topEmptied: 'emptied',\n topEncrypted: 'encrypted',\n topEnded: 'ended',\n topError: 'error',\n topFocus: 'focus',\n topInput: 'input',\n topKeyDown: 'keydown',\n topKeyPress: 'keypress',\n topKeyUp: 'keyup',\n topLoadedData: 'loadeddata',\n topLoadedMetadata: 'loadedmetadata',\n topLoadStart: 'loadstart',\n topMouseDown: 'mousedown',\n topMouseMove: 'mousemove',\n topMouseOut: 'mouseout',\n topMouseOver: 'mouseover',\n topMouseUp: 'mouseup',\n topPaste: 'paste',\n topPause: 'pause',\n topPlay: 'play',\n topPlaying: 'playing',\n topProgress: 'progress',\n topRateChange: 'ratechange',\n topScroll: 'scroll',\n topSeeked: 'seeked',\n topSeeking: 'seeking',\n topSelectionChange: 'selectionchange',\n topStalled: 'stalled',\n topSuspend: 'suspend',\n topTextInput: 'textInput',\n topTimeUpdate: 'timeupdate',\n topTouchCancel: 'touchcancel',\n topTouchEnd: 'touchend',\n topTouchMove: 'touchmove',\n topTouchStart: 'touchstart',\n topTransitionEnd: getVendorPrefixedEventName('transitionend') || 'transitionend',\n topVolumeChange: 'volumechange',\n topWaiting: 'waiting',\n topWheel: 'wheel'\n};\n\n/**\n * To ensure no conflicts with other potential React instances on the page\n */\nvar topListenersIDKey = '_reactListenersID' + String(Math.random()).slice(2);\n\nfunction getListeningForDocument(mountAt) {\n // In IE8, `mountAt` is a host object and doesn't have `hasOwnProperty`\n // directly.\n if (!Object.prototype.hasOwnProperty.call(mountAt, topListenersIDKey)) {\n mountAt[topListenersIDKey] = reactTopListenersCounter++;\n alreadyListeningTo[mountAt[topListenersIDKey]] = {};\n }\n return alreadyListeningTo[mountAt[topListenersIDKey]];\n}\n\n/**\n * `ReactBrowserEventEmitter` is used to attach top-level event listeners. For\n * example:\n *\n * EventPluginHub.putListener('myID', 'onClick', myFunction);\n *\n * This would allocate a \"registration\" of `('onClick', myFunction)` on 'myID'.\n *\n * @internal\n */\nvar ReactBrowserEventEmitter = _assign({}, ReactEventEmitterMixin, {\n\n /**\n * Injectable event backend\n */\n ReactEventListener: null,\n\n injection: {\n /**\n * @param {object} ReactEventListener\n */\n injectReactEventListener: function (ReactEventListener) {\n ReactEventListener.setHandleTopLevel(ReactBrowserEventEmitter.handleTopLevel);\n ReactBrowserEventEmitter.ReactEventListener = ReactEventListener;\n }\n },\n\n /**\n * Sets whether or not any created callbacks should be enabled.\n *\n * @param {boolean} enabled True if callbacks should be enabled.\n */\n setEnabled: function (enabled) {\n if (ReactBrowserEventEmitter.ReactEventListener) {\n ReactBrowserEventEmitter.ReactEventListener.setEnabled(enabled);\n }\n },\n\n /**\n * @return {boolean} True if callbacks are enabled.\n */\n isEnabled: function () {\n return !!(ReactBrowserEventEmitter.ReactEventListener && ReactBrowserEventEmitter.ReactEventListener.isEnabled());\n },\n\n /**\n * We listen for bubbled touch events on the document object.\n *\n * Firefox v8.01 (and possibly others) exhibited strange behavior when\n * mounting `onmousemove` events at some node that was not the document\n * element. The symptoms were that if your mouse is not moving over something\n * contained within that mount point (for example on the background) the\n * top-level listeners for `onmousemove` won't be called. However, if you\n * register the `mousemove` on the document object, then it will of course\n * catch all `mousemove`s. This along with iOS quirks, justifies restricting\n * top-level listeners to the document object only, at least for these\n * movement types of events and possibly all events.\n *\n * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\n *\n * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but\n * they bubble to document.\n *\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @param {object} contentDocumentHandle Document which owns the container\n */\n listenTo: function (registrationName, contentDocumentHandle) {\n var mountAt = contentDocumentHandle;\n var isListening = getListeningForDocument(mountAt);\n var dependencies = EventPluginRegistry.registrationNameDependencies[registrationName];\n\n var topLevelTypes = EventConstants.topLevelTypes;\n for (var i = 0; i < dependencies.length; i++) {\n var dependency = dependencies[i];\n if (!(isListening.hasOwnProperty(dependency) && isListening[dependency])) {\n if (dependency === topLevelTypes.topWheel) {\n if (isEventSupported('wheel')) {\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'wheel', mountAt);\n } else if (isEventSupported('mousewheel')) {\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'mousewheel', mountAt);\n } else {\n // Firefox needs to capture a different mouse scroll event.\n // @see http://www.quirksmode.org/dom/events/tests/scroll.html\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'DOMMouseScroll', mountAt);\n }\n } else if (dependency === topLevelTypes.topScroll) {\n\n if (isEventSupported('scroll', true)) {\n ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topScroll, 'scroll', mountAt);\n } else {\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topScroll, 'scroll', ReactBrowserEventEmitter.ReactEventListener.WINDOW_HANDLE);\n }\n } else if (dependency === topLevelTypes.topFocus || dependency === topLevelTypes.topBlur) {\n\n if (isEventSupported('focus', true)) {\n ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topFocus, 'focus', mountAt);\n ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topBlur, 'blur', mountAt);\n } else if (isEventSupported('focusin')) {\n // IE has `focusin` and `focusout` events which bubble.\n // @see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topFocus, 'focusin', mountAt);\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topBlur, 'focusout', mountAt);\n }\n\n // to make sure blur and focus event listeners are only attached once\n isListening[topLevelTypes.topBlur] = true;\n isListening[topLevelTypes.topFocus] = true;\n } else if (topEventMapping.hasOwnProperty(dependency)) {\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(dependency, topEventMapping[dependency], mountAt);\n }\n\n isListening[dependency] = true;\n }\n }\n },\n\n trapBubbledEvent: function (topLevelType, handlerBaseName, handle) {\n return ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelType, handlerBaseName, handle);\n },\n\n trapCapturedEvent: function (topLevelType, handlerBaseName, handle) {\n return ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelType, handlerBaseName, handle);\n },\n\n /**\n * Protect against document.createEvent() returning null\n * Some popup blocker extensions appear to do this:\n * https://github.com/facebook/react/issues/6887\n */\n supportsEventPageXY: function () {\n if (!document.createEvent) {\n return false;\n }\n var ev = document.createEvent('MouseEvent');\n return ev != null && 'pageX' in ev;\n },\n\n /**\n * Listens to window scroll and resize events. We cache scroll values so that\n * application code can access them without triggering reflows.\n *\n * ViewportMetrics is only used by SyntheticMouse/TouchEvent and only when\n * pageX/pageY isn't supported (legacy browsers).\n *\n * NOTE: Scroll events do not bubble.\n *\n * @see http://www.quirksmode.org/dom/events/scroll.html\n */\n ensureScrollValueMonitoring: function () {\n if (hasEventPageXY === undefined) {\n hasEventPageXY = ReactBrowserEventEmitter.supportsEventPageXY();\n }\n if (!hasEventPageXY && !isMonitoringScrollValue) {\n var refresh = ViewportMetrics.refreshScrollValues;\n ReactBrowserEventEmitter.ReactEventListener.monitorScrollValue(refresh);\n isMonitoringScrollValue = true;\n }\n }\n\n});\n\nmodule.exports = ReactBrowserEventEmitter;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactBrowserEventEmitter.js\n ** module id = 61\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPropTypeLocations\n */\n\n'use strict';\n\nvar keyMirror = require('fbjs/lib/keyMirror');\n\nvar ReactPropTypeLocations = keyMirror({\n prop: null,\n context: null,\n childContext: null\n});\n\nmodule.exports = ReactPropTypeLocations;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactPropTypeLocations.js\n ** module id = 62\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticMouseEvent\n */\n\n'use strict';\n\nvar SyntheticUIEvent = require('./SyntheticUIEvent');\nvar ViewportMetrics = require('./ViewportMetrics');\n\nvar getEventModifierState = require('./getEventModifierState');\n\n/**\n * @interface MouseEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar MouseEventInterface = {\n screenX: null,\n screenY: null,\n clientX: null,\n clientY: null,\n ctrlKey: null,\n shiftKey: null,\n altKey: null,\n metaKey: null,\n getModifierState: getEventModifierState,\n button: function (event) {\n // Webkit, Firefox, IE9+\n // which: 1 2 3\n // button: 0 1 2 (standard)\n var button = event.button;\n if ('which' in event) {\n return button;\n }\n // IE<9\n // which: undefined\n // button: 0 0 0\n // button: 1 4 2 (onmouseup)\n return button === 2 ? 2 : button === 4 ? 1 : 0;\n },\n buttons: null,\n relatedTarget: function (event) {\n return event.relatedTarget || (event.fromElement === event.srcElement ? event.toElement : event.fromElement);\n },\n // \"Proprietary\" Interface.\n pageX: function (event) {\n return 'pageX' in event ? event.pageX : event.clientX + ViewportMetrics.currentScrollLeft;\n },\n pageY: function (event) {\n return 'pageY' in event ? event.pageY : event.clientY + ViewportMetrics.currentScrollTop;\n }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface);\n\nmodule.exports = SyntheticMouseEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticMouseEvent.js\n ** module id = 63\n ** module chunks = 0\n **/","/**\n * Copyright 2016-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * Based on the escape-html library, which is used under the MIT License below:\n *\n * Copyright (c) 2012-2013 TJ Holowaychuk\n * Copyright (c) 2015 Andreas Lubbe\n * Copyright (c) 2015 Tiancheng \"Timothy\" Gu\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * 'Software'), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @providesModule escapeTextContentForBrowser\n */\n\n'use strict';\n\n// code copied and modified from escape-html\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n // \"\n escape = '"';\n break;\n case 38:\n // &\n escape = '&';\n break;\n case 39:\n // '\n escape = '''; // modified from escape-html; used to be '''\n break;\n case 60:\n // <\n escape = '<';\n break;\n case 62:\n // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index ? html + str.substring(lastIndex, index) : html;\n}\n// end code copied and modified from escape-html\n\n\n/**\n * Escapes text to prevent scripting attacks.\n *\n * @param {*} text Text value to escape.\n * @return {string} An escaped string.\n */\nfunction escapeTextContentForBrowser(text) {\n if (typeof text === 'boolean' || typeof text === 'number') {\n // this shortcircuit helps perf for types that we know will never have\n // special characters, especially given that this function is used often\n // for numeric dom ids.\n return '' + text;\n }\n return escapeHtml(text);\n}\n\nmodule.exports = escapeTextContentForBrowser;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/escapeTextContentForBrowser.js\n ** module id = 64\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule setInnerHTML\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar DOMNamespaces = require('./DOMNamespaces');\n\nvar WHITESPACE_TEST = /^[ \\r\\n\\t\\f]/;\nvar NONVISIBLE_TEST = /<(!--|link|noscript|meta|script|style)[ \\r\\n\\t\\f\\/>]/;\n\nvar createMicrosoftUnsafeLocalFunction = require('./createMicrosoftUnsafeLocalFunction');\n\n// SVG temp container for IE lacking innerHTML\nvar reusableSVGContainer;\n\n/**\n * Set the innerHTML property of a node, ensuring that whitespace is preserved\n * even in IE8.\n *\n * @param {DOMElement} node\n * @param {string} html\n * @internal\n */\nvar setInnerHTML = createMicrosoftUnsafeLocalFunction(function (node, html) {\n // IE does not have innerHTML for SVG nodes, so instead we inject the\n // new markup in a temp node and then move the child nodes across into\n // the target node\n if (node.namespaceURI === DOMNamespaces.svg && !('innerHTML' in node)) {\n reusableSVGContainer = reusableSVGContainer || document.createElement('div');\n reusableSVGContainer.innerHTML = '' + html + '';\n var svgNode = reusableSVGContainer.firstChild;\n while (svgNode.firstChild) {\n node.appendChild(svgNode.firstChild);\n }\n } else {\n node.innerHTML = html;\n }\n});\n\nif (ExecutionEnvironment.canUseDOM) {\n // IE8: When updating a just created node with innerHTML only leading\n // whitespace is removed. When updating an existing node with innerHTML\n // whitespace in root TextNodes is also collapsed.\n // @see quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html\n\n // Feature detection; only IE8 is known to behave improperly like this.\n var testElement = document.createElement('div');\n testElement.innerHTML = ' ';\n if (testElement.innerHTML === '') {\n setInnerHTML = function (node, html) {\n // Magic theory: IE8 supposedly differentiates between added and updated\n // nodes when processing innerHTML, innerHTML on updated nodes suffers\n // from worse whitespace behavior. Re-adding a node like this triggers\n // the initial and more favorable whitespace behavior.\n // TODO: What to do on a detached node?\n if (node.parentNode) {\n node.parentNode.replaceChild(node, node);\n }\n\n // We also implement a workaround for non-visible tags disappearing into\n // thin air on IE8, this only happens if there is no visible text\n // in-front of the non-visible tags. Piggyback on the whitespace fix\n // and simply check if any non-visible tags appear in the source.\n if (WHITESPACE_TEST.test(html) || html[0] === '<' && NONVISIBLE_TEST.test(html)) {\n // Recover leading whitespace by temporarily prepending any character.\n // \\uFEFF has the potential advantage of being zero-width/invisible.\n // UglifyJS drops U+FEFF chars when parsing, so use String.fromCharCode\n // in hopes that this is preserved even if \"\\uFEFF\" is transformed to\n // the actual Unicode character (by Babel, for example).\n // https://github.com/mishoo/UglifyJS2/blob/v2.4.20/lib/parse.js#L216\n node.innerHTML = String.fromCharCode(0xFEFF) + html;\n\n // deleteData leaves an empty `TextNode` which offsets the index of all\n // children. Definitely want to avoid this.\n var textNode = node.firstChild;\n if (textNode.data.length === 1) {\n node.removeChild(textNode);\n } else {\n textNode.deleteData(0, 1);\n }\n } else {\n node.innerHTML = html;\n }\n };\n }\n testElement = null;\n}\n\nmodule.exports = setInnerHTML;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/setInnerHTML.js\n ** module id = 65\n ** module chunks = 0\n **/","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks static-only\n */\n\n'use strict';\n\nvar invariant = require('./invariant');\n\n/**\n * Constructs an enumeration with keys equal to their value.\n *\n * For example:\n *\n * var COLORS = keyMirror({blue: null, red: null});\n * var myColor = COLORS.blue;\n * var isColorValid = !!COLORS[myColor];\n *\n * The last line could not be performed if the values of the generated enum were\n * not equal to their keys.\n *\n * Input: {key1: val1, key2: val2}\n * Output: {key1: key1, key2: key2}\n *\n * @param {object} obj\n * @return {object}\n */\nvar keyMirror = function keyMirror(obj) {\n var ret = {};\n var key;\n !(obj instanceof Object && !Array.isArray(obj)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'keyMirror(...): Argument must be an object.') : invariant(false) : void 0;\n for (key in obj) {\n if (!obj.hasOwnProperty(key)) {\n continue;\n }\n ret[key] = key;\n }\n return ret;\n};\n\nmodule.exports = keyMirror;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/keyMirror.js\n ** module id = 66\n ** module chunks = 0\n **/","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMzJweCIgaGVpZ2h0PSIzMnB4IiB2aWV3Qm94PSIwIDAgMzIgMzIiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMyIDMyIiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iI0NDQ0NDQyIgc3Ryb2tlLXdpZHRoPSIwLjE0MTciIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgeDE9IjQuMTY3IiB5MT0iNC4xNjciIHgyPSIyNy44MzMiIHkyPSIyNy44MzMiLz4NCjxsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iI0NDQ0NDQyIgc3Ryb2tlLXdpZHRoPSIwLjE0MTciIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgeDE9IjQuMTY3IiB5MT0iMjcuODMzIiB4Mj0iMjcuODMzIiB5Mj0iNC4xNjciLz4NCjwvc3ZnPg0K\"\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/assets/no-image.svg\n ** module id = 67\n ** module chunks = 0\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport GridItem from './GridItem'\r\n\r\nexport default class ArtistGrid extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\trender(){\r\n\t\tif( this.props.artists ){\r\n\t\t\tvar className = \"grid artist-grid\"\r\n\t\t\tif( this.props.className ) className += ' '+this.props.className\r\n\t\t\treturn (\r\n\t\t\t\t
\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.props.artists.map(\r\n\t\t\t\t\t\t\t(artist, index) => {\r\n\t\t\t\t\t\t\t\treturn \r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t}\r\n\t\t\t\t
\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n}\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/ArtistGrid.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\n\r\nexport default class Dater extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\t/**\r\n\t * Format time duration\r\n\t *\r\n\t * @param milliseconds int\r\n\t * @return string (HH:mm:ss)\r\n\t **/\r\n\tdurationTime( milliseconds = false ){\r\n\t\tif( !milliseconds ) return null\r\n\r\n\t\tvar string = '';\r\n\t\tvar total_hours, total_minutes, total_seconds, minutes, seconds;\r\n\r\n\t\t// get total values for each \r\n\t\ttotal_seconds = Math.floor( milliseconds / 1000 )\r\n\t\ttotal_minutes = Math.floor( milliseconds / (1000 * 60) )\r\n\t\ttotal_hours = Math.floor(milliseconds / (1000 * 60 * 60))\r\n\r\n\t\t// get left-over number of seconds\r\n\t\tseconds = total_seconds - ( total_minutes * 60 )\r\n\t\tif( seconds <= 9 ) seconds = '0'+ seconds\r\n\r\n\t\t// get left-over number of minutes\r\n\t\tminutes = total_minutes - ( total_hours * 60 )\r\n\t\tif( minutes <= 9 && total_hours ) minutes = '0'+ minutes\r\n\t\tif( minutes == 0 ) minutes = '0'\r\n\r\n\t\tif( total_hours ) string += total_hours+':'\r\n\t\tif( minutes ) string += minutes+':'\r\n\t\tif( seconds ) string += seconds\r\n\t\t\t\r\n\t\treturn string\r\n\t}\r\n\r\n\t/**\r\n\t * Format time duration as a human-friendly sentence\r\n\t *\r\n\t * @param milliseconds int\r\n\t * @return string (eg 2+ hours)\r\n\t **/\r\n\tdurationSentence( milliseconds = false ){\r\n\t\tif( !milliseconds ) return null\r\n\r\n\t\tvar string = '';\r\n\t\tvar total_hours, total_minutes, total_seconds, minutes, seconds;\r\n\r\n\t\t// get total values for each \r\n\t\ttotal_seconds = Math.floor( milliseconds / 1000 )\r\n\t\ttotal_minutes = Math.floor( milliseconds / (1000 * 60) )\r\n\t\ttotal_hours = Math.floor(milliseconds / (1000 * 60 * 60))\r\n\r\n\t\tif( total_hours > 1 ) return total_hours+'+ hrs'\r\n\t\tif( total_minutes > 1 ) return total_minutes+' mins'\r\n\t\tif( total_seconds ) return total_seconds+' sec'\r\n\t}\r\n\r\n\tcalculate(){\r\n\t\tswitch(this.props.type){\r\n\r\n\t\t\tcase 'total-time':\r\n\t\t\t\tvar duration = 0;\r\n\t\t\t\tvar tracks = this.props.data\r\n\t\t\t\tfor( var i = 0; i < tracks.length; i++ ){\r\n\t\t\t\t\tif( tracks[i].duration_ms ) duration += parseInt(tracks[i].duration_ms);\r\n\t\t\t\t\tif( tracks[i].length ) duration += parseInt(tracks[i].length);\r\n\t\t\t\t}\r\n\t\t\t\treturn this.durationSentence(duration)\r\n\t\t\t\tbreak\r\n\r\n\t\t\tcase 'length':\r\n\t\t\t\treturn this.durationTime(this.props.data)\r\n\t\t\t\tbreak\r\n\r\n\t\t\tcase 'date':\r\n\t\t\t\tvar date = new Date(this.props.data)\r\n\t\t\t\treturn date.getDate()+'/'+date.getMonth()+'/'+date.getFullYear()\r\n\t\t\t\tbreak\r\n\r\n\t\t\tcase 'ago':\r\n\t\t\t\tvar date = new Date(this.props.data)\r\n\t\t\t\tvar diff = new Date() - date\r\n\t\t\t\t// todo: calculate nice diff\r\n\t\t\t\treturn diff\r\n\t\t\t\tbreak\r\n\r\n\t\t\tdefault:\r\n\t\t\t\treturn null\r\n\t\t}\r\n\t}\r\n\r\n\trender(){\r\n\t\treturn { this.calculate() }\r\n\t}\r\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/Dater.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport GridItem from './GridItem'\r\n\r\nexport default class PlaylistGrid extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\trender(){\r\n\t\tif( !this.props.playlists ) return null\r\n\r\n\t\tvar className = \"grid playlist-grid\"\r\n\t\tif( this.props.className ) className += ' '+this.props.className\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.props.playlists.map(\r\n\t\t\t\t\t\t(playlist, index) => {\r\n\t\t\t\t\t\t\treturn \r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t)\r\n\t\t\t\t}\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/PlaylistGrid.js\n **/","'use strict';\n\nexports.__esModule = true;\nexports.addEventListener = addEventListener;\nexports.removeEventListener = removeEventListener;\nexports.getHashPath = getHashPath;\nexports.replaceHashPath = replaceHashPath;\nexports.getWindowPath = getWindowPath;\nexports.go = go;\nexports.getUserConfirmation = getUserConfirmation;\nexports.supportsHistory = supportsHistory;\nexports.supportsGoWithoutReloadUsingHash = supportsGoWithoutReloadUsingHash;\n\nfunction addEventListener(node, event, listener) {\n if (node.addEventListener) {\n node.addEventListener(event, listener, false);\n } else {\n node.attachEvent('on' + event, listener);\n }\n}\n\nfunction removeEventListener(node, event, listener) {\n if (node.removeEventListener) {\n node.removeEventListener(event, listener, false);\n } else {\n node.detachEvent('on' + event, listener);\n }\n}\n\nfunction getHashPath() {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n return window.location.href.split('#')[1] || '';\n}\n\nfunction replaceHashPath(path) {\n window.location.replace(window.location.pathname + window.location.search + '#' + path);\n}\n\nfunction getWindowPath() {\n return window.location.pathname + window.location.search + window.location.hash;\n}\n\nfunction go(n) {\n if (n) window.history.go(n);\n}\n\nfunction getUserConfirmation(message, callback) {\n callback(window.confirm(message));\n}\n\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/rackt/react-router/issues/586\n */\n\nfunction supportsHistory() {\n var ua = navigator.userAgent;\n if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) {\n return false;\n }\n return window.history && 'pushState' in window.history;\n}\n\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\nfunction supportsGoWithoutReloadUsingHash() {\n var ua = navigator.userAgent;\n return ua.indexOf('Firefox') === -1;\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/DOMUtils.js\n ** module id = 71\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction deprecate(fn, message) {\n return function () {\n process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] ' + message) : undefined;\n return fn.apply(this, arguments);\n };\n}\n\nexports['default'] = deprecate;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/deprecate.js\n ** module id = 72\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction runTransitionHook(hook, location, callback) {\n var result = hook(location, callback);\n\n if (hook.length < 2) {\n // Assume the hook runs synchronously and automatically\n // call the callback with the return value.\n callback(result);\n } else {\n process.env.NODE_ENV !== 'production' ? _warning2['default'](result === undefined, 'You should not \"return\" in a transition hook with a callback argument; call the callback instead') : undefined;\n }\n}\n\nexports['default'] = runTransitionHook;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/runTransitionHook.js\n ** module id = 73\n ** module chunks = 0\n **/","\"use strict\";\n\nexports.__esModule = true;\nexports.loopAsync = loopAsync;\nexports.mapAsync = mapAsync;\nfunction loopAsync(turns, work, callback) {\n var currentTurn = 0,\n isDone = false;\n var sync = false,\n hasNext = false,\n doneArgs = void 0;\n\n function done() {\n isDone = true;\n if (sync) {\n // Iterate instead of recursing if possible.\n doneArgs = [].concat(Array.prototype.slice.call(arguments));\n return;\n }\n\n callback.apply(this, arguments);\n }\n\n function next() {\n if (isDone) {\n return;\n }\n\n hasNext = true;\n if (sync) {\n // Iterate instead of recursing if possible.\n return;\n }\n\n sync = true;\n\n while (!isDone && currentTurn < turns && hasNext) {\n hasNext = false;\n work.call(this, currentTurn++, next, done);\n }\n\n sync = false;\n\n if (isDone) {\n // This means the loop finished synchronously.\n callback.apply(this, doneArgs);\n return;\n }\n\n if (currentTurn >= turns && hasNext) {\n isDone = true;\n callback();\n }\n }\n\n next();\n}\n\nfunction mapAsync(array, work, callback) {\n var length = array.length;\n var values = [];\n\n if (length === 0) return callback(null, values);\n\n var isDone = false,\n doneCount = 0;\n\n function done(index, error, value) {\n if (isDone) return;\n\n if (error) {\n isDone = true;\n callback(error);\n } else {\n values[index] = value;\n\n isDone = ++doneCount === length;\n\n if (isDone) callback(null, values);\n }\n }\n\n array.forEach(function (item, index) {\n work(item, index, function (error, value) {\n done(index, error, value);\n });\n });\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-router/lib/AsyncUtils.js\n ** module id = 74\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\nexports.router = exports.routes = exports.route = exports.components = exports.component = exports.location = exports.history = exports.falsy = exports.locationShape = exports.routerShape = undefined;\n\nvar _react = require('react');\n\nvar _deprecateObjectProperties = require('./deprecateObjectProperties');\n\nvar _deprecateObjectProperties2 = _interopRequireDefault(_deprecateObjectProperties);\n\nvar _InternalPropTypes = require('./InternalPropTypes');\n\nvar InternalPropTypes = _interopRequireWildcard(_InternalPropTypes);\n\nvar _routerWarning = require('./routerWarning');\n\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar func = _react.PropTypes.func;\nvar object = _react.PropTypes.object;\nvar shape = _react.PropTypes.shape;\nvar string = _react.PropTypes.string;\nvar routerShape = exports.routerShape = shape({\n push: func.isRequired,\n replace: func.isRequired,\n go: func.isRequired,\n goBack: func.isRequired,\n goForward: func.isRequired,\n setRouteLeaveHook: func.isRequired,\n isActive: func.isRequired\n});\n\nvar locationShape = exports.locationShape = shape({\n pathname: string.isRequired,\n search: string.isRequired,\n state: object,\n action: string.isRequired,\n key: string\n});\n\n// Deprecated stuff below:\n\nvar falsy = exports.falsy = InternalPropTypes.falsy;\nvar history = exports.history = InternalPropTypes.history;\nvar location = exports.location = locationShape;\nvar component = exports.component = InternalPropTypes.component;\nvar components = exports.components = InternalPropTypes.components;\nvar route = exports.route = InternalPropTypes.route;\nvar routes = exports.routes = InternalPropTypes.routes;\nvar router = exports.router = routerShape;\n\nif (process.env.NODE_ENV !== 'production') {\n (function () {\n var deprecatePropType = function deprecatePropType(propType, message) {\n return function () {\n process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, message) : void 0;\n return propType.apply(undefined, arguments);\n };\n };\n\n var deprecateInternalPropType = function deprecateInternalPropType(propType) {\n return deprecatePropType(propType, 'This prop type is not intended for external use, and was previously exported by mistake. These internal prop types are deprecated for external use, and will be removed in a later version.');\n };\n\n var deprecateRenamedPropType = function deprecateRenamedPropType(propType, name) {\n return deprecatePropType(propType, 'The `' + name + '` prop type is now exported as `' + name + 'Shape` to avoid name conflicts. This export is deprecated and will be removed in a later version.');\n };\n\n exports.falsy = falsy = deprecateInternalPropType(falsy);\n exports.history = history = deprecateInternalPropType(history);\n exports.component = component = deprecateInternalPropType(component);\n exports.components = components = deprecateInternalPropType(components);\n exports.route = route = deprecateInternalPropType(route);\n exports.routes = routes = deprecateInternalPropType(routes);\n\n exports.location = location = deprecateRenamedPropType(location, 'location');\n exports.router = router = deprecateRenamedPropType(router, 'router');\n })();\n}\n\nvar defaultExport = {\n falsy: falsy,\n history: history,\n location: location,\n component: component,\n components: components,\n route: route,\n // For some reason, routes was never here.\n router: router\n};\n\nif (process.env.NODE_ENV !== 'production') {\n defaultExport = (0, _deprecateObjectProperties2.default)(defaultExport, 'The default export from `react-router/lib/PropTypes` is deprecated. Please use the named exports instead.');\n}\n\nexports.default = defaultExport;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-router/lib/PropTypes.js\n ** module id = 75\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nexports.default = createTransitionManager;\n\nvar _routerWarning = require('./routerWarning');\n\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\n\nvar _computeChangedRoutes2 = require('./computeChangedRoutes');\n\nvar _computeChangedRoutes3 = _interopRequireDefault(_computeChangedRoutes2);\n\nvar _TransitionUtils = require('./TransitionUtils');\n\nvar _isActive2 = require('./isActive');\n\nvar _isActive3 = _interopRequireDefault(_isActive2);\n\nvar _getComponents = require('./getComponents');\n\nvar _getComponents2 = _interopRequireDefault(_getComponents);\n\nvar _matchRoutes = require('./matchRoutes');\n\nvar _matchRoutes2 = _interopRequireDefault(_matchRoutes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction hasAnyProperties(object) {\n for (var p in object) {\n if (Object.prototype.hasOwnProperty.call(object, p)) return true;\n }return false;\n}\n\nfunction createTransitionManager(history, routes) {\n var state = {};\n\n // Signature should be (location, indexOnly), but needs to support (path,\n // query, indexOnly)\n function isActive(location) {\n var indexOnlyOrDeprecatedQuery = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];\n var deprecatedIndexOnly = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2];\n\n var indexOnly = void 0;\n if (indexOnlyOrDeprecatedQuery && indexOnlyOrDeprecatedQuery !== true || deprecatedIndexOnly !== null) {\n process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, '`isActive(pathname, query, indexOnly) is deprecated; use `isActive(location, indexOnly)` with a location descriptor instead. http://tiny.cc/router-isActivedeprecated') : void 0;\n location = { pathname: location, query: indexOnlyOrDeprecatedQuery };\n indexOnly = deprecatedIndexOnly || false;\n } else {\n location = history.createLocation(location);\n indexOnly = indexOnlyOrDeprecatedQuery;\n }\n\n return (0, _isActive3.default)(location, indexOnly, state.location, state.routes, state.params);\n }\n\n var partialNextState = void 0;\n\n function match(location, callback) {\n if (partialNextState && partialNextState.location === location) {\n // Continue from where we left off.\n finishMatch(partialNextState, callback);\n } else {\n (0, _matchRoutes2.default)(routes, location, function (error, nextState) {\n if (error) {\n callback(error);\n } else if (nextState) {\n finishMatch(_extends({}, nextState, { location: location }), callback);\n } else {\n callback();\n }\n });\n }\n }\n\n function finishMatch(nextState, callback) {\n var _computeChangedRoutes = (0, _computeChangedRoutes3.default)(state, nextState);\n\n var leaveRoutes = _computeChangedRoutes.leaveRoutes;\n var changeRoutes = _computeChangedRoutes.changeRoutes;\n var enterRoutes = _computeChangedRoutes.enterRoutes;\n\n\n (0, _TransitionUtils.runLeaveHooks)(leaveRoutes, state);\n\n // Tear down confirmation hooks for left routes\n leaveRoutes.filter(function (route) {\n return enterRoutes.indexOf(route) === -1;\n }).forEach(removeListenBeforeHooksForRoute);\n\n // change and enter hooks are run in series\n (0, _TransitionUtils.runChangeHooks)(changeRoutes, state, nextState, function (error, redirectInfo) {\n if (error || redirectInfo) return handleErrorOrRedirect(error, redirectInfo);\n\n (0, _TransitionUtils.runEnterHooks)(enterRoutes, nextState, finishEnterHooks);\n });\n\n function finishEnterHooks(error, redirectInfo) {\n if (error || redirectInfo) return handleErrorOrRedirect(error, redirectInfo);\n\n // TODO: Fetch components after state is updated.\n (0, _getComponents2.default)(nextState, function (error, components) {\n if (error) {\n callback(error);\n } else {\n // TODO: Make match a pure function and have some other API\n // for \"match and update state\".\n callback(null, null, state = _extends({}, nextState, { components: components }));\n }\n });\n }\n\n function handleErrorOrRedirect(error, redirectInfo) {\n if (error) callback(error);else callback(null, redirectInfo);\n }\n }\n\n var RouteGuid = 1;\n\n function getRouteID(route) {\n var create = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1];\n\n return route.__id__ || create && (route.__id__ = RouteGuid++);\n }\n\n var RouteHooks = Object.create(null);\n\n function getRouteHooksForRoutes(routes) {\n return routes.reduce(function (hooks, route) {\n hooks.push.apply(hooks, RouteHooks[getRouteID(route)]);\n return hooks;\n }, []);\n }\n\n function transitionHook(location, callback) {\n (0, _matchRoutes2.default)(routes, location, function (error, nextState) {\n if (nextState == null) {\n // TODO: We didn't actually match anything, but hang\n // onto error/nextState so we don't have to matchRoutes\n // again in the listen callback.\n callback();\n return;\n }\n\n // Cache some state here so we don't have to\n // matchRoutes() again in the listen callback.\n partialNextState = _extends({}, nextState, { location: location });\n\n var hooks = getRouteHooksForRoutes((0, _computeChangedRoutes3.default)(state, partialNextState).leaveRoutes);\n\n var result = void 0;\n for (var i = 0, len = hooks.length; result == null && i < len; ++i) {\n // Passing the location arg here indicates to\n // the user that this is a transition hook.\n result = hooks[i](location);\n }\n\n callback(result);\n });\n }\n\n /* istanbul ignore next: untestable with Karma */\n function beforeUnloadHook() {\n // Synchronously check to see if any route hooks want\n // to prevent the current window/tab from closing.\n if (state.routes) {\n var hooks = getRouteHooksForRoutes(state.routes);\n\n var message = void 0;\n for (var i = 0, len = hooks.length; typeof message !== 'string' && i < len; ++i) {\n // Passing no args indicates to the user that this is a\n // beforeunload hook. We don't know the next location.\n message = hooks[i]();\n }\n\n return message;\n }\n }\n\n var unlistenBefore = void 0,\n unlistenBeforeUnload = void 0;\n\n function removeListenBeforeHooksForRoute(route) {\n var routeID = getRouteID(route, false);\n if (!routeID) {\n return;\n }\n\n delete RouteHooks[routeID];\n\n if (!hasAnyProperties(RouteHooks)) {\n // teardown transition & beforeunload hooks\n if (unlistenBefore) {\n unlistenBefore();\n unlistenBefore = null;\n }\n\n if (unlistenBeforeUnload) {\n unlistenBeforeUnload();\n unlistenBeforeUnload = null;\n }\n }\n }\n\n /**\n * Registers the given hook function to run before leaving the given route.\n *\n * During a normal transition, the hook function receives the next location\n * as its only argument and can return either a prompt message (string) to show the user,\n * to make sure they want to leave the page; or `false`, to prevent the transition.\n * Any other return value will have no effect.\n *\n * During the beforeunload event (in browsers) the hook receives no arguments.\n * In this case it must return a prompt message to prevent the transition.\n *\n * Returns a function that may be used to unbind the listener.\n */\n function listenBeforeLeavingRoute(route, hook) {\n // TODO: Warn if they register for a route that isn't currently\n // active. They're probably doing something wrong, like re-creating\n // route objects on every location change.\n var routeID = getRouteID(route);\n var hooks = RouteHooks[routeID];\n\n if (!hooks) {\n var thereWereNoRouteHooks = !hasAnyProperties(RouteHooks);\n\n RouteHooks[routeID] = [hook];\n\n if (thereWereNoRouteHooks) {\n // setup transition & beforeunload hooks\n unlistenBefore = history.listenBefore(transitionHook);\n\n if (history.listenBeforeUnload) unlistenBeforeUnload = history.listenBeforeUnload(beforeUnloadHook);\n }\n } else {\n if (hooks.indexOf(hook) === -1) {\n process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, 'adding multiple leave hooks for the same route is deprecated; manage multiple confirmations in your own code instead') : void 0;\n\n hooks.push(hook);\n }\n }\n\n return function () {\n var hooks = RouteHooks[routeID];\n\n if (hooks) {\n var newHooks = hooks.filter(function (item) {\n return item !== hook;\n });\n\n if (newHooks.length === 0) {\n removeListenBeforeHooksForRoute(route);\n } else {\n RouteHooks[routeID] = newHooks;\n }\n }\n };\n }\n\n /**\n * This is the API for stateful environments. As the location\n * changes, we update state and call the listener. We can also\n * gracefully handle errors and redirects.\n */\n function listen(listener) {\n // TODO: Only use a single history listener. Otherwise we'll\n // end up with multiple concurrent calls to match.\n return history.listen(function (location) {\n if (state.location === location) {\n listener(null, state);\n } else {\n match(location, function (error, redirectLocation, nextState) {\n if (error) {\n listener(error);\n } else if (redirectLocation) {\n history.replace(redirectLocation);\n } else if (nextState) {\n listener(null, nextState);\n } else {\n process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, 'Location \"%s\" did not match any routes', location.pathname + location.search + location.hash) : void 0;\n }\n });\n }\n });\n }\n\n return {\n isActive: isActive,\n match: match,\n listenBeforeLeavingRoute: listenBeforeLeavingRoute,\n listen: listen\n };\n}\n\n//export default useRoutes\n\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-router/lib/createTransitionManager.js\n ** module id = 76\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMChildrenOperations\n */\n\n'use strict';\n\nvar DOMLazyTree = require('./DOMLazyTree');\nvar Danger = require('./Danger');\nvar ReactMultiChildUpdateTypes = require('./ReactMultiChildUpdateTypes');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactInstrumentation = require('./ReactInstrumentation');\n\nvar createMicrosoftUnsafeLocalFunction = require('./createMicrosoftUnsafeLocalFunction');\nvar setInnerHTML = require('./setInnerHTML');\nvar setTextContent = require('./setTextContent');\n\nfunction getNodeAfter(parentNode, node) {\n // Special case for text components, which return [open, close] comments\n // from getHostNode.\n if (Array.isArray(node)) {\n node = node[1];\n }\n return node ? node.nextSibling : parentNode.firstChild;\n}\n\n/**\n * Inserts `childNode` as a child of `parentNode` at the `index`.\n *\n * @param {DOMElement} parentNode Parent node in which to insert.\n * @param {DOMElement} childNode Child node to insert.\n * @param {number} index Index at which to insert the child.\n * @internal\n */\nvar insertChildAt = createMicrosoftUnsafeLocalFunction(function (parentNode, childNode, referenceNode) {\n // We rely exclusively on `insertBefore(node, null)` instead of also using\n // `appendChild(node)`. (Using `undefined` is not allowed by all browsers so\n // we are careful to use `null`.)\n parentNode.insertBefore(childNode, referenceNode);\n});\n\nfunction insertLazyTreeChildAt(parentNode, childTree, referenceNode) {\n DOMLazyTree.insertTreeBefore(parentNode, childTree, referenceNode);\n}\n\nfunction moveChild(parentNode, childNode, referenceNode) {\n if (Array.isArray(childNode)) {\n moveDelimitedText(parentNode, childNode[0], childNode[1], referenceNode);\n } else {\n insertChildAt(parentNode, childNode, referenceNode);\n }\n}\n\nfunction removeChild(parentNode, childNode) {\n if (Array.isArray(childNode)) {\n var closingComment = childNode[1];\n childNode = childNode[0];\n removeDelimitedText(parentNode, childNode, closingComment);\n parentNode.removeChild(closingComment);\n }\n parentNode.removeChild(childNode);\n}\n\nfunction moveDelimitedText(parentNode, openingComment, closingComment, referenceNode) {\n var node = openingComment;\n while (true) {\n var nextNode = node.nextSibling;\n insertChildAt(parentNode, node, referenceNode);\n if (node === closingComment) {\n break;\n }\n node = nextNode;\n }\n}\n\nfunction removeDelimitedText(parentNode, startNode, closingComment) {\n while (true) {\n var node = startNode.nextSibling;\n if (node === closingComment) {\n // The closing comment is removed by ReactMultiChild.\n break;\n } else {\n parentNode.removeChild(node);\n }\n }\n}\n\nfunction replaceDelimitedText(openingComment, closingComment, stringText) {\n var parentNode = openingComment.parentNode;\n var nodeAfterComment = openingComment.nextSibling;\n if (nodeAfterComment === closingComment) {\n // There are no text nodes between the opening and closing comments; insert\n // a new one if stringText isn't empty.\n if (stringText) {\n insertChildAt(parentNode, document.createTextNode(stringText), nodeAfterComment);\n }\n } else {\n if (stringText) {\n // Set the text content of the first node after the opening comment, and\n // remove all following nodes up until the closing comment.\n setTextContent(nodeAfterComment, stringText);\n removeDelimitedText(parentNode, nodeAfterComment, closingComment);\n } else {\n removeDelimitedText(parentNode, openingComment, closingComment);\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(openingComment)._debugID, 'replace text', stringText);\n }\n}\n\nvar dangerouslyReplaceNodeWithMarkup = Danger.dangerouslyReplaceNodeWithMarkup;\nif (process.env.NODE_ENV !== 'production') {\n dangerouslyReplaceNodeWithMarkup = function (oldChild, markup, prevInstance) {\n Danger.dangerouslyReplaceNodeWithMarkup(oldChild, markup);\n if (prevInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onHostOperation(prevInstance._debugID, 'replace with', markup.toString());\n } else {\n var nextInstance = ReactDOMComponentTree.getInstanceFromNode(markup.node);\n if (nextInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onHostOperation(nextInstance._debugID, 'mount', markup.toString());\n }\n }\n };\n}\n\n/**\n * Operations for updating with DOM children.\n */\nvar DOMChildrenOperations = {\n\n dangerouslyReplaceNodeWithMarkup: dangerouslyReplaceNodeWithMarkup,\n\n replaceDelimitedText: replaceDelimitedText,\n\n /**\n * Updates a component's children by processing a series of updates. The\n * update configurations are each expected to have a `parentNode` property.\n *\n * @param {array} updates List of update configurations.\n * @internal\n */\n processUpdates: function (parentNode, updates) {\n if (process.env.NODE_ENV !== 'production') {\n var parentNodeDebugID = ReactDOMComponentTree.getInstanceFromNode(parentNode)._debugID;\n }\n\n for (var k = 0; k < updates.length; k++) {\n var update = updates[k];\n switch (update.type) {\n case ReactMultiChildUpdateTypes.INSERT_MARKUP:\n insertLazyTreeChildAt(parentNode, update.content, getNodeAfter(parentNode, update.afterNode));\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'insert child', { toIndex: update.toIndex, content: update.content.toString() });\n }\n break;\n case ReactMultiChildUpdateTypes.MOVE_EXISTING:\n moveChild(parentNode, update.fromNode, getNodeAfter(parentNode, update.afterNode));\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'move child', { fromIndex: update.fromIndex, toIndex: update.toIndex });\n }\n break;\n case ReactMultiChildUpdateTypes.SET_MARKUP:\n setInnerHTML(parentNode, update.content);\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'replace children', update.content.toString());\n }\n break;\n case ReactMultiChildUpdateTypes.TEXT_CONTENT:\n setTextContent(parentNode, update.content);\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'replace text', update.content.toString());\n }\n break;\n case ReactMultiChildUpdateTypes.REMOVE_NODE:\n removeChild(parentNode, update.fromNode);\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'remove child', { fromIndex: update.fromIndex });\n }\n break;\n }\n }\n }\n\n};\n\nmodule.exports = DOMChildrenOperations;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DOMChildrenOperations.js\n ** module id = 77\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMNamespaces\n */\n\n'use strict';\n\nvar DOMNamespaces = {\n html: 'http://www.w3.org/1999/xhtml',\n mathml: 'http://www.w3.org/1998/Math/MathML',\n svg: 'http://www.w3.org/2000/svg'\n};\n\nmodule.exports = DOMNamespaces;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DOMNamespaces.js\n ** module id = 78\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPluginUtils\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar EventConstants = require('./EventConstants');\nvar ReactErrorUtils = require('./ReactErrorUtils');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Injected dependencies:\n */\n\n/**\n * - `ComponentTree`: [required] Module that can convert between React instances\n * and actual node references.\n */\nvar ComponentTree;\nvar TreeTraversal;\nvar injection = {\n injectComponentTree: function (Injected) {\n ComponentTree = Injected;\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(Injected && Injected.getNodeFromInstance && Injected.getInstanceFromNode, 'EventPluginUtils.injection.injectComponentTree(...): Injected ' + 'module is missing getNodeFromInstance or getInstanceFromNode.') : void 0;\n }\n },\n injectTreeTraversal: function (Injected) {\n TreeTraversal = Injected;\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(Injected && Injected.isAncestor && Injected.getLowestCommonAncestor, 'EventPluginUtils.injection.injectTreeTraversal(...): Injected ' + 'module is missing isAncestor or getLowestCommonAncestor.') : void 0;\n }\n }\n};\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nfunction isEndish(topLevelType) {\n return topLevelType === topLevelTypes.topMouseUp || topLevelType === topLevelTypes.topTouchEnd || topLevelType === topLevelTypes.topTouchCancel;\n}\n\nfunction isMoveish(topLevelType) {\n return topLevelType === topLevelTypes.topMouseMove || topLevelType === topLevelTypes.topTouchMove;\n}\nfunction isStartish(topLevelType) {\n return topLevelType === topLevelTypes.topMouseDown || topLevelType === topLevelTypes.topTouchStart;\n}\n\nvar validateEventDispatches;\nif (process.env.NODE_ENV !== 'production') {\n validateEventDispatches = function (event) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchInstances = event._dispatchInstances;\n\n var listenersIsArr = Array.isArray(dispatchListeners);\n var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0;\n\n var instancesIsArr = Array.isArray(dispatchInstances);\n var instancesLen = instancesIsArr ? dispatchInstances.length : dispatchInstances ? 1 : 0;\n\n process.env.NODE_ENV !== 'production' ? warning(instancesIsArr === listenersIsArr && instancesLen === listenersLen, 'EventPluginUtils: Invalid `event`.') : void 0;\n };\n}\n\n/**\n * Dispatch the event to the listener.\n * @param {SyntheticEvent} event SyntheticEvent to handle\n * @param {boolean} simulated If the event is simulated (changes exn behavior)\n * @param {function} listener Application-level callback\n * @param {*} inst Internal component instance\n */\nfunction executeDispatch(event, simulated, listener, inst) {\n var type = event.type || 'unknown-event';\n event.currentTarget = EventPluginUtils.getNodeFromInstance(inst);\n if (simulated) {\n ReactErrorUtils.invokeGuardedCallbackWithCatch(type, listener, event);\n } else {\n ReactErrorUtils.invokeGuardedCallback(type, listener, event);\n }\n event.currentTarget = null;\n}\n\n/**\n * Standard/simple iteration through an event's collected dispatches.\n */\nfunction executeDispatchesInOrder(event, simulated) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchInstances = event._dispatchInstances;\n if (process.env.NODE_ENV !== 'production') {\n validateEventDispatches(event);\n }\n if (Array.isArray(dispatchListeners)) {\n for (var i = 0; i < dispatchListeners.length; i++) {\n if (event.isPropagationStopped()) {\n break;\n }\n // Listeners and Instances are two parallel arrays that are always in sync.\n executeDispatch(event, simulated, dispatchListeners[i], dispatchInstances[i]);\n }\n } else if (dispatchListeners) {\n executeDispatch(event, simulated, dispatchListeners, dispatchInstances);\n }\n event._dispatchListeners = null;\n event._dispatchInstances = null;\n}\n\n/**\n * Standard/simple iteration through an event's collected dispatches, but stops\n * at the first dispatch execution returning true, and returns that id.\n *\n * @return {?string} id of the first dispatch execution who's listener returns\n * true, or null if no listener returned true.\n */\nfunction executeDispatchesInOrderStopAtTrueImpl(event) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchInstances = event._dispatchInstances;\n if (process.env.NODE_ENV !== 'production') {\n validateEventDispatches(event);\n }\n if (Array.isArray(dispatchListeners)) {\n for (var i = 0; i < dispatchListeners.length; i++) {\n if (event.isPropagationStopped()) {\n break;\n }\n // Listeners and Instances are two parallel arrays that are always in sync.\n if (dispatchListeners[i](event, dispatchInstances[i])) {\n return dispatchInstances[i];\n }\n }\n } else if (dispatchListeners) {\n if (dispatchListeners(event, dispatchInstances)) {\n return dispatchInstances;\n }\n }\n return null;\n}\n\n/**\n * @see executeDispatchesInOrderStopAtTrueImpl\n */\nfunction executeDispatchesInOrderStopAtTrue(event) {\n var ret = executeDispatchesInOrderStopAtTrueImpl(event);\n event._dispatchInstances = null;\n event._dispatchListeners = null;\n return ret;\n}\n\n/**\n * Execution of a \"direct\" dispatch - there must be at most one dispatch\n * accumulated on the event or it is considered an error. It doesn't really make\n * sense for an event with multiple dispatches (bubbled) to keep track of the\n * return values at each dispatch execution, but it does tend to make sense when\n * dealing with \"direct\" dispatches.\n *\n * @return {*} The return value of executing the single dispatch.\n */\nfunction executeDirectDispatch(event) {\n if (process.env.NODE_ENV !== 'production') {\n validateEventDispatches(event);\n }\n var dispatchListener = event._dispatchListeners;\n var dispatchInstance = event._dispatchInstances;\n !!Array.isArray(dispatchListener) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'executeDirectDispatch(...): Invalid `event`.') : _prodInvariant('103') : void 0;\n event.currentTarget = dispatchListener ? EventPluginUtils.getNodeFromInstance(dispatchInstance) : null;\n var res = dispatchListener ? dispatchListener(event) : null;\n event.currentTarget = null;\n event._dispatchListeners = null;\n event._dispatchInstances = null;\n return res;\n}\n\n/**\n * @param {SyntheticEvent} event\n * @return {boolean} True iff number of dispatches accumulated is greater than 0.\n */\nfunction hasDispatches(event) {\n return !!event._dispatchListeners;\n}\n\n/**\n * General utilities that are useful in creating custom Event Plugins.\n */\nvar EventPluginUtils = {\n isEndish: isEndish,\n isMoveish: isMoveish,\n isStartish: isStartish,\n\n executeDirectDispatch: executeDirectDispatch,\n executeDispatchesInOrder: executeDispatchesInOrder,\n executeDispatchesInOrderStopAtTrue: executeDispatchesInOrderStopAtTrue,\n hasDispatches: hasDispatches,\n\n getInstanceFromNode: function (node) {\n return ComponentTree.getInstanceFromNode(node);\n },\n getNodeFromInstance: function (node) {\n return ComponentTree.getNodeFromInstance(node);\n },\n isAncestor: function (a, b) {\n return TreeTraversal.isAncestor(a, b);\n },\n getLowestCommonAncestor: function (a, b) {\n return TreeTraversal.getLowestCommonAncestor(a, b);\n },\n getParentInstance: function (inst) {\n return TreeTraversal.getParentInstance(inst);\n },\n traverseTwoPhase: function (target, fn, arg) {\n return TreeTraversal.traverseTwoPhase(target, fn, arg);\n },\n traverseEnterLeave: function (from, to, fn, argFrom, argTo) {\n return TreeTraversal.traverseEnterLeave(from, to, fn, argFrom, argTo);\n },\n\n injection: injection\n};\n\nmodule.exports = EventPluginUtils;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventPluginUtils.js\n ** module id = 79\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule KeyEscapeUtils\n * \n */\n\n'use strict';\n\n/**\n * Escape and wrap key so it is safe to use as a reactid\n *\n * @param {string} key to be escaped.\n * @return {string} the escaped key.\n */\n\nfunction escape(key) {\n var escapeRegex = /[=:]/g;\n var escaperLookup = {\n '=': '=0',\n ':': '=2'\n };\n var escapedString = ('' + key).replace(escapeRegex, function (match) {\n return escaperLookup[match];\n });\n\n return '$' + escapedString;\n}\n\n/**\n * Unescape and unwrap key for human-readable display\n *\n * @param {string} key to unescape.\n * @return {string} the unescaped key.\n */\nfunction unescape(key) {\n var unescapeRegex = /(=0|=2)/g;\n var unescaperLookup = {\n '=0': '=',\n '=2': ':'\n };\n var keySubstring = key[0] === '.' && key[1] === '$' ? key.substring(2) : key.substring(1);\n\n return ('' + keySubstring).replace(unescapeRegex, function (match) {\n return unescaperLookup[match];\n });\n}\n\nvar KeyEscapeUtils = {\n escape: escape,\n unescape: unescape\n};\n\nmodule.exports = KeyEscapeUtils;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/KeyEscapeUtils.js\n ** module id = 80\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule LinkedValueUtils\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactPropTypes = require('./ReactPropTypes');\nvar ReactPropTypeLocations = require('./ReactPropTypeLocations');\nvar ReactPropTypesSecret = require('./ReactPropTypesSecret');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nvar hasReadOnlyValue = {\n 'button': true,\n 'checkbox': true,\n 'image': true,\n 'hidden': true,\n 'radio': true,\n 'reset': true,\n 'submit': true\n};\n\nfunction _assertSingleLink(inputProps) {\n !(inputProps.checkedLink == null || inputProps.valueLink == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a valueLink. If you want to use checkedLink, you probably don\\'t want to use valueLink and vice versa.') : _prodInvariant('87') : void 0;\n}\nfunction _assertValueLink(inputProps) {\n _assertSingleLink(inputProps);\n !(inputProps.value == null && inputProps.onChange == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a valueLink and a value or onChange event. If you want to use value or onChange, you probably don\\'t want to use valueLink.') : _prodInvariant('88') : void 0;\n}\n\nfunction _assertCheckedLink(inputProps) {\n _assertSingleLink(inputProps);\n !(inputProps.checked == null && inputProps.onChange == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a checked property or onChange event. If you want to use checked or onChange, you probably don\\'t want to use checkedLink') : _prodInvariant('89') : void 0;\n}\n\nvar propTypes = {\n value: function (props, propName, componentName) {\n if (!props[propName] || hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled) {\n return null;\n }\n return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n },\n checked: function (props, propName, componentName) {\n if (!props[propName] || props.onChange || props.readOnly || props.disabled) {\n return null;\n }\n return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n },\n onChange: ReactPropTypes.func\n};\n\nvar loggedTypeFailures = {};\nfunction getDeclarationErrorAddendum(owner) {\n if (owner) {\n var name = owner.getName();\n if (name) {\n return ' Check the render method of `' + name + '`.';\n }\n }\n return '';\n}\n\n/**\n * Provide a linked `value` attribute for controlled forms. You should not use\n * this outside of the ReactDOM controlled form components.\n */\nvar LinkedValueUtils = {\n checkPropTypes: function (tagName, props, owner) {\n for (var propName in propTypes) {\n if (propTypes.hasOwnProperty(propName)) {\n var error = propTypes[propName](props, propName, tagName, ReactPropTypeLocations.prop, null, ReactPropTypesSecret);\n }\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var addendum = getDeclarationErrorAddendum(owner);\n process.env.NODE_ENV !== 'production' ? warning(false, 'Failed form propType: %s%s', error.message, addendum) : void 0;\n }\n }\n },\n\n /**\n * @param {object} inputProps Props for form component\n * @return {*} current value of the input either from value prop or link.\n */\n getValue: function (inputProps) {\n if (inputProps.valueLink) {\n _assertValueLink(inputProps);\n return inputProps.valueLink.value;\n }\n return inputProps.value;\n },\n\n /**\n * @param {object} inputProps Props for form component\n * @return {*} current checked status of the input either from checked prop\n * or link.\n */\n getChecked: function (inputProps) {\n if (inputProps.checkedLink) {\n _assertCheckedLink(inputProps);\n return inputProps.checkedLink.value;\n }\n return inputProps.checked;\n },\n\n /**\n * @param {object} inputProps Props for form component\n * @param {SyntheticEvent} event change event to handle\n */\n executeOnChange: function (inputProps, event) {\n if (inputProps.valueLink) {\n _assertValueLink(inputProps);\n return inputProps.valueLink.requestChange(event.target.value);\n } else if (inputProps.checkedLink) {\n _assertCheckedLink(inputProps);\n return inputProps.checkedLink.requestChange(event.target.checked);\n } else if (inputProps.onChange) {\n return inputProps.onChange.call(undefined, event);\n }\n }\n};\n\nmodule.exports = LinkedValueUtils;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/LinkedValueUtils.js\n ** module id = 81\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactComponent\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactNoopUpdateQueue = require('./ReactNoopUpdateQueue');\n\nvar canDefineProperty = require('./canDefineProperty');\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Base class helpers for the updating state of a component.\n */\nfunction ReactComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n // We initialize the default updater but the real one gets injected by the\n // renderer.\n this.updater = updater || ReactNoopUpdateQueue;\n}\n\nReactComponent.prototype.isReactComponent = {};\n\n/**\n * Sets a subset of the state. Always use this to mutate\n * state. You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * There is no guarantee that calls to `setState` will run synchronously,\n * as they may eventually be batched together. You can provide an optional\n * callback that will be executed when the call to setState is actually\n * completed.\n *\n * When a function is provided to setState, it will be called at some point in\n * the future (not synchronously). It will be called with the up to date\n * component arguments (state, props, context). These values can be different\n * from this.* because your function may be called after receiveProps but before\n * shouldComponentUpdate, and this new state, props, and context will not yet be\n * assigned to this.\n *\n * @param {object|function} partialState Next partial state or function to\n * produce next partial state to be merged with current state.\n * @param {?function} callback Called after state is updated.\n * @final\n * @protected\n */\nReactComponent.prototype.setState = function (partialState, callback) {\n !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'setState(...): takes an object of state variables to update or a function which returns an object of state variables.') : _prodInvariant('85') : void 0;\n this.updater.enqueueSetState(this, partialState);\n if (callback) {\n this.updater.enqueueCallback(this, callback, 'setState');\n }\n};\n\n/**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {?function} callback Called after update is complete.\n * @final\n * @protected\n */\nReactComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this);\n if (callback) {\n this.updater.enqueueCallback(this, callback, 'forceUpdate');\n }\n};\n\n/**\n * Deprecated APIs. These APIs used to exist on classic React classes but since\n * we would like to deprecate them, we're not going to move them over to this\n * modern base class. Instead, we define a getter that warns if it's accessed.\n */\nif (process.env.NODE_ENV !== 'production') {\n var deprecatedAPIs = {\n isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\n replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']\n };\n var defineDeprecationWarning = function (methodName, info) {\n if (canDefineProperty) {\n Object.defineProperty(ReactComponent.prototype, methodName, {\n get: function () {\n process.env.NODE_ENV !== 'production' ? warning(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]) : void 0;\n return undefined;\n }\n });\n }\n };\n for (var fnName in deprecatedAPIs) {\n if (deprecatedAPIs.hasOwnProperty(fnName)) {\n defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n }\n }\n}\n\nmodule.exports = ReactComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactComponent.js\n ** module id = 82\n ** module chunks = 0\n **/","/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactComponentEnvironment\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\nvar injected = false;\n\nvar ReactComponentEnvironment = {\n\n /**\n * Optionally injectable hook for swapping out mount images in the middle of\n * the tree.\n */\n replaceNodeWithMarkup: null,\n\n /**\n * Optionally injectable hook for processing a queue of child updates. Will\n * later move into MultiChildComponents.\n */\n processChildrenUpdates: null,\n\n injection: {\n injectEnvironment: function (environment) {\n !!injected ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactCompositeComponent: injectEnvironment() can only be called once.') : _prodInvariant('104') : void 0;\n ReactComponentEnvironment.replaceNodeWithMarkup = environment.replaceNodeWithMarkup;\n ReactComponentEnvironment.processChildrenUpdates = environment.processChildrenUpdates;\n injected = true;\n }\n }\n\n};\n\nmodule.exports = ReactComponentEnvironment;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactComponentEnvironment.js\n ** module id = 83\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactErrorUtils\n */\n\n'use strict';\n\nvar caughtError = null;\n\n/**\n * Call a function while guarding against errors that happens within it.\n *\n * @param {?String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} a First argument\n * @param {*} b Second argument\n */\nfunction invokeGuardedCallback(name, func, a, b) {\n try {\n return func(a, b);\n } catch (x) {\n if (caughtError === null) {\n caughtError = x;\n }\n return undefined;\n }\n}\n\nvar ReactErrorUtils = {\n invokeGuardedCallback: invokeGuardedCallback,\n\n /**\n * Invoked by ReactTestUtils.Simulate so that any errors thrown by the event\n * handler are sure to be rethrown by rethrowCaughtError.\n */\n invokeGuardedCallbackWithCatch: invokeGuardedCallback,\n\n /**\n * During execution of guarded functions we will capture the first error which\n * we will rethrow to be handled by the top level error handler.\n */\n rethrowCaughtError: function () {\n if (caughtError) {\n var error = caughtError;\n caughtError = null;\n throw error;\n }\n }\n};\n\nif (process.env.NODE_ENV !== 'production') {\n /**\n * To help development we can get better devtools integration by simulating a\n * real browser event.\n */\n if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {\n var fakeNode = document.createElement('react');\n ReactErrorUtils.invokeGuardedCallback = function (name, func, a, b) {\n var boundFunc = func.bind(null, a, b);\n var evtType = 'react-' + name;\n fakeNode.addEventListener(evtType, boundFunc, false);\n var evt = document.createEvent('Event');\n evt.initEvent(evtType, false, false);\n fakeNode.dispatchEvent(evt);\n fakeNode.removeEventListener(evtType, boundFunc, false);\n };\n }\n}\n\nmodule.exports = ReactErrorUtils;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactErrorUtils.js\n ** module id = 84\n ** module chunks = 0\n **/","/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactNoopUpdateQueue\n */\n\n'use strict';\n\nvar warning = require('fbjs/lib/warning');\n\nfunction warnNoop(publicInstance, callerName) {\n if (process.env.NODE_ENV !== 'production') {\n var constructor = publicInstance.constructor;\n process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, constructor && (constructor.displayName || constructor.name) || 'ReactClass') : void 0;\n }\n}\n\n/**\n * This is the abstract API for an update queue.\n */\nvar ReactNoopUpdateQueue = {\n\n /**\n * Checks whether or not this composite component is mounted.\n * @param {ReactClass} publicInstance The instance we want to test.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function (publicInstance) {\n return false;\n },\n\n /**\n * Enqueue a callback that will be executed after all the pending updates\n * have processed.\n *\n * @param {ReactClass} publicInstance The instance to use as `this` context.\n * @param {?function} callback Called after state is updated.\n * @internal\n */\n enqueueCallback: function (publicInstance, callback) {},\n\n /**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @internal\n */\n enqueueForceUpdate: function (publicInstance) {\n warnNoop(publicInstance, 'forceUpdate');\n },\n\n /**\n * Replaces all of the state. Always use this or `setState` to mutate state.\n * You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} completeState Next state.\n * @internal\n */\n enqueueReplaceState: function (publicInstance, completeState) {\n warnNoop(publicInstance, 'replaceState');\n },\n\n /**\n * Sets a subset of the state. This only exists because _pendingState is\n * internal. This provides a merging strategy that is not available to deep\n * properties which is confusing. TODO: Expose pendingState or don't use it\n * during the merge.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} partialState Next partial state to be merged with state.\n * @internal\n */\n enqueueSetState: function (publicInstance, partialState) {\n warnNoop(publicInstance, 'setState');\n }\n};\n\nmodule.exports = ReactNoopUpdateQueue;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactNoopUpdateQueue.js\n ** module id = 85\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPropTypeLocationNames\n */\n\n'use strict';\n\nvar ReactPropTypeLocationNames = {};\n\nif (process.env.NODE_ENV !== 'production') {\n ReactPropTypeLocationNames = {\n prop: 'prop',\n context: 'context',\n childContext: 'child context'\n };\n}\n\nmodule.exports = ReactPropTypeLocationNames;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactPropTypeLocationNames.js\n ** module id = 86\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPropTypesSecret\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactPropTypesSecret.js\n ** module id = 87\n ** module chunks = 0\n **/","/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactUpdateQueue\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactInstanceMap = require('./ReactInstanceMap');\nvar ReactInstrumentation = require('./ReactInstrumentation');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nfunction enqueueUpdate(internalInstance) {\n ReactUpdates.enqueueUpdate(internalInstance);\n}\n\nfunction formatUnexpectedArgument(arg) {\n var type = typeof arg;\n if (type !== 'object') {\n return type;\n }\n var displayName = arg.constructor && arg.constructor.name || type;\n var keys = Object.keys(arg);\n if (keys.length > 0 && keys.length < 20) {\n return displayName + ' (keys: ' + keys.join(', ') + ')';\n }\n return displayName;\n}\n\nfunction getInternalInstanceReadyForUpdate(publicInstance, callerName) {\n var internalInstance = ReactInstanceMap.get(publicInstance);\n if (!internalInstance) {\n if (process.env.NODE_ENV !== 'production') {\n var ctor = publicInstance.constructor;\n // Only warn when we have a callerName. Otherwise we should be silent.\n // We're probably calling from enqueueCallback. We don't want to warn\n // there because we already warned for the corresponding lifecycle method.\n process.env.NODE_ENV !== 'production' ? warning(!callerName, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, ctor && (ctor.displayName || ctor.name) || 'ReactClass') : void 0;\n }\n return null;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, '%s(...): Cannot update during an existing state transition (such as ' + 'within `render` or another component\\'s constructor). Render methods ' + 'should be a pure function of props and state; constructor ' + 'side-effects are an anti-pattern, but can be moved to ' + '`componentWillMount`.', callerName) : void 0;\n }\n\n return internalInstance;\n}\n\n/**\n * ReactUpdateQueue allows for state updates to be scheduled into a later\n * reconciliation step.\n */\nvar ReactUpdateQueue = {\n\n /**\n * Checks whether or not this composite component is mounted.\n * @param {ReactClass} publicInstance The instance we want to test.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function (publicInstance) {\n if (process.env.NODE_ENV !== 'production') {\n var owner = ReactCurrentOwner.current;\n if (owner !== null) {\n process.env.NODE_ENV !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : void 0;\n owner._warnedAboutRefsInRender = true;\n }\n }\n var internalInstance = ReactInstanceMap.get(publicInstance);\n if (internalInstance) {\n // During componentWillMount and render this will still be null but after\n // that will always render to something. At least for now. So we can use\n // this hack.\n return !!internalInstance._renderedComponent;\n } else {\n return false;\n }\n },\n\n /**\n * Enqueue a callback that will be executed after all the pending updates\n * have processed.\n *\n * @param {ReactClass} publicInstance The instance to use as `this` context.\n * @param {?function} callback Called after state is updated.\n * @param {string} callerName Name of the calling function in the public API.\n * @internal\n */\n enqueueCallback: function (publicInstance, callback, callerName) {\n ReactUpdateQueue.validateCallback(callback, callerName);\n var internalInstance = getInternalInstanceReadyForUpdate(publicInstance);\n\n // Previously we would throw an error if we didn't have an internal\n // instance. Since we want to make it a no-op instead, we mirror the same\n // behavior we have in other enqueue* methods.\n // We also need to ignore callbacks in componentWillMount. See\n // enqueueUpdates.\n if (!internalInstance) {\n return null;\n }\n\n if (internalInstance._pendingCallbacks) {\n internalInstance._pendingCallbacks.push(callback);\n } else {\n internalInstance._pendingCallbacks = [callback];\n }\n // TODO: The callback here is ignored when setState is called from\n // componentWillMount. Either fix it or disallow doing so completely in\n // favor of getInitialState. Alternatively, we can disallow\n // componentWillMount during server-side rendering.\n enqueueUpdate(internalInstance);\n },\n\n enqueueCallbackInternal: function (internalInstance, callback) {\n if (internalInstance._pendingCallbacks) {\n internalInstance._pendingCallbacks.push(callback);\n } else {\n internalInstance._pendingCallbacks = [callback];\n }\n enqueueUpdate(internalInstance);\n },\n\n /**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @internal\n */\n enqueueForceUpdate: function (publicInstance) {\n var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'forceUpdate');\n\n if (!internalInstance) {\n return;\n }\n\n internalInstance._pendingForceUpdate = true;\n\n enqueueUpdate(internalInstance);\n },\n\n /**\n * Replaces all of the state. Always use this or `setState` to mutate state.\n * You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} completeState Next state.\n * @internal\n */\n enqueueReplaceState: function (publicInstance, completeState) {\n var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'replaceState');\n\n if (!internalInstance) {\n return;\n }\n\n internalInstance._pendingStateQueue = [completeState];\n internalInstance._pendingReplaceState = true;\n\n enqueueUpdate(internalInstance);\n },\n\n /**\n * Sets a subset of the state. This only exists because _pendingState is\n * internal. This provides a merging strategy that is not available to deep\n * properties which is confusing. TODO: Expose pendingState or don't use it\n * during the merge.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} partialState Next partial state to be merged with state.\n * @internal\n */\n enqueueSetState: function (publicInstance, partialState) {\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onSetState();\n process.env.NODE_ENV !== 'production' ? warning(partialState != null, 'setState(...): You passed an undefined or null state object; ' + 'instead, use forceUpdate().') : void 0;\n }\n\n var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'setState');\n\n if (!internalInstance) {\n return;\n }\n\n var queue = internalInstance._pendingStateQueue || (internalInstance._pendingStateQueue = []);\n queue.push(partialState);\n\n enqueueUpdate(internalInstance);\n },\n\n enqueueElementInternal: function (internalInstance, nextElement, nextContext) {\n internalInstance._pendingElement = nextElement;\n // TODO: introduce _pendingContext instead of setting it directly.\n internalInstance._context = nextContext;\n enqueueUpdate(internalInstance);\n },\n\n validateCallback: function (callback, callerName) {\n !(!callback || typeof callback === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s(...): Expected the last optional `callback` argument to be a function. Instead received: %s.', callerName, formatUnexpectedArgument(callback)) : _prodInvariant('122', callerName, formatUnexpectedArgument(callback)) : void 0;\n }\n\n};\n\nmodule.exports = ReactUpdateQueue;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactUpdateQueue.js\n ** module id = 88\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule canDefineProperty\n */\n\n'use strict';\n\nvar canDefineProperty = false;\nif (process.env.NODE_ENV !== 'production') {\n try {\n Object.defineProperty({}, 'x', { get: function () {} });\n canDefineProperty = true;\n } catch (x) {\n // IE will fail on defineProperty\n }\n}\n\nmodule.exports = canDefineProperty;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/canDefineProperty.js\n ** module id = 89\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule createMicrosoftUnsafeLocalFunction\n */\n\n/* globals MSApp */\n\n'use strict';\n\n/**\n * Create a function which has 'unsafe' privileges (required by windows8 apps)\n */\n\nvar createMicrosoftUnsafeLocalFunction = function (func) {\n if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {\n return function (arg0, arg1, arg2, arg3) {\n MSApp.execUnsafeLocalFunction(function () {\n return func(arg0, arg1, arg2, arg3);\n });\n };\n } else {\n return func;\n }\n};\n\nmodule.exports = createMicrosoftUnsafeLocalFunction;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/createMicrosoftUnsafeLocalFunction.js\n ** module id = 90\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventCharCode\n */\n\n'use strict';\n\n/**\n * `charCode` represents the actual \"character code\" and is safe to use with\n * `String.fromCharCode`. As such, only keys that correspond to printable\n * characters produce a valid `charCode`, the only exception to this is Enter.\n * The Tab-key is considered non-printable and does not have a `charCode`,\n * presumably because it does not produce a tab-character in browsers.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {number} Normalized `charCode` property.\n */\n\nfunction getEventCharCode(nativeEvent) {\n var charCode;\n var keyCode = nativeEvent.keyCode;\n\n if ('charCode' in nativeEvent) {\n charCode = nativeEvent.charCode;\n\n // FF does not set `charCode` for the Enter-key, check against `keyCode`.\n if (charCode === 0 && keyCode === 13) {\n charCode = 13;\n }\n } else {\n // IE8 does not implement `charCode`, but `keyCode` has the correct value.\n charCode = keyCode;\n }\n\n // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.\n // Must not discard the (non-)printable Enter-key.\n if (charCode >= 32 || charCode === 13) {\n return charCode;\n }\n\n return 0;\n}\n\nmodule.exports = getEventCharCode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getEventCharCode.js\n ** module id = 91\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventModifierState\n */\n\n'use strict';\n\n/**\n * Translation from modifier key to the associated property in the event.\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers\n */\n\nvar modifierKeyToProp = {\n 'Alt': 'altKey',\n 'Control': 'ctrlKey',\n 'Meta': 'metaKey',\n 'Shift': 'shiftKey'\n};\n\n// IE8 does not implement getModifierState so we simply map it to the only\n// modifier keys exposed by the event itself, does not support Lock-keys.\n// Currently, all major browsers except Chrome seems to support Lock-keys.\nfunction modifierStateGetter(keyArg) {\n var syntheticEvent = this;\n var nativeEvent = syntheticEvent.nativeEvent;\n if (nativeEvent.getModifierState) {\n return nativeEvent.getModifierState(keyArg);\n }\n var keyProp = modifierKeyToProp[keyArg];\n return keyProp ? !!nativeEvent[keyProp] : false;\n}\n\nfunction getEventModifierState(nativeEvent) {\n return modifierStateGetter;\n}\n\nmodule.exports = getEventModifierState;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getEventModifierState.js\n ** module id = 92\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventTarget\n */\n\n'use strict';\n\n/**\n * Gets the target node from a native browser event by accounting for\n * inconsistencies in browser DOM APIs.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {DOMEventTarget} Target node.\n */\n\nfunction getEventTarget(nativeEvent) {\n var target = nativeEvent.target || nativeEvent.srcElement || window;\n\n // Normalize SVG element events #4963\n if (target.correspondingUseElement) {\n target = target.correspondingUseElement;\n }\n\n // Safari may fire events on text nodes (Node.TEXT_NODE is 3).\n // @see http://www.quirksmode.org/js/events_properties.html\n return target.nodeType === 3 ? target.parentNode : target;\n}\n\nmodule.exports = getEventTarget;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getEventTarget.js\n ** module id = 93\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getIteratorFn\n * \n */\n\n'use strict';\n\n/* global Symbol */\n\nvar ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n/**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n * var iteratorFn = getIteratorFn(myIterable);\n * if (iteratorFn) {\n * var iterator = iteratorFn.call(myIterable);\n * ...\n * }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\nfunction getIteratorFn(maybeIterable) {\n var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n if (typeof iteratorFn === 'function') {\n return iteratorFn;\n }\n}\n\nmodule.exports = getIteratorFn;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getIteratorFn.js\n ** module id = 94\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isEventSupported\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar useHasFeature;\nif (ExecutionEnvironment.canUseDOM) {\n useHasFeature = document.implementation && document.implementation.hasFeature &&\n // always returns true in newer browsers as per the standard.\n // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n document.implementation.hasFeature('', '') !== true;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @param {?boolean} capture Check if the capture phase is supported.\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\nfunction isEventSupported(eventNameSuffix, capture) {\n if (!ExecutionEnvironment.canUseDOM || capture && !('addEventListener' in document)) {\n return false;\n }\n\n var eventName = 'on' + eventNameSuffix;\n var isSupported = eventName in document;\n\n if (!isSupported) {\n var element = document.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n\n if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {\n // This is the only way to test support for the `wheel` event in IE9+.\n isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n }\n\n return isSupported;\n}\n\nmodule.exports = isEventSupported;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/isEventSupported.js\n ** module id = 95\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule shouldUpdateReactComponent\n */\n\n'use strict';\n\n/**\n * Given a `prevElement` and `nextElement`, determines if the existing\n * instance should be updated as opposed to being destroyed or replaced by a new\n * instance. Both arguments are elements. This ensures that this logic can\n * operate on stateless trees without any backing instance.\n *\n * @param {?object} prevElement\n * @param {?object} nextElement\n * @return {boolean} True if the existing instance should be updated.\n * @protected\n */\n\nfunction shouldUpdateReactComponent(prevElement, nextElement) {\n var prevEmpty = prevElement === null || prevElement === false;\n var nextEmpty = nextElement === null || nextElement === false;\n if (prevEmpty || nextEmpty) {\n return prevEmpty === nextEmpty;\n }\n\n var prevType = typeof prevElement;\n var nextType = typeof nextElement;\n if (prevType === 'string' || prevType === 'number') {\n return nextType === 'string' || nextType === 'number';\n } else {\n return nextType === 'object' && prevElement.type === nextElement.type && prevElement.key === nextElement.key;\n }\n}\n\nmodule.exports = shouldUpdateReactComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/shouldUpdateReactComponent.js\n ** module id = 96\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule traverseAllChildren\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactElement = require('./ReactElement');\n\nvar getIteratorFn = require('./getIteratorFn');\nvar invariant = require('fbjs/lib/invariant');\nvar KeyEscapeUtils = require('./KeyEscapeUtils');\nvar warning = require('fbjs/lib/warning');\n\nvar SEPARATOR = '.';\nvar SUBSEPARATOR = ':';\n\n/**\n * TODO: Test that a single child and an array with one item have the same key\n * pattern.\n */\n\nvar didWarnAboutMaps = false;\n\n/**\n * Generate a key string that identifies a component within a set.\n *\n * @param {*} component A component that could contain a manual key.\n * @param {number} index Index that is used if a manual key is not provided.\n * @return {string}\n */\nfunction getComponentKey(component, index) {\n // Do some typechecking here since we call this blindly. We want to ensure\n // that we don't block potential future ES APIs.\n if (component && typeof component === 'object' && component.key != null) {\n // Explicit key\n return KeyEscapeUtils.escape(component.key);\n }\n // Implicit key determined by the index in the set\n return index.toString(36);\n}\n\n/**\n * @param {?*} children Children tree container.\n * @param {!string} nameSoFar Name of the key path so far.\n * @param {!function} callback Callback to invoke with each child found.\n * @param {?*} traverseContext Used to pass information throughout the traversal\n * process.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {\n var type = typeof children;\n\n if (type === 'undefined' || type === 'boolean') {\n // All of the above are perceived as null.\n children = null;\n }\n\n if (children === null || type === 'string' || type === 'number' || ReactElement.isValidElement(children)) {\n callback(traverseContext, children,\n // If it's the only child, treat the name as if it was wrapped in an array\n // so that it's consistent if the number of children grows.\n nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);\n return 1;\n }\n\n var child;\n var nextName;\n var subtreeCount = 0; // Count of children found in the current subtree.\n var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\n\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n nextName = nextNamePrefix + getComponentKey(child, i);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n } else {\n var iteratorFn = getIteratorFn(children);\n if (iteratorFn) {\n var iterator = iteratorFn.call(children);\n var step;\n if (iteratorFn !== children.entries) {\n var ii = 0;\n while (!(step = iterator.next()).done) {\n child = step.value;\n nextName = nextNamePrefix + getComponentKey(child, ii++);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n } else {\n if (process.env.NODE_ENV !== 'production') {\n var mapsAsChildrenAddendum = '';\n if (ReactCurrentOwner.current) {\n var mapsAsChildrenOwnerName = ReactCurrentOwner.current.getName();\n if (mapsAsChildrenOwnerName) {\n mapsAsChildrenAddendum = ' Check the render method of `' + mapsAsChildrenOwnerName + '`.';\n }\n }\n process.env.NODE_ENV !== 'production' ? warning(didWarnAboutMaps, 'Using Maps as children is not yet fully supported. It is an ' + 'experimental feature that might be removed. Convert it to a ' + 'sequence / iterable of keyed ReactElements instead.%s', mapsAsChildrenAddendum) : void 0;\n didWarnAboutMaps = true;\n }\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n if (entry) {\n child = entry[1];\n nextName = nextNamePrefix + KeyEscapeUtils.escape(entry[0]) + SUBSEPARATOR + getComponentKey(child, 0);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n }\n }\n } else if (type === 'object') {\n var addendum = '';\n if (process.env.NODE_ENV !== 'production') {\n addendum = ' If you meant to render a collection of children, use an array ' + 'instead or wrap the object using createFragment(object) from the ' + 'React add-ons.';\n if (children._isReactElement) {\n addendum = ' It looks like you\\'re using an element created by a different ' + 'version of React. Make sure to use only one copy of React.';\n }\n if (ReactCurrentOwner.current) {\n var name = ReactCurrentOwner.current.getName();\n if (name) {\n addendum += ' Check the render method of `' + name + '`.';\n }\n }\n }\n var childrenString = String(children);\n !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : _prodInvariant('31', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : void 0;\n }\n }\n\n return subtreeCount;\n}\n\n/**\n * Traverses children that are typically specified as `props.children`, but\n * might also be specified through attributes:\n *\n * - `traverseAllChildren(this.props.children, ...)`\n * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\n *\n * The `traverseContext` is an optional argument that is passed through the\n * entire traversal. It can be used to store accumulations or anything else that\n * the callback might find relevant.\n *\n * @param {?*} children Children tree object.\n * @param {!function} callback To invoke upon traversing each child.\n * @param {?*} traverseContext Context for traversal.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildren(children, callback, traverseContext) {\n if (children == null) {\n return 0;\n }\n\n return traverseAllChildrenImpl(children, '', callback, traverseContext);\n}\n\nmodule.exports = traverseAllChildren;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/traverseAllChildren.js\n ** module id = 97\n ** module chunks = 0\n **/","/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule validateDOMNesting\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar warning = require('fbjs/lib/warning');\n\nvar validateDOMNesting = emptyFunction;\n\nif (process.env.NODE_ENV !== 'production') {\n // This validation code was written based on the HTML5 parsing spec:\n // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n //\n // Note: this does not catch all invalid nesting, nor does it try to (as it's\n // not clear what practical benefit doing so provides); instead, we warn only\n // for cases where the parser will give a parse tree differing from what React\n // intended. For example,
is invalid but we don't warn\n // because it still parses correctly; we do warn for other cases like nested\n //

tags where the beginning of the second element implicitly closes the\n // first, causing a confusing mess.\n\n // https://html.spec.whatwg.org/multipage/syntax.html#special\n var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp'];\n\n // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template',\n\n // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point\n // TODO: Distinguish by namespace here -- for , including it here\n // errs on the side of fewer warnings\n 'foreignObject', 'desc', 'title'];\n\n // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope\n var buttonScopeTags = inScopeTags.concat(['button']);\n\n // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags\n var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'];\n\n var emptyAncestorInfo = {\n current: null,\n\n formTag: null,\n aTagInScope: null,\n buttonTagInScope: null,\n nobrTagInScope: null,\n pTagInButtonScope: null,\n\n listItemTagAutoclosing: null,\n dlItemTagAutoclosing: null\n };\n\n var updatedAncestorInfo = function (oldInfo, tag, instance) {\n var ancestorInfo = _assign({}, oldInfo || emptyAncestorInfo);\n var info = { tag: tag, instance: instance };\n\n if (inScopeTags.indexOf(tag) !== -1) {\n ancestorInfo.aTagInScope = null;\n ancestorInfo.buttonTagInScope = null;\n ancestorInfo.nobrTagInScope = null;\n }\n if (buttonScopeTags.indexOf(tag) !== -1) {\n ancestorInfo.pTagInButtonScope = null;\n }\n\n // See rules for 'li', 'dd', 'dt' start tags in\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') {\n ancestorInfo.listItemTagAutoclosing = null;\n ancestorInfo.dlItemTagAutoclosing = null;\n }\n\n ancestorInfo.current = info;\n\n if (tag === 'form') {\n ancestorInfo.formTag = info;\n }\n if (tag === 'a') {\n ancestorInfo.aTagInScope = info;\n }\n if (tag === 'button') {\n ancestorInfo.buttonTagInScope = info;\n }\n if (tag === 'nobr') {\n ancestorInfo.nobrTagInScope = info;\n }\n if (tag === 'p') {\n ancestorInfo.pTagInButtonScope = info;\n }\n if (tag === 'li') {\n ancestorInfo.listItemTagAutoclosing = info;\n }\n if (tag === 'dd' || tag === 'dt') {\n ancestorInfo.dlItemTagAutoclosing = info;\n }\n\n return ancestorInfo;\n };\n\n /**\n * Returns whether\n */\n var isTagValidWithParent = function (tag, parentTag) {\n // First, let's check if we're in an unusual parsing mode...\n switch (parentTag) {\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect\n case 'select':\n return tag === 'option' || tag === 'optgroup' || tag === '#text';\n case 'optgroup':\n return tag === 'option' || tag === '#text';\n // Strictly speaking, seeing an <option> doesn't mean we're in a <select>\n // but\n case 'option':\n return tag === '#text';\n\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption\n // No special behavior since these rules fall back to \"in body\" mode for\n // all except special table nodes which cause bad parsing behavior anyway.\n\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr\n case 'tr':\n return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template';\n\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody\n case 'tbody':\n case 'thead':\n case 'tfoot':\n return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template';\n\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup\n case 'colgroup':\n return tag === 'col' || tag === 'template';\n\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable\n case 'table':\n return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template';\n\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead\n case 'head':\n return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template';\n\n // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element\n case 'html':\n return tag === 'head' || tag === 'body';\n case '#document':\n return tag === 'html';\n }\n\n // Probably in the \"in body\" parsing mode, so we outlaw only tag combos\n // where the parsing rules cause implicit opens or closes to be added.\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n switch (tag) {\n case 'h1':\n case 'h2':\n case 'h3':\n case 'h4':\n case 'h5':\n case 'h6':\n return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6';\n\n case 'rp':\n case 'rt':\n return impliedEndTags.indexOf(parentTag) === -1;\n\n case 'body':\n case 'caption':\n case 'col':\n case 'colgroup':\n case 'frame':\n case 'head':\n case 'html':\n case 'tbody':\n case 'td':\n case 'tfoot':\n case 'th':\n case 'thead':\n case 'tr':\n // These tags are only valid with a few parents that have special child\n // parsing rules -- if we're down here, then none of those matched and\n // so we allow it only if we don't know what the parent is, as all other\n // cases are invalid.\n return parentTag == null;\n }\n\n return true;\n };\n\n /**\n * Returns whether\n */\n var findInvalidAncestorForTag = function (tag, ancestorInfo) {\n switch (tag) {\n case 'address':\n case 'article':\n case 'aside':\n case 'blockquote':\n case 'center':\n case 'details':\n case 'dialog':\n case 'dir':\n case 'div':\n case 'dl':\n case 'fieldset':\n case 'figcaption':\n case 'figure':\n case 'footer':\n case 'header':\n case 'hgroup':\n case 'main':\n case 'menu':\n case 'nav':\n case 'ol':\n case 'p':\n case 'section':\n case 'summary':\n case 'ul':\n\n case 'pre':\n case 'listing':\n\n case 'table':\n\n case 'hr':\n\n case 'xmp':\n\n case 'h1':\n case 'h2':\n case 'h3':\n case 'h4':\n case 'h5':\n case 'h6':\n return ancestorInfo.pTagInButtonScope;\n\n case 'form':\n return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;\n\n case 'li':\n return ancestorInfo.listItemTagAutoclosing;\n\n case 'dd':\n case 'dt':\n return ancestorInfo.dlItemTagAutoclosing;\n\n case 'button':\n return ancestorInfo.buttonTagInScope;\n\n case 'a':\n // Spec says something about storing a list of markers, but it sounds\n // equivalent to this check.\n return ancestorInfo.aTagInScope;\n\n case 'nobr':\n return ancestorInfo.nobrTagInScope;\n }\n\n return null;\n };\n\n /**\n * Given a ReactCompositeComponent instance, return a list of its recursive\n * owners, starting at the root and ending with the instance itself.\n */\n var findOwnerStack = function (instance) {\n if (!instance) {\n return [];\n }\n\n var stack = [];\n do {\n stack.push(instance);\n } while (instance = instance._currentElement._owner);\n stack.reverse();\n return stack;\n };\n\n var didWarn = {};\n\n validateDOMNesting = function (childTag, childText, childInstance, ancestorInfo) {\n ancestorInfo = ancestorInfo || emptyAncestorInfo;\n var parentInfo = ancestorInfo.current;\n var parentTag = parentInfo && parentInfo.tag;\n\n if (childText != null) {\n process.env.NODE_ENV !== 'production' ? warning(childTag == null, 'validateDOMNesting: when childText is passed, childTag should be null') : void 0;\n childTag = '#text';\n }\n\n var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo;\n var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo);\n var problematic = invalidParent || invalidAncestor;\n\n if (problematic) {\n var ancestorTag = problematic.tag;\n var ancestorInstance = problematic.instance;\n\n var childOwner = childInstance && childInstance._currentElement._owner;\n var ancestorOwner = ancestorInstance && ancestorInstance._currentElement._owner;\n\n var childOwners = findOwnerStack(childOwner);\n var ancestorOwners = findOwnerStack(ancestorOwner);\n\n var minStackLen = Math.min(childOwners.length, ancestorOwners.length);\n var i;\n\n var deepestCommon = -1;\n for (i = 0; i < minStackLen; i++) {\n if (childOwners[i] === ancestorOwners[i]) {\n deepestCommon = i;\n } else {\n break;\n }\n }\n\n var UNKNOWN = '(unknown)';\n var childOwnerNames = childOwners.slice(deepestCommon + 1).map(function (inst) {\n return inst.getName() || UNKNOWN;\n });\n var ancestorOwnerNames = ancestorOwners.slice(deepestCommon + 1).map(function (inst) {\n return inst.getName() || UNKNOWN;\n });\n var ownerInfo = [].concat(\n // If the parent and child instances have a common owner ancestor, start\n // with that -- otherwise we just start with the parent's owners.\n deepestCommon !== -1 ? childOwners[deepestCommon].getName() || UNKNOWN : [], ancestorOwnerNames, ancestorTag,\n // If we're warning about an invalid (non-parent) ancestry, add '...'\n invalidAncestor ? ['...'] : [], childOwnerNames, childTag).join(' > ');\n\n var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag + '|' + ownerInfo;\n if (didWarn[warnKey]) {\n return;\n }\n didWarn[warnKey] = true;\n\n var tagDisplayName = childTag;\n var whitespaceInfo = '';\n if (childTag === '#text') {\n if (/\\S/.test(childText)) {\n tagDisplayName = 'Text nodes';\n } else {\n tagDisplayName = 'Whitespace text nodes';\n whitespaceInfo = ' Make sure you don\\'t have any extra whitespace between tags on ' + 'each line of your source code.';\n }\n } else {\n tagDisplayName = '<' + childTag + '>';\n }\n\n if (invalidParent) {\n var info = '';\n if (ancestorTag === 'table' && childTag === 'tr') {\n info += ' Add a <tbody> to your code to match the DOM tree generated by ' + 'the browser.';\n }\n process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): %s cannot appear as a child of <%s>.%s ' + 'See %s.%s', tagDisplayName, ancestorTag, whitespaceInfo, ownerInfo, info) : void 0;\n } else {\n process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): %s cannot appear as a descendant of ' + '<%s>. See %s.', tagDisplayName, ancestorTag, ownerInfo) : void 0;\n }\n }\n };\n\n validateDOMNesting.updatedAncestorInfo = updatedAncestorInfo;\n\n // For testing\n validateDOMNesting.isTagValidInContext = function (tag, ancestorInfo) {\n ancestorInfo = ancestorInfo || emptyAncestorInfo;\n var parentInfo = ancestorInfo.current;\n var parentTag = parentInfo && parentInfo.tag;\n return isTagValidWithParent(tag, parentTag) && !findInvalidAncestorForTag(tag, ancestorInfo);\n };\n}\n\nmodule.exports = validateDOMNesting;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/validateDOMNesting.js\n ** module id = 98\n ** module chunks = 0\n **/","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n * \n */\n\n/*eslint-disable no-self-compare */\n\n'use strict';\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n // Added the nonzero y check to make Flow happy, but it is redundant\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n}\n\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */\nfunction shallowEqual(objA, objB) {\n if (is(objA, objB)) {\n return true;\n }\n\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n // Test for A's keys different from B.\n for (var i = 0; i < keysA.length; i++) {\n if (!hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n\n return true;\n}\n\nmodule.exports = shallowEqual;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/shallowEqual.js\n ** module id = 99\n ** module chunks = 0\n **/","/** @license MIT License (c) copyright 2010-2014 original author or authors */\n/** @author Brian Cavalier */\n/** @author John Hann */\n\n/*global process,document,setTimeout,clearTimeout,MutationObserver,WebKitMutationObserver*/\n(function(define) { 'use strict';\ndefine(function(require) {\n\t/*jshint maxcomplexity:6*/\n\n\t// Sniff \"best\" async scheduling option\n\t// Prefer process.nextTick or MutationObserver, then check for\n\t// setTimeout, and finally vertx, since its the only env that doesn't\n\t// have setTimeout\n\n\tvar MutationObs;\n\tvar capturedSetTimeout = typeof setTimeout !== 'undefined' && setTimeout;\n\n\t// Default env\n\tvar setTimer = function(f, ms) { return setTimeout(f, ms); };\n\tvar clearTimer = function(t) { return clearTimeout(t); };\n\tvar asap = function (f) { return capturedSetTimeout(f, 0); };\n\n\t// Detect specific env\n\tif (isNode()) { // Node\n\t\tasap = function (f) { return process.nextTick(f); };\n\n\t} else if (MutationObs = hasMutationObserver()) { // Modern browser\n\t\tasap = initMutationObserver(MutationObs);\n\n\t} else if (!capturedSetTimeout) { // vert.x\n\t\tvar vertxRequire = require;\n\t\tvar vertx = vertxRequire('vertx');\n\t\tsetTimer = function (f, ms) { return vertx.setTimer(ms, f); };\n\t\tclearTimer = vertx.cancelTimer;\n\t\tasap = vertx.runOnLoop || vertx.runOnContext;\n\t}\n\n\treturn {\n\t\tsetTimer: setTimer,\n\t\tclearTimer: clearTimer,\n\t\tasap: asap\n\t};\n\n\tfunction isNode () {\n\t\treturn typeof process !== 'undefined' &&\n\t\t\tObject.prototype.toString.call(process) === '[object process]';\n\t}\n\n\tfunction hasMutationObserver () {\n\t\treturn (typeof MutationObserver === 'function' && MutationObserver) ||\n\t\t\t(typeof WebKitMutationObserver === 'function' && WebKitMutationObserver);\n\t}\n\n\tfunction initMutationObserver(MutationObserver) {\n\t\tvar scheduled;\n\t\tvar node = document.createTextNode('');\n\t\tvar o = new MutationObserver(run);\n\t\to.observe(node, { characterData: true });\n\n\t\tfunction run() {\n\t\t\tvar f = scheduled;\n\t\t\tscheduled = void 0;\n\t\t\tf();\n\t\t}\n\n\t\tvar i = 0;\n\t\treturn function (f) {\n\t\t\tscheduled = f;\n\t\t\tnode.data = (i ^= 1);\n\t\t};\n\t}\n});\n}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); }));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/when/lib/env.js\n ** module id = 100\n ** module chunks = 0\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport FontAwesome from 'react-fontawesome'\r\nimport { Link } from 'react-router'\r\n\r\nexport default class AlbumLink extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\trender(){\r\n\t\tif( !this.props.album ) return <span>-</span>\r\n\t\tif( !this.props.album.uri ) return <span>{ this.props.album.name }</span>\r\n\r\n\t\tvar link = '/album/' + this.props.album.uri;\r\n\t\treturn (\r\n\t\t\t<Link to={link} className=\"album-link\">{ this.props.album.name }</Link>\r\n\t\t);\r\n\t}\r\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/AlbumLink.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { Link } from 'react-router'\r\n\r\nexport default class Icon extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\trender(){\r\n\t\tvar className = 'icon';\r\n\t\tif( this.props.className ) className += ' '+this.props.className;\r\n\t\tvar src = require('../../assets/icons/'+this.props.name+'.svg');\r\n\t\treturn <img className={className} src={src} />;\r\n\t}\r\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/Icon.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport * as helpers from '../helpers'\r\n\r\nexport default class Parallax extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tscrollTop: 0,\r\n\t\t\twindowWidth: 0,\r\n\t\t\twindowHeight: 0,\r\n\t\t\tcanvas: {\r\n\t\t\t\twidth: 0,\r\n\t\t\t\theight: 0\r\n\t\t\t},\r\n\t\t\timage: {},\r\n\t\t\tloaded: false,\r\n\t\t\turl: false\r\n\t\t}\r\n\r\n\t\t// we need to manually bind this as eventListener doesn't work with anonymous functions\r\n\t\tthis.handleResize = this.handleResize.bind(this);\r\n\t\tthis.handleScroll = this.handleScroll.bind(this);\r\n\t}\r\n\r\n\tcomponentDidMount(){\r\n\t\tvar url = helpers.sizedImages( this.props.images ).huge;\r\n\t\tthis.loadImage( url )\r\n\t\t\t.then(\r\n\t\t\t\tresponse => {\r\n\t\t\t\t\tthis.setState({ url: url, image: response, loaded: true })\r\n\t\t\t\t\tthis.updateCanvas( response )\r\n\t\t\t\t}\r\n\t\t\t)\r\n\r\n window.addEventListener(\"resize\", this.handleResize);\r\n window.addEventListener(\"scroll\", this.handleScroll);\r\n\t}\r\n\r\n componentWillUnmount(){\r\n window.removeEventListener(\"resize\", this.handleResize);\r\n window.removeEventListener(\"scroll\", this.handleScroll);\r\n }\r\n\r\n handleResize(e){\r\n \tthis.updateCanvas( this.state.image );\r\n }\r\n\r\n handleScroll(e){\r\n \t// this DOES work, but is in no way high-performing and only on Firefox\r\n\t\tthis.setState(\r\n\t\t\t{ scrollTop: e.pageY }, \r\n\t\t\tthis.updateCanvas( this.state.image ) \r\n\t\t)\r\n }\r\n\r\n\tloadImage( url ){\t\t\r\n\t\treturn new Promise( (resolve, reject) => {\r\n\r\n\t\t\tvar imageObject = new Image();\r\n\t\t\timageObject.src = url;\r\n\r\n\t\t\timageObject.onload = function(){\r\n\t\t\t\tvar image = {\r\n\t\t\t\t\twidth: imageObject.naturalWidth,\r\n\t\t\t\t\theight: imageObject.naturalHeight,\r\n\t\t\t\t\toriginal_width: imageObject.naturalWidth,\r\n\t\t\t\t\toriginal_height: imageObject.naturalHeight,\r\n\t\t\t\t\tobject: imageObject\r\n\t\t\t\t}\r\n\t\t\t\tresolve( image )\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tupdateCanvas( image ){\r\n\t\tvar canvasWidth = $('.parallax').outerWidth();\r\n\t\tvar canvasHeight = $('.parallax').outerHeight();\r\n\t\tif( this.state.canvas.width != canvasWidth || this.state.canvas.height != canvasHeight ){\r\n\t\t\tthis.setState({\r\n\t\t\t\tcanvas: {\r\n\t\t\t\t\twidth: canvasWidth,\r\n\t\t\t\t\theight: canvasHeight\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\t\tthis.renderCanvas( image );\r\n\t}\r\n\r\n\trenderCanvas( image ){\r\n\r\n\t\tlet self = this;\r\n\t\tvar canvasDOM = document.getElementById('parallax-canvas');\r\n\t\tvar context = canvasDOM.getContext('2d');\r\n\t\t\r\n\t\t// zoom image to fill canvas, widthwise\r\n\t\tif( image.width < this.state.canvas.width || image.width > this.state.canvas.width ){\r\n\t\t\tvar scale = this.state.canvas.width / image.width;\r\n\t\t\timage.width = image.width * scale;\r\n\t\t\timage.height = image.height * scale;\r\n\t\t}\r\n\t\t\r\n\t\t// now check for fill heightwise, and zoom in if necessary\r\n\t\tif( image.height < this.state.canvas.height ){\r\n\t\t\tvar scale = this.state.canvas.height / image.height;\r\n\t\t\timage.width = image.width * scale;\r\n\t\t\timage.height = image.height * scale;\r\n\t\t}\r\n\t\t\r\n\t\t// figure out where we want the image to be, based on scroll position\r\n\t\tvar percent = Math.round( self.state.scrollTop / this.state.canvas.height * 100 );\r\n\t\tvar position = Math.round( (this.state.canvas.height / 2) * (percent/100) ) - 100;\r\n\t\t\r\n\t\timage.x = ( this.state.canvas.width / 2 ) - ( image.width / 2 );\r\n\t\timage.y = ( ( this.state.canvas.height / 2 ) - ( image.height / 2 ) ) + ( ( percent / 100 ) * 100);\r\n\r\n\t\t// actually draw the image on the canvas\r\n\t\tcontext.drawImage(image.object, image.x, image.y, image.width, image.height);\r\n\r\n\t\t// now update our component\r\n\t\tself.setState({ image: image });\r\n\t\t\r\n\t\t// poll for scroll changes\r\n\t\t/*\r\n\t\tvar animateInterval = $interval(\r\n\t\t\tfunction(){\t\r\n\t\t\t\twindow.requestAnimationFrame(function( event ){\r\n\t\t\t\t\t\r\n\t\t\t\t\tvar bannerPanel = $(document).find('.intro');\r\n\t\t\t\t\t\r\n\t\t\t\t\t// if we've scrolled or resized\r\n\t\t\t\t\tif(\r\n\t\t\t\t\t\tstate.scrollTop != $(document).scrollTop() ||\r\n\t\t\t\t\t\tstate.windowWidth != $(window).width() || \r\n\t\t\t\t\t\tstate.windowHeight != $(window).height() ){\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t// update our state\r\n\t\t\t\t\t\t\tstate.scrollTop = $(document).scrollTop();\r\n\t\t\t\t\t\t\tstate.windowWidth = $(window).width();\r\n\t\t\t\t\t\t\tstate.windowHeight = $(window).height();\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tvar bannerHeight = bannerPanel.outerHeight();\r\n\r\n\t\t\t\t\t\t\t// and if we're within the bounds of our document\r\n\t\t\t\t\t\t\t// this helps prevent us animating when the objects in question are off-screen\r\n\t\t\t\t\t\t\tif( state.scrollTop < bannerHeight ){\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tpositionArtistBackground( image );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\t10\r\n\t\t);*/\r\n\r\n\t}\r\n\r\n\trender(){\r\n\t\treturn (\r\n\t\t\t<div className=\"parallax\">\r\n\t\t\t\t<canvas \r\n\t\t\t\t\tid=\"parallax-canvas\" \r\n\t\t\t\t\tclassName={ this.state.loaded ? 'loaded' : null } \r\n\t\t\t\t\twidth={this.state.canvas.width} \r\n\t\t\t\t\theight={this.state.canvas.height}>\r\n\t\t\t\t</canvas>\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/Parallax.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport { Link } from 'react-router'\r\n\r\nimport * as mopidyActions from '../services/mopidy/actions'\r\n\r\nclass ProgressSlider extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tanimating: false\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentDidMount(){\r\n\t\tvar interval_counter = 0\r\n\t\tsetInterval(() => {\r\n\t\t\tif( this.props.play_state == 'playing' ){\r\n\r\n\t\t\t\t// every 10 seconds get real position from Mopidy\r\n\t\t\t\tif( interval_counter % 10 == 0 ){\r\n\t\t\t\t\tthis.updateProgress()\r\n\t\t\t\t}else{\r\n\t\t\t\t\tvar time_position = this.props.time_position\r\n\r\n\t\t\t\t\t// only add 600ms every 1000ms as Mopidy's time tracker is a bit shit\r\n\t\t\t\t\t// TODO: Why does this kill UI?\r\n\t\t\t\t\t//this.props.mopidyActions.setTimePosition( time_position + 600 )\t\t\t\t\t\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinterval_counter++\r\n\t\t\t}\r\n\t\t}, 1000);\r\n\t}\r\n\r\n\tupdateProgress(){\r\n\t\tif( this.props.connected && this.props.play_state == 'playing' ){\r\n\t\t\tthis.props.mopidyActions.getTimePosition()\r\n\t\t}\r\n\t}\r\n\r\n\thandleClick(e){\r\n\t\tvar slider = e.target;\r\n\t\tif( slider.className != 'slider' ) slider = slider.parentElement;\r\n\r\n\t\tvar sliderX = e.clientX - slider.getBoundingClientRect().left;\r\n\t\tvar sliderWidth = slider.getBoundingClientRect().width;\r\n\t\tvar percent = ( sliderX / sliderWidth ).toFixed(2);\r\n\t\t\r\n\t\tif( this.props.connected && this.props.current_tltrack ){\r\n\t\t\tvar destination_time = this.props.current_track.length * percent\r\n\t\t\tthis.props.mopidyActions.seek( destination_time )\r\n\t\t\tthis.setState({ animating: false })\r\n\t\t}\r\n\t} \r\n\r\n\trender(){\r\n\t\tvar percent = 0\r\n\t\tif( this.props.connected && this.props.current_track ){\r\n\t\t\tpercent = this.props.time_position / this.props.current_track.length\r\n\t\t\tpercent = percent * 100;\r\n\t\t\tif( percent > 100 ) percent = 100\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<div className='slider horizontal' onClick={ (e) => this.handleClick(e) } >\r\n\t\t\t\t<div className=\"track\">\r\n\t\t\t\t\t<div className=\"progress\" style={{ width: (percent)+'%' }}></div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n}\r\n\r\n/**\r\n * Export our component\r\n *\r\n * We also integrate our global store, using connect()\r\n **/\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn {\r\n\t\tcurrent_track: state.ui.current_track,\r\n\t\tconnected: state.mopidy.connected,\r\n\t\ttime_position: state.mopidy.time_position,\r\n\t\tplay_state: state.mopidy.play_state\r\n\t}\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tmopidyActions: bindActionCreators(mopidyActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ProgressSlider)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/ProgressSlider.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport FontAwesome from 'react-fontawesome'\r\nimport ArtistSentence from './ArtistSentence'\r\nimport AlbumLink from './AlbumLink'\r\nimport Dater from './Dater'\r\nvar helpers = require('../helpers.js')\r\n\r\nexport default class Track extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\thandleClick(e){\r\n\t\tvar target = $(e.target);\r\n\t\tif( !target.is('a') && target.closest('a').length <= 0 ){\r\n\t\t\tthis.props.handleClick(e);\r\n\t\t}\r\n\t}\r\n\r\n\thandleDoubleClick(e){\r\n\t\treturn this.props.handleDoubleClick(e);\r\n\t}\r\n\r\n\thandleContextMenu(e){\r\n\t\te.preventDefault();\r\n\r\n\t\t// trigger a regular click event\r\n\t\tif( !this.props.track.selected ) this.handleClick(e);\r\n\r\n\t\t// notify our tracklist\r\n\t\tthis.props.handleContextMenu(e);\r\n\t}\r\n\r\n\trender(){\r\n\t\tif( !this.props.track ) return null\r\n\r\n\t\tvar track = this.props.track;\r\n\t\tvar className = 'list-item track';\r\n\t\tif( typeof(track.selected) !== 'undefined' && track.selected ) className += ' selected';\r\n\t\tif( track.playing ) className += ' playing';\r\n\r\n\t\treturn (\r\n\t\t\t<div\r\n\t\t\t\tclassName={className}\r\n\t\t\t\tonDoubleClick={ (e) => this.handleDoubleClick(e) }\r\n\t\t\t\tonClick={ (e) => this.handleClick(e) }\r\n\t\t\t\tonContextMenu={ (e) => this.handleContextMenu(e) }>\r\n\t\t\t\t\t{ this.props.track.selected ? <FontAwesome name=\"check\" className=\"select-state\" fixedWidth /> : null }\r\n\t\t\t\t\t<span className=\"col name\">\r\n\t\t\t\t\t\t{track.name}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span className=\"col artists\">\r\n\t\t\t\t\t\t{ track.artists ? <ArtistSentence artists={track.artists} /> : null }\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span className=\"col album\">\r\n\t\t\t\t\t\t{ track.album ? <AlbumLink album={track.album} /> : null }\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span className=\"col duration\">\r\n\t\t\t\t\t\t{ track.duration_ms ? <Dater type=\"length\" data={track.duration_ms} /> : null }\r\n\t\t\t\t\t\t{ track.length ? <Dater type=\"length\" data={track.length} /> : null }\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t{ this.props.show_source_icon ? <FontAwesome className=\"source\" name={helpers.sourceIcon(track.uri)} /> : null }\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/Track.js\n **/","\r\nvar helpers = require('../../helpers.js')\r\n\r\n/**\r\n * Send an ajax request to the Spotify API\r\n *\r\n * @param dispatch obj\r\n * @param getState obj\r\n * @param endpoint params = the url params to send\r\n **/\r\nconst sendRequest = ( dispatch, getState, params ) => {\r\n return new Promise( (resolve, reject) => { \r\n\r\n var url = '//ws.audioscrobbler.com/2.0/?format=json&api_key=4320a3ef51c9b3d69de552ac083c55e3&'+params\r\n\r\n $.ajax({\r\n method: 'GET',\r\n cache: true,\r\n url: url\r\n }).then( \r\n response => resolve(response),\r\n (xhr, status, error) => {\r\n console.error( params+' failed', xhr.responseText)\r\n reject(error)\r\n }\r\n )\r\n })\r\n}\r\n\r\nexport function getArtist( artist, mbid = false ){\r\n return (dispatch, getState) => {\r\n\r\n dispatch({ type: 'LASTFM_ARTIST_LOADED', data: false });\r\n\r\n if( mbid ){\r\n var params = 'method=artist.getInfo&mbid='+mbid\r\n }else{\r\n artist = encodeURIComponent( artist );\r\n var params = 'method=artist.getInfo&artist='+artist\r\n }\r\n sendRequest(dispatch, getState, params)\r\n .then(\r\n response => {\r\n if( response.artist ){\r\n dispatch({\r\n type: 'LASTFM_ARTIST_LOADED',\r\n data: response.artist\r\n });\r\n }\r\n }\r\n )\r\n }\r\n}\r\n\r\nexport function getAlbum( artist, album, mbid = false ){\r\n return (dispatch, getState) => {\r\n\r\n dispatch({ type: 'LASTFM_ALBUM_LOADED', data: false });\r\n\r\n if( mbid ){\r\n var params = 'method=album.getInfo&mbid='+mbid\r\n }else{\r\n artist = encodeURIComponent( artist )\r\n album = encodeURIComponent( album )\r\n var params = 'method=album.getInfo&album='+album+'&artist='+artist\r\n }\r\n sendRequest(dispatch, getState, params)\r\n .then(\r\n response => {\r\n if( response.album ){\r\n dispatch({\r\n type: 'LASTFM_ALBUM_LOADED',\r\n data: response.album\r\n });\r\n }\r\n }\r\n )\r\n }\r\n}\r\n\r\nexport function getTrack( artist, track ){\r\n return (dispatch, getState) => {\r\n\r\n dispatch({ type: 'LASTFM_TRACK_LOADED', data: false });\r\n \r\n artist = encodeURIComponent( artist );\r\n sendRequest(dispatch, getState, 'method=track.getInfo&track='+track+'&artist='+artist)\r\n .then(\r\n response => {\r\n if( response.track ){\r\n dispatch({\r\n type: 'LASTFM_TRACK_LOADED',\r\n data: response.track\r\n });\r\n }\r\n }\r\n )\r\n }\r\n}\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/services/lastfm/actions.js\n **/","/*eslint-disable no-empty */\n'use strict';\n\nexports.__esModule = true;\nexports.saveState = saveState;\nexports.readState = readState;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar KeyPrefix = '@@History/';\nvar QuotaExceededErrors = ['QuotaExceededError', 'QUOTA_EXCEEDED_ERR'];\n\nvar SecurityError = 'SecurityError';\n\nfunction createKey(key) {\n return KeyPrefix + key;\n}\n\nfunction saveState(key, state) {\n try {\n if (state == null) {\n window.sessionStorage.removeItem(createKey(key));\n } else {\n window.sessionStorage.setItem(createKey(key), JSON.stringify(state));\n }\n } catch (error) {\n if (error.name === SecurityError) {\n // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any\n // attempt to access window.sessionStorage.\n process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to save state; sessionStorage is not available due to security settings') : undefined;\n\n return;\n }\n\n if (QuotaExceededErrors.indexOf(error.name) >= 0 && window.sessionStorage.length === 0) {\n // Safari \"private mode\" throws QuotaExceededError.\n process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to save state; sessionStorage is not available in Safari private mode') : undefined;\n\n return;\n }\n\n throw error;\n }\n}\n\nfunction readState(key) {\n var json = undefined;\n try {\n json = window.sessionStorage.getItem(createKey(key));\n } catch (error) {\n if (error.name === SecurityError) {\n // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any\n // attempt to access window.sessionStorage.\n process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to read state; sessionStorage is not available due to security settings') : undefined;\n\n return null;\n }\n }\n\n if (json) {\n try {\n return JSON.parse(json);\n } catch (error) {\n // Ignore invalid JSON.\n }\n }\n\n return null;\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/DOMStateStorage.js\n ** module id = 107\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar _DOMUtils = require('./DOMUtils');\n\nvar _createHistory = require('./createHistory');\n\nvar _createHistory2 = _interopRequireDefault(_createHistory);\n\nfunction createDOMHistory(options) {\n var history = _createHistory2['default'](_extends({\n getUserConfirmation: _DOMUtils.getUserConfirmation\n }, options, {\n go: _DOMUtils.go\n }));\n\n function listen(listener) {\n !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'DOM history needs a DOM') : _invariant2['default'](false) : undefined;\n\n return history.listen(listener);\n }\n\n return _extends({}, history, {\n listen: listen\n });\n}\n\nexports['default'] = createDOMHistory;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/createDOMHistory.js\n ** module id = 108\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _Actions = require('./Actions');\n\nvar _PathUtils = require('./PathUtils');\n\nvar _ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar _DOMUtils = require('./DOMUtils');\n\nvar _DOMStateStorage = require('./DOMStateStorage');\n\nvar _createDOMHistory = require('./createDOMHistory');\n\nvar _createDOMHistory2 = _interopRequireDefault(_createDOMHistory);\n\nfunction isAbsolutePath(path) {\n return typeof path === 'string' && path.charAt(0) === '/';\n}\n\nfunction ensureSlash() {\n var path = _DOMUtils.getHashPath();\n\n if (isAbsolutePath(path)) return true;\n\n _DOMUtils.replaceHashPath('/' + path);\n\n return false;\n}\n\nfunction addQueryStringValueToPath(path, key, value) {\n return path + (path.indexOf('?') === -1 ? '?' : '&') + (key + '=' + value);\n}\n\nfunction stripQueryStringValueFromPath(path, key) {\n return path.replace(new RegExp('[?&]?' + key + '=[a-zA-Z0-9]+'), '');\n}\n\nfunction getQueryStringValueFromPath(path, key) {\n var match = path.match(new RegExp('\\\\?.*?\\\\b' + key + '=(.+?)\\\\b'));\n return match && match[1];\n}\n\nvar DefaultQueryKey = '_k';\n\nfunction createHashHistory() {\n var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Hash history needs a DOM') : _invariant2['default'](false) : undefined;\n\n var queryKey = options.queryKey;\n\n if (queryKey === undefined || !!queryKey) queryKey = typeof queryKey === 'string' ? queryKey : DefaultQueryKey;\n\n function getCurrentLocation() {\n var path = _DOMUtils.getHashPath();\n\n var key = undefined,\n state = undefined;\n if (queryKey) {\n key = getQueryStringValueFromPath(path, queryKey);\n path = stripQueryStringValueFromPath(path, queryKey);\n\n if (key) {\n state = _DOMStateStorage.readState(key);\n } else {\n state = null;\n key = history.createKey();\n _DOMUtils.replaceHashPath(addQueryStringValueToPath(path, queryKey, key));\n }\n } else {\n key = state = null;\n }\n\n var location = _PathUtils.parsePath(path);\n\n return history.createLocation(_extends({}, location, { state: state }), undefined, key);\n }\n\n function startHashChangeListener(_ref) {\n var transitionTo = _ref.transitionTo;\n\n function hashChangeListener() {\n if (!ensureSlash()) return; // Always make sure hashes are preceeded with a /.\n\n transitionTo(getCurrentLocation());\n }\n\n ensureSlash();\n _DOMUtils.addEventListener(window, 'hashchange', hashChangeListener);\n\n return function () {\n _DOMUtils.removeEventListener(window, 'hashchange', hashChangeListener);\n };\n }\n\n function finishTransition(location) {\n var basename = location.basename;\n var pathname = location.pathname;\n var search = location.search;\n var state = location.state;\n var action = location.action;\n var key = location.key;\n\n if (action === _Actions.POP) return; // Nothing to do.\n\n var path = (basename || '') + pathname + search;\n\n if (queryKey) {\n path = addQueryStringValueToPath(path, queryKey, key);\n _DOMStateStorage.saveState(key, state);\n } else {\n // Drop key and state.\n location.key = location.state = null;\n }\n\n var currentHash = _DOMUtils.getHashPath();\n\n if (action === _Actions.PUSH) {\n if (currentHash !== path) {\n window.location.hash = path;\n } else {\n process.env.NODE_ENV !== 'production' ? _warning2['default'](false, 'You cannot PUSH the same path using hash history') : undefined;\n }\n } else if (currentHash !== path) {\n // REPLACE\n _DOMUtils.replaceHashPath(path);\n }\n }\n\n var history = _createDOMHistory2['default'](_extends({}, options, {\n getCurrentLocation: getCurrentLocation,\n finishTransition: finishTransition,\n saveState: _DOMStateStorage.saveState\n }));\n\n var listenerCount = 0,\n stopHashChangeListener = undefined;\n\n function listenBefore(listener) {\n if (++listenerCount === 1) stopHashChangeListener = startHashChangeListener(history);\n\n var unlisten = history.listenBefore(listener);\n\n return function () {\n unlisten();\n\n if (--listenerCount === 0) stopHashChangeListener();\n };\n }\n\n function listen(listener) {\n if (++listenerCount === 1) stopHashChangeListener = startHashChangeListener(history);\n\n var unlisten = history.listen(listener);\n\n return function () {\n unlisten();\n\n if (--listenerCount === 0) stopHashChangeListener();\n };\n }\n\n function push(location) {\n process.env.NODE_ENV !== 'production' ? _warning2['default'](queryKey || location.state == null, 'You cannot use state without a queryKey it will be dropped') : undefined;\n\n history.push(location);\n }\n\n function replace(location) {\n process.env.NODE_ENV !== 'production' ? _warning2['default'](queryKey || location.state == null, 'You cannot use state without a queryKey it will be dropped') : undefined;\n\n history.replace(location);\n }\n\n var goIsSupportedWithoutReload = _DOMUtils.supportsGoWithoutReloadUsingHash();\n\n function go(n) {\n process.env.NODE_ENV !== 'production' ? _warning2['default'](goIsSupportedWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : undefined;\n\n history.go(n);\n }\n\n function createHref(path) {\n return '#' + history.createHref(path);\n }\n\n // deprecated\n function registerTransitionHook(hook) {\n if (++listenerCount === 1) stopHashChangeListener = startHashChangeListener(history);\n\n history.registerTransitionHook(hook);\n }\n\n // deprecated\n function unregisterTransitionHook(hook) {\n history.unregisterTransitionHook(hook);\n\n if (--listenerCount === 0) stopHashChangeListener();\n }\n\n // deprecated\n function pushState(state, path) {\n process.env.NODE_ENV !== 'production' ? _warning2['default'](queryKey || state == null, 'You cannot use state without a queryKey it will be dropped') : undefined;\n\n history.pushState(state, path);\n }\n\n // deprecated\n function replaceState(state, path) {\n process.env.NODE_ENV !== 'production' ? _warning2['default'](queryKey || state == null, 'You cannot use state without a queryKey it will be dropped') : undefined;\n\n history.replaceState(state, path);\n }\n\n return _extends({}, history, {\n listenBefore: listenBefore,\n listen: listen,\n push: push,\n replace: replace,\n go: go,\n createHref: createHref,\n\n registerTransitionHook: registerTransitionHook, // deprecated - warning is in createHistory\n unregisterTransitionHook: unregisterTransitionHook, // deprecated - warning is in createHistory\n pushState: pushState, // deprecated - warning is in createHistory\n replaceState: replaceState // deprecated - warning is in createHistory\n });\n}\n\nexports['default'] = createHashHistory;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/createHashHistory.js\n ** module id = 109\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _deepEqual = require('deep-equal');\n\nvar _deepEqual2 = _interopRequireDefault(_deepEqual);\n\nvar _PathUtils = require('./PathUtils');\n\nvar _AsyncUtils = require('./AsyncUtils');\n\nvar _Actions = require('./Actions');\n\nvar _createLocation2 = require('./createLocation');\n\nvar _createLocation3 = _interopRequireDefault(_createLocation2);\n\nvar _runTransitionHook = require('./runTransitionHook');\n\nvar _runTransitionHook2 = _interopRequireDefault(_runTransitionHook);\n\nvar _deprecate = require('./deprecate');\n\nvar _deprecate2 = _interopRequireDefault(_deprecate);\n\nfunction createRandomKey(length) {\n return Math.random().toString(36).substr(2, length);\n}\n\nfunction locationsAreEqual(a, b) {\n return a.pathname === b.pathname && a.search === b.search &&\n //a.action === b.action && // Different action !== location change.\n a.key === b.key && _deepEqual2['default'](a.state, b.state);\n}\n\nvar DefaultKeyLength = 6;\n\nfunction createHistory() {\n var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n var getCurrentLocation = options.getCurrentLocation;\n var finishTransition = options.finishTransition;\n var saveState = options.saveState;\n var go = options.go;\n var getUserConfirmation = options.getUserConfirmation;\n var keyLength = options.keyLength;\n\n if (typeof keyLength !== 'number') keyLength = DefaultKeyLength;\n\n var transitionHooks = [];\n\n function listenBefore(hook) {\n transitionHooks.push(hook);\n\n return function () {\n transitionHooks = transitionHooks.filter(function (item) {\n return item !== hook;\n });\n };\n }\n\n var allKeys = [];\n var changeListeners = [];\n var location = undefined;\n\n function getCurrent() {\n if (pendingLocation && pendingLocation.action === _Actions.POP) {\n return allKeys.indexOf(pendingLocation.key);\n } else if (location) {\n return allKeys.indexOf(location.key);\n } else {\n return -1;\n }\n }\n\n function updateLocation(newLocation) {\n var current = getCurrent();\n\n location = newLocation;\n\n if (location.action === _Actions.PUSH) {\n allKeys = [].concat(allKeys.slice(0, current + 1), [location.key]);\n } else if (location.action === _Actions.REPLACE) {\n allKeys[current] = location.key;\n }\n\n changeListeners.forEach(function (listener) {\n listener(location);\n });\n }\n\n function listen(listener) {\n changeListeners.push(listener);\n\n if (location) {\n listener(location);\n } else {\n var _location = getCurrentLocation();\n allKeys = [_location.key];\n updateLocation(_location);\n }\n\n return function () {\n changeListeners = changeListeners.filter(function (item) {\n return item !== listener;\n });\n };\n }\n\n function confirmTransitionTo(location, callback) {\n _AsyncUtils.loopAsync(transitionHooks.length, function (index, next, done) {\n _runTransitionHook2['default'](transitionHooks[index], location, function (result) {\n if (result != null) {\n done(result);\n } else {\n next();\n }\n });\n }, function (message) {\n if (getUserConfirmation && typeof message === 'string') {\n getUserConfirmation(message, function (ok) {\n callback(ok !== false);\n });\n } else {\n callback(message !== false);\n }\n });\n }\n\n var pendingLocation = undefined;\n\n function transitionTo(nextLocation) {\n if (location && locationsAreEqual(location, nextLocation)) return; // Nothing to do.\n\n pendingLocation = nextLocation;\n\n confirmTransitionTo(nextLocation, function (ok) {\n if (pendingLocation !== nextLocation) return; // Transition was interrupted.\n\n if (ok) {\n // treat PUSH to current path like REPLACE to be consistent with browsers\n if (nextLocation.action === _Actions.PUSH) {\n var prevPath = createPath(location);\n var nextPath = createPath(nextLocation);\n\n if (nextPath === prevPath && _deepEqual2['default'](location.state, nextLocation.state)) nextLocation.action = _Actions.REPLACE;\n }\n\n if (finishTransition(nextLocation) !== false) updateLocation(nextLocation);\n } else if (location && nextLocation.action === _Actions.POP) {\n var prevIndex = allKeys.indexOf(location.key);\n var nextIndex = allKeys.indexOf(nextLocation.key);\n\n if (prevIndex !== -1 && nextIndex !== -1) go(prevIndex - nextIndex); // Restore the URL.\n }\n });\n }\n\n function push(location) {\n transitionTo(createLocation(location, _Actions.PUSH, createKey()));\n }\n\n function replace(location) {\n transitionTo(createLocation(location, _Actions.REPLACE, createKey()));\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n function createKey() {\n return createRandomKey(keyLength);\n }\n\n function createPath(location) {\n if (location == null || typeof location === 'string') return location;\n\n var pathname = location.pathname;\n var search = location.search;\n var hash = location.hash;\n\n var result = pathname;\n\n if (search) result += search;\n\n if (hash) result += hash;\n\n return result;\n }\n\n function createHref(location) {\n return createPath(location);\n }\n\n function createLocation(location, action) {\n var key = arguments.length <= 2 || arguments[2] === undefined ? createKey() : arguments[2];\n\n if (typeof action === 'object') {\n process.env.NODE_ENV !== 'production' ? _warning2['default'](false, 'The state (2nd) argument to history.createLocation is deprecated; use a ' + 'location descriptor instead') : undefined;\n\n if (typeof location === 'string') location = _PathUtils.parsePath(location);\n\n location = _extends({}, location, { state: action });\n\n action = key;\n key = arguments[3] || createKey();\n }\n\n return _createLocation3['default'](location, action, key);\n }\n\n // deprecated\n function setState(state) {\n if (location) {\n updateLocationState(location, state);\n updateLocation(location);\n } else {\n updateLocationState(getCurrentLocation(), state);\n }\n }\n\n function updateLocationState(location, state) {\n location.state = _extends({}, location.state, state);\n saveState(location.key, location.state);\n }\n\n // deprecated\n function registerTransitionHook(hook) {\n if (transitionHooks.indexOf(hook) === -1) transitionHooks.push(hook);\n }\n\n // deprecated\n function unregisterTransitionHook(hook) {\n transitionHooks = transitionHooks.filter(function (item) {\n return item !== hook;\n });\n }\n\n // deprecated\n function pushState(state, path) {\n if (typeof path === 'string') path = _PathUtils.parsePath(path);\n\n push(_extends({ state: state }, path));\n }\n\n // deprecated\n function replaceState(state, path) {\n if (typeof path === 'string') path = _PathUtils.parsePath(path);\n\n replace(_extends({ state: state }, path));\n }\n\n return {\n listenBefore: listenBefore,\n listen: listen,\n transitionTo: transitionTo,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n createKey: createKey,\n createPath: createPath,\n createHref: createHref,\n createLocation: createLocation,\n\n setState: _deprecate2['default'](setState, 'setState is deprecated; use location.key to save state instead'),\n registerTransitionHook: _deprecate2['default'](registerTransitionHook, 'registerTransitionHook is deprecated; use listenBefore instead'),\n unregisterTransitionHook: _deprecate2['default'](unregisterTransitionHook, 'unregisterTransitionHook is deprecated; use the callback returned from listenBefore instead'),\n pushState: _deprecate2['default'](pushState, 'pushState is deprecated; use push instead'),\n replaceState: _deprecate2['default'](replaceState, 'replaceState is deprecated; use replace instead')\n };\n}\n\nexports['default'] = createHistory;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/createHistory.js\n ** module id = 110\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar _PathUtils = require('./PathUtils');\n\nvar _runTransitionHook = require('./runTransitionHook');\n\nvar _runTransitionHook2 = _interopRequireDefault(_runTransitionHook);\n\nvar _deprecate = require('./deprecate');\n\nvar _deprecate2 = _interopRequireDefault(_deprecate);\n\nfunction useBasename(createHistory) {\n return function () {\n var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n var history = createHistory(options);\n\n var basename = options.basename;\n\n var checkedBaseHref = false;\n\n function checkBaseHref() {\n if (checkedBaseHref) {\n return;\n }\n\n // Automatically use the value of <base href> in HTML\n // documents as basename if it's not explicitly given.\n if (basename == null && _ExecutionEnvironment.canUseDOM) {\n var base = document.getElementsByTagName('base')[0];\n var baseHref = base && base.getAttribute('href');\n\n if (baseHref != null) {\n basename = baseHref;\n\n process.env.NODE_ENV !== 'production' ? _warning2['default'](false, 'Automatically setting basename using <base href> is deprecated and will ' + 'be removed in the next major release. The semantics of <base href> are ' + 'subtly different from basename. Please pass the basename explicitly in ' + 'the options to createHistory') : undefined;\n }\n }\n\n checkedBaseHref = true;\n }\n\n function addBasename(location) {\n checkBaseHref();\n\n if (basename && location.basename == null) {\n if (location.pathname.indexOf(basename) === 0) {\n location.pathname = location.pathname.substring(basename.length);\n location.basename = basename;\n\n if (location.pathname === '') location.pathname = '/';\n } else {\n location.basename = '';\n }\n }\n\n return location;\n }\n\n function prependBasename(location) {\n checkBaseHref();\n\n if (!basename) return location;\n\n if (typeof location === 'string') location = _PathUtils.parsePath(location);\n\n var pname = location.pathname;\n var normalizedBasename = basename.slice(-1) === '/' ? basename : basename + '/';\n var normalizedPathname = pname.charAt(0) === '/' ? pname.slice(1) : pname;\n var pathname = normalizedBasename + normalizedPathname;\n\n return _extends({}, location, {\n pathname: pathname\n });\n }\n\n // Override all read methods with basename-aware versions.\n function listenBefore(hook) {\n return history.listenBefore(function (location, callback) {\n _runTransitionHook2['default'](hook, addBasename(location), callback);\n });\n }\n\n function listen(listener) {\n return history.listen(function (location) {\n listener(addBasename(location));\n });\n }\n\n // Override all write methods with basename-aware versions.\n function push(location) {\n history.push(prependBasename(location));\n }\n\n function replace(location) {\n history.replace(prependBasename(location));\n }\n\n function createPath(location) {\n return history.createPath(prependBasename(location));\n }\n\n function createHref(location) {\n return history.createHref(prependBasename(location));\n }\n\n function createLocation(location) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return addBasename(history.createLocation.apply(history, [prependBasename(location)].concat(args)));\n }\n\n // deprecated\n function pushState(state, path) {\n if (typeof path === 'string') path = _PathUtils.parsePath(path);\n\n push(_extends({ state: state }, path));\n }\n\n // deprecated\n function replaceState(state, path) {\n if (typeof path === 'string') path = _PathUtils.parsePath(path);\n\n replace(_extends({ state: state }, path));\n }\n\n return _extends({}, history, {\n listenBefore: listenBefore,\n listen: listen,\n push: push,\n replace: replace,\n createPath: createPath,\n createHref: createHref,\n createLocation: createLocation,\n\n pushState: _deprecate2['default'](pushState, 'pushState is deprecated; use push instead'),\n replaceState: _deprecate2['default'](replaceState, 'replaceState is deprecated; use replace instead')\n });\n };\n}\n\nexports['default'] = useBasename;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/useBasename.js\n ** module id = 111\n ** module chunks = 0\n **/","/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n'use strict';\n\nvar REACT_STATICS = {\n childContextTypes: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\n\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n arguments: true,\n arity: true\n};\n\nvar isGetOwnPropertySymbolsAvailable = typeof Object.getOwnPropertySymbols === 'function';\n\nmodule.exports = function hoistNonReactStatics(targetComponent, sourceComponent, customStatics) {\n if (typeof sourceComponent !== 'string') { // don't hoist over string (html) components\n var keys = Object.getOwnPropertyNames(sourceComponent);\n\n /* istanbul ignore else */\n if (isGetOwnPropertySymbolsAvailable) {\n keys = keys.concat(Object.getOwnPropertySymbols(sourceComponent));\n }\n\n for (var i = 0; i < keys.length; ++i) {\n if (!REACT_STATICS[keys[i]] && !KNOWN_STATICS[keys[i]] && (!customStatics || !customStatics[keys[i]])) {\n try {\n targetComponent[keys[i]] = sourceComponent[keys[i]];\n } catch (error) {\n\n }\n }\n }\n }\n\n return targetComponent;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/hoist-non-react-statics/index.js\n ** module id = 112\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = require('react/lib/ReactDOM');\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-dom/index.js\n ** module id = 113\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\n\nvar _react = require('react');\n\nexports[\"default\"] = _react.PropTypes.shape({\n subscribe: _react.PropTypes.func.isRequired,\n dispatch: _react.PropTypes.func.isRequired,\n getState: _react.PropTypes.func.isRequired\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-redux/lib/utils/storeShape.js\n ** module id = 114\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\nexports[\"default\"] = warning;\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n try {\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n /* eslint-disable no-empty */\n } catch (e) {}\n /* eslint-enable no-empty */\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-redux/lib/utils/warning.js\n ** module id = 115\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _routerWarning = require('./routerWarning');\n\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _PropTypes = require('./PropTypes');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nvar _React$PropTypes = _react2.default.PropTypes;\nvar bool = _React$PropTypes.bool;\nvar object = _React$PropTypes.object;\nvar string = _React$PropTypes.string;\nvar func = _React$PropTypes.func;\nvar oneOfType = _React$PropTypes.oneOfType;\n\n\nfunction isLeftClickEvent(event) {\n return event.button === 0;\n}\n\nfunction isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n\n// TODO: De-duplicate against hasAnyProperties in createTransitionManager.\nfunction isEmptyObject(object) {\n for (var p in object) {\n if (Object.prototype.hasOwnProperty.call(object, p)) return false;\n }return true;\n}\n\nfunction createLocationDescriptor(to, _ref) {\n var query = _ref.query;\n var hash = _ref.hash;\n var state = _ref.state;\n\n if (query || hash || state) {\n return { pathname: to, query: query, hash: hash, state: state };\n }\n\n return to;\n}\n\n/**\n * A <Link> is used to create an <a> element that links to a route.\n * When that route is active, the link gets the value of its\n * activeClassName prop.\n *\n * For example, assuming you have the following route:\n *\n * <Route path=\"/posts/:postID\" component={Post} />\n *\n * You could use the following component to link to that route:\n *\n * <Link to={`/posts/${post.id}`} />\n *\n * Links may pass along location state and/or query string parameters\n * in the state/query props, respectively.\n *\n * <Link ... query={{ show: true }} state={{ the: 'state' }} />\n */\nvar Link = _react2.default.createClass({\n displayName: 'Link',\n\n\n contextTypes: {\n router: _PropTypes.routerShape\n },\n\n propTypes: {\n to: oneOfType([string, object]),\n query: object,\n hash: string,\n state: object,\n activeStyle: object,\n activeClassName: string,\n onlyActiveOnIndex: bool.isRequired,\n onClick: func,\n target: string\n },\n\n getDefaultProps: function getDefaultProps() {\n return {\n onlyActiveOnIndex: false,\n style: {}\n };\n },\n handleClick: function handleClick(event) {\n if (this.props.onClick) this.props.onClick(event);\n\n if (event.defaultPrevented) return;\n\n !this.context.router ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, '<Link>s rendered outside of a router context cannot navigate.') : (0, _invariant2.default)(false) : void 0;\n\n if (isModifiedEvent(event) || !isLeftClickEvent(event)) return;\n\n // If target prop is set (e.g. to \"_blank\"), let browser handle link.\n /* istanbul ignore if: untestable with Karma */\n if (this.props.target) return;\n\n event.preventDefault();\n\n var _props = this.props;\n var to = _props.to;\n var query = _props.query;\n var hash = _props.hash;\n var state = _props.state;\n\n var location = createLocationDescriptor(to, { query: query, hash: hash, state: state });\n\n this.context.router.push(location);\n },\n render: function render() {\n var _props2 = this.props;\n var to = _props2.to;\n var query = _props2.query;\n var hash = _props2.hash;\n var state = _props2.state;\n var activeClassName = _props2.activeClassName;\n var activeStyle = _props2.activeStyle;\n var onlyActiveOnIndex = _props2.onlyActiveOnIndex;\n\n var props = _objectWithoutProperties(_props2, ['to', 'query', 'hash', 'state', 'activeClassName', 'activeStyle', 'onlyActiveOnIndex']);\n\n process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(!(query || hash || state), 'the `query`, `hash`, and `state` props on `<Link>` are deprecated, use `<Link to={{ pathname, query, hash, state }}/>. http://tiny.cc/router-isActivedeprecated') : void 0;\n\n // Ignore if rendered outside the context of router, simplifies unit testing.\n var router = this.context.router;\n\n\n if (router) {\n // If user does not specify a `to` prop, return an empty anchor tag.\n if (to == null) {\n return _react2.default.createElement('a', props);\n }\n\n var location = createLocationDescriptor(to, { query: query, hash: hash, state: state });\n props.href = router.createHref(location);\n\n if (activeClassName || activeStyle != null && !isEmptyObject(activeStyle)) {\n if (router.isActive(location, onlyActiveOnIndex)) {\n if (activeClassName) {\n if (props.className) {\n props.className += ' ' + activeClassName;\n } else {\n props.className = activeClassName;\n }\n }\n\n if (activeStyle) props.style = _extends({}, props.style, activeStyle);\n }\n }\n }\n\n return _react2.default.createElement('a', _extends({}, props, { onClick: this.handleClick }));\n }\n});\n\nexports.default = Link;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-router/lib/Link.js\n ** module id = 116\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _RouteUtils = require('./RouteUtils');\n\nvar _PatternUtils = require('./PatternUtils');\n\nvar _InternalPropTypes = require('./InternalPropTypes');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _React$PropTypes = _react2.default.PropTypes;\nvar string = _React$PropTypes.string;\nvar object = _React$PropTypes.object;\n\n/**\n * A <Redirect> is used to declare another URL path a client should\n * be sent to when they request a given URL.\n *\n * Redirects are placed alongside routes in the route configuration\n * and are traversed in the same manner.\n */\n\nvar Redirect = _react2.default.createClass({\n displayName: 'Redirect',\n\n\n statics: {\n createRouteFromReactElement: function createRouteFromReactElement(element) {\n var route = (0, _RouteUtils.createRouteFromReactElement)(element);\n\n if (route.from) route.path = route.from;\n\n route.onEnter = function (nextState, replace) {\n var location = nextState.location;\n var params = nextState.params;\n\n\n var pathname = void 0;\n if (route.to.charAt(0) === '/') {\n pathname = (0, _PatternUtils.formatPattern)(route.to, params);\n } else if (!route.to) {\n pathname = location.pathname;\n } else {\n var routeIndex = nextState.routes.indexOf(route);\n var parentPattern = Redirect.getRoutePattern(nextState.routes, routeIndex - 1);\n var pattern = parentPattern.replace(/\\/*$/, '/') + route.to;\n pathname = (0, _PatternUtils.formatPattern)(pattern, params);\n }\n\n replace({\n pathname: pathname,\n query: route.query || location.query,\n state: route.state || location.state\n });\n };\n\n return route;\n },\n getRoutePattern: function getRoutePattern(routes, routeIndex) {\n var parentPattern = '';\n\n for (var i = routeIndex; i >= 0; i--) {\n var route = routes[i];\n var pattern = route.path || '';\n\n parentPattern = pattern.replace(/\\/*$/, '/') + parentPattern;\n\n if (pattern.indexOf('/') === 0) break;\n }\n\n return '/' + parentPattern;\n }\n },\n\n propTypes: {\n path: string,\n from: string, // Alias for path\n to: string.isRequired,\n query: object,\n state: object,\n onEnter: _InternalPropTypes.falsy,\n children: _InternalPropTypes.falsy\n },\n\n /* istanbul ignore next: sanity check */\n render: function render() {\n !false ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, '<Redirect> elements are for router configuration only and should not be rendered') : (0, _invariant2.default)(false) : void 0;\n }\n});\n\nexports.default = Redirect;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-router/lib/Redirect.js\n ** module id = 117\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nexports.createRouterObject = createRouterObject;\nexports.createRoutingHistory = createRoutingHistory;\n\nvar _deprecateObjectProperties = require('./deprecateObjectProperties');\n\nvar _deprecateObjectProperties2 = _interopRequireDefault(_deprecateObjectProperties);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction createRouterObject(history, transitionManager) {\n return _extends({}, history, {\n setRouteLeaveHook: transitionManager.listenBeforeLeavingRoute,\n isActive: transitionManager.isActive\n });\n}\n\n// deprecated\nfunction createRoutingHistory(history, transitionManager) {\n history = _extends({}, history, transitionManager);\n\n if (process.env.NODE_ENV !== 'production') {\n history = (0, _deprecateObjectProperties2.default)(history, '`props.history` and `context.history` are deprecated. Please use `context.router`. http://tiny.cc/router-contextchanges');\n }\n\n return history;\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-router/lib/RouterUtils.js\n ** module id = 118\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\nexports.default = createMemoryHistory;\n\nvar _useQueries = require('history/lib/useQueries');\n\nvar _useQueries2 = _interopRequireDefault(_useQueries);\n\nvar _useBasename = require('history/lib/useBasename');\n\nvar _useBasename2 = _interopRequireDefault(_useBasename);\n\nvar _createMemoryHistory = require('history/lib/createMemoryHistory');\n\nvar _createMemoryHistory2 = _interopRequireDefault(_createMemoryHistory);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction createMemoryHistory(options) {\n // signatures and type checking differ between `useRoutes` and\n // `createMemoryHistory`, have to create `memoryHistory` first because\n // `useQueries` doesn't understand the signature\n var memoryHistory = (0, _createMemoryHistory2.default)(options);\n var createHistory = function createHistory() {\n return memoryHistory;\n };\n var history = (0, _useQueries2.default)((0, _useBasename2.default)(createHistory))(options);\n history.__v2_compatible__ = true;\n return history;\n}\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-router/lib/createMemoryHistory.js\n ** module id = 119\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\n\nexports.default = function (createHistory) {\n var history = void 0;\n if (canUseDOM) history = (0, _useRouterHistory2.default)(createHistory)();\n return history;\n};\n\nvar _useRouterHistory = require('./useRouterHistory');\n\nvar _useRouterHistory2 = _interopRequireDefault(_useRouterHistory);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-router/lib/createRouterHistory.js\n ** module id = 120\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nexports.default = makeStateWithLocation;\n\nvar _deprecateObjectProperties = require('./deprecateObjectProperties');\n\nvar _routerWarning = require('./routerWarning');\n\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction makeStateWithLocation(state, location) {\n if (process.env.NODE_ENV !== 'production' && _deprecateObjectProperties.canUseMembrane) {\n var stateWithLocation = _extends({}, state);\n\n // I don't use deprecateObjectProperties here because I want to keep the\n // same code path between development and production, in that we just\n // assign extra properties to the copy of the state object in both cases.\n\n var _loop = function _loop(prop) {\n if (!Object.prototype.hasOwnProperty.call(location, prop)) {\n return 'continue';\n }\n\n Object.defineProperty(stateWithLocation, prop, {\n get: function get() {\n process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, 'Accessing location properties directly from the first argument to `getComponent`, `getComponents`, `getChildRoutes`, and `getIndexRoute` is deprecated. That argument is now the router state (`nextState` or `partialNextState`) rather than the location. To access the location, use `nextState.location` or `partialNextState.location`.') : void 0;\n return location[prop];\n }\n });\n };\n\n for (var prop in location) {\n var _ret = _loop(prop);\n\n if (_ret === 'continue') continue;\n }\n\n return stateWithLocation;\n }\n\n return _extends({}, state, location);\n}\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-router/lib/makeStateWithLocation.js\n ** module id = 121\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\nexports.default = useRouterHistory;\n\nvar _useQueries = require('history/lib/useQueries');\n\nvar _useQueries2 = _interopRequireDefault(_useQueries);\n\nvar _useBasename = require('history/lib/useBasename');\n\nvar _useBasename2 = _interopRequireDefault(_useBasename);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction useRouterHistory(createHistory) {\n return function (options) {\n var history = (0, _useQueries2.default)((0, _useBasename2.default)(createHistory))(options);\n history.__v2_compatible__ = true;\n return history;\n };\n}\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-router/lib/useRouterHistory.js\n ** module id = 122\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule CSSProperty\n */\n\n'use strict';\n\n/**\n * CSS properties which accept numbers but are not in units of \"px\".\n */\n\nvar isUnitlessNumber = {\n animationIterationCount: true,\n borderImageOutset: true,\n borderImageSlice: true,\n borderImageWidth: true,\n boxFlex: true,\n boxFlexGroup: true,\n boxOrdinalGroup: true,\n columnCount: true,\n flex: true,\n flexGrow: true,\n flexPositive: true,\n flexShrink: true,\n flexNegative: true,\n flexOrder: true,\n gridRow: true,\n gridColumn: true,\n fontWeight: true,\n lineClamp: true,\n lineHeight: true,\n opacity: true,\n order: true,\n orphans: true,\n tabSize: true,\n widows: true,\n zIndex: true,\n zoom: true,\n\n // SVG-related properties\n fillOpacity: true,\n floodOpacity: true,\n stopOpacity: true,\n strokeDasharray: true,\n strokeDashoffset: true,\n strokeMiterlimit: true,\n strokeOpacity: true,\n strokeWidth: true\n};\n\n/**\n * @param {string} prefix vendor-specific prefix, eg: Webkit\n * @param {string} key style name, eg: transitionDuration\n * @return {string} style name prefixed with `prefix`, properly camelCased, eg:\n * WebkitTransitionDuration\n */\nfunction prefixKey(prefix, key) {\n return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n}\n\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\nvar prefixes = ['Webkit', 'ms', 'Moz', 'O'];\n\n// Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\n// infinite loop, because it iterates over the newly added props too.\nObject.keys(isUnitlessNumber).forEach(function (prop) {\n prefixes.forEach(function (prefix) {\n isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];\n });\n});\n\n/**\n * Most style properties can be unset by doing .style[prop] = '' but IE8\n * doesn't like doing that with shorthand properties so for the properties that\n * IE8 breaks on, which are listed here, we instead unset each of the\n * individual properties. See http://bugs.jquery.com/ticket/12385.\n * The 4-value 'clock' properties like margin, padding, border-width seem to\n * behave without any problems. Curiously, list-style works too without any\n * special prodding.\n */\nvar shorthandPropertyExpansions = {\n background: {\n backgroundAttachment: true,\n backgroundColor: true,\n backgroundImage: true,\n backgroundPositionX: true,\n backgroundPositionY: true,\n backgroundRepeat: true\n },\n backgroundPosition: {\n backgroundPositionX: true,\n backgroundPositionY: true\n },\n border: {\n borderWidth: true,\n borderStyle: true,\n borderColor: true\n },\n borderBottom: {\n borderBottomWidth: true,\n borderBottomStyle: true,\n borderBottomColor: true\n },\n borderLeft: {\n borderLeftWidth: true,\n borderLeftStyle: true,\n borderLeftColor: true\n },\n borderRight: {\n borderRightWidth: true,\n borderRightStyle: true,\n borderRightColor: true\n },\n borderTop: {\n borderTopWidth: true,\n borderTopStyle: true,\n borderTopColor: true\n },\n font: {\n fontStyle: true,\n fontVariant: true,\n fontWeight: true,\n fontSize: true,\n lineHeight: true,\n fontFamily: true\n },\n outline: {\n outlineWidth: true,\n outlineStyle: true,\n outlineColor: true\n }\n};\n\nvar CSSProperty = {\n isUnitlessNumber: isUnitlessNumber,\n shorthandPropertyExpansions: shorthandPropertyExpansions\n};\n\nmodule.exports = CSSProperty;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/CSSProperty.js\n ** module id = 123\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule CallbackQueue\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant'),\n _assign = require('object-assign');\n\nvar PooledClass = require('./PooledClass');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * A specialized pseudo-event module to help keep track of components waiting to\n * be notified when their DOM representations are available for use.\n *\n * This implements `PooledClass`, so you should never need to instantiate this.\n * Instead, use `CallbackQueue.getPooled()`.\n *\n * @class ReactMountReady\n * @implements PooledClass\n * @internal\n */\nfunction CallbackQueue() {\n this._callbacks = null;\n this._contexts = null;\n}\n\n_assign(CallbackQueue.prototype, {\n\n /**\n * Enqueues a callback to be invoked when `notifyAll` is invoked.\n *\n * @param {function} callback Invoked when `notifyAll` is invoked.\n * @param {?object} context Context to call `callback` with.\n * @internal\n */\n enqueue: function (callback, context) {\n this._callbacks = this._callbacks || [];\n this._contexts = this._contexts || [];\n this._callbacks.push(callback);\n this._contexts.push(context);\n },\n\n /**\n * Invokes all enqueued callbacks and clears the queue. This is invoked after\n * the DOM representation of a component has been created or updated.\n *\n * @internal\n */\n notifyAll: function () {\n var callbacks = this._callbacks;\n var contexts = this._contexts;\n if (callbacks) {\n !(callbacks.length === contexts.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Mismatched list of contexts in callback queue') : _prodInvariant('24') : void 0;\n this._callbacks = null;\n this._contexts = null;\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].call(contexts[i]);\n }\n callbacks.length = 0;\n contexts.length = 0;\n }\n },\n\n checkpoint: function () {\n return this._callbacks ? this._callbacks.length : 0;\n },\n\n rollback: function (len) {\n if (this._callbacks) {\n this._callbacks.length = len;\n this._contexts.length = len;\n }\n },\n\n /**\n * Resets the internal queue.\n *\n * @internal\n */\n reset: function () {\n this._callbacks = null;\n this._contexts = null;\n },\n\n /**\n * `PooledClass` looks for this.\n */\n destructor: function () {\n this.reset();\n }\n\n});\n\nPooledClass.addPoolingTo(CallbackQueue);\n\nmodule.exports = CallbackQueue;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/CallbackQueue.js\n ** module id = 124\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMPropertyOperations\n */\n\n'use strict';\n\nvar DOMProperty = require('./DOMProperty');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactInstrumentation = require('./ReactInstrumentation');\n\nvar quoteAttributeValueForBrowser = require('./quoteAttributeValueForBrowser');\nvar warning = require('fbjs/lib/warning');\n\nvar VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + DOMProperty.ATTRIBUTE_NAME_START_CHAR + '][' + DOMProperty.ATTRIBUTE_NAME_CHAR + ']*$');\nvar illegalAttributeNameCache = {};\nvar validatedAttributeNameCache = {};\n\nfunction isAttributeNameSafe(attributeName) {\n if (validatedAttributeNameCache.hasOwnProperty(attributeName)) {\n return true;\n }\n if (illegalAttributeNameCache.hasOwnProperty(attributeName)) {\n return false;\n }\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\n validatedAttributeNameCache[attributeName] = true;\n return true;\n }\n illegalAttributeNameCache[attributeName] = true;\n process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid attribute name: `%s`', attributeName) : void 0;\n return false;\n}\n\nfunction shouldIgnoreValue(propertyInfo, value) {\n return value == null || propertyInfo.hasBooleanValue && !value || propertyInfo.hasNumericValue && isNaN(value) || propertyInfo.hasPositiveNumericValue && value < 1 || propertyInfo.hasOverloadedBooleanValue && value === false;\n}\n\n/**\n * Operations for dealing with DOM properties.\n */\nvar DOMPropertyOperations = {\n\n /**\n * Creates markup for the ID property.\n *\n * @param {string} id Unescaped ID.\n * @return {string} Markup string.\n */\n createMarkupForID: function (id) {\n return DOMProperty.ID_ATTRIBUTE_NAME + '=' + quoteAttributeValueForBrowser(id);\n },\n\n setAttributeForID: function (node, id) {\n node.setAttribute(DOMProperty.ID_ATTRIBUTE_NAME, id);\n },\n\n createMarkupForRoot: function () {\n return DOMProperty.ROOT_ATTRIBUTE_NAME + '=\"\"';\n },\n\n setAttributeForRoot: function (node) {\n node.setAttribute(DOMProperty.ROOT_ATTRIBUTE_NAME, '');\n },\n\n /**\n * Creates markup for a property.\n *\n * @param {string} name\n * @param {*} value\n * @return {?string} Markup string, or null if the property was invalid.\n */\n createMarkupForProperty: function (name, value) {\n var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\n if (propertyInfo) {\n if (shouldIgnoreValue(propertyInfo, value)) {\n return '';\n }\n var attributeName = propertyInfo.attributeName;\n if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {\n return attributeName + '=\"\"';\n }\n return attributeName + '=' + quoteAttributeValueForBrowser(value);\n } else if (DOMProperty.isCustomAttribute(name)) {\n if (value == null) {\n return '';\n }\n return name + '=' + quoteAttributeValueForBrowser(value);\n }\n return null;\n },\n\n /**\n * Creates markup for a custom property.\n *\n * @param {string} name\n * @param {*} value\n * @return {string} Markup string, or empty string if the property was invalid.\n */\n createMarkupForCustomAttribute: function (name, value) {\n if (!isAttributeNameSafe(name) || value == null) {\n return '';\n }\n return name + '=' + quoteAttributeValueForBrowser(value);\n },\n\n /**\n * Sets the value for a property on a node.\n *\n * @param {DOMElement} node\n * @param {string} name\n * @param {*} value\n */\n setValueForProperty: function (node, name, value) {\n var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\n if (propertyInfo) {\n var mutationMethod = propertyInfo.mutationMethod;\n if (mutationMethod) {\n mutationMethod(node, value);\n } else if (shouldIgnoreValue(propertyInfo, value)) {\n this.deleteValueForProperty(node, name);\n return;\n } else if (propertyInfo.mustUseProperty) {\n // Contrary to `setAttribute`, object properties are properly\n // `toString`ed by IE8/9.\n node[propertyInfo.propertyName] = value;\n } else {\n var attributeName = propertyInfo.attributeName;\n var namespace = propertyInfo.attributeNamespace;\n // `setAttribute` with objects becomes only `[object]` in IE8/9,\n // ('' + value) makes it output the correct toString()-value.\n if (namespace) {\n node.setAttributeNS(namespace, attributeName, '' + value);\n } else if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {\n node.setAttribute(attributeName, '');\n } else {\n node.setAttribute(attributeName, '' + value);\n }\n }\n } else if (DOMProperty.isCustomAttribute(name)) {\n DOMPropertyOperations.setValueForAttribute(node, name, value);\n return;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var payload = {};\n payload[name] = value;\n ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'update attribute', payload);\n }\n },\n\n setValueForAttribute: function (node, name, value) {\n if (!isAttributeNameSafe(name)) {\n return;\n }\n if (value == null) {\n node.removeAttribute(name);\n } else {\n node.setAttribute(name, '' + value);\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var payload = {};\n payload[name] = value;\n ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'update attribute', payload);\n }\n },\n\n /**\n * Deletes an attributes from a node.\n *\n * @param {DOMElement} node\n * @param {string} name\n */\n deleteValueForAttribute: function (node, name) {\n node.removeAttribute(name);\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'remove attribute', name);\n }\n },\n\n /**\n * Deletes the value for a property on a node.\n *\n * @param {DOMElement} node\n * @param {string} name\n */\n deleteValueForProperty: function (node, name) {\n var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\n if (propertyInfo) {\n var mutationMethod = propertyInfo.mutationMethod;\n if (mutationMethod) {\n mutationMethod(node, undefined);\n } else if (propertyInfo.mustUseProperty) {\n var propName = propertyInfo.propertyName;\n if (propertyInfo.hasBooleanValue) {\n node[propName] = false;\n } else {\n node[propName] = '';\n }\n } else {\n node.removeAttribute(propertyInfo.attributeName);\n }\n } else if (DOMProperty.isCustomAttribute(name)) {\n node.removeAttribute(name);\n }\n\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'remove attribute', name);\n }\n }\n\n};\n\nmodule.exports = DOMPropertyOperations;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DOMPropertyOperations.js\n ** module id = 125\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactChildren\n */\n\n'use strict';\n\nvar PooledClass = require('./PooledClass');\nvar ReactElement = require('./ReactElement');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar traverseAllChildren = require('./traverseAllChildren');\n\nvar twoArgumentPooler = PooledClass.twoArgumentPooler;\nvar fourArgumentPooler = PooledClass.fourArgumentPooler;\n\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction escapeUserProvidedKey(text) {\n return ('' + text).replace(userProvidedKeyEscapeRegex, '$&/');\n}\n\n/**\n * PooledClass representing the bookkeeping associated with performing a child\n * traversal. Allows avoiding binding callbacks.\n *\n * @constructor ForEachBookKeeping\n * @param {!function} forEachFunction Function to perform traversal with.\n * @param {?*} forEachContext Context to perform context with.\n */\nfunction ForEachBookKeeping(forEachFunction, forEachContext) {\n this.func = forEachFunction;\n this.context = forEachContext;\n this.count = 0;\n}\nForEachBookKeeping.prototype.destructor = function () {\n this.func = null;\n this.context = null;\n this.count = 0;\n};\nPooledClass.addPoolingTo(ForEachBookKeeping, twoArgumentPooler);\n\nfunction forEachSingleChild(bookKeeping, child, name) {\n var func = bookKeeping.func;\n var context = bookKeeping.context;\n\n func.call(context, child, bookKeeping.count++);\n}\n\n/**\n * Iterates through children that are typically specified as `props.children`.\n *\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.foreach\n *\n * The provided forEachFunc(child, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} forEachFunc\n * @param {*} forEachContext Context for forEachContext.\n */\nfunction forEachChildren(children, forEachFunc, forEachContext) {\n if (children == null) {\n return children;\n }\n var traverseContext = ForEachBookKeeping.getPooled(forEachFunc, forEachContext);\n traverseAllChildren(children, forEachSingleChild, traverseContext);\n ForEachBookKeeping.release(traverseContext);\n}\n\n/**\n * PooledClass representing the bookkeeping associated with performing a child\n * mapping. Allows avoiding binding callbacks.\n *\n * @constructor MapBookKeeping\n * @param {!*} mapResult Object containing the ordered map of results.\n * @param {!function} mapFunction Function to perform mapping with.\n * @param {?*} mapContext Context to perform mapping with.\n */\nfunction MapBookKeeping(mapResult, keyPrefix, mapFunction, mapContext) {\n this.result = mapResult;\n this.keyPrefix = keyPrefix;\n this.func = mapFunction;\n this.context = mapContext;\n this.count = 0;\n}\nMapBookKeeping.prototype.destructor = function () {\n this.result = null;\n this.keyPrefix = null;\n this.func = null;\n this.context = null;\n this.count = 0;\n};\nPooledClass.addPoolingTo(MapBookKeeping, fourArgumentPooler);\n\nfunction mapSingleChildIntoContext(bookKeeping, child, childKey) {\n var result = bookKeeping.result;\n var keyPrefix = bookKeeping.keyPrefix;\n var func = bookKeeping.func;\n var context = bookKeeping.context;\n\n\n var mappedChild = func.call(context, child, bookKeeping.count++);\n if (Array.isArray(mappedChild)) {\n mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, emptyFunction.thatReturnsArgument);\n } else if (mappedChild != null) {\n if (ReactElement.isValidElement(mappedChild)) {\n mappedChild = ReactElement.cloneAndReplaceKey(mappedChild,\n // Keep both the (mapped) and old keys if they differ, just as\n // traverseAllChildren used to do for objects as children\n keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + '/' : '') + childKey);\n }\n result.push(mappedChild);\n }\n}\n\nfunction mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {\n var escapedPrefix = '';\n if (prefix != null) {\n escapedPrefix = escapeUserProvidedKey(prefix) + '/';\n }\n var traverseContext = MapBookKeeping.getPooled(array, escapedPrefix, func, context);\n traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);\n MapBookKeeping.release(traverseContext);\n}\n\n/**\n * Maps children that are typically specified as `props.children`.\n *\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.map\n *\n * The provided mapFunction(child, key, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} func The map function.\n * @param {*} context Context for mapFunction.\n * @return {object} Object containing the ordered map of results.\n */\nfunction mapChildren(children, func, context) {\n if (children == null) {\n return children;\n }\n var result = [];\n mapIntoWithKeyPrefixInternal(children, result, null, func, context);\n return result;\n}\n\nfunction forEachSingleChildDummy(traverseContext, child, name) {\n return null;\n}\n\n/**\n * Count the number of children that are typically specified as\n * `props.children`.\n *\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.count\n *\n * @param {?*} children Children tree container.\n * @return {number} The number of children.\n */\nfunction countChildren(children, context) {\n return traverseAllChildren(children, forEachSingleChildDummy, null);\n}\n\n/**\n * Flatten a children object (typically specified as `props.children`) and\n * return an array with appropriately re-keyed children.\n *\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.toarray\n */\nfunction toArray(children) {\n var result = [];\n mapIntoWithKeyPrefixInternal(children, result, null, emptyFunction.thatReturnsArgument);\n return result;\n}\n\nvar ReactChildren = {\n forEach: forEachChildren,\n map: mapChildren,\n mapIntoWithKeyPrefixInternal: mapIntoWithKeyPrefixInternal,\n count: countChildren,\n toArray: toArray\n};\n\nmodule.exports = ReactChildren;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactChildren.js\n ** module id = 126\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactClass\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant'),\n _assign = require('object-assign');\n\nvar ReactComponent = require('./ReactComponent');\nvar ReactElement = require('./ReactElement');\nvar ReactPropTypeLocations = require('./ReactPropTypeLocations');\nvar ReactPropTypeLocationNames = require('./ReactPropTypeLocationNames');\nvar ReactNoopUpdateQueue = require('./ReactNoopUpdateQueue');\n\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar invariant = require('fbjs/lib/invariant');\nvar keyMirror = require('fbjs/lib/keyMirror');\nvar keyOf = require('fbjs/lib/keyOf');\nvar warning = require('fbjs/lib/warning');\n\nvar MIXINS_KEY = keyOf({ mixins: null });\n\n/**\n * Policies that describe methods in `ReactClassInterface`.\n */\nvar SpecPolicy = keyMirror({\n /**\n * These methods may be defined only once by the class specification or mixin.\n */\n DEFINE_ONCE: null,\n /**\n * These methods may be defined by both the class specification and mixins.\n * Subsequent definitions will be chained. These methods must return void.\n */\n DEFINE_MANY: null,\n /**\n * These methods are overriding the base class.\n */\n OVERRIDE_BASE: null,\n /**\n * These methods are similar to DEFINE_MANY, except we assume they return\n * objects. We try to merge the keys of the return values of all the mixed in\n * functions. If there is a key conflict we throw.\n */\n DEFINE_MANY_MERGED: null\n});\n\nvar injectedMixins = [];\n\n/**\n * Composite components are higher-level components that compose other composite\n * or host components.\n *\n * To create a new type of `ReactClass`, pass a specification of\n * your new class to `React.createClass`. The only requirement of your class\n * specification is that you implement a `render` method.\n *\n * var MyComponent = React.createClass({\n * render: function() {\n * return <div>Hello World</div>;\n * }\n * });\n *\n * The class specification supports a specific protocol of methods that have\n * special meaning (e.g. `render`). See `ReactClassInterface` for\n * more the comprehensive protocol. Any other properties and methods in the\n * class specification will be available on the prototype.\n *\n * @interface ReactClassInterface\n * @internal\n */\nvar ReactClassInterface = {\n\n /**\n * An array of Mixin objects to include when defining your component.\n *\n * @type {array}\n * @optional\n */\n mixins: SpecPolicy.DEFINE_MANY,\n\n /**\n * An object containing properties and methods that should be defined on\n * the component's constructor instead of its prototype (static methods).\n *\n * @type {object}\n * @optional\n */\n statics: SpecPolicy.DEFINE_MANY,\n\n /**\n * Definition of prop types for this component.\n *\n * @type {object}\n * @optional\n */\n propTypes: SpecPolicy.DEFINE_MANY,\n\n /**\n * Definition of context types for this component.\n *\n * @type {object}\n * @optional\n */\n contextTypes: SpecPolicy.DEFINE_MANY,\n\n /**\n * Definition of context types this component sets for its children.\n *\n * @type {object}\n * @optional\n */\n childContextTypes: SpecPolicy.DEFINE_MANY,\n\n // ==== Definition methods ====\n\n /**\n * Invoked when the component is mounted. Values in the mapping will be set on\n * `this.props` if that prop is not specified (i.e. using an `in` check).\n *\n * This method is invoked before `getInitialState` and therefore cannot rely\n * on `this.state` or use `this.setState`.\n *\n * @return {object}\n * @optional\n */\n getDefaultProps: SpecPolicy.DEFINE_MANY_MERGED,\n\n /**\n * Invoked once before the component is mounted. The return value will be used\n * as the initial value of `this.state`.\n *\n * getInitialState: function() {\n * return {\n * isOn: false,\n * fooBaz: new BazFoo()\n * }\n * }\n *\n * @return {object}\n * @optional\n */\n getInitialState: SpecPolicy.DEFINE_MANY_MERGED,\n\n /**\n * @return {object}\n * @optional\n */\n getChildContext: SpecPolicy.DEFINE_MANY_MERGED,\n\n /**\n * Uses props from `this.props` and state from `this.state` to render the\n * structure of the component.\n *\n * No guarantees are made about when or how often this method is invoked, so\n * it must not have side effects.\n *\n * render: function() {\n * var name = this.props.name;\n * return <div>Hello, {name}!</div>;\n * }\n *\n * @return {ReactComponent}\n * @nosideeffects\n * @required\n */\n render: SpecPolicy.DEFINE_ONCE,\n\n // ==== Delegate methods ====\n\n /**\n * Invoked when the component is initially created and about to be mounted.\n * This may have side effects, but any external subscriptions or data created\n * by this method must be cleaned up in `componentWillUnmount`.\n *\n * @optional\n */\n componentWillMount: SpecPolicy.DEFINE_MANY,\n\n /**\n * Invoked when the component has been mounted and has a DOM representation.\n * However, there is no guarantee that the DOM node is in the document.\n *\n * Use this as an opportunity to operate on the DOM when the component has\n * been mounted (initialized and rendered) for the first time.\n *\n * @param {DOMElement} rootNode DOM element representing the component.\n * @optional\n */\n componentDidMount: SpecPolicy.DEFINE_MANY,\n\n /**\n * Invoked before the component receives new props.\n *\n * Use this as an opportunity to react to a prop transition by updating the\n * state using `this.setState`. Current props are accessed via `this.props`.\n *\n * componentWillReceiveProps: function(nextProps, nextContext) {\n * this.setState({\n * likesIncreasing: nextProps.likeCount > this.props.likeCount\n * });\n * }\n *\n * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop\n * transition may cause a state change, but the opposite is not true. If you\n * need it, you are probably looking for `componentWillUpdate`.\n *\n * @param {object} nextProps\n * @optional\n */\n componentWillReceiveProps: SpecPolicy.DEFINE_MANY,\n\n /**\n * Invoked while deciding if the component should be updated as a result of\n * receiving new props, state and/or context.\n *\n * Use this as an opportunity to `return false` when you're certain that the\n * transition to the new props/state/context will not require a component\n * update.\n *\n * shouldComponentUpdate: function(nextProps, nextState, nextContext) {\n * return !equal(nextProps, this.props) ||\n * !equal(nextState, this.state) ||\n * !equal(nextContext, this.context);\n * }\n *\n * @param {object} nextProps\n * @param {?object} nextState\n * @param {?object} nextContext\n * @return {boolean} True if the component should update.\n * @optional\n */\n shouldComponentUpdate: SpecPolicy.DEFINE_ONCE,\n\n /**\n * Invoked when the component is about to update due to a transition from\n * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`\n * and `nextContext`.\n *\n * Use this as an opportunity to perform preparation before an update occurs.\n *\n * NOTE: You **cannot** use `this.setState()` in this method.\n *\n * @param {object} nextProps\n * @param {?object} nextState\n * @param {?object} nextContext\n * @param {ReactReconcileTransaction} transaction\n * @optional\n */\n componentWillUpdate: SpecPolicy.DEFINE_MANY,\n\n /**\n * Invoked when the component's DOM representation has been updated.\n *\n * Use this as an opportunity to operate on the DOM when the component has\n * been updated.\n *\n * @param {object} prevProps\n * @param {?object} prevState\n * @param {?object} prevContext\n * @param {DOMElement} rootNode DOM element representing the component.\n * @optional\n */\n componentDidUpdate: SpecPolicy.DEFINE_MANY,\n\n /**\n * Invoked when the component is about to be removed from its parent and have\n * its DOM representation destroyed.\n *\n * Use this as an opportunity to deallocate any external resources.\n *\n * NOTE: There is no `componentDidUnmount` since your component will have been\n * destroyed by that point.\n *\n * @optional\n */\n componentWillUnmount: SpecPolicy.DEFINE_MANY,\n\n // ==== Advanced methods ====\n\n /**\n * Updates the component's currently mounted DOM representation.\n *\n * By default, this implements React's rendering and reconciliation algorithm.\n * Sophisticated clients may wish to override this.\n *\n * @param {ReactReconcileTransaction} transaction\n * @internal\n * @overridable\n */\n updateComponent: SpecPolicy.OVERRIDE_BASE\n\n};\n\n/**\n * Mapping from class specification keys to special processing functions.\n *\n * Although these are declared like instance properties in the specification\n * when defining classes using `React.createClass`, they are actually static\n * and are accessible on the constructor instead of the prototype. Despite\n * being static, they must be defined outside of the \"statics\" key under\n * which all other static methods are defined.\n */\nvar RESERVED_SPEC_KEYS = {\n displayName: function (Constructor, displayName) {\n Constructor.displayName = displayName;\n },\n mixins: function (Constructor, mixins) {\n if (mixins) {\n for (var i = 0; i < mixins.length; i++) {\n mixSpecIntoComponent(Constructor, mixins[i]);\n }\n }\n },\n childContextTypes: function (Constructor, childContextTypes) {\n if (process.env.NODE_ENV !== 'production') {\n validateTypeDef(Constructor, childContextTypes, ReactPropTypeLocations.childContext);\n }\n Constructor.childContextTypes = _assign({}, Constructor.childContextTypes, childContextTypes);\n },\n contextTypes: function (Constructor, contextTypes) {\n if (process.env.NODE_ENV !== 'production') {\n validateTypeDef(Constructor, contextTypes, ReactPropTypeLocations.context);\n }\n Constructor.contextTypes = _assign({}, Constructor.contextTypes, contextTypes);\n },\n /**\n * Special case getDefaultProps which should move into statics but requires\n * automatic merging.\n */\n getDefaultProps: function (Constructor, getDefaultProps) {\n if (Constructor.getDefaultProps) {\n Constructor.getDefaultProps = createMergedResultFunction(Constructor.getDefaultProps, getDefaultProps);\n } else {\n Constructor.getDefaultProps = getDefaultProps;\n }\n },\n propTypes: function (Constructor, propTypes) {\n if (process.env.NODE_ENV !== 'production') {\n validateTypeDef(Constructor, propTypes, ReactPropTypeLocations.prop);\n }\n Constructor.propTypes = _assign({}, Constructor.propTypes, propTypes);\n },\n statics: function (Constructor, statics) {\n mixStaticSpecIntoComponent(Constructor, statics);\n },\n autobind: function () {} };\n\n// noop\nfunction validateTypeDef(Constructor, typeDef, location) {\n for (var propName in typeDef) {\n if (typeDef.hasOwnProperty(propName)) {\n // use a warning instead of an invariant so components\n // don't show up in prod but only in __DEV__\n process.env.NODE_ENV !== 'production' ? warning(typeof typeDef[propName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', Constructor.displayName || 'ReactClass', ReactPropTypeLocationNames[location], propName) : void 0;\n }\n }\n}\n\nfunction validateMethodOverride(isAlreadyDefined, name) {\n var specPolicy = ReactClassInterface.hasOwnProperty(name) ? ReactClassInterface[name] : null;\n\n // Disallow overriding of base class methods unless explicitly allowed.\n if (ReactClassMixin.hasOwnProperty(name)) {\n !(specPolicy === SpecPolicy.OVERRIDE_BASE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to override `%s` from your class specification. Ensure that your method names do not overlap with React methods.', name) : _prodInvariant('73', name) : void 0;\n }\n\n // Disallow defining methods more than once unless explicitly allowed.\n if (isAlreadyDefined) {\n !(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.', name) : _prodInvariant('74', name) : void 0;\n }\n}\n\n/**\n * Mixin helper which handles policy validation and reserved\n * specification keys when building React classes.\n */\nfunction mixSpecIntoComponent(Constructor, spec) {\n if (!spec) {\n if (process.env.NODE_ENV !== 'production') {\n var typeofSpec = typeof spec;\n var isMixinValid = typeofSpec === 'object' && spec !== null;\n\n process.env.NODE_ENV !== 'production' ? warning(isMixinValid, '%s: You\\'re attempting to include a mixin that is either null ' + 'or not an object. Check the mixins included by the component, ' + 'as well as any mixins they include themselves. ' + 'Expected object but got %s.', Constructor.displayName || 'ReactClass', spec === null ? null : typeofSpec) : void 0;\n }\n\n return;\n }\n\n !(typeof spec !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\\'re attempting to use a component class or function as a mixin. Instead, just use a regular object.') : _prodInvariant('75') : void 0;\n !!ReactElement.isValidElement(spec) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\\'re attempting to use a component as a mixin. Instead, just use a regular object.') : _prodInvariant('76') : void 0;\n\n var proto = Constructor.prototype;\n var autoBindPairs = proto.__reactAutoBindPairs;\n\n // By handling mixins before any other properties, we ensure the same\n // chaining order is applied to methods with DEFINE_MANY policy, whether\n // mixins are listed before or after these methods in the spec.\n if (spec.hasOwnProperty(MIXINS_KEY)) {\n RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);\n }\n\n for (var name in spec) {\n if (!spec.hasOwnProperty(name)) {\n continue;\n }\n\n if (name === MIXINS_KEY) {\n // We have already handled mixins in a special case above.\n continue;\n }\n\n var property = spec[name];\n var isAlreadyDefined = proto.hasOwnProperty(name);\n validateMethodOverride(isAlreadyDefined, name);\n\n if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {\n RESERVED_SPEC_KEYS[name](Constructor, property);\n } else {\n // Setup methods on prototype:\n // The following member methods should not be automatically bound:\n // 1. Expected ReactClass methods (in the \"interface\").\n // 2. Overridden methods (that were mixed in).\n var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);\n var isFunction = typeof property === 'function';\n var shouldAutoBind = isFunction && !isReactClassMethod && !isAlreadyDefined && spec.autobind !== false;\n\n if (shouldAutoBind) {\n autoBindPairs.push(name, property);\n proto[name] = property;\n } else {\n if (isAlreadyDefined) {\n var specPolicy = ReactClassInterface[name];\n\n // These cases should already be caught by validateMethodOverride.\n !(isReactClassMethod && (specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: Unexpected spec policy %s for key %s when mixing in component specs.', specPolicy, name) : _prodInvariant('77', specPolicy, name) : void 0;\n\n // For methods which are defined more than once, call the existing\n // methods before calling the new property, merging if appropriate.\n if (specPolicy === SpecPolicy.DEFINE_MANY_MERGED) {\n proto[name] = createMergedResultFunction(proto[name], property);\n } else if (specPolicy === SpecPolicy.DEFINE_MANY) {\n proto[name] = createChainedFunction(proto[name], property);\n }\n } else {\n proto[name] = property;\n if (process.env.NODE_ENV !== 'production') {\n // Add verbose displayName to the function, which helps when looking\n // at profiling tools.\n if (typeof property === 'function' && spec.displayName) {\n proto[name].displayName = spec.displayName + '_' + name;\n }\n }\n }\n }\n }\n }\n}\n\nfunction mixStaticSpecIntoComponent(Constructor, statics) {\n if (!statics) {\n return;\n }\n for (var name in statics) {\n var property = statics[name];\n if (!statics.hasOwnProperty(name)) {\n continue;\n }\n\n var isReserved = name in RESERVED_SPEC_KEYS;\n !!isReserved ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define a reserved property, `%s`, that shouldn\\'t be on the \"statics\" key. Define it as an instance property instead; it will still be accessible on the constructor.', name) : _prodInvariant('78', name) : void 0;\n\n var isInherited = name in Constructor;\n !!isInherited ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.', name) : _prodInvariant('79', name) : void 0;\n Constructor[name] = property;\n }\n}\n\n/**\n * Merge two objects, but throw if both contain the same key.\n *\n * @param {object} one The first object, which is mutated.\n * @param {object} two The second object\n * @return {object} one after it has been mutated to contain everything in two.\n */\nfunction mergeIntoWithNoDuplicateKeys(one, two) {\n !(one && two && typeof one === 'object' && typeof two === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.') : _prodInvariant('80') : void 0;\n\n for (var key in two) {\n if (two.hasOwnProperty(key)) {\n !(one[key] === undefined) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Tried to merge two objects with the same key: `%s`. This conflict may be due to a mixin; in particular, this may be caused by two getInitialState() or getDefaultProps() methods returning objects with clashing keys.', key) : _prodInvariant('81', key) : void 0;\n one[key] = two[key];\n }\n }\n return one;\n}\n\n/**\n * Creates a function that invokes two functions and merges their return values.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\nfunction createMergedResultFunction(one, two) {\n return function mergedResult() {\n var a = one.apply(this, arguments);\n var b = two.apply(this, arguments);\n if (a == null) {\n return b;\n } else if (b == null) {\n return a;\n }\n var c = {};\n mergeIntoWithNoDuplicateKeys(c, a);\n mergeIntoWithNoDuplicateKeys(c, b);\n return c;\n };\n}\n\n/**\n * Creates a function that invokes two functions and ignores their return vales.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\nfunction createChainedFunction(one, two) {\n return function chainedFunction() {\n one.apply(this, arguments);\n two.apply(this, arguments);\n };\n}\n\n/**\n * Binds a method to the component.\n *\n * @param {object} component Component whose method is going to be bound.\n * @param {function} method Method to be bound.\n * @return {function} The bound method.\n */\nfunction bindAutoBindMethod(component, method) {\n var boundMethod = method.bind(component);\n if (process.env.NODE_ENV !== 'production') {\n boundMethod.__reactBoundContext = component;\n boundMethod.__reactBoundMethod = method;\n boundMethod.__reactBoundArguments = null;\n var componentName = component.constructor.displayName;\n var _bind = boundMethod.bind;\n boundMethod.bind = function (newThis) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n // User is trying to bind() an autobound method; we effectively will\n // ignore the value of \"this\" that the user is trying to use, so\n // let's warn.\n if (newThis !== component && newThis !== null) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): React component methods may only be bound to the ' + 'component instance. See %s', componentName) : void 0;\n } else if (!args.length) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): You are binding a component method to the component. ' + 'React does this for you automatically in a high-performance ' + 'way, so you can safely remove this call. See %s', componentName) : void 0;\n return boundMethod;\n }\n var reboundMethod = _bind.apply(boundMethod, arguments);\n reboundMethod.__reactBoundContext = component;\n reboundMethod.__reactBoundMethod = method;\n reboundMethod.__reactBoundArguments = args;\n return reboundMethod;\n };\n }\n return boundMethod;\n}\n\n/**\n * Binds all auto-bound methods in a component.\n *\n * @param {object} component Component whose method is going to be bound.\n */\nfunction bindAutoBindMethods(component) {\n var pairs = component.__reactAutoBindPairs;\n for (var i = 0; i < pairs.length; i += 2) {\n var autoBindKey = pairs[i];\n var method = pairs[i + 1];\n component[autoBindKey] = bindAutoBindMethod(component, method);\n }\n}\n\n/**\n * Add more to the ReactClass base class. These are all legacy features and\n * therefore not already part of the modern ReactComponent.\n */\nvar ReactClassMixin = {\n\n /**\n * TODO: This will be deprecated because state should always keep a consistent\n * type signature and the only use case for this, is to avoid that.\n */\n replaceState: function (newState, callback) {\n this.updater.enqueueReplaceState(this, newState);\n if (callback) {\n this.updater.enqueueCallback(this, callback, 'replaceState');\n }\n },\n\n /**\n * Checks whether or not this composite component is mounted.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function () {\n return this.updater.isMounted(this);\n }\n};\n\nvar ReactClassComponent = function () {};\n_assign(ReactClassComponent.prototype, ReactComponent.prototype, ReactClassMixin);\n\n/**\n * Module for creating composite components.\n *\n * @class ReactClass\n */\nvar ReactClass = {\n\n /**\n * Creates a composite component class given a class specification.\n * See https://facebook.github.io/react/docs/top-level-api.html#react.createclass\n *\n * @param {object} spec Class specification (which must define `render`).\n * @return {function} Component constructor function.\n * @public\n */\n createClass: function (spec) {\n var Constructor = function (props, context, updater) {\n // This constructor gets overridden by mocks. The argument is used\n // by mocks to assert on what gets mounted.\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(this instanceof Constructor, 'Something is calling a React component directly. Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : void 0;\n }\n\n // Wire up auto-binding\n if (this.__reactAutoBindPairs.length) {\n bindAutoBindMethods(this);\n }\n\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n\n this.state = null;\n\n // ReactClasses doesn't have constructors. Instead, they use the\n // getInitialState and componentWillMount methods for initialization.\n\n var initialState = this.getInitialState ? this.getInitialState() : null;\n if (process.env.NODE_ENV !== 'production') {\n // We allow auto-mocks to proceed as if they're returning null.\n if (initialState === undefined && this.getInitialState._isMockFunction) {\n // This is probably bad practice. Consider warning here and\n // deprecating this convenience.\n initialState = null;\n }\n }\n !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getInitialState(): must return an object or null', Constructor.displayName || 'ReactCompositeComponent') : _prodInvariant('82', Constructor.displayName || 'ReactCompositeComponent') : void 0;\n\n this.state = initialState;\n };\n Constructor.prototype = new ReactClassComponent();\n Constructor.prototype.constructor = Constructor;\n Constructor.prototype.__reactAutoBindPairs = [];\n\n injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));\n\n mixSpecIntoComponent(Constructor, spec);\n\n // Initialize the defaultProps property after all mixins have been merged.\n if (Constructor.getDefaultProps) {\n Constructor.defaultProps = Constructor.getDefaultProps();\n }\n\n if (process.env.NODE_ENV !== 'production') {\n // This is a tag to indicate that the use of these method names is ok,\n // since it's used with createClass. If it's not, then it's likely a\n // mistake so we'll warn you to use the static property, property\n // initializer or constructor respectively.\n if (Constructor.getDefaultProps) {\n Constructor.getDefaultProps.isReactClassApproved = {};\n }\n if (Constructor.prototype.getInitialState) {\n Constructor.prototype.getInitialState.isReactClassApproved = {};\n }\n }\n\n !Constructor.prototype.render ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createClass(...): Class specification must implement a `render` method.') : _prodInvariant('83') : void 0;\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentShouldUpdate, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', spec.displayName || 'A component') : void 0;\n process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentWillRecieveProps, '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', spec.displayName || 'A component') : void 0;\n }\n\n // Reduce time spent doing lookups by setting these on the prototype.\n for (var methodName in ReactClassInterface) {\n if (!Constructor.prototype[methodName]) {\n Constructor.prototype[methodName] = null;\n }\n }\n\n return Constructor;\n },\n\n injection: {\n injectMixin: function (mixin) {\n injectedMixins.push(mixin);\n }\n }\n\n};\n\nmodule.exports = ReactClass;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactClass.js\n ** module id = 127\n ** module chunks = 0\n **/","/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMComponentFlags\n */\n\n'use strict';\n\nvar ReactDOMComponentFlags = {\n hasCachedChildNodes: 1 << 0\n};\n\nmodule.exports = ReactDOMComponentFlags;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMComponentFlags.js\n ** module id = 128\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMSelect\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar DisabledInputUtils = require('./DisabledInputUtils');\nvar LinkedValueUtils = require('./LinkedValueUtils');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar warning = require('fbjs/lib/warning');\n\nvar didWarnValueLink = false;\nvar didWarnValueDefaultValue = false;\n\nfunction updateOptionsIfPendingUpdateAndMounted() {\n if (this._rootNodeID && this._wrapperState.pendingUpdate) {\n this._wrapperState.pendingUpdate = false;\n\n var props = this._currentElement.props;\n var value = LinkedValueUtils.getValue(props);\n\n if (value != null) {\n updateOptions(this, Boolean(props.multiple), value);\n }\n }\n}\n\nfunction getDeclarationErrorAddendum(owner) {\n if (owner) {\n var name = owner.getName();\n if (name) {\n return ' Check the render method of `' + name + '`.';\n }\n }\n return '';\n}\n\nvar valuePropNames = ['value', 'defaultValue'];\n\n/**\n * Validation function for `value` and `defaultValue`.\n * @private\n */\nfunction checkSelectPropTypes(inst, props) {\n var owner = inst._currentElement._owner;\n LinkedValueUtils.checkPropTypes('select', props, owner);\n\n if (props.valueLink !== undefined && !didWarnValueLink) {\n process.env.NODE_ENV !== 'production' ? warning(false, '`valueLink` prop on `select` is deprecated; set `value` and `onChange` instead.') : void 0;\n didWarnValueLink = true;\n }\n\n for (var i = 0; i < valuePropNames.length; i++) {\n var propName = valuePropNames[i];\n if (props[propName] == null) {\n continue;\n }\n var isArray = Array.isArray(props[propName]);\n if (props.multiple && !isArray) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum(owner)) : void 0;\n } else if (!props.multiple && isArray) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum(owner)) : void 0;\n }\n }\n}\n\n/**\n * @param {ReactDOMComponent} inst\n * @param {boolean} multiple\n * @param {*} propValue A stringable (with `multiple`, a list of stringables).\n * @private\n */\nfunction updateOptions(inst, multiple, propValue) {\n var selectedValue, i;\n var options = ReactDOMComponentTree.getNodeFromInstance(inst).options;\n\n if (multiple) {\n selectedValue = {};\n for (i = 0; i < propValue.length; i++) {\n selectedValue['' + propValue[i]] = true;\n }\n for (i = 0; i < options.length; i++) {\n var selected = selectedValue.hasOwnProperty(options[i].value);\n if (options[i].selected !== selected) {\n options[i].selected = selected;\n }\n }\n } else {\n // Do not set `select.value` as exact behavior isn't consistent across all\n // browsers for all cases.\n selectedValue = '' + propValue;\n for (i = 0; i < options.length; i++) {\n if (options[i].value === selectedValue) {\n options[i].selected = true;\n return;\n }\n }\n if (options.length) {\n options[0].selected = true;\n }\n }\n}\n\n/**\n * Implements a <select> host component that allows optionally setting the\n * props `value` and `defaultValue`. If `multiple` is false, the prop must be a\n * stringable. If `multiple` is true, the prop must be an array of stringables.\n *\n * If `value` is not supplied (or null/undefined), user actions that change the\n * selected option will trigger updates to the rendered options.\n *\n * If it is supplied (and not null/undefined), the rendered options will not\n * update in response to user actions. Instead, the `value` prop must change in\n * order for the rendered options to update.\n *\n * If `defaultValue` is provided, any options with the supplied values will be\n * selected.\n */\nvar ReactDOMSelect = {\n getHostProps: function (inst, props) {\n return _assign({}, DisabledInputUtils.getHostProps(inst, props), {\n onChange: inst._wrapperState.onChange,\n value: undefined\n });\n },\n\n mountWrapper: function (inst, props) {\n if (process.env.NODE_ENV !== 'production') {\n checkSelectPropTypes(inst, props);\n }\n\n var value = LinkedValueUtils.getValue(props);\n inst._wrapperState = {\n pendingUpdate: false,\n initialValue: value != null ? value : props.defaultValue,\n listeners: null,\n onChange: _handleChange.bind(inst),\n wasMultiple: Boolean(props.multiple)\n };\n\n if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'Select elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled select ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components') : void 0;\n didWarnValueDefaultValue = true;\n }\n },\n\n getSelectValueContext: function (inst) {\n // ReactDOMOption looks at this initial value so the initial generated\n // markup has correct `selected` attributes\n return inst._wrapperState.initialValue;\n },\n\n postUpdateWrapper: function (inst) {\n var props = inst._currentElement.props;\n\n // After the initial mount, we control selected-ness manually so don't pass\n // this value down\n inst._wrapperState.initialValue = undefined;\n\n var wasMultiple = inst._wrapperState.wasMultiple;\n inst._wrapperState.wasMultiple = Boolean(props.multiple);\n\n var value = LinkedValueUtils.getValue(props);\n if (value != null) {\n inst._wrapperState.pendingUpdate = false;\n updateOptions(inst, Boolean(props.multiple), value);\n } else if (wasMultiple !== Boolean(props.multiple)) {\n // For simplicity, reapply `defaultValue` if `multiple` is toggled.\n if (props.defaultValue != null) {\n updateOptions(inst, Boolean(props.multiple), props.defaultValue);\n } else {\n // Revert the select back to its default unselected state.\n updateOptions(inst, Boolean(props.multiple), props.multiple ? [] : '');\n }\n }\n }\n};\n\nfunction _handleChange(event) {\n var props = this._currentElement.props;\n var returnValue = LinkedValueUtils.executeOnChange(props, event);\n\n if (this._rootNodeID) {\n this._wrapperState.pendingUpdate = true;\n }\n ReactUpdates.asap(updateOptionsIfPendingUpdateAndMounted, this);\n return returnValue;\n}\n\nmodule.exports = ReactDOMSelect;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMSelect.js\n ** module id = 129\n ** module chunks = 0\n **/","/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactElementValidator\n */\n\n/**\n * ReactElementValidator provides a wrapper around a element factory\n * which validates the props passed to the element. This is intended to be\n * used only in DEV and could be replaced by a static type checker for languages\n * that support it.\n */\n\n'use strict';\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactComponentTreeHook = require('./ReactComponentTreeHook');\nvar ReactElement = require('./ReactElement');\nvar ReactPropTypeLocations = require('./ReactPropTypeLocations');\n\nvar checkReactTypeSpec = require('./checkReactTypeSpec');\n\nvar canDefineProperty = require('./canDefineProperty');\nvar getIteratorFn = require('./getIteratorFn');\nvar warning = require('fbjs/lib/warning');\n\nfunction getDeclarationErrorAddendum() {\n if (ReactCurrentOwner.current) {\n var name = ReactCurrentOwner.current.getName();\n if (name) {\n return ' Check the render method of `' + name + '`.';\n }\n }\n return '';\n}\n\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n if (parentName) {\n info = ' Check the top-level render call using <' + parentName + '>.';\n }\n }\n return info;\n}\n\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\nfunction validateExplicitKey(element, parentType) {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n element._store.validated = true;\n\n var memoizer = ownerHasKeyUseWarning.uniqueKey || (ownerHasKeyUseWarning.uniqueKey = {});\n\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n if (memoizer[currentComponentErrorInfo]) {\n return;\n }\n memoizer[currentComponentErrorInfo] = true;\n\n // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n var childOwner = '';\n if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n // Give the component that originally created this child.\n childOwner = ' It was passed a child from ' + element._owner.getName() + '.';\n }\n\n process.env.NODE_ENV !== 'production' ? warning(false, 'Each child in an array or iterator should have a unique \"key\" prop.' + '%s%s See https://fb.me/react-warning-keys for more information.%s', currentComponentErrorInfo, childOwner, ReactComponentTreeHook.getCurrentStackAddendum(element)) : void 0;\n}\n\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\nfunction validateChildKeys(node, parentType) {\n if (typeof node !== 'object') {\n return;\n }\n if (Array.isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n if (ReactElement.isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (ReactElement.isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n // Entry iterators provide implicit keys.\n if (iteratorFn) {\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n while (!(step = iterator.next()).done) {\n if (ReactElement.isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n}\n\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\nfunction validatePropTypes(element) {\n var componentClass = element.type;\n if (typeof componentClass !== 'function') {\n return;\n }\n var name = componentClass.displayName || componentClass.name;\n if (componentClass.propTypes) {\n checkReactTypeSpec(componentClass.propTypes, element.props, ReactPropTypeLocations.prop, name, element, null);\n }\n if (typeof componentClass.getDefaultProps === 'function') {\n process.env.NODE_ENV !== 'production' ? warning(componentClass.getDefaultProps.isReactClassApproved, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.') : void 0;\n }\n}\n\nvar ReactElementValidator = {\n\n createElement: function (type, props, children) {\n var validType = typeof type === 'string' || typeof type === 'function';\n // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n if (!validType) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'React.createElement: type should not be null, undefined, boolean, or ' + 'number. It should be a string (for DOM elements) or a ReactClass ' + '(for composite components).%s', getDeclarationErrorAddendum()) : void 0;\n }\n\n var element = ReactElement.createElement.apply(this, arguments);\n\n // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n if (element == null) {\n return element;\n }\n\n // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n if (validType) {\n for (var i = 2; i < arguments.length; i++) {\n validateChildKeys(arguments[i], type);\n }\n }\n\n validatePropTypes(element);\n\n return element;\n },\n\n createFactory: function (type) {\n var validatedFactory = ReactElementValidator.createElement.bind(null, type);\n // Legacy hook TODO: Warn if this is accessed\n validatedFactory.type = type;\n\n if (process.env.NODE_ENV !== 'production') {\n if (canDefineProperty) {\n Object.defineProperty(validatedFactory, 'type', {\n enumerable: false,\n get: function () {\n process.env.NODE_ENV !== 'production' ? warning(false, 'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.') : void 0;\n Object.defineProperty(this, 'type', {\n value: type\n });\n return type;\n }\n });\n }\n }\n\n return validatedFactory;\n },\n\n cloneElement: function (element, props, children) {\n var newElement = ReactElement.cloneElement.apply(this, arguments);\n for (var i = 2; i < arguments.length; i++) {\n validateChildKeys(arguments[i], newElement.type);\n }\n validatePropTypes(newElement);\n return newElement;\n }\n\n};\n\nmodule.exports = ReactElementValidator;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactElementValidator.js\n ** module id = 130\n ** module chunks = 0\n **/","/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactEmptyComponent\n */\n\n'use strict';\n\nvar emptyComponentFactory;\n\nvar ReactEmptyComponentInjection = {\n injectEmptyComponentFactory: function (factory) {\n emptyComponentFactory = factory;\n }\n};\n\nvar ReactEmptyComponent = {\n create: function (instantiate) {\n return emptyComponentFactory(instantiate);\n }\n};\n\nReactEmptyComponent.injection = ReactEmptyComponentInjection;\n\nmodule.exports = ReactEmptyComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactEmptyComponent.js\n ** module id = 131\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactFeatureFlags\n * \n */\n\n'use strict';\n\nvar ReactFeatureFlags = {\n // When true, call console.time() before and .timeEnd() after each top-level\n // render (both initial renders and updates). Useful when looking at prod-mode\n // timeline profiles in Chrome, for example.\n logTopLevelRenders: false\n};\n\nmodule.exports = ReactFeatureFlags;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactFeatureFlags.js\n ** module id = 132\n ** module chunks = 0\n **/","/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactHostComponent\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant'),\n _assign = require('object-assign');\n\nvar invariant = require('fbjs/lib/invariant');\n\nvar genericComponentClass = null;\n// This registry keeps track of wrapper classes around host tags.\nvar tagToComponentClass = {};\nvar textComponentClass = null;\n\nvar ReactHostComponentInjection = {\n // This accepts a class that receives the tag string. This is a catch all\n // that can render any kind of tag.\n injectGenericComponentClass: function (componentClass) {\n genericComponentClass = componentClass;\n },\n // This accepts a text component class that takes the text string to be\n // rendered as props.\n injectTextComponentClass: function (componentClass) {\n textComponentClass = componentClass;\n },\n // This accepts a keyed object with classes as values. Each key represents a\n // tag. That particular tag will use this class instead of the generic one.\n injectComponentClasses: function (componentClasses) {\n _assign(tagToComponentClass, componentClasses);\n }\n};\n\n/**\n * Get a host internal component class for a specific tag.\n *\n * @param {ReactElement} element The element to create.\n * @return {function} The internal class constructor function.\n */\nfunction createInternalComponent(element) {\n !genericComponentClass ? process.env.NODE_ENV !== 'production' ? invariant(false, 'There is no registered component for the tag %s', element.type) : _prodInvariant('111', element.type) : void 0;\n return new genericComponentClass(element);\n}\n\n/**\n * @param {ReactText} text\n * @return {ReactComponent}\n */\nfunction createInstanceForText(text) {\n return new textComponentClass(text);\n}\n\n/**\n * @param {ReactComponent} component\n * @return {boolean}\n */\nfunction isTextComponent(component) {\n return component instanceof textComponentClass;\n}\n\nvar ReactHostComponent = {\n createInternalComponent: createInternalComponent,\n createInstanceForText: createInstanceForText,\n isTextComponent: isTextComponent,\n injection: ReactHostComponentInjection\n};\n\nmodule.exports = ReactHostComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactHostComponent.js\n ** module id = 133\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInputSelection\n */\n\n'use strict';\n\nvar ReactDOMSelection = require('./ReactDOMSelection');\n\nvar containsNode = require('fbjs/lib/containsNode');\nvar focusNode = require('fbjs/lib/focusNode');\nvar getActiveElement = require('fbjs/lib/getActiveElement');\n\nfunction isInDocument(node) {\n return containsNode(document.documentElement, node);\n}\n\n/**\n * @ReactInputSelection: React input selection module. Based on Selection.js,\n * but modified to be suitable for react and has a couple of bug fixes (doesn't\n * assume buttons have range selections allowed).\n * Input selection module for React.\n */\nvar ReactInputSelection = {\n\n hasSelectionCapabilities: function (elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return nodeName && (nodeName === 'input' && elem.type === 'text' || nodeName === 'textarea' || elem.contentEditable === 'true');\n },\n\n getSelectionInformation: function () {\n var focusedElem = getActiveElement();\n return {\n focusedElem: focusedElem,\n selectionRange: ReactInputSelection.hasSelectionCapabilities(focusedElem) ? ReactInputSelection.getSelection(focusedElem) : null\n };\n },\n\n /**\n * @restoreSelection: If any selection information was potentially lost,\n * restore it. This is useful when performing operations that could remove dom\n * nodes and place them back in, resulting in focus being lost.\n */\n restoreSelection: function (priorSelectionInformation) {\n var curFocusedElem = getActiveElement();\n var priorFocusedElem = priorSelectionInformation.focusedElem;\n var priorSelectionRange = priorSelectionInformation.selectionRange;\n if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {\n if (ReactInputSelection.hasSelectionCapabilities(priorFocusedElem)) {\n ReactInputSelection.setSelection(priorFocusedElem, priorSelectionRange);\n }\n focusNode(priorFocusedElem);\n }\n },\n\n /**\n * @getSelection: Gets the selection bounds of a focused textarea, input or\n * contentEditable node.\n * -@input: Look up selection bounds of this input\n * -@return {start: selectionStart, end: selectionEnd}\n */\n getSelection: function (input) {\n var selection;\n\n if ('selectionStart' in input) {\n // Modern browser with input or textarea.\n selection = {\n start: input.selectionStart,\n end: input.selectionEnd\n };\n } else if (document.selection && input.nodeName && input.nodeName.toLowerCase() === 'input') {\n // IE8 input.\n var range = document.selection.createRange();\n // There can only be one selection per document in IE, so it must\n // be in our element.\n if (range.parentElement() === input) {\n selection = {\n start: -range.moveStart('character', -input.value.length),\n end: -range.moveEnd('character', -input.value.length)\n };\n }\n } else {\n // Content editable or old IE textarea.\n selection = ReactDOMSelection.getOffsets(input);\n }\n\n return selection || { start: 0, end: 0 };\n },\n\n /**\n * @setSelection: Sets the selection bounds of a textarea or input and focuses\n * the input.\n * -@input Set selection bounds of this input or textarea\n * -@offsets Object of same form that is returned from get*\n */\n setSelection: function (input, offsets) {\n var start = offsets.start;\n var end = offsets.end;\n if (end === undefined) {\n end = start;\n }\n\n if ('selectionStart' in input) {\n input.selectionStart = start;\n input.selectionEnd = Math.min(end, input.value.length);\n } else if (document.selection && input.nodeName && input.nodeName.toLowerCase() === 'input') {\n var range = input.createTextRange();\n range.collapse(true);\n range.moveStart('character', start);\n range.moveEnd('character', end - start);\n range.select();\n } else {\n ReactDOMSelection.setOffsets(input, offsets);\n }\n }\n};\n\nmodule.exports = ReactInputSelection;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactInputSelection.js\n ** module id = 134\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactMount\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar DOMLazyTree = require('./DOMLazyTree');\nvar DOMProperty = require('./DOMProperty');\nvar ReactBrowserEventEmitter = require('./ReactBrowserEventEmitter');\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactDOMContainerInfo = require('./ReactDOMContainerInfo');\nvar ReactDOMFeatureFlags = require('./ReactDOMFeatureFlags');\nvar ReactElement = require('./ReactElement');\nvar ReactFeatureFlags = require('./ReactFeatureFlags');\nvar ReactInstanceMap = require('./ReactInstanceMap');\nvar ReactInstrumentation = require('./ReactInstrumentation');\nvar ReactMarkupChecksum = require('./ReactMarkupChecksum');\nvar ReactReconciler = require('./ReactReconciler');\nvar ReactUpdateQueue = require('./ReactUpdateQueue');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar instantiateReactComponent = require('./instantiateReactComponent');\nvar invariant = require('fbjs/lib/invariant');\nvar setInnerHTML = require('./setInnerHTML');\nvar shouldUpdateReactComponent = require('./shouldUpdateReactComponent');\nvar warning = require('fbjs/lib/warning');\n\nvar ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;\nvar ROOT_ATTR_NAME = DOMProperty.ROOT_ATTRIBUTE_NAME;\n\nvar ELEMENT_NODE_TYPE = 1;\nvar DOC_NODE_TYPE = 9;\nvar DOCUMENT_FRAGMENT_NODE_TYPE = 11;\n\nvar instancesByReactRootID = {};\n\n/**\n * Finds the index of the first character\n * that's not common between the two given strings.\n *\n * @return {number} the index of the character where the strings diverge\n */\nfunction firstDifferenceIndex(string1, string2) {\n var minLen = Math.min(string1.length, string2.length);\n for (var i = 0; i < minLen; i++) {\n if (string1.charAt(i) !== string2.charAt(i)) {\n return i;\n }\n }\n return string1.length === string2.length ? -1 : minLen;\n}\n\n/**\n * @param {DOMElement|DOMDocument} container DOM element that may contain\n * a React component\n * @return {?*} DOM element that may have the reactRoot ID, or null.\n */\nfunction getReactRootElementInContainer(container) {\n if (!container) {\n return null;\n }\n\n if (container.nodeType === DOC_NODE_TYPE) {\n return container.documentElement;\n } else {\n return container.firstChild;\n }\n}\n\nfunction internalGetID(node) {\n // If node is something like a window, document, or text node, none of\n // which support attributes or a .getAttribute method, gracefully return\n // the empty string, as if the attribute were missing.\n return node.getAttribute && node.getAttribute(ATTR_NAME) || '';\n}\n\n/**\n * Mounts this component and inserts it into the DOM.\n *\n * @param {ReactComponent} componentInstance The instance to mount.\n * @param {DOMElement} container DOM element to mount into.\n * @param {ReactReconcileTransaction} transaction\n * @param {boolean} shouldReuseMarkup If true, do not insert markup\n */\nfunction mountComponentIntoNode(wrapperInstance, container, transaction, shouldReuseMarkup, context) {\n var markerName;\n if (ReactFeatureFlags.logTopLevelRenders) {\n var wrappedElement = wrapperInstance._currentElement.props;\n var type = wrappedElement.type;\n markerName = 'React mount: ' + (typeof type === 'string' ? type : type.displayName || type.name);\n console.time(markerName);\n }\n\n var markup = ReactReconciler.mountComponent(wrapperInstance, transaction, null, ReactDOMContainerInfo(wrapperInstance, container), context, 0 /* parentDebugID */\n );\n\n if (markerName) {\n console.timeEnd(markerName);\n }\n\n wrapperInstance._renderedComponent._topLevelWrapper = wrapperInstance;\n ReactMount._mountImageIntoNode(markup, container, wrapperInstance, shouldReuseMarkup, transaction);\n}\n\n/**\n * Batched mount.\n *\n * @param {ReactComponent} componentInstance The instance to mount.\n * @param {DOMElement} container DOM element to mount into.\n * @param {boolean} shouldReuseMarkup If true, do not insert markup\n */\nfunction batchedMountComponentIntoNode(componentInstance, container, shouldReuseMarkup, context) {\n var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(\n /* useCreateElement */\n !shouldReuseMarkup && ReactDOMFeatureFlags.useCreateElement);\n transaction.perform(mountComponentIntoNode, null, componentInstance, container, transaction, shouldReuseMarkup, context);\n ReactUpdates.ReactReconcileTransaction.release(transaction);\n}\n\n/**\n * Unmounts a component and removes it from the DOM.\n *\n * @param {ReactComponent} instance React component instance.\n * @param {DOMElement} container DOM element to unmount from.\n * @final\n * @internal\n * @see {ReactMount.unmountComponentAtNode}\n */\nfunction unmountComponentFromNode(instance, container, safely) {\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onBeginFlush();\n }\n ReactReconciler.unmountComponent(instance, safely);\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onEndFlush();\n }\n\n if (container.nodeType === DOC_NODE_TYPE) {\n container = container.documentElement;\n }\n\n // http://jsperf.com/emptying-a-node\n while (container.lastChild) {\n container.removeChild(container.lastChild);\n }\n}\n\n/**\n * True if the supplied DOM node has a direct React-rendered child that is\n * not a React root element. Useful for warning in `render`,\n * `unmountComponentAtNode`, etc.\n *\n * @param {?DOMElement} node The candidate DOM node.\n * @return {boolean} True if the DOM element contains a direct child that was\n * rendered by React but is not a root element.\n * @internal\n */\nfunction hasNonRootReactChild(container) {\n var rootEl = getReactRootElementInContainer(container);\n if (rootEl) {\n var inst = ReactDOMComponentTree.getInstanceFromNode(rootEl);\n return !!(inst && inst._hostParent);\n }\n}\n\n/**\n * True if the supplied DOM node is a React DOM element and\n * it has been rendered by another copy of React.\n *\n * @param {?DOMElement} node The candidate DOM node.\n * @return {boolean} True if the DOM has been rendered by another copy of React\n * @internal\n */\nfunction nodeIsRenderedByOtherInstance(container) {\n var rootEl = getReactRootElementInContainer(container);\n return !!(rootEl && isReactNode(rootEl) && !ReactDOMComponentTree.getInstanceFromNode(rootEl));\n}\n\n/**\n * True if the supplied DOM node is a valid node element.\n *\n * @param {?DOMElement} node The candidate DOM node.\n * @return {boolean} True if the DOM is a valid DOM node.\n * @internal\n */\nfunction isValidContainer(node) {\n return !!(node && (node.nodeType === ELEMENT_NODE_TYPE || node.nodeType === DOC_NODE_TYPE || node.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE));\n}\n\n/**\n * True if the supplied DOM node is a valid React node element.\n *\n * @param {?DOMElement} node The candidate DOM node.\n * @return {boolean} True if the DOM is a valid React DOM node.\n * @internal\n */\nfunction isReactNode(node) {\n return isValidContainer(node) && (node.hasAttribute(ROOT_ATTR_NAME) || node.hasAttribute(ATTR_NAME));\n}\n\nfunction getHostRootInstanceInContainer(container) {\n var rootEl = getReactRootElementInContainer(container);\n var prevHostInstance = rootEl && ReactDOMComponentTree.getInstanceFromNode(rootEl);\n return prevHostInstance && !prevHostInstance._hostParent ? prevHostInstance : null;\n}\n\nfunction getTopLevelWrapperInContainer(container) {\n var root = getHostRootInstanceInContainer(container);\n return root ? root._hostContainerInfo._topLevelWrapper : null;\n}\n\n/**\n * Temporary (?) hack so that we can store all top-level pending updates on\n * composites instead of having to worry about different types of components\n * here.\n */\nvar topLevelRootCounter = 1;\nvar TopLevelWrapper = function () {\n this.rootID = topLevelRootCounter++;\n};\nTopLevelWrapper.prototype.isReactComponent = {};\nif (process.env.NODE_ENV !== 'production') {\n TopLevelWrapper.displayName = 'TopLevelWrapper';\n}\nTopLevelWrapper.prototype.render = function () {\n // this.props is actually a ReactElement\n return this.props;\n};\n\n/**\n * Mounting is the process of initializing a React component by creating its\n * representative DOM elements and inserting them into a supplied `container`.\n * Any prior content inside `container` is destroyed in the process.\n *\n * ReactMount.render(\n * component,\n * document.getElementById('container')\n * );\n *\n * <div id=\"container\"> <-- Supplied `container`.\n * <div data-reactid=\".3\"> <-- Rendered reactRoot of React\n * // ... component.\n * </div>\n * </div>\n *\n * Inside of `container`, the first element rendered is the \"reactRoot\".\n */\nvar ReactMount = {\n\n TopLevelWrapper: TopLevelWrapper,\n\n /**\n * Used by devtools. The keys are not important.\n */\n _instancesByReactRootID: instancesByReactRootID,\n\n /**\n * This is a hook provided to support rendering React components while\n * ensuring that the apparent scroll position of its `container` does not\n * change.\n *\n * @param {DOMElement} container The `container` being rendered into.\n * @param {function} renderCallback This must be called once to do the render.\n */\n scrollMonitor: function (container, renderCallback) {\n renderCallback();\n },\n\n /**\n * Take a component that's already mounted into the DOM and replace its props\n * @param {ReactComponent} prevComponent component instance already in the DOM\n * @param {ReactElement} nextElement component instance to render\n * @param {DOMElement} container container to render into\n * @param {?function} callback function triggered on completion\n */\n _updateRootComponent: function (prevComponent, nextElement, nextContext, container, callback) {\n ReactMount.scrollMonitor(container, function () {\n ReactUpdateQueue.enqueueElementInternal(prevComponent, nextElement, nextContext);\n if (callback) {\n ReactUpdateQueue.enqueueCallbackInternal(prevComponent, callback);\n }\n });\n\n return prevComponent;\n },\n\n /**\n * Render a new component into the DOM. Hooked by hooks!\n *\n * @param {ReactElement} nextElement element to render\n * @param {DOMElement} container container to render into\n * @param {boolean} shouldReuseMarkup if we should skip the markup insertion\n * @return {ReactComponent} nextComponent\n */\n _renderNewRootComponent: function (nextElement, container, shouldReuseMarkup, context) {\n // Various parts of our code (such as ReactCompositeComponent's\n // _renderValidatedComponent) assume that calls to render aren't nested;\n // verify that that's the case.\n process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, '_renderNewRootComponent(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from ' + 'render is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : void 0;\n\n !isValidContainer(container) ? process.env.NODE_ENV !== 'production' ? invariant(false, '_registerComponent(...): Target container is not a DOM element.') : _prodInvariant('37') : void 0;\n\n ReactBrowserEventEmitter.ensureScrollValueMonitoring();\n var componentInstance = instantiateReactComponent(nextElement, false);\n\n // The initial render is synchronous but any updates that happen during\n // rendering, in componentWillMount or componentDidMount, will be batched\n // according to the current batching strategy.\n\n ReactUpdates.batchedUpdates(batchedMountComponentIntoNode, componentInstance, container, shouldReuseMarkup, context);\n\n var wrapperID = componentInstance._instance.rootID;\n instancesByReactRootID[wrapperID] = componentInstance;\n\n return componentInstance;\n },\n\n /**\n * Renders a React component into the DOM in the supplied `container`.\n *\n * If the React component was previously rendered into `container`, this will\n * perform an update on it and only mutate the DOM as necessary to reflect the\n * latest React component.\n *\n * @param {ReactComponent} parentComponent The conceptual parent of this render tree.\n * @param {ReactElement} nextElement Component element to render.\n * @param {DOMElement} container DOM element to render into.\n * @param {?function} callback function triggered on completion\n * @return {ReactComponent} Component instance rendered in `container`.\n */\n renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {\n !(parentComponent != null && ReactInstanceMap.has(parentComponent)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'parentComponent must be a valid React Component') : _prodInvariant('38') : void 0;\n return ReactMount._renderSubtreeIntoContainer(parentComponent, nextElement, container, callback);\n },\n\n _renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {\n ReactUpdateQueue.validateCallback(callback, 'ReactDOM.render');\n !ReactElement.isValidElement(nextElement) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOM.render(): Invalid component element.%s', typeof nextElement === 'string' ? ' Instead of passing a string like \\'div\\', pass ' + 'React.createElement(\\'div\\') or <div />.' : typeof nextElement === 'function' ? ' Instead of passing a class like Foo, pass ' + 'React.createElement(Foo) or <Foo />.' :\n // Check if it quacks like an element\n nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : _prodInvariant('39', typeof nextElement === 'string' ? ' Instead of passing a string like \\'div\\', pass ' + 'React.createElement(\\'div\\') or <div />.' : typeof nextElement === 'function' ? ' Instead of passing a class like Foo, pass ' + 'React.createElement(Foo) or <Foo />.' : nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : void 0;\n\n process.env.NODE_ENV !== 'production' ? warning(!container || !container.tagName || container.tagName.toUpperCase() !== 'BODY', 'render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.') : void 0;\n\n var nextWrappedElement = ReactElement(TopLevelWrapper, null, null, null, null, null, nextElement);\n\n var nextContext;\n if (parentComponent) {\n var parentInst = ReactInstanceMap.get(parentComponent);\n nextContext = parentInst._processChildContext(parentInst._context);\n } else {\n nextContext = emptyObject;\n }\n\n var prevComponent = getTopLevelWrapperInContainer(container);\n\n if (prevComponent) {\n var prevWrappedElement = prevComponent._currentElement;\n var prevElement = prevWrappedElement.props;\n if (shouldUpdateReactComponent(prevElement, nextElement)) {\n var publicInst = prevComponent._renderedComponent.getPublicInstance();\n var updatedCallback = callback && function () {\n callback.call(publicInst);\n };\n ReactMount._updateRootComponent(prevComponent, nextWrappedElement, nextContext, container, updatedCallback);\n return publicInst;\n } else {\n ReactMount.unmountComponentAtNode(container);\n }\n }\n\n var reactRootElement = getReactRootElementInContainer(container);\n var containerHasReactMarkup = reactRootElement && !!internalGetID(reactRootElement);\n var containerHasNonRootReactChild = hasNonRootReactChild(container);\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.') : void 0;\n\n if (!containerHasReactMarkup || reactRootElement.nextSibling) {\n var rootElementSibling = reactRootElement;\n while (rootElementSibling) {\n if (internalGetID(rootElementSibling)) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'render(): Target node has markup rendered by React, but there ' + 'are unrelated nodes as well. This is most commonly caused by ' + 'white-space inserted around server-rendered markup.') : void 0;\n break;\n }\n rootElementSibling = rootElementSibling.nextSibling;\n }\n }\n }\n\n var shouldReuseMarkup = containerHasReactMarkup && !prevComponent && !containerHasNonRootReactChild;\n var component = ReactMount._renderNewRootComponent(nextWrappedElement, container, shouldReuseMarkup, nextContext)._renderedComponent.getPublicInstance();\n if (callback) {\n callback.call(component);\n }\n return component;\n },\n\n /**\n * Renders a React component into the DOM in the supplied `container`.\n * See https://facebook.github.io/react/docs/top-level-api.html#reactdom.render\n *\n * If the React component was previously rendered into `container`, this will\n * perform an update on it and only mutate the DOM as necessary to reflect the\n * latest React component.\n *\n * @param {ReactElement} nextElement Component element to render.\n * @param {DOMElement} container DOM element to render into.\n * @param {?function} callback function triggered on completion\n * @return {ReactComponent} Component instance rendered in `container`.\n */\n render: function (nextElement, container, callback) {\n return ReactMount._renderSubtreeIntoContainer(null, nextElement, container, callback);\n },\n\n /**\n * Unmounts and destroys the React component rendered in the `container`.\n * See https://facebook.github.io/react/docs/top-level-api.html#reactdom.unmountcomponentatnode\n *\n * @param {DOMElement} container DOM element containing a React component.\n * @return {boolean} True if a component was found in and unmounted from\n * `container`\n */\n unmountComponentAtNode: function (container) {\n // Various parts of our code (such as ReactCompositeComponent's\n // _renderValidatedComponent) assume that calls to render aren't nested;\n // verify that that's the case. (Strictly speaking, unmounting won't cause a\n // render but we still don't expect to be in a render call here.)\n process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, 'unmountComponentAtNode(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from render ' + 'is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : void 0;\n\n !isValidContainer(container) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'unmountComponentAtNode(...): Target container is not a DOM element.') : _prodInvariant('40') : void 0;\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(!nodeIsRenderedByOtherInstance(container), 'unmountComponentAtNode(): The node you\\'re attempting to unmount ' + 'was rendered by another copy of React.') : void 0;\n }\n\n var prevComponent = getTopLevelWrapperInContainer(container);\n if (!prevComponent) {\n // Check if the node being unmounted was rendered by React, but isn't a\n // root node.\n var containerHasNonRootReactChild = hasNonRootReactChild(container);\n\n // Check if the container itself is a React root node.\n var isContainerReactRoot = container.nodeType === 1 && container.hasAttribute(ROOT_ATTR_NAME);\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'unmountComponentAtNode(): The node you\\'re attempting to unmount ' + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.') : void 0;\n }\n\n return false;\n }\n delete instancesByReactRootID[prevComponent._instance.rootID];\n ReactUpdates.batchedUpdates(unmountComponentFromNode, prevComponent, container, false);\n return true;\n },\n\n _mountImageIntoNode: function (markup, container, instance, shouldReuseMarkup, transaction) {\n !isValidContainer(container) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mountComponentIntoNode(...): Target container is not valid.') : _prodInvariant('41') : void 0;\n\n if (shouldReuseMarkup) {\n var rootElement = getReactRootElementInContainer(container);\n if (ReactMarkupChecksum.canReuseMarkup(markup, rootElement)) {\n ReactDOMComponentTree.precacheNode(instance, rootElement);\n return;\n } else {\n var checksum = rootElement.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n rootElement.removeAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n\n var rootMarkup = rootElement.outerHTML;\n rootElement.setAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME, checksum);\n\n var normalizedMarkup = markup;\n if (process.env.NODE_ENV !== 'production') {\n // because rootMarkup is retrieved from the DOM, various normalizations\n // will have occurred which will not be present in `markup`. Here,\n // insert markup into a <div> or <iframe> depending on the container\n // type to perform the same normalizations before comparing.\n var normalizer;\n if (container.nodeType === ELEMENT_NODE_TYPE) {\n normalizer = document.createElement('div');\n normalizer.innerHTML = markup;\n normalizedMarkup = normalizer.innerHTML;\n } else {\n normalizer = document.createElement('iframe');\n document.body.appendChild(normalizer);\n normalizer.contentDocument.write(markup);\n normalizedMarkup = normalizer.contentDocument.documentElement.outerHTML;\n document.body.removeChild(normalizer);\n }\n }\n\n var diffIndex = firstDifferenceIndex(normalizedMarkup, rootMarkup);\n var difference = ' (client) ' + normalizedMarkup.substring(diffIndex - 20, diffIndex + 20) + '\\n (server) ' + rootMarkup.substring(diffIndex - 20, diffIndex + 20);\n\n !(container.nodeType !== DOC_NODE_TYPE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'You\\'re trying to render a component to the document using server rendering but the checksum was invalid. This usually means you rendered a different component type or props on the client from the one on the server, or your render() methods are impure. React cannot handle this case due to cross-browser quirks by rendering at the document root. You should look for environment dependent code in your components and ensure the props are the same client and server side:\\n%s', difference) : _prodInvariant('42', difference) : void 0;\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(false, 'React attempted to reuse markup in a container but the ' + 'checksum was invalid. This generally means that you are ' + 'using server rendering and the markup generated on the ' + 'server was not what the client was expecting. React injected ' + 'new markup to compensate which works but you have lost many ' + 'of the benefits of server rendering. Instead, figure out ' + 'why the markup being generated is different on the client ' + 'or server:\\n%s', difference) : void 0;\n }\n }\n }\n\n !(container.nodeType !== DOC_NODE_TYPE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'You\\'re trying to render a component to the document but you didn\\'t use server rendering. We can\\'t do this without using server rendering due to cross-browser quirks. See ReactDOMServer.renderToString() for server rendering.') : _prodInvariant('43') : void 0;\n\n if (transaction.useCreateElement) {\n while (container.lastChild) {\n container.removeChild(container.lastChild);\n }\n DOMLazyTree.insertTreeBefore(container, markup, null);\n } else {\n setInnerHTML(container, markup);\n ReactDOMComponentTree.precacheNode(instance, container.firstChild);\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var hostNode = ReactDOMComponentTree.getInstanceFromNode(container.firstChild);\n if (hostNode._debugID !== 0) {\n ReactInstrumentation.debugTool.onHostOperation(hostNode._debugID, 'mount', markup.toString());\n }\n }\n }\n};\n\nmodule.exports = ReactMount;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactMount.js\n ** module id = 135\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactMultiChildUpdateTypes\n */\n\n'use strict';\n\nvar keyMirror = require('fbjs/lib/keyMirror');\n\n/**\n * When a component's children are updated, a series of update configuration\n * objects are created in order to batch and serialize the required changes.\n *\n * Enumerates all the possible types of update configurations.\n *\n * @internal\n */\nvar ReactMultiChildUpdateTypes = keyMirror({\n INSERT_MARKUP: null,\n MOVE_EXISTING: null,\n REMOVE_NODE: null,\n SET_MARKUP: null,\n TEXT_CONTENT: null\n});\n\nmodule.exports = ReactMultiChildUpdateTypes;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactMultiChildUpdateTypes.js\n ** module id = 136\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactNodeTypes\n * \n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactElement = require('./ReactElement');\n\nvar invariant = require('fbjs/lib/invariant');\n\nvar ReactNodeTypes = {\n HOST: 0,\n COMPOSITE: 1,\n EMPTY: 2,\n\n getType: function (node) {\n if (node === null || node === false) {\n return ReactNodeTypes.EMPTY;\n } else if (ReactElement.isValidElement(node)) {\n if (typeof node.type === 'function') {\n return ReactNodeTypes.COMPOSITE;\n } else {\n return ReactNodeTypes.HOST;\n }\n }\n !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Unexpected node: %s', node) : _prodInvariant('26', node) : void 0;\n }\n};\n\nmodule.exports = ReactNodeTypes;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactNodeTypes.js\n ** module id = 137\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPropTypes\n */\n\n'use strict';\n\nvar ReactElement = require('./ReactElement');\nvar ReactPropTypeLocationNames = require('./ReactPropTypeLocationNames');\nvar ReactPropTypesSecret = require('./ReactPropTypesSecret');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar getIteratorFn = require('./getIteratorFn');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n * var Props = require('ReactPropTypes');\n * var MyArticle = React.createClass({\n * propTypes: {\n * // An optional string prop named \"description\".\n * description: Props.string,\n *\n * // A required enum prop named \"category\".\n * category: Props.oneOf(['News','Photos']).isRequired,\n *\n * // A prop named \"dialog\" that requires an instance of Dialog.\n * dialog: Props.instanceOf(Dialog).isRequired\n * },\n * render: function() { ... }\n * });\n *\n * A more formal specification of how these methods are used:\n *\n * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n * decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n * var MyLink = React.createClass({\n * propTypes: {\n * // An optional string or URI prop named \"href\".\n * href: function(props, propName, componentName) {\n * var propValue = props[propName];\n * if (propValue != null && typeof propValue !== 'string' &&\n * !(propValue instanceof URI)) {\n * return new Error(\n * 'Expected a string or an URI for ' + propName + ' in ' +\n * componentName\n * );\n * }\n * }\n * },\n * render: function() {...}\n * });\n *\n * @internal\n */\n\nvar ANONYMOUS = '<<anonymous>>';\n\nvar ReactPropTypes = {\n array: createPrimitiveTypeChecker('array'),\n bool: createPrimitiveTypeChecker('boolean'),\n func: createPrimitiveTypeChecker('function'),\n number: createPrimitiveTypeChecker('number'),\n object: createPrimitiveTypeChecker('object'),\n string: createPrimitiveTypeChecker('string'),\n symbol: createPrimitiveTypeChecker('symbol'),\n\n any: createAnyTypeChecker(),\n arrayOf: createArrayOfTypeChecker,\n element: createElementTypeChecker(),\n instanceOf: createInstanceTypeChecker,\n node: createNodeChecker(),\n objectOf: createObjectOfTypeChecker,\n oneOf: createEnumTypeChecker,\n oneOfType: createUnionTypeChecker,\n shape: createShapeTypeChecker\n};\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\n/*eslint-disable no-self-compare*/\nfunction is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n}\n/*eslint-enable no-self-compare*/\n\n/**\n * We use an Error-like object for backward compatibility as people may call\n * PropTypes directly and inspect their output. However we don't use real\n * Errors anymore. We don't inspect their stack anyway, and creating them\n * is prohibitively expensive if they are created too often, such as what\n * happens in oneOfType() for any type before the one that matched.\n */\nfunction PropTypeError(message) {\n this.message = message;\n this.stack = '';\n}\n// Make `instanceof Error` still work for returned errors.\nPropTypeError.prototype = Error.prototype;\n\nfunction createChainableTypeChecker(validate) {\n if (process.env.NODE_ENV !== 'production') {\n var manualPropTypeCallCache = {};\n }\n function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n componentName = componentName || ANONYMOUS;\n propFullName = propFullName || propName;\n if (process.env.NODE_ENV !== 'production') {\n if (secret !== ReactPropTypesSecret && typeof console !== 'undefined') {\n var cacheKey = componentName + ':' + propName;\n if (!manualPropTypeCallCache[cacheKey]) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'You are manually calling a React.PropTypes validation ' + 'function for the `%s` prop on `%s`. This is deprecated ' + 'and will not work in the next major version. You may be ' + 'seeing this warning due to a third-party PropTypes library. ' + 'See https://fb.me/react-warning-dont-call-proptypes for details.', propFullName, componentName) : void 0;\n manualPropTypeCallCache[cacheKey] = true;\n }\n }\n }\n if (props[propName] == null) {\n var locationName = ReactPropTypeLocationNames[location];\n if (isRequired) {\n return new PropTypeError('Required ' + locationName + ' `' + propFullName + '` was not specified in ' + ('`' + componentName + '`.'));\n }\n return null;\n } else {\n return validate(props, propName, componentName, location, propFullName);\n }\n }\n\n var chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n\n return chainedCheckType;\n}\n\nfunction createPrimitiveTypeChecker(expectedType) {\n function validate(props, propName, componentName, location, propFullName, secret) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== expectedType) {\n var locationName = ReactPropTypeLocationNames[location];\n // `propValue` being instance of, say, date/regexp, pass the 'object'\n // check, but we can offer a more precise error message here rather than\n // 'of type `object`'.\n var preciseType = getPreciseType(propValue);\n\n return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createAnyTypeChecker() {\n return createChainableTypeChecker(emptyFunction.thatReturns(null));\n}\n\nfunction createArrayOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n }\n var propValue = props[propName];\n if (!Array.isArray(propValue)) {\n var locationName = ReactPropTypeLocationNames[location];\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n }\n for (var i = 0; i < propValue.length; i++) {\n var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createElementTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!ReactElement.isValidElement(propValue)) {\n var locationName = ReactPropTypeLocationNames[location];\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createInstanceTypeChecker(expectedClass) {\n function validate(props, propName, componentName, location, propFullName) {\n if (!(props[propName] instanceof expectedClass)) {\n var locationName = ReactPropTypeLocationNames[location];\n var expectedClassName = expectedClass.name || ANONYMOUS;\n var actualClassName = getClassName(props[propName]);\n return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createEnumTypeChecker(expectedValues) {\n if (!Array.isArray(expectedValues)) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOf, expected an instance of array.') : void 0;\n return emptyFunction.thatReturnsNull;\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n for (var i = 0; i < expectedValues.length; i++) {\n if (is(propValue, expectedValues[i])) {\n return null;\n }\n }\n\n var locationName = ReactPropTypeLocationNames[location];\n var valuesString = JSON.stringify(expectedValues);\n return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createObjectOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n }\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n var locationName = ReactPropTypeLocationNames[location];\n return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n }\n for (var key in propValue) {\n if (propValue.hasOwnProperty(key)) {\n var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createUnionTypeChecker(arrayOfTypeCheckers) {\n if (!Array.isArray(arrayOfTypeCheckers)) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\n return emptyFunction.thatReturnsNull;\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) {\n return null;\n }\n }\n\n var locationName = ReactPropTypeLocationNames[location];\n return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createNodeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n if (!isNode(props[propName])) {\n var locationName = ReactPropTypeLocationNames[location];\n return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n var locationName = ReactPropTypeLocationNames[location];\n return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n for (var key in shapeTypes) {\n var checker = shapeTypes[key];\n if (!checker) {\n continue;\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction isNode(propValue) {\n switch (typeof propValue) {\n case 'number':\n case 'string':\n case 'undefined':\n return true;\n case 'boolean':\n return !propValue;\n case 'object':\n if (Array.isArray(propValue)) {\n return propValue.every(isNode);\n }\n if (propValue === null || ReactElement.isValidElement(propValue)) {\n return true;\n }\n\n var iteratorFn = getIteratorFn(propValue);\n if (iteratorFn) {\n var iterator = iteratorFn.call(propValue);\n var step;\n if (iteratorFn !== propValue.entries) {\n while (!(step = iterator.next()).done) {\n if (!isNode(step.value)) {\n return false;\n }\n }\n } else {\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n if (entry) {\n if (!isNode(entry[1])) {\n return false;\n }\n }\n }\n }\n } else {\n return false;\n }\n\n return true;\n default:\n return false;\n }\n}\n\nfunction isSymbol(propType, propValue) {\n // Native Symbol.\n if (propType === 'symbol') {\n return true;\n }\n\n // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n if (propValue['@@toStringTag'] === 'Symbol') {\n return true;\n }\n\n // Fallback for non-spec compliant Symbols which are polyfilled.\n if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n return true;\n }\n\n return false;\n}\n\n// Equivalent of `typeof` but with special handling for array and regexp.\nfunction getPropType(propValue) {\n var propType = typeof propValue;\n if (Array.isArray(propValue)) {\n return 'array';\n }\n if (propValue instanceof RegExp) {\n // Old webkits (at least until Android 4.0) return 'function' rather than\n // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n // passes PropTypes.object.\n return 'object';\n }\n if (isSymbol(propType, propValue)) {\n return 'symbol';\n }\n return propType;\n}\n\n// This handles more types than `getPropType`. Only used for error messages.\n// See `createPrimitiveTypeChecker`.\nfunction getPreciseType(propValue) {\n var propType = getPropType(propValue);\n if (propType === 'object') {\n if (propValue instanceof Date) {\n return 'date';\n } else if (propValue instanceof RegExp) {\n return 'regexp';\n }\n }\n return propType;\n}\n\n// Returns class name of the object, if any.\nfunction getClassName(propValue) {\n if (!propValue.constructor || !propValue.constructor.name) {\n return ANONYMOUS;\n }\n return propValue.constructor.name;\n}\n\nmodule.exports = ReactPropTypes;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactPropTypes.js\n ** module id = 138\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactVersion\n */\n\n'use strict';\n\nmodule.exports = '15.3.2';\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactVersion.js\n ** module id = 139\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ViewportMetrics\n */\n\n'use strict';\n\nvar ViewportMetrics = {\n\n currentScrollLeft: 0,\n\n currentScrollTop: 0,\n\n refreshScrollValues: function (scrollPosition) {\n ViewportMetrics.currentScrollLeft = scrollPosition.x;\n ViewportMetrics.currentScrollTop = scrollPosition.y;\n }\n\n};\n\nmodule.exports = ViewportMetrics;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ViewportMetrics.js\n ** module id = 140\n ** module chunks = 0\n **/","/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule accumulateInto\n * \n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Accumulates items that must not be null or undefined into the first one. This\n * is used to conserve memory by avoiding array allocations, and thus sacrifices\n * API cleanness. Since `current` can be null before being passed in and not\n * null after this function, make sure to assign it back to `current`:\n *\n * `a = accumulateInto(a, b);`\n *\n * This API should be sparingly used. Try `accumulate` for something cleaner.\n *\n * @return {*|array<*>} An accumulation of items.\n */\n\nfunction accumulateInto(current, next) {\n !(next != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'accumulateInto(...): Accumulated items must not be null or undefined.') : _prodInvariant('30') : void 0;\n\n if (current == null) {\n return next;\n }\n\n // Both are not empty. Warning: Never call x.concat(y) when you are not\n // certain that x is an Array (x could be a string with concat method).\n if (Array.isArray(current)) {\n if (Array.isArray(next)) {\n current.push.apply(current, next);\n return current;\n }\n current.push(next);\n return current;\n }\n\n if (Array.isArray(next)) {\n // A bit too dangerous to mutate `next`.\n return [current].concat(next);\n }\n\n return [current, next];\n}\n\nmodule.exports = accumulateInto;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/accumulateInto.js\n ** module id = 141\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule checkReactTypeSpec\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactPropTypeLocationNames = require('./ReactPropTypeLocationNames');\nvar ReactPropTypesSecret = require('./ReactPropTypesSecret');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nvar ReactComponentTreeHook;\n\nif (typeof process !== 'undefined' && process.env && process.env.NODE_ENV === 'test') {\n // Temporary hack.\n // Inline requires don't work well with Jest:\n // https://github.com/facebook/react/issues/7240\n // Remove the inline requires when we don't need them anymore:\n // https://github.com/facebook/react/pull/7178\n ReactComponentTreeHook = require('./ReactComponentTreeHook');\n}\n\nvar loggedTypeFailures = {};\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?object} element The React element that is being type-checked\n * @param {?number} debugID The React component instance that is being type-checked\n * @private\n */\nfunction checkReactTypeSpec(typeSpecs, values, location, componentName, element, debugID) {\n for (var typeSpecName in typeSpecs) {\n if (typeSpecs.hasOwnProperty(typeSpecName)) {\n var error;\n // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n !(typeof typeSpecs[typeSpecName] === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually from React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], typeSpecName) : _prodInvariant('84', componentName || 'React class', ReactPropTypeLocationNames[location], typeSpecName) : void 0;\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n } catch (ex) {\n error = ex;\n }\n process.env.NODE_ENV !== 'production' ? warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', ReactPropTypeLocationNames[location], typeSpecName, typeof error) : void 0;\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var componentStackInfo = '';\n\n if (process.env.NODE_ENV !== 'production') {\n if (!ReactComponentTreeHook) {\n ReactComponentTreeHook = require('./ReactComponentTreeHook');\n }\n if (debugID !== null) {\n componentStackInfo = ReactComponentTreeHook.getStackAddendumByID(debugID);\n } else if (element !== null) {\n componentStackInfo = ReactComponentTreeHook.getCurrentStackAddendum(element);\n }\n }\n\n process.env.NODE_ENV !== 'production' ? warning(false, 'Failed %s type: %s%s', location, error.message, componentStackInfo) : void 0;\n }\n }\n }\n}\n\nmodule.exports = checkReactTypeSpec;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/checkReactTypeSpec.js\n ** module id = 142\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule forEachAccumulated\n * \n */\n\n'use strict';\n\n/**\n * @param {array} arr an \"accumulation\" of items which is either an Array or\n * a single item. Useful when paired with the `accumulate` module. This is a\n * simple utility that allows us to reason about a collection of items, but\n * handling the case when there is exactly one item (and we do not need to\n * allocate an array).\n */\n\nfunction forEachAccumulated(arr, cb, scope) {\n if (Array.isArray(arr)) {\n arr.forEach(cb, scope);\n } else if (arr) {\n cb.call(scope, arr);\n }\n}\n\nmodule.exports = forEachAccumulated;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/forEachAccumulated.js\n ** module id = 143\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getHostComponentFromComposite\n */\n\n'use strict';\n\nvar ReactNodeTypes = require('./ReactNodeTypes');\n\nfunction getHostComponentFromComposite(inst) {\n var type;\n\n while ((type = inst._renderedNodeType) === ReactNodeTypes.COMPOSITE) {\n inst = inst._renderedComponent;\n }\n\n if (type === ReactNodeTypes.HOST) {\n return inst._renderedComponent;\n } else if (type === ReactNodeTypes.EMPTY) {\n return null;\n }\n}\n\nmodule.exports = getHostComponentFromComposite;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getHostComponentFromComposite.js\n ** module id = 144\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getTextContentAccessor\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar contentKey = null;\n\n/**\n * Gets the key used to access text content on a DOM node.\n *\n * @return {?string} Key used to access text content.\n * @internal\n */\nfunction getTextContentAccessor() {\n if (!contentKey && ExecutionEnvironment.canUseDOM) {\n // Prefer textContent to innerText because many browsers support both but\n // SVG <text> elements don't support innerText even when <div> does.\n contentKey = 'textContent' in document.documentElement ? 'textContent' : 'innerText';\n }\n return contentKey;\n}\n\nmodule.exports = getTextContentAccessor;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getTextContentAccessor.js\n ** module id = 145\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule instantiateReactComponent\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant'),\n _assign = require('object-assign');\n\nvar ReactCompositeComponent = require('./ReactCompositeComponent');\nvar ReactEmptyComponent = require('./ReactEmptyComponent');\nvar ReactHostComponent = require('./ReactHostComponent');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n// To avoid a cyclic dependency, we create the final class in this module\nvar ReactCompositeComponentWrapper = function (element) {\n this.construct(element);\n};\n_assign(ReactCompositeComponentWrapper.prototype, ReactCompositeComponent.Mixin, {\n _instantiateReactComponent: instantiateReactComponent\n});\n\nfunction getDeclarationErrorAddendum(owner) {\n if (owner) {\n var name = owner.getName();\n if (name) {\n return ' Check the render method of `' + name + '`.';\n }\n }\n return '';\n}\n\n/**\n * Check if the type reference is a known internal type. I.e. not a user\n * provided composite type.\n *\n * @param {function} type\n * @return {boolean} Returns true if this is a valid internal type.\n */\nfunction isInternalComponentType(type) {\n return typeof type === 'function' && typeof type.prototype !== 'undefined' && typeof type.prototype.mountComponent === 'function' && typeof type.prototype.receiveComponent === 'function';\n}\n\nvar nextDebugID = 1;\n\n/**\n * Given a ReactNode, create an instance that will actually be mounted.\n *\n * @param {ReactNode} node\n * @param {boolean} shouldHaveDebugID\n * @return {object} A new instance of the element's constructor.\n * @protected\n */\nfunction instantiateReactComponent(node, shouldHaveDebugID) {\n var instance;\n\n if (node === null || node === false) {\n instance = ReactEmptyComponent.create(instantiateReactComponent);\n } else if (typeof node === 'object') {\n var element = node;\n !(element && (typeof element.type === 'function' || typeof element.type === 'string')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : _prodInvariant('130', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : void 0;\n\n // Special case string values\n if (typeof element.type === 'string') {\n instance = ReactHostComponent.createInternalComponent(element);\n } else if (isInternalComponentType(element.type)) {\n // This is temporarily available for custom components that are not string\n // representations. I.e. ART. Once those are updated to use the string\n // representation, we can drop this code path.\n instance = new element.type(element);\n\n // We renamed this. Allow the old name for compat. :(\n if (!instance.getHostNode) {\n instance.getHostNode = instance.getNativeNode;\n }\n } else {\n instance = new ReactCompositeComponentWrapper(element);\n }\n } else if (typeof node === 'string' || typeof node === 'number') {\n instance = ReactHostComponent.createInstanceForText(node);\n } else {\n !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Encountered invalid React node of type %s', typeof node) : _prodInvariant('131', typeof node) : void 0;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(typeof instance.mountComponent === 'function' && typeof instance.receiveComponent === 'function' && typeof instance.getHostNode === 'function' && typeof instance.unmountComponent === 'function', 'Only React Components can be mounted.') : void 0;\n }\n\n // These two fields are used by the DOM and ART diffing algorithms\n // respectively. Instead of using expandos on components, we should be\n // storing the state needed by the diffing algorithms elsewhere.\n instance._mountIndex = 0;\n instance._mountImage = null;\n\n if (process.env.NODE_ENV !== 'production') {\n instance._debugID = shouldHaveDebugID ? nextDebugID++ : 0;\n }\n\n // Internal instances should fully constructed at this point, so they should\n // not get any new fields added to them at this point.\n if (process.env.NODE_ENV !== 'production') {\n if (Object.preventExtensions) {\n Object.preventExtensions(instance);\n }\n }\n\n return instance;\n}\n\nmodule.exports = instantiateReactComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/instantiateReactComponent.js\n ** module id = 146\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isTextInputElement\n * \n */\n\n'use strict';\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n */\n\nvar supportedInputTypes = {\n 'color': true,\n 'date': true,\n 'datetime': true,\n 'datetime-local': true,\n 'email': true,\n 'month': true,\n 'number': true,\n 'password': true,\n 'range': true,\n 'search': true,\n 'tel': true,\n 'text': true,\n 'time': true,\n 'url': true,\n 'week': true\n};\n\nfunction isTextInputElement(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n\n if (nodeName === 'input') {\n return !!supportedInputTypes[elem.type];\n }\n\n if (nodeName === 'textarea') {\n return true;\n }\n\n return false;\n}\n\nmodule.exports = isTextInputElement;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/isTextInputElement.js\n ** module id = 147\n ** module chunks = 0\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule setTextContent\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar escapeTextContentForBrowser = require('./escapeTextContentForBrowser');\nvar setInnerHTML = require('./setInnerHTML');\n\n/**\n * Set the textContent property of a node, ensuring that whitespace is preserved\n * even in IE8. innerText is a poor substitute for textContent and, among many\n * issues, inserts <br> instead of the literal newline chars. innerHTML behaves\n * as it should.\n *\n * @param {DOMElement} node\n * @param {string} text\n * @internal\n */\nvar setTextContent = function (node, text) {\n if (text) {\n var firstChild = node.firstChild;\n\n if (firstChild && firstChild === node.lastChild && firstChild.nodeType === 3) {\n firstChild.nodeValue = text;\n return;\n }\n }\n node.textContent = text;\n};\n\nif (ExecutionEnvironment.canUseDOM) {\n if (!('textContent' in document.documentElement)) {\n setTextContent = function (node, text) {\n setInnerHTML(node, escapeTextContentForBrowser(text));\n };\n }\n}\n\nmodule.exports = setTextContent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/setTextContent.js\n ** module id = 148\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * @typechecks\n */\n\nvar emptyFunction = require('./emptyFunction');\n\n/**\n * Upstream version of event listener. Does not take into account specific\n * nature of platform.\n */\nvar EventListener = {\n /**\n * Listen to DOM events during the bubble phase.\n *\n * @param {DOMEventTarget} target DOM element to register listener on.\n * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\n * @param {function} callback Callback function.\n * @return {object} Object with a `remove` method.\n */\n listen: function listen(target, eventType, callback) {\n if (target.addEventListener) {\n target.addEventListener(eventType, callback, false);\n return {\n remove: function remove() {\n target.removeEventListener(eventType, callback, false);\n }\n };\n } else if (target.attachEvent) {\n target.attachEvent('on' + eventType, callback);\n return {\n remove: function remove() {\n target.detachEvent('on' + eventType, callback);\n }\n };\n }\n },\n\n /**\n * Listen to DOM events during the capture phase.\n *\n * @param {DOMEventTarget} target DOM element to register listener on.\n * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\n * @param {function} callback Callback function.\n * @return {object} Object with a `remove` method.\n */\n capture: function capture(target, eventType, callback) {\n if (target.addEventListener) {\n target.addEventListener(eventType, callback, true);\n return {\n remove: function remove() {\n target.removeEventListener(eventType, callback, true);\n }\n };\n } else {\n if (process.env.NODE_ENV !== 'production') {\n console.error('Attempted to listen to events during the capture phase on a ' + 'browser that does not support the capture phase. Your application ' + 'will not receive some events.');\n }\n return {\n remove: emptyFunction\n };\n }\n },\n\n registerDefault: function registerDefault() {}\n};\n\nmodule.exports = EventListener;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/EventListener.js\n ** module id = 149\n ** module chunks = 0\n **/","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\n/**\n * @param {DOMElement} node input/textarea to focus\n */\n\nfunction focusNode(node) {\n // IE8 can throw \"Can't move focus to the control because it is invisible,\n // not enabled, or of a type that does not accept the focus.\" for all kinds of\n // reasons that are too expensive and fragile to test.\n try {\n node.focus();\n } catch (e) {}\n}\n\nmodule.exports = focusNode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/focusNode.js\n ** module id = 150\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n */\n\n/* eslint-disable fb-www/typeof-undefined */\n\n/**\n * Same as document.activeElement but wraps in a try-catch block. In IE it is\n * not safe to call document.activeElement if there is nothing focused.\n *\n * The activeElement will be null only if the document or document body is not\n * yet defined.\n */\nfunction getActiveElement() /*?DOMElement*/{\n if (typeof document === 'undefined') {\n return null;\n }\n try {\n return document.activeElement || document.body;\n } catch (e) {\n return document.body;\n }\n}\n\nmodule.exports = getActiveElement;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/getActiveElement.js\n ** module id = 151\n ** module chunks = 0\n **/","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = compose;\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\n\nfunction compose() {\n for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n if (funcs.length === 0) {\n return function (arg) {\n return arg;\n };\n }\n\n if (funcs.length === 1) {\n return funcs[0];\n }\n\n var last = funcs[funcs.length - 1];\n var rest = funcs.slice(0, -1);\n return function () {\n return rest.reduceRight(function (composed, f) {\n return f(composed);\n }, last.apply(undefined, arguments));\n };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/redux/lib/compose.js\n ** module id = 152\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\nexports.ActionTypes = undefined;\nexports['default'] = createStore;\n\nvar _isPlainObject = require('lodash/isPlainObject');\n\nvar _isPlainObject2 = _interopRequireDefault(_isPlainObject);\n\nvar _symbolObservable = require('symbol-observable');\n\nvar _symbolObservable2 = _interopRequireDefault(_symbolObservable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar ActionTypes = exports.ActionTypes = {\n INIT: '@@redux/INIT'\n};\n\n/**\n * Creates a Redux store that holds the state tree.\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} enhancer The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\nfunction createStore(reducer, preloadedState, enhancer) {\n var _ref2;\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = preloadedState;\n preloadedState = undefined;\n }\n\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error('Expected the enhancer to be a function.');\n }\n\n return enhancer(createStore)(reducer, preloadedState);\n }\n\n if (typeof reducer !== 'function') {\n throw new Error('Expected the reducer to be a function.');\n }\n\n var currentReducer = reducer;\n var currentState = preloadedState;\n var currentListeners = [];\n var nextListeners = currentListeners;\n var isDispatching = false;\n\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = currentListeners.slice();\n }\n }\n\n /**\n * Reads the state tree managed by the store.\n *\n * @returns {any} The current state tree of your application.\n */\n function getState() {\n return currentState;\n }\n\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param {Function} listener A callback to be invoked on every dispatch.\n * @returns {Function} A function to remove this change listener.\n */\n function subscribe(listener) {\n if (typeof listener !== 'function') {\n throw new Error('Expected listener to be a function.');\n }\n\n var isSubscribed = true;\n\n ensureCanMutateNextListeners();\n nextListeners.push(listener);\n\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n\n isSubscribed = false;\n\n ensureCanMutateNextListeners();\n var index = nextListeners.indexOf(listener);\n nextListeners.splice(index, 1);\n };\n }\n\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param {Object} action A plain object representing “what changed”. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns {Object} For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n function dispatch(action) {\n if (!(0, _isPlainObject2['default'])(action)) {\n throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.');\n }\n\n if (typeof action.type === 'undefined') {\n throw new Error('Actions may not have an undefined \"type\" property. ' + 'Have you misspelled a constant?');\n }\n\n if (isDispatching) {\n throw new Error('Reducers may not dispatch actions.');\n }\n\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n\n var listeners = currentListeners = nextListeners;\n for (var i = 0; i < listeners.length; i++) {\n listeners[i]();\n }\n\n return action;\n }\n\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param {Function} nextReducer The reducer for the store to use instead.\n * @returns {void}\n */\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== 'function') {\n throw new Error('Expected the nextReducer to be a function.');\n }\n\n currentReducer = nextReducer;\n dispatch({ type: ActionTypes.INIT });\n }\n\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns {observable} A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/zenparsing/es-observable\n */\n function observable() {\n var _ref;\n\n var outerSubscribe = subscribe;\n return _ref = {\n /**\n * The minimal observable subscription method.\n * @param {Object} observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns {subscription} An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe: function subscribe(observer) {\n if (typeof observer !== 'object') {\n throw new TypeError('Expected the observer to be an object.');\n }\n\n function observeState() {\n if (observer.next) {\n observer.next(getState());\n }\n }\n\n observeState();\n var unsubscribe = outerSubscribe(observeState);\n return { unsubscribe: unsubscribe };\n }\n }, _ref[_symbolObservable2['default']] = function () {\n return this;\n }, _ref;\n }\n\n // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n dispatch({ type: ActionTypes.INIT });\n\n return _ref2 = {\n dispatch: dispatch,\n subscribe: subscribe,\n getState: getState,\n replaceReducer: replaceReducer\n }, _ref2[_symbolObservable2['default']] = observable, _ref2;\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/redux/lib/createStore.js\n ** module id = 153\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\nexports['default'] = warning;\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n /* eslint-disable no-empty */\n } catch (e) {}\n /* eslint-enable no-empty */\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/redux/lib/utils/warning.js\n ** module id = 154\n ** module chunks = 0\n **/","/** @license MIT License (c) copyright 2010-2014 original author or authors */\n/** @author Brian Cavalier */\n/** @author John Hann */\n\n(function(define) { 'use strict';\ndefine(function() {\n\n\t/**\n\t * Custom error type for promises rejected by promise.timeout\n\t * @param {string} message\n\t * @constructor\n\t */\n\tfunction TimeoutError (message) {\n\t\tError.call(this);\n\t\tthis.message = message;\n\t\tthis.name = TimeoutError.name;\n\t\tif (typeof Error.captureStackTrace === 'function') {\n\t\t\tError.captureStackTrace(this, TimeoutError);\n\t\t}\n\t}\n\n\tTimeoutError.prototype = Object.create(Error.prototype);\n\tTimeoutError.prototype.constructor = TimeoutError;\n\n\treturn TimeoutError;\n});\n}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/when/lib/TimeoutError.js\n ** module id = 156\n ** module chunks = 0\n **/","/** @license MIT License (c) copyright 2010-2014 original author or authors */\n/** @author Brian Cavalier */\n/** @author John Hann */\n\n(function(define) { 'use strict';\ndefine(function() {\n\n\tmakeApply.tryCatchResolve = tryCatchResolve;\n\n\treturn makeApply;\n\n\tfunction makeApply(Promise, call) {\n\t\tif(arguments.length < 2) {\n\t\t\tcall = tryCatchResolve;\n\t\t}\n\n\t\treturn apply;\n\n\t\tfunction apply(f, thisArg, args) {\n\t\t\tvar p = Promise._defer();\n\t\t\tvar l = args.length;\n\t\t\tvar params = new Array(l);\n\t\t\tcallAndResolve({ f:f, thisArg:thisArg, args:args, params:params, i:l-1, call:call }, p._handler);\n\n\t\t\treturn p;\n\t\t}\n\n\t\tfunction callAndResolve(c, h) {\n\t\t\tif(c.i < 0) {\n\t\t\t\treturn call(c.f, c.thisArg, c.params, h);\n\t\t\t}\n\n\t\t\tvar handler = Promise._handler(c.args[c.i]);\n\t\t\thandler.fold(callAndResolveNext, c, void 0, h);\n\t\t}\n\n\t\tfunction callAndResolveNext(c, x, h) {\n\t\t\tc.params[c.i] = x;\n\t\t\tc.i -= 1;\n\t\t\tcallAndResolve(c, h);\n\t\t}\n\t}\n\n\tfunction tryCatchResolve(f, thisArg, args, resolver) {\n\t\ttry {\n\t\t\tresolver.resolve(f.apply(thisArg, args));\n\t\t} catch(e) {\n\t\t\tresolver.reject(e);\n\t\t}\n\t}\n\n});\n}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/when/lib/apply.js\n ** module id = 157\n ** module chunks = 0\n **/","/** @license MIT License (c) copyright 2010-2014 original author or authors */\n/** @author Brian Cavalier */\n/** @author John Hann */\n\n(function(define) { 'use strict';\ndefine(function() {\n\n\treturn {\n\t\tpending: toPendingState,\n\t\tfulfilled: toFulfilledState,\n\t\trejected: toRejectedState,\n\t\tinspect: inspect\n\t};\n\n\tfunction toPendingState() {\n\t\treturn { state: 'pending' };\n\t}\n\n\tfunction toRejectedState(e) {\n\t\treturn { state: 'rejected', reason: e };\n\t}\n\n\tfunction toFulfilledState(x) {\n\t\treturn { state: 'fulfilled', value: x };\n\t}\n\n\tfunction inspect(handler) {\n\t\tvar state = handler.state();\n\t\treturn state === 0 ? toPendingState()\n\t\t\t : state > 0 ? toFulfilledState(handler.value)\n\t\t\t : toRejectedState(handler.value);\n\t}\n\n});\n}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/when/lib/state.js\n ** module id = 158\n ** module chunks = 0\n **/","\nimport { createStore, applyMiddleware, combineReducers } from 'redux'\n\nimport ui from './services/ui/reducer'\nimport pusher from './services/pusher/reducer'\nimport mopidy from './services/mopidy/reducer'\nimport lastfm from './services/lastfm/reducer'\nimport spotify from './services/spotify/reducer'\n\nimport thunk from 'redux-thunk'\nimport pusherMiddleware from './services/pusher/middleware'\nimport mopidyMiddleware from './services/mopidy/middleware'\nimport spotifyMiddleware from './services/spotify/middleware'\nimport localstorageMiddleware from './services/localstorage/middleware'\n\nlet reducers = combineReducers({\n ui,\n pusher,\n mopidy,\n lastfm,\n spotify\n});\n\n// set application defaults\n// TODO: Look at using propTypes in the component for these falsy initial states\nvar initialState = {\n\tmopidy: {\n\t\tconnected: false,\n\t\thost: window.location.hostname,\n\t\tport: 6680,\n\t\tvolume: 0,\n\t\tprogress: 0,\n\t\tplay_state: false\n\t},\n\tpusher: {\n\t\tconnected: false,\n\t\tport: 6681,\n\t\tusername: '',\n\t\tconnections: [],\n\t\tversion: {\n\t\t\tcurrent: '0.0.0'\n\t\t}\n\t},\n\tlastfm: {\n\t\talbum: {},\n\t\tartist: {},\n\t\ttrack: {}\n\t},\n\tspotify: {\n\t\tconnected: false,\n\t\tcountry: 'NZ',\n\t\tlocale: 'en_NZ',\n\t\tme: false\n\t},\n\tui: {\n\t\tcontext_menu: {\n\t\t\tshow: false\n\t\t},\n\t\tcurrent_tracklist: [],\n\t\tcurrent_tltrack: false,\n\t\tsearch_results: {\n\t\t\tartists: [],\n\t\t\talbums: [],\n\t\t\tplaylists: [],\n\t\t\ttracks: []\n\t\t}\n\t}\n};\n\n// if we've got a stored version of mopidy state, load and merge\nif( localStorage.getItem('mopidy') ){\n\tvar storedMopidy = JSON.parse( localStorage.getItem('mopidy') );\n\tinitialState.mopidy = Object.assign(initialState.mopidy, storedMopidy );\n}\n\n// if we've got a stored version of pusher state, load and merge\nif( localStorage.getItem('pusher') ){\n\tvar storedPusher = JSON.parse( localStorage.getItem('pusher') );\n\tinitialState.pusher = Object.assign(initialState.pusher, storedPusher );\n}\n\n// if we've got a stored version of spotify state, load and merge\nif( localStorage.getItem('spotify') ){\n\tvar storedSpotify = JSON.parse( localStorage.getItem('spotify') );\n\tinitialState.spotify = Object.assign(initialState.spotify, storedSpotify );\n}\n\nconsole.log('Bootstrapping', initialState)\n\nlet store = createStore(\n\treducers, \n\tinitialState, \n\tapplyMiddleware( thunk, localstorageMiddleware, mopidyMiddleware, pusherMiddleware, spotifyMiddleware )\n);\n\nexport default store;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/bootstrap.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { Link } from 'react-router'\r\nimport Thumbnail from './Thumbnail'\r\n\r\nexport default class ArtistList extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\trender(){\r\n\t\tif( !this.props.artists ) return null\r\n\r\n\t\treturn (\r\n\t\t\t<div className=\"artist-list\">\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.props.artists.map( (artist, index) => {\r\n\t\t\t\t\t\tvar link = '/artist/' + artist.uri;\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t<Link to={ link } key={artist.uri} className=\"artist\">\r\n\t\t\t\t\t\t\t\t<Thumbnail circle={true} size=\"small\" images={artist.images} />\r\n\t\t\t\t\t\t\t\t<span className=\"name\">{ artist.name }</span>\r\n\t\t\t\t\t\t\t</Link>\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/ArtistList.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport GridItem from './GridItem'\r\n\r\nexport default class CategoryGrid extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\trender(){\r\n\t\tif( !this.props.categories ) return null\r\n\r\n\t\tvar className = \"grid category-grid\"\r\n\t\tif( this.props.className ) className += ' '+this.props.className\r\n\t\treturn (\r\n\t\t\t<div className={className}>\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.props.categories.map(\r\n\t\t\t\t\t\t(category, index) => {\r\n\t\t\t\t\t\t\treturn <GridItem item={category} key={index} link={'/discover/categories/'+category.id} />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t)\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n}\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/CategoryGrid.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport FontAwesome from 'react-fontawesome'\r\n\r\nexport default class ConfirmationButton extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t\tthis.state = {\r\n\t\t\ttiming_out: false,\r\n\t\t\tconfirming: false\r\n\t\t}\r\n\t\tthis.confirming = false;\r\n\t\tthis.unconfirmTimer = false;\r\n\t}\r\n\r\n\tcomponentWillUnmount(){\r\n\t\tclearTimeout( this.unconfirmTimer );\r\n\t}\r\n\r\n\thandleClick(e){\r\n\t\tif( this.state.confirming ){\r\n\t\t\tthis.setState({ confirming: false });\r\n\t\t\tthis.props.onConfirm();\r\n\t\t}else{\r\n\t\t\tthis.setState({ confirming: true });\r\n\t\t}\r\n\t}\r\n\r\n\thandleMouseEnter(e){\r\n\t\tthis.setState({ timing_out: false });\r\n\t\tclearTimeout( this.unconfirmTimer );\r\n\t}\r\n\r\n\thandleMouseLeave(e){\r\n\t\tif( this.state.confirming ){\r\n\t\t\tthis.setState({ timing_out: true });\r\n\t\t\tthis.unconfirmTimer = setTimeout(\r\n\t\t\t\tfunction(){\r\n\t\t\t\t\tthis.setState({ confirming: false });\r\n\t\t\t\t}.bind(this),\r\n\t\t\t\t2000\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\trender(){\r\n\r\n\t\tvar className = 'button';\r\n\t\tvar content = this.props.content;\r\n\r\n\t\tif( this.state.confirming ){\r\n\t\t\tclassName += ' confirming';\t\r\n\t\t\tcontent = this.props.confirmingContent;\r\n\t\t\tif( this.state.timing_out ) className += ' timing-out';\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<button\r\n\t\t\t\tclassName={className}\r\n\t\t\t\tonClick={ (e) => this.handleClick(e) }\r\n\t\t\t\tonMouseLeave={ (e) => this.handleMouseLeave(e) }\r\n\t\t\t\tonMouseEnter={ (e) => this.handleMouseEnter(e) }>\r\n\t\t\t\t\t{ content }\r\n\t\t\t</button>\r\n\t\t);\r\n\t}\r\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/ConfirmationButton.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\n\r\nimport TrackList from './TrackList'\r\nimport * as uiActions from '../services/ui/actions'\r\nimport * as mopidyActions from '../services/mopidy/actions'\r\nimport * as spotifyActions from '../services/spotify/actions'\r\n\r\nclass ContextMenu extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\thandleClick(e){\r\n\t}\r\n\r\n\trenderItems(){\r\n\t\tvar items = [];\r\n\r\n\t\tswitch( this.props.context_menu.context ){\r\n\r\n\t\t\tcase 'queue':\r\n\t\t\t\titems = [\r\n\t\t\t\t\t{ handleClick: 'playQueueItem', label: 'Play' },\r\n\t\t\t\t\t{ handleClick: 'removeFromQueue', label: 'Remove' }\r\n\t\t\t\t];\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'editable-playlist':\r\n\t\t\t\titems = [\r\n\t\t\t\t\t{ handleClick: 'playItems', label: 'Play' },\r\n\t\t\t\t\t{ handleClick: 'removeFromPlaylist', label: 'Remove' }\r\n\t\t\t\t];\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\t\titems = [\r\n\t\t\t\t\t{ handleClick: 'playItems', label: 'Play' },\r\n\t\t\t\t\t{ handleClick: 'playItemsNext', label: 'Play next' },\r\n\t\t\t\t\t{ handleClick: 'addToQueue', label: 'Add to queue' }\r\n\t\t\t\t];\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<div>\r\n\t\t\t\t{\r\n\t\t\t\t\titems.map((item, index) => {\r\n\t\t\t\t\t\treturn <a key={item.handleClick} onClick={ (e) => this[item.handleClick](e) }>{ item.label }</a>\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n\r\n\tplayQueueItem(){\r\n\t\tvar selectedTracks = this.props.context_menu.data.selected_tracks;\r\n\t\tthis.props.mopidyActions.changeTrack( selectedTracks[0].tlid );\r\n\t\tthis.props.uiActions.hideContextMenu();\r\n\t}\r\n\r\n\tremoveFromQueue(){\r\n\t\tvar selected_tracks = this.props.context_menu.data.selected_tracks;\r\n\t\tvar selected_tracks_tlids = [];\r\n\t\tfor( var i = 0; i < selected_tracks.length; i++ ){\r\n\t\t\tselected_tracks_tlids.push( selected_tracks[i].tlid );\r\n\t\t}\r\n\t\tthis.props.mopidyActions.removeTracks( selected_tracks_tlids );\r\n\t\tthis.props.uiActions.hideContextMenu();\r\n\t}\r\n\r\n\tplayItems(){\r\n\t\tvar selected_tracks = this.props.context_menu.data.selected_tracks;\r\n\t\tvar selected_tracks_uris = [];\r\n\t\tfor( var i = 0; i < selected_tracks.length; i++ ){\r\n\t\t\tselected_tracks_uris.push( selected_tracks[i].uri );\r\n\t\t}\r\n\t\tthis.props.mopidyActions.playTracks(selected_tracks_uris);\r\n\t\tthis.props.uiActions.hideContextMenu();\r\n\t}\r\n\r\n\tplayItemsNext(){\r\n\t\tvar selected_tracks = this.props.context_menu.data.selected_tracks;\r\n\t\tvar selected_tracks_uris = [];\r\n\t\tfor( var i = 0; i < selected_tracks.length; i++ ){\r\n\t\t\tselected_tracks_uris.push( selected_tracks[i].uri );\r\n\t\t}\r\n\r\n\t\tvar current_track = this.props.current_track\r\n\t\tvar current_track_index = -1\r\n\t\tfor( var i = 0; i < this.props.current_tracklist.length; i++ ){\r\n\t\t\tif( this.props.current_tracklist[i].tlid == this.props.current_track.tlid ){\r\n\t\t\t\tcurrent_track_index = i\r\n\t\t\t\tbreak\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar at_position = null\r\n\t\tif( current_track_index > -1 ) at_position = current_track_index + 1\r\n\r\n\t\tthis.props.mopidyActions.enqueueTracks(selected_tracks_uris, at_position);\r\n\t\tthis.props.uiActions.hideContextMenu();\r\n\t}\r\n\r\n\taddToQueue(){\r\n\t\tvar selected_tracks = this.props.context_menu.data.selected_tracks;\r\n\t\tvar selected_tracks_uris = [];\r\n\t\tfor( var i = 0; i < selected_tracks.length; i++ ){\r\n\t\t\tselected_tracks_uris.push( selected_tracks[i].uri );\r\n\t\t}\r\n\t\tthis.props.mopidyActions.enqueueTracks(selected_tracks_uris);\r\n\t\tthis.props.uiActions.hideContextMenu();\r\n\t}\r\n\r\n\tremoveFromPlaylist(){\r\n\t\tconsole.log('removeFromPlaylist')\r\n\t\tthis.props.uiActions.hideContextMenu();\r\n\t}\r\n\r\n\trender(){\r\n\t\tif( !this.props.context_menu.show ) return null;\r\n\r\n\t\tvar style = {\r\n\t\t\tleft: this.props.context_menu.position_x,\r\n\t\t\ttop: this.props.context_menu.position_y,\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<div className=\"context-menu\" style={style}>\r\n\t\t\t\t{ this.renderItems() }\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn {\r\n\t\tcontext_menu: state.ui.context_menu,\r\n\t\tcurrent_track: state.ui.current_track,\r\n\t\tcurrent_tracklist: state.ui.current_tracklist\r\n\t}\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tuiActions: bindActionCreators(uiActions, dispatch),\r\n\t\tspotifyActions: bindActionCreators(spotifyActions, dispatch),\r\n\t\tmopidyActions: bindActionCreators(mopidyActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ContextMenu)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/ContextMenu.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport { Link } from 'react-router'\r\n\r\nimport FontAwesome from 'react-fontawesome'\r\nimport ProgressSlider from './ProgressSlider'\r\nimport ArtistSentence from './ArtistSentence'\r\nimport Thumbnail from './Thumbnail'\r\n\r\nimport * as mopidyActions from '../services/mopidy/actions'\r\n\r\nclass FullPlayer extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\trenderPlayButton(){\r\n\t\tvar button = <a onClick={() => this.props.mopidyActions.play()}><FontAwesome name=\"play\" /> </a>\r\n\t\tif( this.props.play_state == 'playing' ){\r\n\t\t\tbutton = <a onClick={() => this.props.mopidyActions.pause()}><FontAwesome name=\"pause\" /> </a>\r\n\t\t}\r\n\t\treturn button;\r\n\t}\r\n\r\n\trenderConsumeButton(){\r\n\t\tvar button = <a onClick={() => this.props.mopidyActions.instruct('tracklist.setConsume', [true])}><FontAwesome name=\"fire\" /></a>\r\n\t\tif( this.props.consume ){\r\n\t\t\tbutton = <a className=\"active\" onClick={() => this.props.mopidyActions.instruct('tracklist.setConsume', [false])}><FontAwesome name=\"fire\" /></a>\r\n\t\t}\r\n\t\treturn button;\r\n\t}\r\n\r\n\trenderRandomButton(){\r\n\t\tvar button = <a onClick={() => this.props.mopidyActions.instruct('tracklist.setRandom', [true])}><FontAwesome name=\"random\" /></a>\r\n\t\tif( this.props.random ){\r\n\t\t\tbutton = <a className=\"active\" onClick={() => this.props.mopidyActions.instruct('tracklist.setRandom', [false])}><FontAwesome name=\"random\" /></a>\r\n\t\t}\r\n\t\treturn button;\r\n\t}\r\n\r\n\trenderRepeatButton(){\r\n\t\tvar button = <a onClick={() => this.props.mopidyActions.instruct('tracklist.setRepeat', [true])}><FontAwesome name=\"repeat\" /></a>\r\n\t\tif( this.props.repeat ){\r\n\t\t\tbutton = <a className=\"active\" onClick={() => this.props.mopidyActions.instruct('tracklist.setRepeat', [false])}><FontAwesome name=\"repeat\" /></a>\r\n\t\t}\r\n\t\treturn button;\r\n\t}\r\n\r\n\trenderArtwork(){\r\n\t\tif( \r\n\t\t\t!this.props.current_track || \r\n\t\t\t!this.props.current_track.album || \r\n\t\t\t!this.props.current_track.album.images ){\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<span className=\"artwork\">\r\n\t\t\t\t\t\t<Thumbnail size=\"huge\" images={[]} />\r\n\t\t\t\t\t</span>\r\n\t\t\t\t)\r\n\t\t}\r\n\r\n\t\tvar link = null\r\n\t\tif( this.props.current_track.album.uri ) link = '/album/'+this.props.current_track.album.uri\r\n\t\treturn (\r\n\t\t\t<Link className=\"artwork\" to={link}>\r\n\t\t\t\t<Thumbnail size=\"huge\" images={this.props.current_track.album.images} />\r\n\t\t\t</Link>\r\n\t\t)\r\n\t}\r\n\r\n\trender(){\r\n\t\treturn (\r\n\t\t\t<div className=\"player\">\r\n\r\n\t\t\t\t{ this.renderArtwork() }\r\n\r\n\t\t\t\t<div className=\"current-track\">\r\n\t\t\t\t\t<div className=\"title\">{ this.props.current_track ? this.props.current_track.name : null }</div>\r\n\t\t\t\t\t{ this.props.current_track ? <ArtistSentence artists={ this.props.current_track.artists } /> : null }\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<div className=\"controls cf\">\r\n\t\t\t\t\t<div className=\"pull-left\">\r\n\t\t\t\t\t\t<a onClick={() => this.props.mopidyActions.previous()}>\r\n\t\t\t\t\t\t\t<FontAwesome name=\"step-backward\" />\r\n\t\t\t\t\t\t</a> \r\n\t\t\t\t\t\t{ this.renderPlayButton() }\r\n\t\t\t\t\t\t<a onClick={() => this.props.mopidyActions.stop()}>\r\n\t\t\t\t\t\t\t<FontAwesome name=\"stop\" />\r\n\t\t\t\t\t\t</a> \r\n\t\t\t\t\t\t<a onClick={() => this.props.mopidyActions.next()}>\r\n\t\t\t\t\t\t\t<FontAwesome name=\"step-forward\" />\r\n\t\t\t\t\t\t</a> \r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div className=\"pull-right\">\r\n\t\t\t\t\t\t{ this.renderConsumeButton() }\r\n\t\t\t\t\t\t{ this.renderRandomButton() }\r\n\t\t\t\t\t\t{ this.renderRepeatButton() }\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<ProgressSlider />\r\n\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Export our component\r\n *\r\n * We also integrate our global store, using connect()\r\n **/\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn {\r\n\t\tcurrent_track: state.ui.current_track,\r\n\t\tplay_state: state.mopidy.play_state,\r\n\t\tconsume: state.mopidy.consume,\r\n\t\trepeat: state.mopidy.repeat,\r\n\t\trandom: state.mopidy.random\r\n\t}\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tmopidyActions: bindActionCreators(mopidyActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(FullPlayer)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/FullPlayer.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport { Link } from 'react-router'\r\nimport FontAwesome from 'react-fontawesome'\r\n\r\nimport ProgressSlider from './ProgressSlider'\r\nimport VolumeControl from './VolumeControl'\r\nimport ArtistSentence from './ArtistSentence'\r\nimport Thumbnail from './Thumbnail'\r\n\r\nimport * as mopidyActions from '../services/mopidy/actions'\r\n\r\nclass MiniPlayer extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\trenderPlayButton(){\r\n\t\tvar button = <a onClick={() => this.props.mopidyActions.play()}><FontAwesome name=\"play\" /> </a>\r\n\t\tif( this.props.play_state == 'playing' ){\r\n\t\t\tbutton = <a onClick={() => this.props.mopidyActions.pause()}><FontAwesome name=\"pause\" /> </a>\r\n\t\t}\r\n\t\treturn button;\r\n\t}\r\n\r\n\trender(){\r\n\t\treturn (\r\n\t\t\t<div className=\"player\">\r\n\r\n\t\t\t\t<div className=\"current-track\">\r\n\t\t\t\t\t<div className=\"title\">{ this.props.current_track ? this.props.current_track.name : null }</div>\r\n\t\t\t\t\t{ this.props.current_track ? <ArtistSentence artists={ this.props.current_track.artists } /> : null }\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<div className=\"controls\">\r\n\t\t\t\t\t{ this.renderPlayButton() }\r\n\t\t\t\t\t<a onClick={() => this.props.mopidyActions.next()}>\r\n\t\t\t\t\t\t<FontAwesome name=\"step-forward\" />\r\n\t\t\t\t\t</a> \r\n\t\t\t\t\t<VolumeControl />\r\n\t\t\t\t\t<ProgressSlider />\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Export our component\r\n *\r\n * We also integrate our global store, using connect()\r\n **/\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn {\r\n\t\tcurrent_track: state.ui.current_track,\r\n\t\tplay_state: state.mopidy.play_state\r\n\t}\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tmopidyActions: bindActionCreators(mopidyActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MiniPlayer)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/MiniPlayer.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { Link } from 'react-router'\r\nimport { createStore, bindActionCreators } from 'redux'\r\n\r\nimport FontAwesome from 'react-fontawesome'\r\n\r\nimport * as pusherActions from '../services/pusher/actions'\r\n\r\nclass PusherConnectionList extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\tcomponentDidMount(){\r\n\t\tif( this.props.pusher.connected ){\r\n\t\t\tthis.props.pusherActions.getConnectionList();\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentWillReceiveProps(newProps){\r\n\t\tif( !this.props.pusher.connected && newProps.pusher.connected ){\r\n\t\t\tthis.props.pusherActions.getConnectionList();\r\n\t\t}\r\n\t}\r\n\r\n\trender(){\r\n\t\tif( !this.props.pusher.connected ) return null;\r\n\t\tif( typeof(this.props.pusher.connections) == 'undefined' || this.props.pusher.connections.length <= 0 ) return null;\r\n\r\n\t\treturn (\r\n\t\t\t<div className=\"pusher-connection-list\">\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.props.pusher.connections.map( (connection, index) => {\r\n\t\t\t\t\t\tvar isMe = false;\r\n\t\t\t\t\t\tif( connection.connectionid == this.props.pusher.connectionid ) isMe = true;\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t<div className=\"connection cf\" key={connection.connectionid}>\r\n\t\t\t\t\t\t\t\t<div className=\"col w30\">{ connection.username } { isMe ? <span>(you)</span> : null }</div>\r\n\t\t\t\t\t\t\t\t<div className=\"col w70\">\r\n\t\t\t\t\t\t\t\t\t{ connection.ip }\r\n\t\t\t\t\t\t\t\t\t<span className=\"grey-text\"> ({ connection.connectionid })</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn state;\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tpusherActions: bindActionCreators(pusherActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(PusherConnectionList)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/PusherConnectionList.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { Link, browserHistory } from 'react-router'\r\nimport { createStore, bindActionCreators } from 'redux'\r\nimport FontAwesome from 'react-fontawesome'\r\n\r\nimport * as uiActions from '../services/ui/actions'\r\nimport * as spotifyActions from '../services/spotify/actions'\r\n\r\nclass SearchForm extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tquery: ''\r\n\t\t}\r\n\t}\r\n\r\n\thandleSubmit(e){\r\n\t\te.preventDefault();\r\n\t\tbrowserHistory.push('/search/'+this.state.query);\r\n\t\treturn false\r\n\t}\r\n\r\n\trender(){\r\n\t\treturn (\r\n\t\t\t<form className={this.props.context+' search-form'} onSubmit={ e => this.handleSubmit(e) }>\r\n\t\t\t\t<input\t\t\t\t\t\r\n\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\tplaceholder=\"Search\"\r\n\t\t\t\t\tonChange={ e => this.setState({ query: e.target.value }) } \r\n\t\t\t\t\tvalue={ this.state.query } />\r\n\t\t\t</form>\r\n\t\t)\r\n\t}\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn state;\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tuiActions: bindActionCreators(uiActions, dispatch),\r\n\t\tspotifyActions: bindActionCreators(spotifyActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SearchForm)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/SearchForm.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport { Link } from 'react-router'\r\n\r\nimport MiniPlayer from './MiniPlayer'\r\nimport Icon from './Icon'\r\nimport Thumbnail from './Thumbnail'\r\nimport SearchForm from './SearchForm'\r\n\r\nimport FontAwesome from 'react-fontawesome'\r\nimport * as mopidyActions from '../services/mopidy/actions'\r\n\r\nclass Sidebar extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\trender(){\r\n\t\treturn (\r\n\t\t\t<aside>\r\n\t\t\t\t\r\n\t\t\t\t{ this.props.current_track && this.props.current_track.album.images ? <Thumbnail size=\"large\" images={this.props.current_track.album.images} /> : null }\r\n\r\n\t \t<SearchForm context=\"sidebar\" />\r\n\r\n\t \t<nav>\r\n\r\n\t \t\t<section>\r\n\t\t\t\t\t\t<Link activeClassName=\"active\" to=\"/queue\">\r\n\t\t\t\t\t\t\t<Icon name=\"play\" className=\"white\" />\r\n\t\t\t\t\t\t\tNow playing\r\n\t\t\t\t\t\t</Link>\r\n\t\t\t\t\t</section>\r\n\r\n\t\t\t\t\t<section>\r\n\t\t\t\t\t\t<title>Discover\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tDiscover\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tGenre / Mood\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tFeatured playlists\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tNew releases\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\tMy Music\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tPlaylists\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tArtists\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tAlbums\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tTracks\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tLocal\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tSettings\r\n\t\t\t\t\t\t\t{ !this.props.mopidy_connected || !this.props.spotify_connected || !this.props.pusher_connected ? : null }\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\r\n\t\t \r\n\r\n\t\t \r\n\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Export our component\r\n *\r\n * We also integrate our global store, using connect()\r\n **/\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn {\r\n\t\tmopidy_connected: state.mopidy.connected,\r\n\t\tpusher_connected: state.pusher.connected,\r\n\t\tspotify_connected: state.spotify.connected,\r\n\t\tspotify_authorized: state.spotify.authorized,\r\n\t\tcurrent_track: state.ui.current_track\r\n\t}\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tmopidyActions: bindActionCreators(mopidyActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Sidebar)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/Sidebar.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { Link } from 'react-router'\r\nimport { createStore, bindActionCreators } from 'redux'\r\n\r\nimport FontAwesome from 'react-fontawesome'\r\nimport Thumbnail from './Thumbnail'\r\n\r\nimport * as actions from '../services/spotify/actions'\r\n\r\nclass SpotifyAuthenticationFrame extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tframeUrl: '//jamesbarnsley.co.nz/auth.php?action=frame',\r\n\t\t\tauthorizing: false\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentDidMount(){\r\n\r\n\t\tlet self = this;\r\n\r\n\t\t// listen for incoming messages from the authorization iframe\r\n\t\t// this is triggered when authentication is granted from the popup\r\n\t\twindow.addEventListener('message', function(event){\r\n\r\n\t\t\tif(event.data == 'closed'){\r\n\t\t\t\tself.setState({\r\n\t\t\t\t\tframeUrl: '//jamesbarnsley.co.nz/auth.php?action=frame',\r\n\t\t\t\t\tauthorizing: false\r\n\t\t\t\t})\t\r\n\t\t\t}else{\r\n\t\t\t\t\r\n\t\t\t\t// only allow incoming data from our authorized authenticator proxy\r\n\t\t\t\tif( !/^https?:\\/\\/jamesbarnsley\\.co\\.nz/.test(event.origin) ) return false;\r\n\t\t\t\t\r\n\t\t\t\tvar data = JSON.parse(event.data);\r\n\t\t\t\tself.props.actions.authorizationGranted( data );\r\n\t\t\t\tself.props.actions.getMe();\r\n\r\n\t\t\t\t// and turn off our authorizing switch\r\n\t\t\t\tself.setState({\r\n\t\t\t\t\tframeUrl: '//jamesbarnsley.co.nz/auth.php?action=frame',\r\n\t\t\t\t\tauthorizing: false\r\n\t\t\t\t})\t\t\t\t\r\n\t\t\t}\r\n\r\n\t\t}, false);\r\n\t}\r\n\r\n\tstartAuthorization(){\r\n\t\tthis.setState({\r\n\t\t\tframeUrl: '//jamesbarnsley.co.nz/auth.php?action=authorize&app='+location.protocol+'//'+window.location.host,\r\n\t\t\tauthorizing: true\r\n\t\t})\r\n\t}\r\n\r\n\trenderMe(){\r\n\t\tif( !this.props.spotify.me ) return null;\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\tLogged in as {this.props.spotify.me.display_name ? this.props.spotify.me.display_name : null }\r\n\t\t\t\t\t\t ({ this.props.spotify.me.id })\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t)\r\n\t}\r\n\r\n\trenderAuthorizeButton(){\r\n\t\tif( this.state.authorizing ){\r\n\t\t\treturn (\r\n\t\t\t\t\r\n\t\t\t);\r\n\t\t}else if( this.props.spotify.authorized ){\r\n\t\t\treturn (\r\n\t\t\t\t
\r\n\t\t\t\t\t{ this.renderMe() }\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t);\r\n\t\t}else{\r\n\t\t\treturn (\r\n\t\t\t\t\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\trenderRefreshButton(){\r\n\t\tif( !this.props.spotify.authorized ) return null;\r\n\r\n\t\tif( this.props.spotify.refreshing_token ){\r\n\t\t\treturn (\r\n\t\t\t\t\r\n\t\t\t);\r\n\t\t}else{\r\n\t\t\treturn (\r\n\t\t\t\t\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\trender(){\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{ this.renderAuthorizeButton() }\r\n\t\t\t\t{ this.renderRefreshButton() }\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn state;\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tactions: bindActionCreators(actions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SpotifyAuthenticationFrame)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/SpotifyAuthenticationFrame.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { createStore, bindActionCreators } from 'redux'\r\n\r\nimport FontAwesome from 'react-fontawesome'\r\n\r\nclass URISchemesList extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\trender(){\r\n\t\tif( !this.props.mopidy.uri_schemes ) return null;\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.props.mopidy.uri_schemes.map( (scheme, index) => {\r\n\t\t\t\t\t\tscheme = scheme.replace(':','')\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{ index > 0 ? , : null }\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{ scheme }\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn state;\r\n}\r\n\r\nexport default connect(mapStateToProps)(URISchemesList)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/URISchemesList.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { Link } from 'react-router'\r\nimport { createStore, bindActionCreators } from 'redux'\r\n\r\nimport FontAwesome from 'react-fontawesome'\r\n\r\nimport * as pusherActions from '../services/pusher/actions'\r\n\r\nclass VersionManager extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\trenderUpgradeButton(){\r\n\t\tif( this.props.pusher.upgrading ){\r\n\t\t\treturn (\r\n\t\t\t\t\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif( !this.props.pusher.version.is_root ){\r\n\t\t\treturn \r\n\t\t}\r\n\r\n\t\tif( this.props.pusher.version.upgrade_available ){\r\n\t\t\treturn \r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\trender(){\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{ this.props.pusher.version.current } installed\r\n\t\t\t\t{ this.renderUpgradeButton() }\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn state;\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tpusherActions: bindActionCreators(pusherActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(VersionManager)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/VersionManager.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport { Link } from 'react-router'\r\nimport FontAwesome from 'react-fontawesome'\r\n\r\nimport * as mopidyActions from '../services/mopidy/actions'\r\n\r\nclass VolumeControl extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\thandleClick(e){\r\n\t\tvar slider = e.target;\r\n\r\n\t\tvar sliderY = e.clientY - slider.getBoundingClientRect().top;\r\n\t\tvar sliderHeight = slider.getBoundingClientRect().height;\r\n\t\tvar percent = 100 - parseInt( sliderY / sliderHeight * 100 );\r\n\r\n\t\tthis.props.mopidyActions.setVolume( percent )\r\n\t} \r\n\r\n\trender(){\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t this.props.mopidyActions.toggleMute()}> \r\n\t\t\t\t
\r\n\t\t\t\t\t
this.handleClick(e) } >\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn {\r\n\t\tvolume: state.mopidy.volume\r\n\t}\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tmopidyActions: bindActionCreators(mopidyActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(VolumeControl)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/components/VolumeControl.js\n **/","\r\nexport default function reducer(lastfm = {}, action){\r\n switch (action.type) {\r\n\r\n case 'LASTFM_ARTIST_LOADED':\r\n return Object.assign({}, lastfm, { artist: action.data });\r\n\r\n case 'LASTFM_TRACK_LOADED':\r\n return Object.assign({}, lastfm, { track: action.data });\r\n\r\n default:\r\n return lastfm\r\n }\r\n}\r\n\r\n\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/services/lastfm/reducer.js\n **/","\r\nconst localstorageMiddleware = (function(){\r\n\r\n /**\r\n * The actual middleware inteceptor\r\n **/\r\n return store => next => action => {\r\n\r\n // proceed as normal first\r\n // this way, any reducers and middleware do their thing BEFORE we store our new state\r\n next(action);\r\n\r\n // append our state to a global variable. This gives us access to debug the store at any point\r\n window._store = store\r\n console.log(action)\r\n\r\n switch( action.type ){\r\n\r\n case 'PUSHER_CONNECTED':\r\n var pusher = JSON.parse( localStorage.getItem('pusher') );\r\n if( !pusher ) pusher = {};\r\n Object.assign(\r\n pusher,{\r\n username: action.connection.username,\r\n connectionid: action.connection.connectionid\r\n }\r\n );\r\n localStorage.setItem('pusher', JSON.stringify(pusher));\r\n break;\r\n\r\n case 'PUSHER_SET_PORT':\r\n var pusher = JSON.parse( localStorage.getItem('pusher') );\r\n if( !pusher ) pusher = {};\r\n Object.assign( pusher, { port: action.port } );\r\n localStorage.setItem('pusher', JSON.stringify(pusher));\r\n break;\r\n\r\n case 'PUSHER_CHANGE_USERNAME':\r\n var pusher = JSON.parse( localStorage.getItem('pusher') );\r\n if( !pusher ) pusher = {};\r\n Object.assign( pusher,{ username: action.data.connection.username });\r\n localStorage.setItem('pusher', JSON.stringify(pusher));\r\n break;\r\n\r\n case 'MOPIDY_SET_CONFIG':\r\n var mopidy = {\r\n host: action.config.host,\r\n port: action.config.port\r\n };\r\n localStorage.setItem('mopidy', JSON.stringify(mopidy));\r\n break;\r\n\r\n case 'MOPIDY_URISCHEMES_FILTERED':\r\n var mopidy = JSON.parse( localStorage.getItem('mopidy') );\r\n if( !mopidy ) mopidy = {};\r\n Object.assign( mopidy, { uri_schemes: action.data });\r\n localStorage.setItem('mopidy', JSON.stringify(mopidy));\r\n break;\r\n\r\n case 'SPOTIFY_SET_CONFIG':\r\n var spotify = {\r\n country: action.config.country,\r\n locale: action.config.locale\r\n };\r\n localStorage.setItem('spotify', JSON.stringify(spotify));\r\n break;\r\n\r\n case 'SPOTIFY_AUTHORIZATION_GRANTED':\r\n var spotify = JSON.parse( localStorage.getItem('spotify') );\r\n if( !spotify ) spotify = {};\r\n Object.assign(\r\n spotify,{\r\n authorized: true, \r\n access_token: action.data.access_token, \r\n refresh_token: action.data.refresh_token, \r\n token_expiry: action.data.token_expiry\r\n }\r\n );\r\n localStorage.setItem('spotify', JSON.stringify(spotify));\r\n break;\r\n\r\n case 'SPOTIFY_AUTHORIZATION_REVOKED':\r\n var spotify = JSON.parse( localStorage.getItem('spotify') );\r\n if( !spotify ) spotify = {};\r\n Object.assign(\r\n spotify,{\r\n authorized: false, \r\n access_token: false, \r\n refresh_token: false, \r\n token_expiry: false\r\n }\r\n );\r\n localStorage.setItem('spotify', JSON.stringify(spotify));\r\n break;\r\n\r\n case 'SPOTIFY_TOKEN_REFRESHED':\r\n var spotify = JSON.parse( localStorage.getItem('spotify') );\r\n if( !spotify ) spotify = {};\r\n Object.assign(\r\n spotify,{\r\n access_token: action.data.access_token,\r\n token_expiry: action.data.token_expiry\r\n }\r\n );\r\n localStorage.setItem('spotify', JSON.stringify(spotify));\r\n break;\r\n\r\n case 'SPOTIFY_ME_LOADED':\r\n var spotify = JSON.parse( localStorage.getItem('spotify') );\r\n if( !spotify ) spotify = {};\r\n Object.assign(\r\n spotify,{\r\n me: action.data\r\n }\r\n );\r\n localStorage.setItem('spotify', JSON.stringify(spotify));\r\n break;\r\n }\r\n }\r\n\r\n})();\r\n\r\nexport default localstorageMiddleware\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/services/localstorage/middleware.js\n **/","\r\nimport Mopidy from 'mopidy'\r\n\r\nvar helpers = require('../../helpers.js')\r\nvar mopidyActions = require('./actions.js')\r\nvar lastfmActions = require('../lastfm/actions.js')\r\n\r\nconst MopidyMiddleware = (function(){ \r\n\r\n // container for the actual Mopidy socket\r\n var socket = null;\r\n\r\n // handle all manner of socket messages\r\n const handleMessage = (ws, store, type, data) => {\r\n switch( type ){\r\n\r\n case 'state:online':\r\n store.dispatch({ type: 'MOPIDY_CONNECTED' });\r\n instruct( ws, store, 'playback.getState' );\r\n instruct( ws, store, 'playback.getVolume' );\r\n instruct( ws, store, 'tracklist.getConsume' );\r\n instruct( ws, store, 'tracklist.getRandom' );\r\n instruct( ws, store, 'tracklist.getRepeat' );\r\n instruct( ws, store, 'tracklist.getTlTracks' );\r\n instruct( ws, store, 'playback.getCurrentTlTrack' );\r\n instruct( ws, store, 'playback.getTimePosition' );\r\n instruct( ws, store, 'getUriSchemes' );\r\n break;\r\n\r\n case 'state:offline':\r\n store.dispatch({ type: 'MOPIDY_DISCONNECTED' });\r\n break;\r\n\r\n case 'event:tracklistChanged':\r\n instruct( ws, store, 'tracklist.getTlTracks' );\r\n break;\r\n\r\n case 'event:playbackStateChanged':\r\n instruct( ws, store, 'playback.getState' );\r\n break;\r\n\r\n case 'event:seeked':\r\n store.dispatch({ type: 'MOPIDY_TIMEPOSITION', data: data.time_position });\r\n break;\r\n\r\n case 'event:trackPlaybackEnded':\r\n instruct( ws, store, 'playback.getTimePosition' );\r\n break;\r\n\r\n case 'event:trackPlaybackStarted':\r\n instruct( ws, store, 'playback.getCurrentTlTrack' );\r\n break;\r\n\r\n case 'event:volumeChanged':\r\n store.dispatch({ type: 'MOPIDY_VOLUME', data: data.volume });\r\n break;\r\n\r\n case 'event:optionsChanged':\r\n instruct( ws, store, 'tracklist.getConsume' );\r\n instruct( ws, store, 'tracklist.getRandom' );\r\n instruct( ws, store, 'tracklist.getRepeat' );\r\n break;\r\n\r\n default:\r\n //console.log( 'MopidyService: Unhandled message', type, message );\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Call something with Mopidy\r\n *\r\n * Sends request to Mopidy server, and updates our local storage on return\r\n * @param object ws = Mopidy class that wraps a Websocket\r\n * @param string model = which Mopidy model (playback, tracklist, etc)\r\n * @param string property = TlTracks, Consume, etc\r\n * @param string value (optional) = value of the property to pass\r\n * @return promise\r\n **/\r\n const instruct = ( ws, store, call, value = {} ) => {\r\n\r\n if( !store.getState().mopidy.connected ) return false\r\n\r\n var callParts = call.split('.');\r\n var model = callParts[0];\r\n var method = callParts[1];\r\n if( method ){\r\n var mopidyObject = ws[model][method]\r\n var property = method;\r\n }else{\r\n var mopidyObject = ws[model]\r\n var property = model;\r\n }\r\n\r\n property = property.replace('get','');\r\n property = property.replace('set','');\r\n\r\n return new Promise( (resolve, reject) => {\r\n mopidyObject( value )\r\n .then(\r\n response => {\r\n store.dispatch({ type: 'MOPIDY_'+property.toUpperCase(), call: call, data: response });\r\n resolve(response);\r\n },\r\n error => {\r\n console.error(error)\r\n reject(error);\r\n }\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Middleware\r\n *\r\n * This behaves like an action interceptor. We listen for specific actions\r\n * and handle special functionality. If the action is not in our switch, then\r\n * it just proceeds to the next middleware, or default functionality\r\n **/\r\n return store => next => action => {\r\n\r\n switch(action.type) {\r\n\r\n case 'MOPIDY_CONNECT':\r\n\r\n if(socket != null) socket.close();\r\n store.dispatch({ type: 'MOPIDY_CONNECTING' });\r\n\r\n var state = store.getState();\r\n\r\n socket = new Mopidy({\r\n webSocketUrl: 'ws://'+state.mopidy.host+':'+state.mopidy.port+'/mopidy/ws',\r\n callingConvention: 'by-position-or-by-name'\r\n });\r\n\r\n socket.on( (type, data) => handleMessage( socket, store, type, data ) );\r\n\r\n break;\r\n\r\n case 'MOPIDY_DISCONNECT':\r\n if(socket != null) socket.close();\r\n socket = null; \r\n store.dispatch({ type: 'MOPIDY_DISCONNECTED' });\r\n break;\r\n\r\n // send an instruction to the websocket\r\n case 'MOPIDY_INSTRUCT':\r\n instruct( socket, store, action.call, action.value )\r\n break;\r\n\r\n // send an instruction to the websocket\r\n case 'MOPIDY_URISCHEMES':\r\n var uri_schemes = action.data\r\n var remove = ['http','https','mms','rtmp','rtmps','rtsp','sc','spotify']\r\n\r\n // remove all our ignored types\r\n for( var i = 0; i < remove.length; i++ ){\r\n var index = uri_schemes.indexOf(remove[i])\r\n if( index > -1 ) uri_schemes.splice(index, 1);\r\n }\r\n\r\n // append with ':' to make them a mopidy URI\r\n for( var i = 0; i < uri_schemes.length; i++ ){\r\n uri_schemes[i] = uri_schemes[i] +':'\r\n }\r\n\r\n store.dispatch({ type: 'MOPIDY_URISCHEMES_FILTERED', data: uri_schemes });\r\n break;\r\n\r\n case 'MOPIDY_PLAY_TRACKS':\r\n\r\n // add our first track\r\n instruct( socket, store, 'tracklist.add', { uri: action.uris[0], at_position: 0 } )\r\n .then( response => {\r\n\r\n // play it\r\n store.dispatch( mopidyActions.changeTrack( response[0].tlid ) );\r\n\r\n // TODO: perhaps force update of currentTlTrack before we proceed?\r\n // this will make the UI feel snappier...\r\n\r\n // add the rest of our uris (if any)\r\n action.uris.shift();\r\n if( action.uris.length > 0 ){\r\n store.dispatch( mopidyActions.enqueueTracks( action.uris, 1 ) )\r\n }\r\n })\r\n break;\r\n\r\n case 'MOPIDY_PLAYLISTS':\r\n instruct( socket, store, 'playlists.asList' )\r\n .then( response => {\r\n store.dispatch({ type: 'MOPIDY_PLAYLISTS_LOADED', data: response });\r\n })\r\n break;\r\n\r\n case 'MOPIDY_PLAYLIST':\r\n store.dispatch({ type: 'MOPIDY_PLAYLIST_LOADED', data: false });\r\n instruct( socket, store, 'playlists.lookup', action.data )\r\n .then( response => {\r\n var playlist = response;\r\n playlist.tracks = {\r\n items: response.tracks,\r\n total: response.tracks.length\r\n }\r\n \r\n var uris = [];\r\n for( var i = 0; i < playlist.tracks.items.length; i++ ){\r\n uris.push( playlist.tracks.items[i].uri );\r\n }\r\n\r\n instruct( socket, store, 'library.lookup', { uris: uris } )\r\n .then( response => {\r\n\r\n for(var uri in response){\r\n if (response.hasOwnProperty(uri)) {\r\n\r\n var track = response[uri][0];\r\n \r\n // find the track reference, and drop in the full track data\r\n function getByURI( trackReference ){\r\n return track.uri == trackReference.uri\r\n }\r\n var trackReferences = playlist.tracks.items.filter(getByURI);\r\n \r\n // there could be multiple instances of this track, so accommodate this\r\n for( var j = 0; j < trackReferences.length; j++){\r\n var key = playlist.tracks.items.indexOf( trackReferences[j] );\r\n playlist.tracks.items[ key ] = track;\r\n }\r\n }\r\n }\r\n\r\n store.dispatch({ type: 'MOPIDY_PLAYLIST_LOADED', data: playlist });\r\n })\r\n })\r\n break;\r\n\r\n case 'MOPIDY_ALBUM':\r\n //store.dispatch({ type: 'MOPIDY_ALBUM_LOADED', data: false });\r\n instruct( socket, store, 'library.lookup', action.data )\r\n .then( response => {\r\n var album = response[0].album;\r\n album.artists = response[0].artists;\r\n if( !album.images ) album.images = []\r\n album.tracks = {\r\n items: response,\r\n total: response.length\r\n }\r\n \r\n var uris = [];\r\n for( var i = 0; i < album.tracks.items.length; i++ ){\r\n uris.push( album.tracks.items[i].uri );\r\n }\r\n\r\n // load artwork from LastFM\r\n if( album.images.length <= 0 ){\r\n\r\n var mbid = helpers.getFromUri('mbid',album.uri)\r\n if( mbid ){\r\n store.dispatch( lastfmActions.getAlbum( false, false, mbid ) )\r\n }else{\r\n store.dispatch( lastfmActions.getAlbum( album.artists[0].name, album.name ) )\r\n }\r\n }\r\n\r\n instruct( socket, store, 'library.lookup', { uris: uris } )\r\n .then( response => {\r\n\r\n for(var uri in response){\r\n if (response.hasOwnProperty(uri)) {\r\n\r\n var track = response[uri][0];\r\n \r\n // find the track reference, and drop in the full track data\r\n function getByURI( trackReference ){\r\n return track.uri == trackReference.uri\r\n }\r\n var trackReferences = album.tracks.items.filter(getByURI);\r\n \r\n // there could be multiple instances of this track, so accommodate this\r\n for( var j = 0; j < trackReferences.length; j++){\r\n var key = album.tracks.items.indexOf( trackReferences[j] );\r\n album.tracks.items[ key ] = track;\r\n }\r\n }\r\n }\r\n\r\n store.dispatch({ type: 'MOPIDY_ALBUM_LOADED', data: album });\r\n })\r\n })\r\n break;\r\n\r\n case 'MOPIDY_ARTIST':\r\n store.dispatch({ type: 'MOPIDY_ARTIST_LOADED', data: false });\r\n instruct( socket, store, 'library.lookup', action.data )\r\n .then( response => {\r\n var artist = response[0].artists[0];\r\n if( !artist.images ) artist.images = [];\r\n if( !artist.albums ) artist.albums = [];\r\n artist.tracks = response.slice(0,10);\r\n \r\n for( var i = 0; i < response.length; i++ ){\r\n var album = response[i].album;\r\n\r\n function getByURI( albumToCheck ){\r\n return album.uri == albumToCheck.uri\r\n }\r\n var existingAlbum = artist.albums.find(getByURI);\r\n if( !existingAlbum ){\r\n artist.albums.push(album)\r\n }\r\n }\r\n\r\n // load artwork from LastFM\r\n if( artist.images.length <= 0 ){\r\n if( artist.musicbrainz_id ){\r\n store.dispatch( lastfmActions.getArtist( false, artist.musicbrainz_id ) )\r\n }else{\r\n store.dispatch( lastfmActions.getArtist( artist.name ) )\r\n }\r\n }\r\n \r\n store.dispatch({ type: 'MOPIDY_ARTIST_LOADED', data: artist });\r\n })\r\n break;\r\n\r\n case 'MOPIDY_DIRECTORY':\r\n store.dispatch({ type: 'MOPIDY_DIRECTORY_LOADED', data: false });\r\n instruct( socket, store, 'library.browse', action.data )\r\n .then( response => { \r\n store.dispatch({ type: 'MOPIDY_DIRECTORY_LOADED', data: response });\r\n })\r\n break;\r\n\r\n case 'MOPIDY_ARTISTS':\r\n store.dispatch({ type: 'MOPIDY_ARTISTS_LOADED', data: false });\r\n instruct( socket, store, 'library.browse', { uri: 'local:directory?type=artist' } )\r\n .then( response => { \r\n store.dispatch({ type: 'MOPIDY_ARTISTS_LOADED', data: response });\r\n })\r\n break;\r\n\r\n case 'MOPIDY_ALBUMS':\r\n store.dispatch({ type: 'MOPIDY_ALBUMS_LOADED', data: false });\r\n instruct( socket, store, 'library.browse', { uri: 'local:directory?type=album' } )\r\n .then( response => { \r\n store.dispatch({ type: 'MOPIDY_ALBUMS_LOADED', data: response });\r\n })\r\n break;\r\n\r\n // This action is irrelevant to us, pass it on to the next middleware\r\n default:\r\n return next(action);\r\n }\r\n }\r\n\r\n})();\r\n\r\nexport default MopidyMiddleware\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/services/mopidy/middleware.js\n **/","\r\nexport default function reducer(mopidy = {}, action){\r\n switch (action.type) {\r\n\r\n case 'MOPIDY_CONNECT':\r\n case 'MOPIDY_CONNECTING':\r\n return Object.assign({}, mopidy, { connected: false, connecting: true });\r\n\r\n case 'MOPIDY_CONNECTED':\r\n return Object.assign({}, mopidy, { connected: true, connecting: false });\r\n\r\n case 'MOPIDY_DISCONNECTED':\r\n return Object.assign({}, mopidy, { connected: false, connecting: false });\r\n\r\n case 'MOPIDY_SET_CONFIG':\r\n return Object.assign({}, mopidy, {\r\n host: action.host, \r\n port: action.port\r\n });\r\n\r\n case 'MOPIDY_CHANGE_TRACK':\r\n return Object.assign({}, mopidy, {\r\n tlid: action.tlid\r\n });\r\n\r\n case 'MOPIDY_URISCHEMES_FILTERED':\r\n return Object.assign({}, mopidy, {\r\n uri_schemes: action.data\r\n });\r\n\r\n\r\n /**\r\n * State-oriented actions\r\n **/\r\n case 'MOPIDY_STATE':\r\n return Object.assign({}, mopidy, {\r\n play_state: action.data \r\n });\r\n\r\n case 'MOPIDY_CONSUME':\r\n return Object.assign({}, mopidy, {\r\n consume: action.data \r\n });\r\n\r\n case 'MOPIDY_RANDOM':\r\n return Object.assign({}, mopidy, {\r\n random: action.data \r\n });\r\n\r\n case 'MOPIDY_REPEAT':\r\n return Object.assign({}, mopidy, {\r\n repeat: action.data \r\n });\r\n\r\n case 'MOPIDY_VOLUME':\r\n return Object.assign({}, mopidy, {\r\n volume: action.data \r\n });\r\n\r\n case 'MOPIDY_TIMEPOSITION':\r\n return Object.assign({}, mopidy, {\r\n time_position: action.data\r\n });\r\n\r\n\r\n /**\r\n * Asset-oriented actions\r\n **/\r\n\r\n case 'MOPIDY_PLAYLISTS_LOADED':\r\n if( !action.data ) return mopidy;\r\n return Object.assign({}, mopidy, { playlists: action.data });\r\n\r\n case 'MOPIDY_DIRECTORY_LOADED':\r\n return Object.assign({}, mopidy, {\r\n directory: action.data \r\n });\r\n\r\n case 'MOPIDY_PLAYLIST_LOADED':\r\n return Object.assign({}, mopidy, {\r\n playlist: action.data\r\n });\r\n\r\n case 'MOPIDY_ARTIST_LOADED':\r\n return Object.assign({}, mopidy, {\r\n artist: action.data\r\n });\r\n\r\n case 'MOPIDY_ARTISTS_LOADED':\r\n return Object.assign({}, mopidy, {\r\n artists: action.data\r\n });\r\n\r\n case 'MOPIDY_ALBUMS_LOADED':\r\n return Object.assign({}, mopidy, {\r\n albums: action.data\r\n });\r\n\r\n default:\r\n return mopidy\r\n }\r\n}\r\n\r\n\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/services/mopidy/reducer.js\n **/","\r\nvar actions = require('./actions.js')\r\nvar helpers = require('../../helpers.js')\r\n\r\nconst PusherMiddleware = (function(){ \r\n\r\n // container for the actual Mopidy socket\r\n var socket = null;\r\n\r\n // handle all manner of socket messages\r\n const handleMessage = (ws, store, message) => {\r\n switch( message.action ){\r\n default:\r\n var name = message.action.toUpperCase();\r\n name = name.replace('GET_','');\r\n store.dispatch({ type: 'PUSHER_'+name, data: message.data })\r\n }\r\n }\r\n\r\n const makeRequest = (data) => {\r\n data.type = 'query';\r\n data.message_id = helpers.generateGuid();\r\n socket.send( JSON.stringify(data) );\r\n }\r\n\r\n /**\r\n * Middleware\r\n *\r\n * This behaves like an action interceptor. We listen for specific actions\r\n * and handle special functionality. If the action is not in our switch, then\r\n * it just proceeds to the next middleware, or default functionality\r\n **/\r\n return store => next => action => {\r\n\r\n switch(action.type) {\r\n\r\n case 'PUSHER_CONNECT':\r\n\r\n if(socket != null) socket.close();\r\n store.dispatch({ type: 'PUSHER_CONNECTING' });\r\n\r\n var state = store.getState();\r\n var connection = {\r\n clientid: Math.random().toString(36).substr(2, 9),\r\n connectionid: helpers.generateGuid(),\r\n username: Math.random().toString(36).substr(2, 9)\r\n }\r\n if( state.pusher.username ) connection.username = state.pusher.username;\r\n\r\n socket = new WebSocket(\r\n 'ws://'+state.mopidy.host+':'+state.pusher.port+'/pusher',\r\n [ connection.clientid, connection.connectionid, connection.username ]\r\n );\r\n\r\n socket.onopen = () => {\r\n store.dispatch({ type: 'PUSHER_CONNECTED', connection: connection });\r\n store.dispatch({ type: 'PUSHER_SET_USERNAME', username: connection.username });\r\n };\r\n\r\n socket.onmessage = (message) => {\r\n var message = JSON.parse(message.data);\r\n handleMessage( socket, store, message )\r\n };\r\n\r\n break;\r\n\r\n case 'PUSHER_CONNECTED':\r\n makeRequest({ action: 'get_version' });\r\n return next(action);\r\n break;\r\n\r\n case 'PUSHER_UPGRADING':\r\n makeRequest({ action: 'perform_upgrade' });\r\n return next(action);\r\n break;\r\n\r\n case 'PUSHER_CLIENT_CONNECTED':\r\n makeRequest({ action: 'get_connections' });\r\n return next(action);\r\n break;\r\n\r\n case 'PUSHER_INSTRUCT':\r\n makeRequest({ action: action.action, data: action.data });\r\n break;\r\n\r\n // This action is irrelevant to us, pass it on to the next middleware\r\n default:\r\n return next(action);\r\n }\r\n }\r\n\r\n})();\r\n\r\nexport default PusherMiddleware\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/services/pusher/middleware.js\n **/","\r\nexport default function reducer(pusher = {}, action){\r\n switch (action.type) {\r\n\r\n case 'PUSHER_CONNECT':\r\n case 'PUSHER_CONNECTING':\r\n return Object.assign({}, pusher, { connected: false, connecting: true });\r\n\r\n case 'PUSHER_CONNECTED':\r\n return Object.assign({}, pusher, { \r\n connected: true, \r\n connecting: false, \r\n connectionid: action.connection.connectionid, \r\n username: action.connection.username\r\n });\r\n\r\n case 'PUSHER_DISCONNECTED':\r\n return Object.assign({}, pusher, { connected: false, connecting: false });\r\n\r\n case 'PUSHER_SET_PORT':\r\n return Object.assign({}, pusher, { port: action.port });\r\n\r\n case 'PUSHER_CHANGE_USERNAME':\r\n return Object.assign({}, pusher, { username: action.data.connection.username });\r\n\r\n case 'PUSHER_CONNECTION_UPDATED':\r\n function byID(connection){\r\n return connection.connectionid == action.data.connections.connectionid;\r\n }\r\n var connection = pusher.connections.find(byID);\r\n var index = pusher.connections.indexOf(connection);\r\n var connections = Object.assign([], pusher.connections);\r\n connections[index] = action.data.connections;\r\n\r\n return Object.assign({}, pusher, { connections: connections });\r\n\r\n case 'PUSHER_CONNECTIONS':\r\n return Object.assign({}, pusher, { connections: action.data.connections });\r\n\r\n case 'PUSHER_VERSION':\r\n return Object.assign({}, pusher, { \r\n version: action.data.version,\r\n upgrading: false\r\n });\r\n\r\n case 'PUSHER_UPGRADING':\r\n return Object.assign({}, pusher, { upgrading: true });\r\n\r\n default:\r\n return pusher\r\n }\r\n}\r\n\r\n\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/services/pusher/reducer.js\n **/","\r\n\r\nvar actions = require('./actions.js')\r\n\r\nconst SpotifyMiddleware = (function(){\r\n\r\n /**\r\n * The actual middleware inteceptor\r\n **/\r\n return store => next => action => {\r\n var state = store.getState();\r\n\r\n switch(action.type){\r\n\r\n case 'SPOTIFY_CONNECT':\r\n store.dispatch( actions.getMe() )\r\n\r\n // when our mopidy server current track changes\r\n case 'MOPIDY_CURRENTTLTRACK':\r\n\r\n // proceed as usual so we don't inhibit default functionality\r\n next(action)\r\n\r\n // if the current track is a spotify track\r\n if( action.data && action.data.track.uri.substring(0,14) == 'spotify:track:' ){\r\n store.dispatch( actions.getTrack( action.data.track.uri ) )\r\n }\r\n\r\n // This action is irrelevant to us, pass it on to the next middleware\r\n default:\r\n return next(action);\r\n }\r\n }\r\n\r\n})();\r\n\r\nexport default SpotifyMiddleware\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/services/spotify/middleware.js\n **/","\r\nexport default function reducer(spotify = {}, action){\r\n switch (action.type) {\r\n\r\n case 'SPOTIFY_CONNECT':\r\n case 'SPOTIFY_CONNECTING':\r\n return Object.assign({}, spotify, { connected: false, connecting: true });\r\n\r\n case 'SPOTIFY_CONNECTED':\r\n return Object.assign({}, spotify, { connected: true, connecting: false });\r\n\r\n case 'SPOTIFY_AUTHORIZATION_GRANTED':\r\n return Object.assign({}, spotify, { \r\n authorizing: false, \r\n authorized: true,\r\n authorization: action.data,\r\n access_token: action.data.access_token,\r\n refresh_token: action.data.refresh_token,\r\n token_expiry: action.data.token_expiry\r\n });\r\n\r\n case 'PUSHER_SPOTIFY_TOKEN':\r\n if( spotify.authorized ) return spotify;\r\n return Object.assign({}, spotify, { \r\n authorizing: false, \r\n authorized: false,\r\n authorization: false,\r\n access_token: action.data.access_token,\r\n token_expiry: action.data.token_expiry\r\n });\r\n\r\n case 'SPOTIFY_AUTHORIZATION_REVOKED':\r\n return Object.assign({}, spotify, { \r\n authorizing: false, \r\n authorization: false,\r\n authorized: false,\r\n access_token: false,\r\n me: false\r\n });\r\n\r\n case 'SPOTIFY_TOKEN_REFRESHING':\r\n return Object.assign({}, spotify, { refreshing_token: true });\r\n\r\n case 'SPOTIFY_TOKEN_REFRESHED':\r\n return Object.assign({}, spotify, {\r\n refreshing_token: false,\r\n authorization: action.data,\r\n access_token: action.data.access_token,\r\n token_expiry: action.data.token_expiry\r\n });\r\n\r\n case 'SPOTIFY_DISCONNECTED':\r\n return Object.assign({}, spotify, { connected: false, connecting: false });\r\n\r\n case 'SPOTIFY_ME_LOADED':\r\n return Object.assign({}, spotify, { me: action.data });\r\n\r\n case 'SPOTIFY_PLAYLIST_LOADED':\r\n return Object.assign({}, spotify, { playlist: action.data });\r\n\r\n case 'SPOTIFY_PLAYLIST_LOADED_MORE':\r\n var playlist = spotify.playlist\r\n Object.assign(playlist, { tracks: {\r\n href: action.data.href,\r\n next: action.data.next,\r\n previous: action.data.previous,\r\n items: [ ...spotify.playlist.tracks.items, ...action.data.items ]\r\n }})\r\n return Object.assign({}, spotify, { playlist: playlist });\r\n\r\n case 'SPOTIFY_ARTIST_LOADED':\r\n return Object.assign({}, spotify, { artist: action.data });\r\n\r\n case 'SPOTIFY_ARTISTS_LOADED':\r\n return Object.assign({}, spotify, { artists: action.data });\r\n\r\n case 'SPOTIFY_ARTIST_ALBUMS_LOADED': \r\n return Object.assign({}, spotify, { artist_albums: action.data });\r\n\r\n case 'SPOTIFY_ARTIST_ALBUMS_LOADED_MORE':\r\n return Object.assign({}, spotify, { artist_albums: {\r\n href: action.data.href,\r\n next: action.data.next,\r\n previous: action.data.previous,\r\n items: [ ...spotify.artist_albums.items, ...action.data.items ]\r\n }});\r\n\r\n case 'SPOTIFY_LIBRARY_PLAYLISTS_LOADED':\r\n return Object.assign({}, spotify, { library_playlists: action.data });\r\n\r\n case 'SPOTIFY_LIBRARY_ARTISTS_LOADED':\r\n return Object.assign({}, spotify, { library_artists: action.data });\r\n\r\n case 'SPOTIFY_LIBRARY_ARTISTS_LOADED_MORE':\r\n return Object.assign({}, spotify, { library_artists: {\r\n href: action.data.artists.href,\r\n next: action.data.artists.next,\r\n previous: action.data.artists.previous,\r\n items: [ ...spotify.library_artists.items, ...action.data.artists.items ]\r\n }});\r\n\r\n case 'SPOTIFY_LIBRARY_ALBUMS_LOADED':\r\n return Object.assign({}, spotify, { library_albums: action.data });\r\n\r\n case 'SPOTIFY_LIBRARY_ALBUMS_LOADED_MORE':\r\n return Object.assign({}, spotify, { library_albums: {\r\n href: action.data.href,\r\n next: action.data.next,\r\n previous: action.data.previous,\r\n items: [ ...spotify.library_albums.items, ...action.data.items ]\r\n }});\r\n\r\n case 'SPOTIFY_LIBRARY_TRACKS_LOADED':\r\n return Object.assign({}, spotify, { library_tracks: action.data });\r\n\r\n case 'SPOTIFY_FEATURED_PLAYLISTS_LOADED':\r\n return Object.assign({}, spotify, { featured_playlists: action.data });\r\n\r\n case 'SPOTIFY_CATEGORIES_LOADED':\r\n return Object.assign({}, spotify, { categories: action.data });\r\n\r\n case 'SPOTIFY_CATEGORY_LOADED':\r\n return Object.assign({}, spotify, { category: action.data });\r\n\r\n case 'SPOTIFY_CATEGORY_PLAYLISTS_LOADED':\r\n return Object.assign({}, spotify, { category_playlists: action.data });\r\n\r\n case 'SPOTIFY_CATEGORY_PLAYLISTS_LOADED_MORE':\r\n return Object.assign({}, spotify, { category_playlists: {\r\n href: action.data.href,\r\n next: action.data.next,\r\n previous: action.data.previous,\r\n items: [ ...spotify.category_playlists.items, ...action.data.items ]\r\n }});\r\n\r\n case 'SPOTIFY_NEW_RELEASES_LOADED':\r\n return Object.assign({}, spotify, { new_releases: action.data });\r\n\r\n case 'SPOTIFY_NEW_RELEASES_LOADED_MORE':\r\n return Object.assign({}, spotify, { new_releases: {\r\n href: action.data.albums.href,\r\n next: action.data.albums.next,\r\n previous: action.data.albums.previous,\r\n items: [ ...spotify.new_releases.items, ...action.data.albums.items ]\r\n }});\r\n\r\n default:\r\n return spotify\r\n }\r\n}\r\n\r\n\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/services/spotify/reducer.js\n **/","\r\nexport default function reducer(ui = {}, action){\r\n switch (action.type) {\r\n\r\n case 'LAZY_LOADING':\r\n return Object.assign({}, ui, { lazy_loading: action.start });\r\n\r\n /**\r\n * Context menu\r\n **/\r\n case 'SHOW_CONTEXT_MENU':\r\n return Object.assign({}, ui, { \r\n \tcontext_menu: { \r\n \t\tshow: true,\r\n \t\tposition_x: action.position_x,\r\n \t\tposition_y: action.position_y,\r\n \t\tcontext: action.context, \r\n \t\tdata: action.data\r\n \t}\r\n });\r\n\r\n case 'HIDE_CONTEXT_MENU':\r\n return Object.assign({}, ui, { context_menu: { show: false } });\r\n\r\n\r\n /**\r\n * General assets\r\n * Playlists/albums/etc\r\n **/\r\n\r\n case 'SPOTIFY_ALBUM_LOADED':\r\n case 'MOPIDY_ALBUM_LOADED':\r\n return Object.assign({}, ui, { album: action.data });\r\n\r\n case 'LASTFM_ALBUM_LOADED':\r\n //if( !action.data.image ) return ui\r\n var album = Object.assign(ui.album, { images: action.data.image })\r\n return Object.assign({}, ui, { album: album });\r\n\r\n case 'SPOTIFY_ALBUM_LOADED_MORE':\r\n var album = ui.album\r\n Object.assign(album, { tracks: {\r\n href: action.data.href,\r\n next: action.data.next,\r\n previous: action.data.previous,\r\n items: [ ...ui.album.tracks.items, ...action.data.items ]\r\n }})\r\n return Object.assign({}, ui, { album: album });\r\n\r\n\r\n /**\r\n * Current track and tracklist\r\n **/\r\n\r\n case 'MOPIDY_TLTRACKS':\r\n if( !action.data ) return ui\r\n\r\n var tracklist = []\r\n for( var i = 0; i < action.data.length; i++ ){\r\n tracklist.push( Object.assign({}, action.data[i].track, { tlid: action.data[i].tlid }) )\r\n }\r\n return Object.assign({}, ui, { current_tracklist: tracklist });\r\n\r\n case 'SPOTIFY_TRACK_LOADED':\r\n if( !action.data ) return ui\r\n \r\n var current_track = Object.assign({}, ui.current_track, action.data)\r\n return Object.assign({}, ui, { current_track: current_track });\r\n\r\n case 'MOPIDY_CURRENTTLTRACK':\r\n if( !action.data ) return ui\r\n\r\n var current_tracklist = []\r\n Object.assign(current_tracklist, ui.current_tracklist)\r\n\r\n for( var i = 0; i < current_tracklist.length; i++ ){\r\n Object.assign(\r\n current_tracklist[i], \r\n { playing: ( current_tracklist[i].tlid == action.data.tlid ) }\r\n )\r\n }\r\n\r\n var current_track = action.data.track\r\n Object.assign(current_track, { tlid: action.data.tlid })\r\n\r\n return Object.assign({}, ui, {\r\n current_track: current_track\r\n });\r\n\r\n\r\n /**\r\n * Search results\r\n **/ \r\n\r\n case 'SEARCH_STARTED':\r\n return Object.assign({}, ui, { search_results: action.data })\r\n\r\n case 'MOPIDY_SEARCH':\r\n\r\n // collate all our different sources into one array\r\n var tracks = []\r\n for( var i = 0; i < action.data.length; i++ ){\r\n if( action.data[i].tracks ) tracks = [...tracks, ...action.data[i].tracks]\r\n }\r\n\r\n // merge our results with all our other tracks\r\n var results = Object.assign({}, ui.search_results, { \r\n tracks: [...ui.search_results.tracks, ...tracks]\r\n })\r\n return Object.assign({}, ui, { search_results: results })\r\n\r\n case 'SPOTIFY_SEARCH_RESULTS_LOADED':\r\n if( !action.data ) return ui\r\n\r\n return Object.assign({}, ui, { search_results: {\r\n artists: [ ...ui.search_results.artists, ...action.data.artists.items ],\r\n albums: [ ...ui.search_results.albums, ...action.data.albums.items ],\r\n playlists: [ ...ui.search_results.playlists, ...action.data.playlists.items ],\r\n tracks: [ ...ui.search_results.tracks, ...action.data.tracks.items ],\r\n artists_more: action.data.artists.next,\r\n albums_more: action.data.albums.next,\r\n playlists_more: action.data.playlists.next,\r\n tracks_more: action.data.tracks.next\r\n }});\r\n\r\n case 'SPOTIFY_SEARCH_RESULTS_LOADED_MORE_ARTISTS':\r\n var artists = [...ui.search_results.artists, ...action.data.artists.items]\r\n var results = Object.assign({}, ui.search_results, { \r\n artists: artists,\r\n artists_more: action.data.artists.next\r\n })\r\n return Object.assign({}, ui, { search_results: results })\r\n\r\n case 'SPOTIFY_SEARCH_RESULTS_LOADED_MORE_ALBUMS':\r\n var albums = [...ui.search_results.albums, ...action.data.albums.items]\r\n var results = Object.assign({}, ui.search_results, { \r\n albums: albums,\r\n albums_more: action.data.albums.next\r\n })\r\n return Object.assign({}, ui, { search_results: results })\r\n\r\n case 'SPOTIFY_SEARCH_RESULTS_LOADED_MORE_PLAYLISTS':\r\n var playlists = [...ui.search_results.playlists, ...action.data.playlists.items]\r\n var results = Object.assign({}, ui.search_results, { \r\n playlists: playlists,\r\n playlists_more: action.data.playlists.next\r\n })\r\n return Object.assign({}, ui, { search_results: results })\r\n\r\n case 'SPOTIFY_SEARCH_RESULTS_LOADED_MORE_TRACKS':\r\n var tracks = [...ui.search_results.tracks, ...action.data.tracks.items]\r\n var results = Object.assign({}, ui.search_results, { \r\n tracks: tracks,\r\n tracks_more: action.data.tracks.next\r\n })\r\n return Object.assign({}, ui, { search_results: results })\r\n\r\n default:\r\n return ui\r\n }\r\n}\r\n\r\n\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/services/ui/reducer.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport FontAwesome from 'react-fontawesome'\r\nlet helpers = require('../helpers.js')\r\n\r\nimport TrackList from '../components/TrackList'\r\nimport Thumbnail from '../components/Thumbnail'\r\nimport Parallax from '../components/Parallax'\r\nimport ArtistSentence from '../components/ArtistSentence'\r\nimport ArtistGrid from '../components/ArtistGrid'\r\nimport Dater from '../components/Dater'\r\nimport LazyLoadListener from '../components/LazyLoadListener'\r\n\r\nimport * as mopidyActions from '../services/mopidy/actions'\r\nimport * as spotifyActions from '../services/spotify/actions'\r\n\r\nclass Album extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\tcomponentDidMount(){\r\n\t\tthis.loadAlbum();\r\n\t}\r\n\r\n\tcomponentWillReceiveProps( nextProps ){\r\n\t\tconsole.log('componentWillReceiveProps')\r\n\r\n\t\t// if our URI has changed, fetch new album\r\n\t\tif( nextProps.params.uri != this.props.params.uri ){\r\n\t\t\tthis.loadAlbum( nextProps )\r\n\r\n\t\t// if mopidy has just connected AND we're a local album, go get\r\n\t\t}else if( !this.props.mopidy_connected && nextProps.mopidy_connected ){\r\n\t\t\tif( helpers.uriSource( this.props.params.uri ) == 'local' ){\r\n\t\t\t\tthis.loadAlbum( nextProps )\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tloadAlbum( props = this.props ){\r\n\t\tswitch( helpers.uriSource( props.params.uri ) ){\r\n\r\n\t\t\tcase 'spotify':\r\n\t\t\t\tthis.props.spotifyActions.getAlbum( props.params.uri );\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'local':\r\n\t\t\t\tif( props.mopidy_connected ) this.props.mopidyActions.getAlbum( props.params.uri );\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tloadMore(){\r\n\t\tif( !this.props.album.tracks.next ) return\r\n\t\tthis.props.spotifyActions.getURL( this.props.album.tracks.next, 'SPOTIFY_ALBUM_LOADED_MORE' );\r\n\t}\r\n\r\n\trenderThumbnail(){\r\n\t\tif( !this.props.album.images ) return \r\n\t\treturn \r\n\t}\r\n\r\n\trender(){\r\n\t\tif( !this.props.album ) return null\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t{ this.renderThumbnail() }\r\n\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t
  • { this.props.album.tracks.total } tracks,
  • \r\n\t\t\t\t\t\t{ this.props.album.release_date ?
  • Released
  • : null }\r\n\t\t\t\t\t\t
  • {helpers.uriSource( this.props.params.uri )} playlist
  • \t\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t

{ this.props.album.name }

\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t this.loadMore() }/>\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Export our component\r\n *\r\n * We also integrate our global store, using connect()\r\n **/\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn {\r\n\t\talbum: state.ui.album,\r\n\t\tmopidy_connected: state.mopidy.connected\r\n\t};\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tmopidyActions: bindActionCreators(mopidyActions, dispatch),\r\n\t\tspotifyActions: bindActionCreators(spotifyActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Album)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/views/Album.js\n **/","\r\nimport React, { PropTypes } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { createStore, bindActionCreators } from 'redux'\r\nimport { Link } from 'react-router'\r\nimport { connect } from 'react-redux'\r\n\r\nimport Sidebar from '../components/Sidebar'\r\nimport ContextMenu from '../components/ContextMenu'\r\n\r\nimport * as uiActions from '../services/ui/actions'\r\nimport * as pusherActions from '../services/pusher/actions'\r\nimport * as mopidyActions from '../services/mopidy/actions'\r\nimport * as spotifyActions from '../services/spotify/actions'\r\n\r\n\r\n/**\r\n * Root level application\r\n **/\r\nclass App extends React.Component{\r\n\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tthis.handleKeyUp = this.handleKeyUp.bind(this);\r\n\t\tthis.handleKeyDown = this.handleKeyDown.bind(this);\r\n\t}\r\n\r\n\tcomponentWillMount(){\r\n\t\tthis.props.pusherActions.connect();\r\n\t\tthis.props.mopidyActions.connect();\r\n\t\tthis.props.spotifyActions.connect();\r\n\r\n\t\twindow.addEventListener(\"keyup\", this.handleKeyUp, false);\r\n\t\twindow.addEventListener(\"keydown\", this.handleKeyDown, false);\r\n\t}\r\n\r\n\tcomponentWillUnmount(){\r\n\t\twindow.removeEventListener(\"keyup\", this.handleKeyUp, false);\r\n\t\twindow.removeEventListener(\"keydown\", this.handleKeyDown, false);\r\n\t}\r\n\r\n\tshouldTriggerShortcut(e){\r\n\t\tvar ignoreNodes = ['INPUT', 'TEXTAREA'];\r\n\t\tvar keyCodes = [32];\r\n\r\n\t\tif( ignoreNodes.indexOf(e.target.nodeName) > -1 ){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif( keyCodes.indexOf(e.keyCode) > -1 ){\r\n\t\t\te.preventDefault();\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\r\n\thandleKeyDown(e){\r\n\t\tthis.shouldTriggerShortcut(e);\r\n\t}\r\n\r\n\thandleKeyUp(e){\r\n\t\tif( !this.shouldTriggerShortcut(e) ) return;\r\n\r\n\t\tswitch(e.keyCode){\t\t\t\r\n\t\t\tcase 32: // spacebar\r\n\t\t\t\tif( this.props.play_state == 'playing' ){\r\n\t\t\t\t\tthis.props.mopidyActions.pause();\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.props.mopidyActions.play();\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\trender(){\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t \r\n\t\t
\r\n\t\t \t\t{this.props.children}\r\n\t\t
\r\n\t\t \r\n\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\n/**\r\n * Export our component\r\n *\r\n * We also integrate our global store, using connect()\r\n **/\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn {\r\n\t\tplay_state: state.mopidy.play_state,\r\n\t\tcontext_menu: state.ui.context_menu\r\n\t}\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tuiActions: bindActionCreators(uiActions, dispatch),\r\n\t\tpusherActions: bindActionCreators(pusherActions, dispatch),\r\n\t\tmopidyActions: bindActionCreators(mopidyActions, dispatch),\r\n\t\tspotifyActions: bindActionCreators(spotifyActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(App)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/views/App.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport FontAwesome from 'react-fontawesome'\r\nlet helpers = require('../helpers.js')\r\n\r\nimport LazyLoadListener from '../components/LazyLoadListener'\r\nimport Header from '../components/Header'\r\nimport TrackList from '../components/TrackList'\r\nimport AlbumGrid from '../components/AlbumGrid'\r\nimport Thumbnail from '../components/Thumbnail'\r\nimport Parallax from '../components/Parallax'\r\nimport ArtistList from '../components/ArtistList'\r\n\r\nimport * as mopidyActions from '../services/mopidy/actions'\r\nimport * as lastfmActions from '../services/lastfm/actions'\r\nimport * as spotifyActions from '../services/spotify/actions'\r\n\r\nclass Artist extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\tcomponentDidMount(){\r\n\t\tthis.loadArtist();\r\n\t}\r\n\r\n\tcomponentWillReceiveProps( nextProps ){\r\n\t\tif( nextProps.params.uri != this.props.params.uri ){\r\n\t\t\tthis.loadArtist( nextProps )\r\n\t\t}else if( !this.props.mopidy.connected && nextProps.mopidy.connected ){\r\n\t\t\tif( helpers.uriSource( this.props.params.uri ) == 'local' ){\r\n\t\t\t\tthis.loadArtist( nextProps )\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tloadArtist( props = this.props ){\r\n\t\tvar source = helpers.uriSource( props.params.uri );\r\n\t\tif( source == 'spotify' ){\r\n\t\t\tthis.props.spotifyActions.getArtist( props.params.uri );\r\n\t\t}else if( source == 'local' && props.mopidy.connected ){\r\n\t\t\tthis.props.mopidyActions.getArtist( props.params.uri );\r\n\t\t}\r\n\t}\r\n\r\n\tloadMore(){\r\n\t\tif( !this.props.spotify.artist_albums || !this.props.spotify.artist_albums.next ) return\r\n\t\tthis.props.spotifyActions.getURL( this.props.spotify.artist_albums.next, 'SPOTIFY_ARTIST_ALBUMS_LOADED_MORE' );\r\n\t}\r\n\r\n\trenderSpotifyArtist(){\r\n\t\tif( !this.props.spotify.artist ) return null\r\n\t\tvar artist = this.props.spotify.artist\r\n\t\tvar albums = this.props.spotify.artist_albums\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t

{ artist.name }

\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t
  • { artist.followers.total.toLocaleString() } followers
  • \r\n\t\t\t\t\t\t{ artist.popularity ?
  • { artist.popularity }% popularity
  • : null }\r\n\t\t\t\t\t\t
  • Spotify artist
  • \r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\r\n\t\t\t\t
\r\n\t\t\t\t\t

Top tracks

\r\n\t\t\t\t\t{ artist.tracks ? : null }\r\n\t\t\t\t
\r\n\r\n\t\t\t\t
\r\n\r\n\t\t\t\t
\r\n\t\t\t\t\t

Related artists

\r\n\t\t\t\t\t{ artist.related_artists ? : null }\r\n\t\t\t\t
\r\n\r\n\t\t\t\t
\r\n\r\n\t\t\t\t

Albums

\r\n\t\t\t\t
\r\n\t\t\t\t\t{ albums ? : null }\r\n\t\t\t\t\t this.loadMore() }/>\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n\r\n\trenderMopidyArtist(){\r\n\t\tif( !this.props.mopidy.artist ) return null\r\n\t\tvar artist = this.props.mopidy.artist\r\n\t\t\r\n\t\tif( this.props.lastfm.artist.image && this.props.lastfm.artist.name == artist.name ) artist.images = this.props.lastfm.artist.image\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t

{ artist.name }

\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t
  • { artist.albums.length.toLocaleString() } albums
  • \r\n\t\t\t\t\t\t
  • Local artist
  • \r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\r\n\t\t\t\t

Top tracks

\r\n\t\t\t\t{ artist.tracks ? : null }\r\n\r\n\t\t\t\t

Albums

\r\n\t\t\t\t
\r\n\t\t\t\t\t{ artist.albums ? : null }\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n\r\n\trender(){\r\n\t\tvar source = helpers.uriSource( this.props.params.uri );\r\n\t\tif( source == 'spotify' ) return this.renderSpotifyArtist()\r\n\t\tif( source == 'local' ) return this.renderMopidyArtist()\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Export our component\r\n *\r\n * We also integrate our global store, using connect()\r\n **/\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn state;\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tmopidyActions: bindActionCreators(mopidyActions, dispatch),\r\n\t\tlastfmActions: bindActionCreators(lastfmActions, dispatch),\r\n\t\tspotifyActions: bindActionCreators(spotifyActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Artist)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/views/Artist.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport FontAwesome from 'react-fontawesome'\r\nlet helpers = require('../helpers.js')\r\n\r\nimport TrackList from '../components/TrackList'\r\nimport Thumbnail from '../components/Thumbnail'\r\nimport Dater from '../components/Dater'\r\nimport LazyLoadListener from '../components/LazyLoadListener'\r\n\r\nimport * as spotifyActions from '../services/spotify/actions'\r\nimport * as mopidyActions from '../services/mopidy/actions'\r\n\r\nclass Playlist extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\tcomponentDidMount(){\r\n\t\tthis.loadPlaylist();\r\n\t}\r\n\r\n\tcomponentWillReceiveProps( nextProps ){\r\n\t\tif( nextProps.params.uri != this.props.params.uri ){\r\n\t\t\tthis.loadPlaylist( nextProps )\r\n\t\t}else if( !this.props.mopidy.connected && nextProps.mopidy.connected ){\r\n\t\t\tif( helpers.uriSource( this.props.params.uri ) == 'm3u' ){\r\n\t\t\t\tthis.loadPlaylist( nextProps )\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tloadPlaylist( props = this.props ){\r\n\t\tvar source = helpers.uriSource( props.params.uri );\r\n\t\tif( source == 'spotify' ){\r\n\t\t\tthis.props.spotifyActions.getPlaylist( props.params.uri );\r\n\t\t}else if( source == 'm3u' && props.mopidy.connected ){\r\n\t\t\tthis.props.mopidyActions.getPlaylist( props.params.uri );\r\n\t\t}\r\n\t}\r\n\r\n\tloadMore(){\r\n\t\tif( !this.props.spotify.playlist || !this.props.spotify.playlist.tracks.next ) return\r\n\t\tthis.props.spotifyActions.getURL( this.props.spotify.playlist.tracks.next, 'SPOTIFY_PLAYLIST_LOADED_MORE' );\r\n\t}\r\n\r\n\trender(){\r\n\t\tvar source = helpers.uriSource( this.props.params.uri );\r\n\t\tvar source_name = source\r\n\t\tif( source == 'spotify' ){\r\n\t\t\tvar playlist = this.props.spotify.playlist\r\n\t\t}else if( source == 'm3u' ){\r\n\t\t\tvar playlist = this.props.mopidy.playlist\r\n\t\t\tsource_name = 'local'\r\n\t\t}\r\n\t\tif( !playlist ) return null;\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t{ playlist.images ? : null }\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t
  • { playlist.tracks.total } tracks,
  • \r\n\t\t\t\t\t\t{ playlist.last_modified ?
  • Updated ago
  • : null }\r\n\t\t\t\t\t\t
  • {source_name} playlist
  • \r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t

{ playlist.name }

\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t this.loadMore() }/>\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t)\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Export our component\r\n *\r\n * We also integrate our global store, using connect()\r\n **/\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn state;\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tmopidyActions: bindActionCreators(mopidyActions, dispatch),\r\n\t\tspotifyActions: bindActionCreators(spotifyActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Playlist)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/views/Playlist.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\n\r\nimport FontAwesome from 'react-fontawesome'\r\nimport TrackList from '../components/TrackList'\r\nimport Track from '../components/Track'\r\nimport FullPlayer from '../components/FullPlayer'\r\nimport ArtistSentence from '../components/ArtistSentence'\r\nimport AlbumLink from '../components/AlbumLink'\r\nimport Header from '../components/Header'\r\n\r\nimport * as uiActions from '../services/ui/actions'\r\nimport * as spotifyActions from '../services/spotify/actions'\r\nimport * as mopidyActions from '../services/mopidy/actions'\r\n\r\nclass Queue extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\tremoveTracks( tracks ){\r\n\t\tvar tlids = [];\r\n\t\tfor( var i = 0; i < tracks.length; i++ ){\r\n\t\t\ttlids.push( tracks[i].tlid )\r\n\t\t}\r\n\t\tthis.props.mopidyActions.removeTracks( tlids )\r\n\t}\r\n\r\n\tplayTrack( track ){\r\n\t\tthis.props.mopidyActions.changeTrack( track.tlid )\r\n\t}\r\n\r\n\tplayTracks( tracks ){\r\n\t\tthis.props.mopidyActions.changeTrack( tracks[0].tlid )\r\n\t}\r\n\r\n\trender(){\r\n\t\treturn (\r\n\t\t\t
\r\n\r\n\t\t\t\t\r\n\r\n\t\t\t\t
\r\n\t\t\t\t\t this.removeTracks( tracks ) }\r\n\t\t\t\t\t\tplayTracks={ tracks => this.playTracks( tracks ) }\r\n\t\t\t\t\t\tplayTrack={ track => this.playTrack( track ) } />\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Export our component\r\n *\r\n * We also integrate our global store, using connect()\r\n **/\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn {\r\n\t\tcurrent_tracklist: state.ui.current_tracklist\r\n\t}\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tuiActions: bindActionCreators(uiActions, dispatch),\r\n\t\tspotifyActions: bindActionCreators(spotifyActions, dispatch),\r\n\t\tmopidyActions: bindActionCreators(mopidyActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Queue)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/views/Queue.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { Link } from 'react-router'\r\nimport { bindActionCreators } from 'redux'\r\nimport FontAwesome from 'react-fontawesome'\r\n\r\nimport Header from '../components/Header'\r\nimport TrackList from '../components/TrackList'\r\nimport ArtistGrid from '../components/ArtistGrid'\r\nimport AlbumGrid from '../components/AlbumGrid'\r\nimport PlaylistGrid from '../components/PlaylistGrid'\r\nimport LazyLoadListener from '../components/LazyLoadListener'\r\n\r\nimport * as uiActions from '../services/ui/actions'\r\nimport * as mopidyActions from '../services/mopidy/actions'\r\nimport * as spotifyActions from '../services/spotify/actions'\r\n\r\nclass Search extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\tcomponentDidMount(){\r\n\t\tthis.performSearch()\r\n\t}\r\n\r\n\tcomponentWillReceiveProps(newProps){\r\n\r\n\t\t// new query\r\n\t\tif( this.props.params.query != newProps.params.query ){\r\n\t\t\tthis.performSearch( newProps )\r\n\t\t}\r\n\r\n\t\t// mopidy comes online\r\n\t\tif( !this.props.mopidy_connected && newProps.mopidy_connected ){\r\n\t\t\tthis.props.mopidyActions.getSearchResults( newProps.params.query, newProps.uri_schemes )\r\n\t\t}\r\n\t}\r\n\r\n\tperformSearch( props = this.props ){\r\n\t\tthis.props.uiActions.searchStarted()\r\n\t\tthis.props.spotifyActions.getSearchResults( props.params.query )\r\n\t\tthis.props.mopidyActions.getSearchResults( props.params.query, props.uri_schemes )\r\n\t}\r\n\r\n\tloadMore(type){\r\n\t\tif( !this.props.search_results[type] || \r\n\t\t\t!this.props.search_results[type+'_more'] ){\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\tthis.props.spotifyActions.getURL( \r\n\t\t\tthis.props.search_results[type+'_more'], \r\n\t\t\t'SPOTIFY_SEARCH_RESULTS_LOADED_MORE_'+ type.toUpperCase()\r\n\t\t);\r\n\t}\r\n\r\n\trenderResults(){\r\n\t\tswitch( this.props.params.type ){\r\n\r\n\t\t\tcase 'artists':\r\n\t\t\t\treturn (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t this.loadMore('artists') }/>\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t)\r\n\t\t\t\tbreak\r\n\r\n\t\t\tcase 'albums':\r\n\t\t\t\treturn (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t this.loadMore('albums') }/>\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t)\r\n\t\t\t\tbreak\r\n\r\n\t\t\tcase 'playlists':\r\n\t\t\t\treturn (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t this.loadMore('playlists') }/>\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t)\r\n\t\t\t\tbreak\r\n\r\n\t\t\tcase 'tracks':\r\n\t\t\t\treturn (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t this.loadMore('tracks') }/>\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t)\r\n\t\t\t\tbreak\r\n\r\n\t\t\tdefault:\r\n\t\t\t\treturn (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t

Artists

\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t

Albums

\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t

Playlists

\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t

Tracks

\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t this.loadMore('tracks') }/>\r\n\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t)\r\n\t\t}\r\n\t}\r\n\r\n\trender(){\r\n\t\treturn (\r\n\t\t\t
\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t{ this.renderResults() }\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn {\r\n\t\tmopidy_connected: state.mopidy.connected,\r\n\t\turi_schemes: state.mopidy.uri_schemes,\r\n\t\tsearch_results: state.ui.search_results\r\n\t}\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tuiActions: bindActionCreators(uiActions, dispatch),\r\n\t\tmopidyActions: bindActionCreators(mopidyActions, dispatch),\r\n\t\tspotifyActions: bindActionCreators(spotifyActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Search)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/views/Search.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\n\r\nimport FontAwesome from 'react-fontawesome'\r\nimport SpotifyAuthenticationFrame from '../components/SpotifyAuthenticationFrame'\r\nimport ConfirmationButton from '../components/ConfirmationButton'\r\nimport PusherConnectionList from '../components/PusherConnectionList'\r\nimport URISchemesList from '../components/URISchemesList'\r\nimport VersionManager from '../components/VersionManager'\r\nimport Header from '../components/Header'\r\n\r\nimport * as pusherActions from '../services/pusher/actions'\r\nimport * as mopidyActions from '../services/mopidy/actions'\r\nimport * as spotifyActions from '../services/spotify/actions'\r\n\r\nclass Settings extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t\tthis.state = {\r\n\t\t\tmopidy_host: this.props.mopidy.host,\r\n\t\t\tmopidy_port: this.props.mopidy.port,\r\n\t\t\tpusher_username: this.props.pusher.username,\r\n\t\t\tpusher_port: this.props.pusher.port,\r\n\t\t\tspotify_country: this.props.spotify.country,\r\n\t\t\tspotify_locale: this.props.spotify.locale\r\n\t\t};\r\n\t}\r\n\r\n\tresetAllSettings(){\r\n\t\tlocalStorage.clear();\r\n\t\twindow.location.reload(true);\r\n\t\treturn false;\r\n\t}\r\n\r\n\tsetMopidyConfig(e){\r\n\t\te.preventDefault();\r\n\t\tthis.props.mopidyActions.setConfig({ host: this.state.mopidy_host, port: this.state.mopidy_port });\r\n\t\twindow.location.reload(true);\r\n\t\treturn false;\r\n\t}\r\n\r\n\tsetSpotifyConfig(e){\r\n\t\te.preventDefault();\r\n\t\tthis.props.spotifyActions.setConfig({ country: this.state.spotify_country, locale: this.state.spotify_locale });\r\n\t\treturn false;\r\n\t}\r\n\r\n\tcomponentWillReceiveProps(newProps){\r\n\t\tif( this.state.pusher_username != newProps.pusher.username ){\r\n\t\t\tthis.setState({\r\n\t\t\t\tpusher_username: newProps.pusher.username\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\trenderConnectionStatus(service){\r\n\t\tif( this.props[service].connected ){\r\n\t\t\treturn (\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\tConnected\r\n\t\t\t\t\r\n\t\t\t)\r\n\t\t}else if( this.props[service].connecting ){\t\t\t\r\n\t\t\treturn (\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\tConnecting\r\n\t\t\t\t\r\n\t\t\t)\r\n\t\t}else{\t\t\t\r\n\t\t\treturn (\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\tNot connected\r\n\t\t\t\t\r\n\t\t\t)\r\n\t\t}\r\n\t}\r\n\r\n\trender(){\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\r\n\t\t\t\t
\r\n\r\n\t\t\t\t\t

Mopidy

\r\n\t\t\t\t\t
this.setMopidyConfig(e)}>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t

Pusher

\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t

Spotify

\r\n\t\t\t\t\t
this.setSpotifyConfig(e)}>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\r\n\t\t\t \r\n\r\n\t\t\t\t\t

Advanced

\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\r\n\t\t\t this.resetAllSettings()} />\r\n\r\n\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Export our component\r\n *\r\n * We also integrate our global store, using connect()\r\n **/\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn state;\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tpusherActions: bindActionCreators(pusherActions, dispatch),\r\n\t\tmopidyActions: bindActionCreators(mopidyActions, dispatch),\r\n\t\tspotifyActions: bindActionCreators(spotifyActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Settings)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/views/Settings.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\n\r\nimport Header from '../../components/Header'\r\n\r\nimport * as spotifyActions from '../../services/spotify/actions'\r\n\r\nclass Discover extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\t// on render\r\n\tcomponentDidMount(){\r\n\t\tthis.props.spotifyActions.getPlaylist( this.props.params.uri );\r\n\t}\r\n\r\n\t// when props changed\r\n\tcomponentWillReceiveProps( nextProps ){\r\n\t\tif( nextProps.params.uri != this.props.params.uri ){\r\n\t\t\tthis.props.spotifyActions.getPlaylist( nextProps.params.uri );\r\n\t\t}\r\n\t}\r\n\r\n\trender(){\r\n\t\tif( this.props.spotify.playlist ){\r\n\t\t\treturn (\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t

To come

\r\n\t\t\t\t
\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Export our component\r\n *\r\n * We also integrate our global store, using connect()\r\n **/\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn state;\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tspotifyActions: bindActionCreators(spotifyActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Discover)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/views/discover/Discover.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\n\r\nimport Header from '../../components/Header'\r\nimport CategoryGrid from '../../components/CategoryGrid'\r\n\r\nimport * as spotifyActions from '../../services/spotify/actions'\r\n\r\nclass DiscoverCategories extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\t// on render\r\n\tcomponentDidMount(){\r\n\t\tthis.props.spotifyActions.getCategories();\r\n\t}\r\n\r\n\trender(){\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t{ this.props.spotify.categories ? : null }\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Export our component\r\n *\r\n * We also integrate our global store, using connect()\r\n **/\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn state;\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tspotifyActions: bindActionCreators(spotifyActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DiscoverCategories)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/views/discover/DiscoverCategories.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\n\r\nimport Header from '../../components/Header'\r\nimport PlaylistGrid from '../../components/PlaylistGrid'\r\nimport LazyLoadListener from '../../components/LazyLoadListener'\r\n\r\nimport * as spotifyActions from '../../services/spotify/actions'\r\n\r\nclass DiscoverCategory extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\tcomponentDidMount(){\r\n\t\tthis.props.spotifyActions.getCategory( this.props.params.id );\r\n\t\tthis.props.spotifyActions.getCategoryPlaylists( this.props.params.id );\r\n\t}\r\n\r\n\tcomponentWillReceiveProps( nextProps ){\r\n\t\tif( nextProps.params.id != this.props.params.id ){\r\n\t\t\tthis.props.spotifyActions.getCategory( nextProps.params.id );\r\n\t\t\tthis.props.spotifyActions.getCategoryPlaylists( nextProps.params.id );\r\n\t\t}\r\n\t}\r\n\r\n\tloadMore(){\r\n\t\tif( !this.props.spotify.new_releases || !this.props.spotify.new_releases.next ) return\r\n\t\tthis.props.spotifyActions.getURL( this.props.spotify.new_releases.next, 'SPOTIFY_NEW_RELEASES_LOADED_MORE' );\r\n\t}\r\n\r\n\trender(){\r\n\t\tif( !this.props.spotify.category ) return null;\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t{ this.props.spotify.category_playlists ? : null }\r\n\t\t\t\t
\r\n\t\t\t\t this.loadMore() }/>\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Export our component\r\n *\r\n * We also integrate our global store, using connect()\r\n **/\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn state;\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tspotifyActions: bindActionCreators(spotifyActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DiscoverCategory)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/views/discover/DiscoverCategory.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\n\r\nimport Header from '../../components/Header'\r\nimport PlaylistGrid from '../../components/PlaylistGrid'\r\n\r\nimport * as spotifyActions from '../../services/spotify/actions'\r\n\r\nclass DiscoverFeatured extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\t// on render\r\n\tcomponentDidMount(){\r\n\t\tthis.props.spotifyActions.getFeaturedPlaylists();\r\n\t}\r\n\r\n\trender(){\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t{ this.props.spotify.featured_playlists ? : null }\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Export our component\r\n *\r\n * We also integrate our global store, using connect()\r\n **/\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn state;\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tspotifyActions: bindActionCreators(spotifyActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DiscoverFeatured)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/views/discover/DiscoverFeatured.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\n\r\nimport Header from '../../components/Header'\r\nimport AlbumGrid from '../../components/AlbumGrid'\r\nimport LazyLoadListener from '../../components/LazyLoadListener'\r\n\r\nimport * as uiActions from '../../services/ui/actions'\r\nimport * as spotifyActions from '../../services/spotify/actions'\r\n\r\nclass DiscoverNewReleases extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\tcomponentDidMount(){\r\n\t\tthis.props.spotifyActions.getNewReleases();\r\n\t}\r\n\r\n\tloadMore(){\r\n\t\tif( !this.props.spotify.new_releases || !this.props.spotify.new_releases.next ) return\r\n\t\tthis.props.spotifyActions.getURL( this.props.spotify.new_releases.next, 'SPOTIFY_NEW_RELEASES_LOADED_MORE' );\r\n\t}\r\n\r\n\trender(){\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t{ this.props.spotify.new_releases ? : null }\r\n\t\t\t\t
\r\n\t\t\t\t this.loadMore() }/>\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Export our component\r\n *\r\n * We also integrate our global store, using connect()\r\n **/\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn state;\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tuiActions: bindActionCreators(uiActions, dispatch),\r\n\t\tspotifyActions: bindActionCreators(spotifyActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DiscoverNewReleases)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/views/discover/DiscoverNewReleases.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport { Link } from 'react-router'\r\n\r\nimport AlbumGrid from '../../components/AlbumGrid'\r\nimport Header from '../../components/Header'\r\nimport LazyLoadListener from '../../components/LazyLoadListener'\r\n\r\nimport * as mopidyActions from '../../services/mopidy/actions'\r\nimport * as spotifyActions from '../../services/spotify/actions'\r\n\r\nclass LibraryAlbums extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\tcomponentDidMount(){\r\n\t\tthis.props.spotifyActions.getLibraryAlbums();\r\n\t}\r\n\r\n\tloadMore(){\r\n\t\tif( !this.props.spotify.library_albums || !this.props.spotify.library_albums.next ) return\r\n\t\tthis.props.spotifyActions.getURL( this.props.spotify.library_albums.next, 'SPOTIFY_LIBRARY_ALBUMS_LOADED_MORE' );\r\n\t}\r\n\r\n\trender(){\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\t{ this.props.spotify.library_albums ? : null }\r\n\t\t\t\t
\r\n\t\t\t\t this.loadMore() }/>\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Export our component\r\n *\r\n * We also integrate our global store, using connect()\r\n **/\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn state;\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tmopidyActions: bindActionCreators(mopidyActions, dispatch),\r\n\t\tspotifyActions: bindActionCreators(spotifyActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LibraryAlbums)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/views/library/LibraryAlbums.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport { Link } from 'react-router'\r\n\r\nimport LazyLoadListener from '../../components/LazyLoadListener'\r\nimport Header from '../../components/Header'\r\nimport ArtistGrid from '../../components/ArtistGrid'\r\n\r\nimport * as mopidyActions from '../../services/mopidy/actions'\r\nimport * as spotifyActions from '../../services/spotify/actions'\r\n\r\nclass LibraryArtists extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\t// on render\r\n\tcomponentDidMount(){\r\n\t\tthis.props.spotifyActions.getLibraryArtists();\r\n\t}\r\n\r\n\tloadMore(){\r\n\t\tif( !this.props.spotify.library_artists || !this.props.spotify.library_artists.next ) return\r\n\t\tthis.props.spotifyActions.getURL( this.props.spotify.library_artists.next, 'SPOTIFY_LIBRARY_ARTISTS_LOADED_MORE' );\r\n\t}\r\n\r\n\trender(){\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\t{ this.props.spotify.library_artists ? : null }\r\n\t\t\t\t
\r\n\t\t\t\t this.loadMore() }/>\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Export our component\r\n *\r\n * We also integrate our global store, using connect()\r\n **/\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn state;\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tmopidyActions: bindActionCreators(mopidyActions, dispatch),\r\n\t\tspotifyActions: bindActionCreators(spotifyActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LibraryArtists)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/views/library/LibraryArtists.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport { Link } from 'react-router'\r\n\r\nimport Header from '../../components/Header'\r\nimport GridItem from '../../components/GridItem'\r\n\r\nexport default class LibraryLocal extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\trender(){\r\n\r\n\t\tvar grid_items = [\r\n\t\t\t{\r\n\t\t\t\tname: 'Artists',\r\n\t\t\t\tlink: '/library/local/artists',\r\n\t\t\t\ticons: ['/assets/backgrounds/category-artists.jpg']\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'Albums',\r\n\t\t\t\tlink: '/library/local/albums',\r\n\t\t\t\ticons: ['/assets/backgrounds/category-albums.jpg']\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: 'Folders',\r\n\t\t\t\tlink: '/library/local/directory/local:directory',\r\n\t\t\t\ticons: ['/assets/backgrounds/category-folders.jpg']\r\n\t\t\t}\r\n\t\t]\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t
\t\t\t\t\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tgrid_items.map(\r\n\t\t\t\t\t\t\t\t(item, index) => {\r\n\t\t\t\t\t\t\t\t\treturn \r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/views/library/LibraryLocal.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\n\r\nimport Header from '../../components/Header'\r\nimport List from '../../components/List'\r\n\r\nimport * as mopidyActions from '../../services/mopidy/actions'\r\nimport * as spotifyActions from '../../services/spotify/actions'\r\n\r\nclass LibraryLocalAlbums extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\t// on render\r\n\tcomponentDidMount(){\r\n\t\tthis.loadAlbums()\r\n\t}\r\n\r\n\tcomponentWillReceiveProps( nextProps ){\r\n\t\tif( !this.props.mopidy.connected && nextProps.mopidy.connected ){\r\n\t\t\tthis.loadAlbums(nextProps);\r\n\t\t}\r\n\t}\r\n\r\n\tloadAlbums(props = this.props){\r\n\t\tif( props.mopidy.connected ){\r\n\t\t\tthis.props.mopidyActions.getAlbums();\r\n\t\t}\r\n\t}\r\n\r\n\trender(){\r\n\t\tif( !this.props.mopidy.albums ) return null\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Export our component\r\n *\r\n * We also integrate our global store, using connect()\r\n **/\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn state;\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tmopidyActions: bindActionCreators(mopidyActions, dispatch),\r\n\t\tspotifyActions: bindActionCreators(spotifyActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LibraryLocalAlbums)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/views/library/LibraryLocalAlbums.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\n\r\nimport Header from '../../components/Header'\r\nimport List from '../../components/List'\r\n\r\nimport * as mopidyActions from '../../services/mopidy/actions'\r\nimport * as spotifyActions from '../../services/spotify/actions'\r\n\r\nclass LibraryLocalArtists extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\t// on render\r\n\tcomponentDidMount(){\r\n\t\tthis.loadArtists()\r\n\t}\r\n\r\n\tcomponentWillReceiveProps( nextProps ){\r\n\t\tif( !this.props.mopidy.connected && nextProps.mopidy.connected ){\r\n\t\t\tthis.loadArtists(nextProps);\r\n\t\t}\r\n\t}\r\n\r\n\tloadArtists(props = this.props){\r\n\t\tif( props.mopidy.connected ){\r\n\t\t\tthis.props.mopidyActions.getArtists();\r\n\t\t}\r\n\t}\r\n\r\n\trender(){\r\n\t\tif( !this.props.mopidy.artists ) return null\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Export our component\r\n *\r\n * We also integrate our global store, using connect()\r\n **/\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn state;\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tmopidyActions: bindActionCreators(mopidyActions, dispatch),\r\n\t\tspotifyActions: bindActionCreators(spotifyActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LibraryLocalArtists)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/views/library/LibraryLocalArtists.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport { Link } from 'react-router'\r\n\r\nimport Header from '../../components/Header'\r\nimport List from '../../components/List'\r\n\r\nimport * as mopidyActions from '../../services/mopidy/actions'\r\nimport * as spotifyActions from '../../services/spotify/actions'\r\n\r\nclass LibraryLocalDirectory extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\t// on render\r\n\tcomponentDidMount(){\r\n\t\tthis.loadDirectory()\r\n\t}\r\n\r\n\tcomponentWillReceiveProps( nextProps ){\r\n\r\n\t\t// mopidy goes online\r\n\t\tif( !this.props.mopidy.connected && nextProps.mopidy.connected ){\r\n\t\t\tthis.loadDirectory( nextProps );\r\n\t\t}\r\n\r\n\t\t// our uri changes\r\n\t\tif( nextProps.params.uri != this.props.params.uri ){\r\n\t\t\tthis.loadDirectory( nextProps );\r\n\t\t}\r\n\t}\r\n\r\n\tloadDirectory( props = this.props ){\r\n\t\tif( props.mopidy.connected ){\r\n\t\t\tthis.props.mopidyActions.getDirectory( props.params.uri );\r\n\t\t}\r\n\t}\r\n\r\n\trender(){\r\n\t\tif( !this.props.mopidy.directory ) return null\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Export our component\r\n *\r\n * We also integrate our global store, using connect()\r\n **/\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn state;\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tmopidyActions: bindActionCreators(mopidyActions, dispatch),\r\n\t\tspotifyActions: bindActionCreators(spotifyActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LibraryLocalDirectory)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/views/library/LibraryLocalDirectory.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport { Link } from 'react-router'\r\n\r\nimport List from '../../components/List'\r\nimport Header from '../../components/Header'\r\n\r\nimport * as mopidyActions from '../../services/mopidy/actions'\r\nimport * as spotifyActions from '../../services/spotify/actions'\r\n\r\nclass LibraryPlaylists extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\t// on render\r\n\tcomponentDidMount(){\r\n\t\tif( this.props.mopidy.connected ){\r\n\t\t\tthis.props.mopidyActions.getPlaylists();\r\n\t\t}\r\n\t\tif( this.props.spotify.authorized ){\r\n\t\tthis.props.spotifyActions.getLibraryPlaylists();\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentWillReceiveProps( nextProps ){\r\n\t\tif( !this.props.mopidy.connected && nextProps.mopidy.connected ){\r\n\t\t\tthis.props.mopidyActions.getPlaylists();\r\n\t\t}\r\n\t\tif( !this.props.spotify.authorized && nextProps.spotify.authorized ){\r\n\t\t\tthis.props.spotifyActions.getLibraryPlaylists();\r\n\t\t}\r\n\t}\r\n\r\n\tcompiledPlaylistSources(){\r\n\t\tvar playlists = [];\r\n\r\n\t\tif( this.props.mopidy.playlists ){\r\n\t\t\tplaylists = [...playlists, ...this.props.mopidy.playlists]\r\n\t\t}\r\n\r\n\t\tif( this.props.spotify.library_playlists ){\r\n\t\t\tplaylists = [...playlists, ...this.props.spotify.library_playlists.items]\r\n\t\t}\r\n\r\n\t\treturn playlists;\r\n\t}\r\n\r\n\trenderPlaylists(){\r\n\t\tvar playlists = this.compiledPlaylistSources()\r\n\t\tif( !playlists ) return null\r\n\r\n\t\tvar columns = [\r\n\t\t\t{ name: 'name', width: '50'},\r\n\t\t\t{ name: 'uri', width: '25'}\r\n\t\t]\r\n\r\n\t\treturn \r\n\t}\r\n\r\n\trender(){\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\t{ this.renderPlaylists() }\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t)\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Export our component\r\n *\r\n * We also integrate our global store, using connect()\r\n **/\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn state;\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tmopidyActions: bindActionCreators(mopidyActions, dispatch),\r\n\t\tspotifyActions: bindActionCreators(spotifyActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LibraryPlaylists)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/views/library/LibraryPlaylists.js\n **/","\r\nimport React, { PropTypes } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport { Link } from 'react-router'\r\n\r\nimport TrackList from '../../components/TrackList'\r\nimport Header from '../../components/Header'\r\n\r\nimport * as mopidyActions from '../../services/mopidy/actions'\r\nimport * as spotifyActions from '../../services/spotify/actions'\r\n\r\nclass LibraryTracks extends React.Component{\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\t// on render\r\n\tcomponentDidMount(){\r\n\t\tthis.props.spotifyActions.getLibraryTracks();\r\n\t}\r\n\r\n\trender(){\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t{ this.props.spotify.library_tracks ? : null }\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Export our component\r\n *\r\n * We also integrate our global store, using connect()\r\n **/\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\treturn state;\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\treturn {\r\n\t\tmopidyActions: bindActionCreators(mopidyActions, dispatch),\r\n\t\tspotifyActions: bindActionCreators(spotifyActions, dispatch)\r\n\t}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LibraryTracks)\n\n\n/** WEBPACK FOOTER **\n ** ./src/js/views/library/LibraryTracks.js\n **/","((typeof define === \"function\" && define.amd && function (m) { define(\"bane\", m); }) ||\n (typeof module === \"object\" && function (m) { module.exports = m(); }) ||\n function (m) { this.bane = m(); }\n)(function () {\n \"use strict\";\n var slice = Array.prototype.slice;\n\n function handleError(event, error, errbacks) {\n var i, l = errbacks.length;\n if (l > 0) {\n for (i = 0; i < l; ++i) { errbacks[i](event, error); }\n return;\n }\n setTimeout(function () {\n error.message = event + \" listener threw error: \" + error.message;\n throw error;\n }, 0);\n }\n\n function assertFunction(fn) {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"Listener is not function\");\n }\n return fn;\n }\n\n function supervisors(object) {\n if (!object.supervisors) { object.supervisors = []; }\n return object.supervisors;\n }\n\n function listeners(object, event) {\n if (!object.listeners) { object.listeners = {}; }\n if (event && !object.listeners[event]) { object.listeners[event] = []; }\n return event ? object.listeners[event] : object.listeners;\n }\n\n function errbacks(object) {\n if (!object.errbacks) { object.errbacks = []; }\n return object.errbacks;\n }\n\n /**\n * @signature var emitter = bane.createEmitter([object]);\n *\n * Create a new event emitter. If an object is passed, it will be modified\n * by adding the event emitter methods (see below).\n */\n function createEventEmitter(object) {\n object = object || {};\n\n function notifyListener(event, listener, args) {\n try {\n listener.listener.apply(listener.thisp || object, args);\n } catch (e) {\n handleError(event, e, errbacks(object));\n }\n }\n\n object.on = function (event, listener, thisp) {\n if (typeof event === \"function\") {\n return supervisors(this).push({\n listener: event,\n thisp: listener\n });\n }\n listeners(this, event).push({\n listener: assertFunction(listener),\n thisp: thisp\n });\n };\n\n object.off = function (event, listener) {\n var fns, events, i, l;\n if (!event) {\n fns = supervisors(this);\n fns.splice(0, fns.length);\n\n events = listeners(this);\n for (i in events) {\n if (events.hasOwnProperty(i)) {\n fns = listeners(this, i);\n fns.splice(0, fns.length);\n }\n }\n\n fns = errbacks(this);\n fns.splice(0, fns.length);\n\n return;\n }\n if (typeof event === \"function\") {\n fns = supervisors(this);\n listener = event;\n } else {\n fns = listeners(this, event);\n }\n if (!listener) {\n fns.splice(0, fns.length);\n return;\n }\n for (i = 0, l = fns.length; i < l; ++i) {\n if (fns[i].listener === listener) {\n fns.splice(i, 1);\n return;\n }\n }\n };\n\n object.once = function (event, listener, thisp) {\n var wrapper = function () {\n object.off(event, wrapper);\n listener.apply(this, arguments);\n };\n\n object.on(event, wrapper, thisp);\n };\n\n object.bind = function (object, events) {\n var prop, i, l;\n if (!events) {\n for (prop in object) {\n if (typeof object[prop] === \"function\") {\n this.on(prop, object[prop], object);\n }\n }\n } else {\n for (i = 0, l = events.length; i < l; ++i) {\n if (typeof object[events[i]] === \"function\") {\n this.on(events[i], object[events[i]], object);\n } else {\n throw new Error(\"No such method \" + events[i]);\n }\n }\n }\n return object;\n };\n\n object.emit = function (event) {\n var toNotify = supervisors(this);\n var args = slice.call(arguments), i, l;\n\n for (i = 0, l = toNotify.length; i < l; ++i) {\n notifyListener(event, toNotify[i], args);\n }\n\n toNotify = listeners(this, event).slice();\n args = slice.call(arguments, 1);\n for (i = 0, l = toNotify.length; i < l; ++i) {\n notifyListener(event, toNotify[i], args);\n }\n };\n\n object.errback = function (listener) {\n if (!this.errbacks) { this.errbacks = []; }\n this.errbacks.push(assertFunction(listener));\n };\n\n return object;\n }\n\n return {\n createEventEmitter: createEventEmitter,\n aggregate: function (emitters) {\n var aggregate = createEventEmitter();\n emitters.forEach(function (emitter) {\n emitter.on(function (event, data) {\n aggregate.emit(event, data);\n });\n });\n return aggregate;\n }\n };\n});\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/bane/lib/bane.js\n ** module id = 202\n ** module chunks = 0\n **/","var pSlice = Array.prototype.slice;\nvar objectKeys = require('./lib/keys.js');\nvar isArguments = require('./lib/is_arguments.js');\n\nvar deepEqual = module.exports = function (actual, expected, opts) {\n if (!opts) opts = {};\n // 7.1. All identical values are equivalent, as determined by ===.\n if (actual === expected) {\n return true;\n\n } else if (actual instanceof Date && expected instanceof Date) {\n return actual.getTime() === expected.getTime();\n\n // 7.3. Other pairs that do not both pass typeof value == 'object',\n // equivalence is determined by ==.\n } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {\n return opts.strict ? actual === expected : actual == expected;\n\n // 7.4. For all other Object pairs, including Array objects, equivalence is\n // determined by having the same number of owned properties (as verified\n // with Object.prototype.hasOwnProperty.call), the same set of keys\n // (although not necessarily the same order), equivalent values for every\n // corresponding key, and an identical 'prototype' property. Note: this\n // accounts for both named and indexed properties on Arrays.\n } else {\n return objEquiv(actual, expected, opts);\n }\n}\n\nfunction isUndefinedOrNull(value) {\n return value === null || value === undefined;\n}\n\nfunction isBuffer (x) {\n if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;\n if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n return false;\n }\n if (x.length > 0 && typeof x[0] !== 'number') return false;\n return true;\n}\n\nfunction objEquiv(a, b, opts) {\n var i, key;\n if (isUndefinedOrNull(a) || isUndefinedOrNull(b))\n return false;\n // an identical 'prototype' property.\n if (a.prototype !== b.prototype) return false;\n //~~~I've managed to break Object.keys through screwy arguments passing.\n // Converting to array solves the problem.\n if (isArguments(a)) {\n if (!isArguments(b)) {\n return false;\n }\n a = pSlice.call(a);\n b = pSlice.call(b);\n return deepEqual(a, b, opts);\n }\n if (isBuffer(a)) {\n if (!isBuffer(b)) {\n return false;\n }\n if (a.length !== b.length) return false;\n for (i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n }\n try {\n var ka = objectKeys(a),\n kb = objectKeys(b);\n } catch (e) {//happens when one is a string literal and the other isn't\n return false;\n }\n // having the same number of owned properties (keys incorporates\n // hasOwnProperty)\n if (ka.length != kb.length)\n return false;\n //the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n //~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i])\n return false;\n }\n //equivalent values for every corresponding key, and\n //~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!deepEqual(a[key], b[key], opts)) return false;\n }\n return typeof a === typeof b;\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/deep-equal/index.js\n ** module id = 203\n ** module chunks = 0\n **/","var supportsArgumentsClass = (function(){\n return Object.prototype.toString.call(arguments)\n})() == '[object Arguments]';\n\nexports = module.exports = supportsArgumentsClass ? supported : unsupported;\n\nexports.supported = supported;\nfunction supported(object) {\n return Object.prototype.toString.call(object) == '[object Arguments]';\n};\n\nexports.unsupported = unsupported;\nfunction unsupported(object){\n return object &&\n typeof object == 'object' &&\n typeof object.length == 'number' &&\n Object.prototype.hasOwnProperty.call(object, 'callee') &&\n !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||\n false;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/deep-equal/lib/is_arguments.js\n ** module id = 204\n ** module chunks = 0\n **/","exports = module.exports = typeof Object.keys === 'function'\n ? Object.keys : shim;\n\nexports.shim = shim;\nfunction shim (obj) {\n var keys = [];\n for (var key in obj) keys.push(key);\n return keys;\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/deep-equal/lib/keys.js\n ** module id = 205\n ** module chunks = 0\n **/","module.exports = global[\"$\"] = require(\"-!/var/www/iris/node_modules/jquery/dist/jquery.js\");\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/expose-loader?$!./~/jquery/dist/jquery.js\n ** module id = 206\n ** module chunks = 0\n **/","// removed by extract-text-webpack-plugin\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/scss/app.scss\n ** module id = 207\n ** module chunks = 0\n **/","\"use strict\";\n\nexports.__esModule = true;\nvar _slice = Array.prototype.slice;\nexports.loopAsync = loopAsync;\n\nfunction loopAsync(turns, work, callback) {\n var currentTurn = 0,\n isDone = false;\n var sync = false,\n hasNext = false,\n doneArgs = undefined;\n\n function done() {\n isDone = true;\n if (sync) {\n // Iterate instead of recursing if possible.\n doneArgs = [].concat(_slice.call(arguments));\n return;\n }\n\n callback.apply(this, arguments);\n }\n\n function next() {\n if (isDone) {\n return;\n }\n\n hasNext = true;\n if (sync) {\n // Iterate instead of recursing if possible.\n return;\n }\n\n sync = true;\n\n while (!isDone && currentTurn < turns && hasNext) {\n hasNext = false;\n work.call(this, currentTurn++, next, done);\n }\n\n sync = false;\n\n if (isDone) {\n // This means the loop finished synchronously.\n callback.apply(this, doneArgs);\n return;\n }\n\n if (currentTurn >= turns && hasNext) {\n isDone = true;\n callback();\n }\n }\n\n next();\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/AsyncUtils.js\n ** module id = 208\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _Actions = require('./Actions');\n\nvar _PathUtils = require('./PathUtils');\n\nvar _ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar _DOMUtils = require('./DOMUtils');\n\nvar _DOMStateStorage = require('./DOMStateStorage');\n\nvar _createDOMHistory = require('./createDOMHistory');\n\nvar _createDOMHistory2 = _interopRequireDefault(_createDOMHistory);\n\n/**\n * Creates and returns a history object that uses HTML5's history API\n * (pushState, replaceState, and the popstate event) to manage history.\n * This is the recommended method of managing history in browsers because\n * it provides the cleanest URLs.\n *\n * Note: In browsers that do not support the HTML5 history API full\n * page reloads will be used to preserve URLs.\n */\nfunction createBrowserHistory() {\n var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Browser history needs a DOM') : _invariant2['default'](false) : undefined;\n\n var forceRefresh = options.forceRefresh;\n\n var isSupported = _DOMUtils.supportsHistory();\n var useRefresh = !isSupported || forceRefresh;\n\n function getCurrentLocation(historyState) {\n try {\n historyState = historyState || window.history.state || {};\n } catch (e) {\n historyState = {};\n }\n\n var path = _DOMUtils.getWindowPath();\n var _historyState = historyState;\n var key = _historyState.key;\n\n var state = undefined;\n if (key) {\n state = _DOMStateStorage.readState(key);\n } else {\n state = null;\n key = history.createKey();\n\n if (isSupported) window.history.replaceState(_extends({}, historyState, { key: key }), null);\n }\n\n var location = _PathUtils.parsePath(path);\n\n return history.createLocation(_extends({}, location, { state: state }), undefined, key);\n }\n\n function startPopStateListener(_ref) {\n var transitionTo = _ref.transitionTo;\n\n function popStateListener(event) {\n if (event.state === undefined) return; // Ignore extraneous popstate events in WebKit.\n\n transitionTo(getCurrentLocation(event.state));\n }\n\n _DOMUtils.addEventListener(window, 'popstate', popStateListener);\n\n return function () {\n _DOMUtils.removeEventListener(window, 'popstate', popStateListener);\n };\n }\n\n function finishTransition(location) {\n var basename = location.basename;\n var pathname = location.pathname;\n var search = location.search;\n var hash = location.hash;\n var state = location.state;\n var action = location.action;\n var key = location.key;\n\n if (action === _Actions.POP) return; // Nothing to do.\n\n _DOMStateStorage.saveState(key, state);\n\n var path = (basename || '') + pathname + search + hash;\n var historyState = {\n key: key\n };\n\n if (action === _Actions.PUSH) {\n if (useRefresh) {\n window.location.href = path;\n return false; // Prevent location update.\n } else {\n window.history.pushState(historyState, null, path);\n }\n } else {\n // REPLACE\n if (useRefresh) {\n window.location.replace(path);\n return false; // Prevent location update.\n } else {\n window.history.replaceState(historyState, null, path);\n }\n }\n }\n\n var history = _createDOMHistory2['default'](_extends({}, options, {\n getCurrentLocation: getCurrentLocation,\n finishTransition: finishTransition,\n saveState: _DOMStateStorage.saveState\n }));\n\n var listenerCount = 0,\n stopPopStateListener = undefined;\n\n function listenBefore(listener) {\n if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);\n\n var unlisten = history.listenBefore(listener);\n\n return function () {\n unlisten();\n\n if (--listenerCount === 0) stopPopStateListener();\n };\n }\n\n function listen(listener) {\n if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);\n\n var unlisten = history.listen(listener);\n\n return function () {\n unlisten();\n\n if (--listenerCount === 0) stopPopStateListener();\n };\n }\n\n // deprecated\n function registerTransitionHook(hook) {\n if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);\n\n history.registerTransitionHook(hook);\n }\n\n // deprecated\n function unregisterTransitionHook(hook) {\n history.unregisterTransitionHook(hook);\n\n if (--listenerCount === 0) stopPopStateListener();\n }\n\n return _extends({}, history, {\n listenBefore: listenBefore,\n listen: listen,\n registerTransitionHook: registerTransitionHook,\n unregisterTransitionHook: unregisterTransitionHook\n });\n}\n\nexports['default'] = createBrowserHistory;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/createBrowserHistory.js\n ** module id = 209\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _Actions = require('./Actions');\n\nvar _PathUtils = require('./PathUtils');\n\nfunction createLocation() {\n var location = arguments.length <= 0 || arguments[0] === undefined ? '/' : arguments[0];\n var action = arguments.length <= 1 || arguments[1] === undefined ? _Actions.POP : arguments[1];\n var key = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2];\n\n var _fourthArg = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3];\n\n if (typeof location === 'string') location = _PathUtils.parsePath(location);\n\n if (typeof action === 'object') {\n process.env.NODE_ENV !== 'production' ? _warning2['default'](false, 'The state (2nd) argument to createLocation is deprecated; use a ' + 'location descriptor instead') : undefined;\n\n location = _extends({}, location, { state: action });\n\n action = key || _Actions.POP;\n key = _fourthArg;\n }\n\n var pathname = location.pathname || '/';\n var search = location.search || '';\n var hash = location.hash || '';\n var state = location.state || null;\n\n return {\n pathname: pathname,\n search: search,\n hash: hash,\n state: state,\n action: action,\n key: key\n };\n}\n\nexports['default'] = createLocation;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/createLocation.js\n ** module id = 210\n ** module chunks = 0\n **/","'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _PathUtils = require('./PathUtils');\n\nvar _Actions = require('./Actions');\n\nvar _createHistory = require('./createHistory');\n\nvar _createHistory2 = _interopRequireDefault(_createHistory);\n\nfunction createStateStorage(entries) {\n return entries.filter(function (entry) {\n return entry.state;\n }).reduce(function (memo, entry) {\n memo[entry.key] = entry.state;\n return memo;\n }, {});\n}\n\nfunction createMemoryHistory() {\n var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n if (Array.isArray(options)) {\n options = { entries: options };\n } else if (typeof options === 'string') {\n options = { entries: [options] };\n }\n\n var history = _createHistory2['default'](_extends({}, options, {\n getCurrentLocation: getCurrentLocation,\n finishTransition: finishTransition,\n saveState: saveState,\n go: go\n }));\n\n var _options = options;\n var entries = _options.entries;\n var current = _options.current;\n\n if (typeof entries === 'string') {\n entries = [entries];\n } else if (!Array.isArray(entries)) {\n entries = ['/'];\n }\n\n entries = entries.map(function (entry) {\n var key = history.createKey();\n\n if (typeof entry === 'string') return { pathname: entry, key: key };\n\n if (typeof entry === 'object' && entry) return _extends({}, entry, { key: key });\n\n !false ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Unable to create history entry from %s', entry) : _invariant2['default'](false) : undefined;\n });\n\n if (current == null) {\n current = entries.length - 1;\n } else {\n !(current >= 0 && current < entries.length) ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Current index must be >= 0 and < %s, was %s', entries.length, current) : _invariant2['default'](false) : undefined;\n }\n\n var storage = createStateStorage(entries);\n\n function saveState(key, state) {\n storage[key] = state;\n }\n\n function readState(key) {\n return storage[key];\n }\n\n function getCurrentLocation() {\n var entry = entries[current];\n var basename = entry.basename;\n var pathname = entry.pathname;\n var search = entry.search;\n\n var path = (basename || '') + pathname + (search || '');\n\n var key = undefined,\n state = undefined;\n if (entry.key) {\n key = entry.key;\n state = readState(key);\n } else {\n key = history.createKey();\n state = null;\n entry.key = key;\n }\n\n var location = _PathUtils.parsePath(path);\n\n return history.createLocation(_extends({}, location, { state: state }), undefined, key);\n }\n\n function canGo(n) {\n var index = current + n;\n return index >= 0 && index < entries.length;\n }\n\n function go(n) {\n if (n) {\n if (!canGo(n)) {\n process.env.NODE_ENV !== 'production' ? _warning2['default'](false, 'Cannot go(%s) there is not enough history', n) : undefined;\n return;\n }\n\n current += n;\n\n var currentLocation = getCurrentLocation();\n\n // change action to POP\n history.transitionTo(_extends({}, currentLocation, { action: _Actions.POP }));\n }\n }\n\n function finishTransition(location) {\n switch (location.action) {\n case _Actions.PUSH:\n current += 1;\n\n // if we are not on the top of stack\n // remove rest and push new\n if (current < entries.length) entries.splice(current);\n\n entries.push(location);\n saveState(location.key, location.state);\n break;\n case _Actions.REPLACE:\n entries[current] = location;\n saveState(location.key, location.state);\n break;\n }\n }\n\n return history;\n}\n\nexports['default'] = createMemoryHistory;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/createMemoryHistory.js\n ** module id = 211\n ** module chunks = 0\n **/","'use strict';\nvar strictUriEncode = require('strict-uri-encode');\n\nexports.extract = function (str) {\n\treturn str.split('?')[1] || '';\n};\n\nexports.parse = function (str) {\n\tif (typeof str !== 'string') {\n\t\treturn {};\n\t}\n\n\tstr = str.trim().replace(/^(\\?|#|&)/, '');\n\n\tif (!str) {\n\t\treturn {};\n\t}\n\n\treturn str.split('&').reduce(function (ret, param) {\n\t\tvar parts = param.replace(/\\+/g, ' ').split('=');\n\t\t// Firefox (pre 40) decodes `%3D` to `=`\n\t\t// https://github.com/sindresorhus/query-string/pull/37\n\t\tvar key = parts.shift();\n\t\tvar val = parts.length > 0 ? parts.join('=') : undefined;\n\n\t\tkey = decodeURIComponent(key);\n\n\t\t// missing `=` should be `null`:\n\t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\t\tval = val === undefined ? null : decodeURIComponent(val);\n\n\t\tif (!ret.hasOwnProperty(key)) {\n\t\t\tret[key] = val;\n\t\t} else if (Array.isArray(ret[key])) {\n\t\t\tret[key].push(val);\n\t\t} else {\n\t\t\tret[key] = [ret[key], val];\n\t\t}\n\n\t\treturn ret;\n\t}, {});\n};\n\nexports.stringify = function (obj) {\n\treturn obj ? Object.keys(obj).sort().map(function (key) {\n\t\tvar val = obj[key];\n\n\t\tif (val === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (val === null) {\n\t\t\treturn key;\n\t\t}\n\n\t\tif (Array.isArray(val)) {\n\t\t\treturn val.slice().sort().map(function (val2) {\n\t\t\t\treturn strictUriEncode(key) + '=' + strictUriEncode(val2);\n\t\t\t}).join('&');\n\t\t}\n\n\t\treturn strictUriEncode(key) + '=' + strictUriEncode(val);\n\t}).filter(function (x) {\n\t\treturn x.length > 0;\n\t}).join('&') : '';\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/~/query-string/index.js\n ** module id = 212\n ** module chunks = 0\n **/","/*!\n * jQuery JavaScript Library v3.1.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2016-09-22T22:30Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\n\n\n\tfunction DOMEval( code, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar script = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.1.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type( obj );\n\t\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN( obj - parseFloat( obj ) );\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\n\t\t/* eslint-disable no-unused-vars */\n\t\t// See https://github.com/eslint/eslint/issues/6125\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tDOMEval( code );\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 13\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.3\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-08-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tdisabledAncestor = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && (\"form\" in elem || \"label\" in elem);\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tdisabledAncestor( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"\" +\n\t\t\t\t\"\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"\" +\n\t\t\t\t\"\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: ) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Simple selector that can be filtered directly, removing non-Elements\n\tif ( risSimple.test( qualifier ) ) {\n\t\treturn jQuery.filter( qualifier, elements, not );\n\t}\n\n\t// Complex selector, compare the two sets, removing non-Elements\n\tqualifier = jQuery.filter( qualifier, elements );\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && jQuery.isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Support: Android 4.0 only\n\t\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\t\tresolve.call( undefined, value );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.call( undefined, value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( jQuery.isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tjQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ jQuery.camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ jQuery.camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( jQuery.camelCase );\n\t\t\t} else {\n\t\t\t\tkey = jQuery.camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tjQuery.contains( elem.ownerDocument, elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ 1, \"\", \"
\" ],\n\tcol: [ 2, \"\", \"
\" ],\n\ttr: [ 2, \"\", \"
\" ],\n\ttd: [ 3, \"\", \"
\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && jQuery.nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\nvar documentElement = document.documentElement;\n\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 only\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: jQuery.isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /\\s*$/g;\n\nfunction manipulationTarget( elem, content ) {\n\tif ( jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn elem.getElementsByTagName( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rmargin = ( /^margin/ );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdiv.style.cssText =\n\t\t\t\"box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocumentElement.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = divStyle.marginLeft === \"2px\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.marginRight = \"50%\";\n\t\tpixelMarginRightVal = divStyle.marginRight === \"4px\";\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;position:absolute\";\n\tcontainer.appendChild( div );\n\n\tjQuery.extend( support, {\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelMarginRight: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// Support: IE <=9 only\n\t// getPropertyValue is only needed for .css('filter') (#12537)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i,\n\t\tval = 0;\n\n\t// If we already have the right measurement, avoid augmentation\n\tif ( extra === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\ti = 4;\n\n\t// Otherwise initialize for horizontal or vertical properties\n\t} else {\n\t\ti = name === \"width\" ? 1 : 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// At this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar val,\n\t\tvalueIsBorderBox = true,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// Support: IE <=11 only\n\t// Running getBoundingClientRect on a disconnected node\n\t// in IE throws an error.\n\tif ( elem.getClientRects().length ) {\n\t\tval = elem.getBoundingClientRect()[ name ];\n\t}\n\n\t// Some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test( val ) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// Check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// Use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tstyle[ name ] = value;\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = extra && getStyles( elem ),\n\t\t\t\tsubtract = extra && augmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ name ] = value;\n\t\t\t\tvalue = jQuery.css( elem, name );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction raf() {\n\tif ( timerId ) {\n\t\twindow.requestAnimationFrame( raf );\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 13\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( jQuery.isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tjQuery.proxy( result.stop, result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off or if document is hidden\n\tif ( jQuery.fx.off || document.hidden ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = window.requestAnimationFrame ?\n\t\t\twindow.requestAnimationFrame( raf ) :\n\t\t\twindow.setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\tif ( window.cancelAnimationFrame ) {\n\t\twindow.cancelAnimationFrame( timerId );\n\t} else {\n\t\twindow.clearInterval( timerId );\n\t}\n\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnothtmlwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnothtmlwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnothtmlwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = jQuery.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = jQuery.isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( jQuery.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 13\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"