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 = 318\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');\nvar ReactInstrumentation = require('./ReactInstrumentation');\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\nfunction getDisplayName(instance) {\n var element = instance._currentElement;\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 if (instance.getName) {\n return instance.getName() || 'Unknown';\n } else {\n return element.type.displayName || element.type.name || 'Unknown';\n }\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 if (shouldHaveDebugID) {\n var debugID = nextDebugID++;\n instance._debugID = debugID;\n var displayName = getDisplayName(instance);\n ReactInstrumentation.debugTool.onSetDisplayName(debugID, displayName);\n var owner = node && node._owner;\n if (owner) {\n ReactInstrumentation.debugTool.onSetOwner(debugID, owner._debugID);\n }\n } else {\n instance._debugID = 0;\n }\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 = 319\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 = 320\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
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 = 321\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 } else {\n var _ret = function () {\n var last = funcs[funcs.length - 1];\n var rest = funcs.slice(0, -1);\n return {\n v: function v() {\n return rest.reduceRight(function (composed, f) {\n return f(composed);\n }, last.apply(undefined, arguments));\n }\n };\n }();\n\n if (typeof _ret === \"object\") return _ret.v;\n }\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/redux/lib/compose.js\n ** module id = 322\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} [initialState] 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, initialState, enhancer) {\n var _ref2;\n\n if (typeof initialState === 'function' && typeof enhancer === 'undefined') {\n enhancer = initialState;\n initialState = 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, initialState);\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 = initialState;\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\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 = 323\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 = 324\n ** module chunks = 0\n **/","/**\n * This file implements actions to fetch and load data from the API.\n */\n\n// NPM imports\nimport { normalize, arrayOf } from \"normalizr\";\nimport humps from \"humps\";\n\n// Other actions\nimport { CALL_API } from \"../middleware/api\";\nimport { pushEntities } from \"./entities\";\n\n// Models\nimport { artist, song, album } from \"../models/api\";\n\n// Constants\nexport const DEFAULT_LIMIT = 32; /** Default max number of elements to retrieve. */\n\n\n/**\n * This function wraps around an API action to generate actions trigger\n * functions to load items etc.\n *\n * @param action API action.\n * @param requestType Action type to trigger on request.\n * @param successType Action type to trigger on success.\n * @param failureType Action type to trigger on failure.\n */\nexport default function (action, requestType, successType, failureType) {\n /** Get the name of the item associated with action */\n const itemName = action.rstrip(\"s\");\n\n /**\n * Normalizr helper to normalize API response.\n *\n * @param jsonData The JS object returned by the API.\n * @return A normalized object.\n */\n const _normalizeAPIResponse = function (jsonData) {\n return normalize(\n jsonData,\n {\n artist: arrayOf(artist),\n album: arrayOf(album),\n song: arrayOf(song),\n },\n {\n // Use custom assignEntity function to delete useless fields\n assignEntity: function (output, key, value) {\n if (key == \"sessionExpire\") {\n delete output.sessionExpire;\n } else {\n output[key] = value;\n }\n },\n }\n );\n };\n\n /**\n * Callback on successful fetch of paginated items\n *\n * @param jsonData JS object returned from the API.\n * @param pageNumber Number of the page that was fetched.\n */\n const fetchPaginatedItemsSuccess = function (jsonData, pageNumber, limit) {\n const totalCount = jsonData.totalCount;\n jsonData = _normalizeAPIResponse(jsonData);\n\n // Compute the total number of pages\n const nPages = Math.ceil(totalCount / limit);\n\n // Return success actions\n return [\n // Action for the global entities store\n pushEntities(jsonData.entities, [itemName]),\n // Action for the paginated store\n {\n type: successType,\n payload: {\n type: itemName,\n result: jsonData.result[itemName],\n nPages: nPages,\n currentPage: pageNumber,\n },\n },\n ];\n };\n\n /**\n * Callback on successful fetch of single item\n *\n * @param jsonData JS object returned from the API.\n * @param pageNumber Number of the page that was fetched.\n */\n const fetchItemSuccess = function (jsonData) {\n jsonData = _normalizeAPIResponse(jsonData);\n\n return pushEntities(jsonData.entities, [itemName]);\n };\n\n /** Callback on request */\n const fetchItemsRequest = function () {\n // Return a request type action\n return {\n type: requestType,\n payload: {\n },\n };\n };\n\n /**\n * Callback on failed fetch\n *\n * @param error An error object, either a string or an i18nError\n * object.\n */\n const fetchItemsFailure = function (error) {\n // Return a failure type action\n return {\n type: failureType,\n payload: {\n error: error,\n },\n };\n };\n\n /**\n * Method to trigger a fetch of items.\n *\n * @param endpoint Ampache server base URL.\n * @param username Username to use for API request.\n * @param filter An eventual filter to apply (mapped to API filter\n * param)\n * @param pageNumber Number of the page to fetch items from.\n * @param limit Max number of items to fetch.\n * @param include [Optional] A list of includes to return as well\n * (mapped to API include param)\n *\n * @return A CALL_API action to fetch the specified items.\n */\n const fetchItems = function (endpoint, username, passphrase, filter, pageNumber, limit, include = []) {\n // Compute offset in number of items from the page number\n const offset = (pageNumber - 1) * DEFAULT_LIMIT;\n // Set extra params for pagination\n let extraParams = {\n offset: offset,\n limit: limit,\n };\n\n // Handle filter\n if (filter) {\n extraParams.filter = filter;\n }\n\n // Handle includes\n if (include && include.length > 0) {\n extraParams.include = include;\n }\n\n // Return a CALL_API action\n return {\n type: CALL_API,\n payload: {\n endpoint: endpoint,\n dispatch: [\n fetchItemsRequest,\n null,\n fetchItemsFailure,\n ],\n action: action,\n auth: passphrase,\n username: username,\n extraParams: extraParams,\n },\n };\n };\n\n /**\n * High level method to load paginated items from the API wihtout dealing about credentials.\n *\n * @param pageNumber [Optional] Number of the page to fetch items from.\n * @param filter [Optional] An eventual filter to apply (mapped to\n * API filter param)\n * @param include [Optional] A list of includes to return as well\n * (mapped to API include param)\n *\n * Dispatches the CALL_API action to fetch these items.\n */\n const loadPaginatedItems = function ({ pageNumber = 1, limit = DEFAULT_LIMIT, filter = null, include = [] } = {}) {\n return (dispatch, getState) => {\n // Get credentials from the state\n const { auth } = getState();\n // Get the fetch action to dispatch\n const fetchAction = fetchItems(\n auth.endpoint,\n auth.username,\n auth.token.token,\n filter,\n pageNumber,\n limit,\n include\n );\n // Set success callback\n fetchAction.payload.dispatch[1] = (\n jsonData => dispatch => {\n // Dispatch all the necessary actions\n const actions = fetchPaginatedItemsSuccess(jsonData, pageNumber, limit);\n actions.map(action => dispatch(action));\n }\n );\n // Dispatch action\n dispatch(fetchAction);\n };\n };\n\n /**\n * High level method to load a single item from the API wihtout dealing about credentials.\n *\n * @param filter The filter to apply (mapped to API filter param)\n * @param include [Optional] A list of includes to return as well\n * (mapped to API include param)\n *\n * Dispatches the CALL_API action to fetch this item.\n */\n const loadItem = function ({ filter = null, include = [] } = {}) {\n return (dispatch, getState) => {\n // Get credentials from the state\n const { auth } = getState();\n // Get the action to dispatch\n const fetchAction = fetchItems(\n auth.endpoint,\n auth.username,\n auth.token.token,\n filter,\n 1,\n DEFAULT_LIMIT,\n include\n );\n // Set success callback\n fetchAction.payload.dispatch[1] = (\n jsonData => dispatch => {\n dispatch(fetchItemSuccess(jsonData));\n }\n );\n // Dispatch action\n dispatch(fetchAction);\n };\n };\n\n // Remap the above methods to methods including item name\n var returned = {};\n const camelizedAction = humps.pascalize(action);\n returned[\"loadPaginated\" + camelizedAction] = loadPaginatedItems;\n returned[\"load\" + camelizedAction.rstrip(\"s\")] = loadItem;\n return returned;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/actions/APIActions.js\n **/","/**\n * These actions are actions acting directly on the paginated views store.\n */\n\n// Other actions\nimport { decrementRefCount } from \"./entities\";\n\n\n/** Define an action to invalidate results in paginated store. */\nexport const CLEAR_PAGINATED_RESULTS = \"CLEAR_PAGINATED_RESULTS\";\nexport function clearPaginatedResults() {\n return (dispatch, getState) => {\n // Decrement reference counter\n const paginatedStore = getState().paginated;\n const entities = {};\n entities[paginatedStore.get(\"type\")] = paginatedStore.get(\"result\").toJS();\n dispatch(decrementRefCount(entities));\n\n // Clear results in store\n dispatch({\n type: CLEAR_PAGINATED_RESULTS,\n });\n };\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/actions/paginated.js\n **/","/**\n * This file defines pagination related actions.\n */\n\n// NPM imports\nimport { push } from \"react-router-redux\";\n\n/** Define an action to go to a specific page. */\nexport function goToPage(pageLocation) {\n return (dispatch) => {\n // Just push the new page location in react-router.\n dispatch(push(pageLocation));\n };\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/actions/pagination.js\n **/","/**\n * These actions are actions acting on the webplayer.\n */\n\n// Other actions\nimport { decrementRefCount, incrementRefCount } from \"./entities\";\n\n\nexport const PLAY_PAUSE = \"PLAY_PAUSE\";\n/**\n * Toggle play / pause for the webplayer.\n *\n * @param playPause [Optional] True to play, false to pause. If not given,\n * toggle the current state.\n *\n * @return Dispatch a PLAY_PAUSE action.\n */\nexport function togglePlaying(playPause) {\n return (dispatch, getState) => {\n let newIsPlaying = false;\n if (typeof playPause !== \"undefined\") {\n // If we want to force a mode\n newIsPlaying = playPause;\n } else {\n // Else, just toggle\n newIsPlaying = !(getState().webplayer.isPlaying);\n }\n // Dispatch action\n dispatch({\n type: PLAY_PAUSE,\n payload: {\n isPlaying: newIsPlaying,\n },\n });\n };\n}\n\n\nexport const STOP_PLAYBACK = \"STOP_PLAYBACK\";\n/**\n * Stop the webplayer, clearing the playlist.\n *\n * Handle the entities store reference counting.\n *\n * @return Dispatch a STOP_PLAYBACK action.\n */\nexport function stopPlayback() {\n return (dispatch, getState) => {\n // Handle reference counting\n dispatch(decrementRefCount({\n song: getState().webplayer.get(\"playlist\").toArray(),\n }));\n // Stop playback\n dispatch ({\n type: STOP_PLAYBACK,\n });\n };\n}\n\n\nexport const SET_PLAYLIST = \"SET_PLAYLIST\";\n/**\n * Set a given playlist.\n *\n * Handle the entities store reference counting.\n *\n * @param playlist A list of song IDs.\n *\n * @return Dispatch a SET_PLAYLIST action.\n */\nexport function setPlaylist(playlist) {\n // Attention, order of actions *do* matter in this method. We should first\n // set the playlist and then handle the reference counting.\n // We should first increment and then increment to avoid garbage collecting\n // items that would stay in the playlist.\n return (dispatch, getState) => {\n const oldPlaylist = getState().webplayer.get(\"playlist\").toArray();\n\n // Set new playlist\n dispatch ({\n type: SET_PLAYLIST,\n payload: {\n playlist: playlist,\n },\n });\n\n // Handle reference counting\n dispatch(incrementRefCount({\n song: playlist,\n }));\n dispatch(decrementRefCount({\n song: oldPlaylist,\n }));\n };\n}\n\n\n/**\n * Play a given song, emptying the current playlist.\n *\n * Handle the entities store reference counting.\n *\n * @param songID The id of the song to play.\n *\n * @return Dispatch a SET_PLAYLIST action to play this song and start playing.\n */\nexport function playSong(songID) {\n // Attention, order of actions *do* matter in this method. We should first\n // set the playlist and then handle the reference counting.\n // We should first increment and then increment to avoid garbage collecting\n // items that would stay in the playlist.\n return (dispatch, getState) => {\n // Get old and new playlists\n const oldPlaylist = getState().webplayer.get(\"playlist\").toArray();\n\n // Set new playlist\n dispatch({\n type: SET_PLAYLIST,\n payload: {\n playlist: [songID],\n },\n });\n\n // Handle reference counting\n dispatch(incrementRefCount({\n song: [songID],\n }));\n dispatch(decrementRefCount({\n song: oldPlaylist,\n }));\n\n // Force playing\n dispatch(togglePlaying(true));\n };\n}\n\n\nexport const PUSH_SONG = \"PUSH_SONG\";\n/**\n * Push a given song in the playlist.\n *\n * Handle the entities store reference counting.\n *\n * @param songID The id of the song to push.\n * @param index [Optional] The position to insert at in the playlist.\n * If negative, counts from the end. Undefined (default)\n * is last position.\n *\n * @return Dispatch a PUSH_SONG action.\n */\nexport function pushSong(songID, index) {\n return (dispatch) => {\n // Handle reference counting\n dispatch(incrementRefCount({\n song: [songID],\n }));\n // Push song\n dispatch({\n type: PUSH_SONG,\n payload: {\n song: songID,\n index: index,\n },\n });\n };\n}\n\n\nexport const POP_SONG = \"POP_SONG\";\n/**\n * Pop a given song from the playlist.\n *\n * Handle the entities store reference counting.\n *\n * @param songID The id of the song to pop.\n *\n * @return Dispatch a POP_SONG action.\n */\nexport function popSong(songID) {\n return (dispatch) => {\n // Handle reference counting\n dispatch(decrementRefCount({\n song: [songID],\n }));\n // Pop song\n dispatch({\n type: POP_SONG,\n payload: {\n song: songID,\n },\n });\n };\n}\n\n\nexport const JUMP_TO_SONG = \"JUMP_TO_SONG\";\n/**\n * Set current playlist index to specific song.\n *\n * @param songID The id of the song to play.\n *\n * @return Dispatch a JUMP_TO_SONG action.\n */\nexport function jumpToSong(songID) {\n return (dispatch) => {\n // Push song\n dispatch({\n type: JUMP_TO_SONG,\n payload: {\n song: songID,\n },\n });\n };\n}\n\n\nexport const PLAY_PREVIOUS_SONG = \"PLAY_PREVIOUS_SONG\";\n/**\n * Move one song backwards in the playlist.\n *\n * @return Dispatch a PLAY_PREVIOUS_SONG action.\n */\nexport function playPreviousSong() {\n return (dispatch) => {\n dispatch({\n type: PLAY_PREVIOUS_SONG,\n });\n };\n}\n\n\nexport const PLAY_NEXT_SONG = \"PLAY_NEXT_SONG\";\n/**\n * Move one song forward in the playlist.\n *\n * @return Dispatch a PLAY_NEXT_SONG action.\n */\nexport function playNextSong() {\n return (dispatch) => {\n dispatch({\n type: PLAY_NEXT_SONG,\n });\n };\n}\n\n\nexport const TOGGLE_RANDOM = \"TOGGLE_RANDOM\";\n/**\n * Toggle random mode.\n *\n * @return Dispatch a TOGGLE_RANDOM action.\n */\nexport function toggleRandom() {\n return {\n type: TOGGLE_RANDOM,\n };\n}\n\n\nexport const TOGGLE_REPEAT = \"TOGGLE_REPEAT\";\n/**\n * Toggle repeat mode.\n *\n * @return Dispatch a TOGGLE_REPEAT action.\n */\nexport function toggleRepeat() {\n return {\n type: TOGGLE_REPEAT,\n };\n}\n\n\nexport const TOGGLE_MUTE = \"TOGGLE_MUTE\";\n/**\n * Toggle mute mode.\n *\n * @return Dispatch a TOGGLE_MUTE action.\n */\nexport function toggleMute() {\n return {\n type: TOGGLE_MUTE,\n };\n}\n\n\nexport const SET_VOLUME = \"SET_VOLUME\";\n/**\n * Set the volume.\n *\n * @param volume Volume to set (between 0 and 100)\n *\n * @return Dispatch a SET_VOLUME action.\n */\nexport function setVolume(volume) {\n return {\n type: SET_VOLUME,\n payload: {\n volume: volume,\n },\n };\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/actions/webplayer.js\n **/","/**\n * Common styles modifications and hacks.\n */\nexport * from \"./hacks.scss\";\nexport * from \"./common.scss\";\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/common/styles/index.js\n **/","/**\n * Prototype modifications, common utils loaded before the main script\n */\nexport * from \"./jquery\";\nexport * from \"./string\";\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/common/utils/index.js\n **/","/**\n * jQuery prototype extensions.\n */\n\n\n/**\n * Shake animation.\n *\n * @param intShakes Number of times to shake.\n * @param intDistance Distance to move the object.\n * @param intDuration Duration of the animation.\n *\n * @return The element it was applied one, for chaining.\n */\n$.fn.shake = function (intShakes, intDistance, intDuration) {\n this.each(function () {\n $(this).css(\"position\",\"relative\");\n for (let x=1; x<=intShakes; x++) {\n $(this).animate({left:(intDistance*-1)}, (((intDuration/intShakes)/4)))\n .animate({left:intDistance}, ((intDuration/intShakes)/2))\n .animate({left:0}, (((intDuration/intShakes)/4)));\n }\n });\n return this;\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/common/utils/jquery.js\n **/","/**\n * String prototype extension.\n */\n\n\n/**\n * Capitalize a string.\n *\n * @return Capitalized string.\n */\nString.prototype.capitalize = function () {\n return this.charAt(0).toUpperCase() + this.slice(1);\n};\n\n\n/**\n * Strip characters at the end of a string.\n *\n * @param chars A regex-like element to strip from the end.\n * @return Stripped string.\n */\nString.prototype.rstrip = function (chars) {\n let regex = new RegExp(chars + \"$\");\n return this.replace(regex, \"\");\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/common/utils/string.js\n **/","// NPM imports\nimport React, { Component, PropTypes } from \"react\";\nimport Immutable from \"immutable\";\n\n// Local imports\nimport FilterablePaginatedGrid from \"./elements/Grid\";\nimport DismissibleAlert from \"./elements/DismissibleAlert\";\n\n\n/**\n * Paginated albums grid\n */\nexport default class Albums extends Component {\n render() {\n // Handle error\n let error = null;\n if (this.props.error) {\n error = (
);\n }\n\n // Set grid props\n const grid = {\n isFetching: this.props.isFetching,\n items: this.props.albums,\n itemsType: \"album\",\n itemsLabel: \"app.common.album\",\n subItemsType: \"tracks\",\n subItemsLabel: \"app.common.track\",\n };\n\n return (\n
\n { error }\n \n
\n );\n }\n}\nAlbums.propTypes = {\n error: PropTypes.string,\n isFetching: PropTypes.bool.isRequired,\n albums: PropTypes.instanceOf(Immutable.List).isRequired,\n pagination: PropTypes.object.isRequired,\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/components/Albums.jsx\n **/","// NPM imports\nimport React, { Component, PropTypes } from \"react\";\nimport CSSModules from \"react-css-modules\";\nimport { defineMessages, FormattedMessage } from \"react-intl\";\nimport FontAwesome from \"react-fontawesome\";\nimport Immutable from \"immutable\";\n\n// Local imports\nimport { messagesMap } from \"../utils/\";\n\n// Other components\nimport { AlbumRow } from \"./Album\";\nimport DismissibleAlert from \"./elements/DismissibleAlert\";\n\n// Translations\nimport commonMessages from \"../locales/messagesDescriptors/common\";\n\n// Styles\nimport css from \"../styles/Artist.scss\";\n\n// Define translations\nconst artistMessages = defineMessages(messagesMap(Array.concat([], commonMessages)));\n\n\n/**\n * Single artist page\n */\nclass ArtistCSS extends Component {\n render() {\n // Define loading message\n let loading = null;\n if (this.props.isFetching) {\n loading = (\n
\n );\n }\n\n // Handle error\n let error = null;\n if (this.props.error) {\n error = (
);\n }\n\n // Build album rows\n let albumsRows = [];\n const { albums, songs, playAction, playNextAction } = this.props;\n if (albums && songs) {\n albums.forEach(function (album) {\n const albumSongs = album.get(\"tracks\").map(\n id => songs.get(id)\n );\n albumsRows.push(
);\n });\n }\n\n return (\n
\n { error }\n
\n
\n
{this.props.artist.get(\"name\")} \n \n \n
\n
\n
\n
{this.props.artist.get(\"summary\")}
\n
\n
\n
\n
\n
\n { albumsRows }\n { loading }\n
\n );\n }\n}\nArtistCSS.propTypes = {\n error: PropTypes.string,\n isFetching: PropTypes.bool.isRequired,\n playAction: PropTypes.func.isRequired,\n playNextAction: PropTypes.func.isRequired,\n artist: PropTypes.instanceOf(Immutable.Map),\n albums: PropTypes.instanceOf(Immutable.List),\n songs: PropTypes.instanceOf(Immutable.Map),\n};\nexport default CSSModules(ArtistCSS, css);\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/components/Artist.jsx\n **/","// NPM imports\nimport React, { Component, PropTypes } from \"react\";\nimport Immutable from \"immutable\";\n\n// Other components\nimport FilterablePaginatedGrid from \"./elements/Grid\";\nimport DismissibleAlert from \"./elements/DismissibleAlert\";\n\n\n/**\n * Paginated artists grid\n */\nexport default class Artists extends Component {\n render() {\n // Handle error\n let error = null;\n if (this.props.error) {\n error = (
);\n }\n\n // Define grid props\n const grid = {\n isFetching: this.props.isFetching,\n items: this.props.artists,\n itemsType: \"artist\",\n itemsLabel: \"app.common.artist\",\n subItemsType: \"albums\",\n subItemsLabel: \"app.common.album\",\n };\n\n return (\n
\n { error }\n \n
\n );\n }\n}\nArtists.propTypes = {\n error: PropTypes.string,\n isFetching: PropTypes.bool.isRequired,\n artists: PropTypes.instanceOf(Immutable.List).isRequired,\n pagination: PropTypes.object.isRequired,\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/components/Artists.jsx\n **/","// TODO: Discover view is not done\nimport React, { Component } from \"react\";\nimport CSSModules from \"react-css-modules\";\nimport FontAwesome from \"react-fontawesome\";\n\nimport css from \"../styles/Discover.scss\";\n\nexport default class DiscoverCSS extends Component {\n render() {\n const artistsAlbumsSongsDropdown = (\n
\n );\n const bobDylan = (\n
\n
\n
\n \n \n
\n Bob Dylan\n \n
\n
\n );\n return (\n
\n
\n \n More { artistsAlbumsSongsDropdown } you might like\n \n\n
\n
\n
\n
\n
\n \n \n
\n Bob Dylan\n \n
\n
\n { bobDylan }\n { bobDylan }\n { bobDylan }\n { bobDylan }\n
\n
\n
\n\n\n
\n \n Popular { artistsAlbumsSongsDropdown }\n \n
\n
\n
\n
\n
\n \n \n
\n Bob Dylan\n \n
\n
\n { bobDylan }\n { bobDylan }\n { bobDylan }\n { bobDylan }\n
\n
\n
\n\n\n
\n \n Recent additions\n \n
\n
\n
\n
\n
\n \n \n
\n Bob Dylan\n \n
\n
\n { bobDylan }\n { bobDylan }\n { bobDylan }\n { bobDylan }\n
\n
\n
\n\n\n
\n \n Currently playing\n \n\n
\n
\n );\n }\n}\n\nDiscoverCSS.propTypes = {\n};\n\nexport default CSSModules(DiscoverCSS, css);\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/components/Discover.jsx\n **/","// NPM imports\nimport React, { Component, PropTypes } from \"react\";\nimport CSSModules from \"react-css-modules\";\nimport { defineMessages, injectIntl, intlShape, FormattedMessage } from \"react-intl\";\nimport FontAwesome from \"react-fontawesome\";\n\n// Local imports\nimport { i18nRecord } from \"../models/i18n\";\nimport { messagesMap } from \"../utils\";\n\n// Translations\nimport APIMessages from \"../locales/messagesDescriptors/api\";\nimport messages from \"../locales/messagesDescriptors/Login\";\n\n// Styles\nimport css from \"../styles/Login.scss\";\n\n// Define translations\nconst loginMessages = defineMessages(messagesMap(Array.concat([], APIMessages, messages)));\n\n\n/**\n * Login form component\n */\nclass LoginFormCSSIntl extends Component {\n constructor(props) {\n super(props);\n this.handleSubmit = this.handleSubmit.bind(this); // bind this to handleSubmit\n }\n\n /**\n * Set an error on a form element.\n *\n * @param formGroup A form element.\n * @param hasError Whether or not an error should be set.\n *\n * @return True if an error is set, false otherwise\n */\n setError(formGroup, hasError) {\n if (hasError) {\n // If error is true, then add error class\n formGroup.classList.add(\"has-error\");\n formGroup.classList.remove(\"has-success\");\n return true;\n }\n // Else, drop it and put success class\n formGroup.classList.remove(\"has-error\");\n formGroup.classList.add(\"has-success\");\n return false;\n }\n\n /**\n * Form submission handler.\n *\n * @param e JS Event.\n */\n handleSubmit(e) {\n e.preventDefault();\n\n // Don't handle submit if already logging in\n if (this.props.isAuthenticating) {\n return;\n }\n\n // Get field values\n const username = this.refs.username.value.trim();\n const password = this.refs.password.value.trim();\n const endpoint = this.refs.endpoint.value.trim();\n const rememberMe = this.refs.rememberMe.checked;\n\n // Check for errors on each field\n let hasError = this.setError(this.refs.usernameFormGroup, !username);\n hasError |= this.setError(this.refs.passwordFormGroup, !password);\n hasError |= this.setError(this.refs.endpointFormGroup, !endpoint);\n\n if (!hasError) {\n // Submit if no error is found\n this.props.onSubmit(username, password, endpoint, rememberMe);\n }\n }\n\n componentDidUpdate() {\n if (this.props.error) {\n // On unsuccessful login, set error classes and shake the form\n $(this.refs.loginForm).shake(3, 10, 300);\n this.setError(this.refs.usernameFormGroup, this.props.error);\n this.setError(this.refs.passwordFormGroup, this.props.error);\n this.setError(this.refs.endpointFormGroup, this.props.error);\n }\n }\n\n render() {\n const {formatMessage} = this.props.intl;\n\n // Handle info message\n let infoMessage = this.props.info;\n if (this.props.info && this.props.info instanceof i18nRecord) {\n infoMessage = (\n
\n );\n }\n\n // Handle error message\n let errorMessage = this.props.error;\n if (this.props.error && this.props.error instanceof i18nRecord) {\n errorMessage = (\n
\n );\n }\n\n return (\n
\n {\n this.props.error ?\n
\n : null\n }\n {\n this.props.info ?\n
\n : null\n }\n
\n
\n );\n }\n}\nLoginFormCSSIntl.propTypes = {\n username: PropTypes.string,\n endpoint: PropTypes.string,\n rememberMe: PropTypes.bool,\n onSubmit: PropTypes.func.isRequired,\n isAuthenticating: PropTypes.bool,\n error: PropTypes.oneOfType([PropTypes.string, PropTypes.instanceOf(i18nRecord)]),\n info: PropTypes.oneOfType([PropTypes.string, PropTypes.instanceOf(i18nRecord)]),\n intl: intlShape.isRequired,\n};\nexport let LoginForm = injectIntl(CSSModules(LoginFormCSSIntl, css));\n\n\n/**\n * Main login page, including title and login form.\n */\nclass LoginCSS extends Component {\n render() {\n const greeting = (\n
\n \n
\n );\n return (\n
\n
mpache\n
\n {(!this.props.error && !this.props.info) ? greeting : null}\n
\n \n
\n
\n );\n }\n}\nLoginCSS.propTypes = {\n username: PropTypes.string,\n endpoint: PropTypes.string,\n rememberMe: PropTypes.bool,\n onSubmit: PropTypes.func.isRequired,\n isAuthenticating: PropTypes.bool,\n info: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n error: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n};\nexport default CSSModules(LoginCSS, css);\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/components/Login.jsx\n **/","// NPM import\nimport React, { Component, PropTypes } from \"react\";\nimport Immutable from \"immutable\";\n\n// Other components\nimport { SongsTable } from \"./Songs\";\n\n/**\n * An entire album row containing art and tracks table.\n */\nexport default class Playlist extends Component {\n render() {\n const currentSongSongsTableProps = {\n playAction: this.props.playAction,\n playNextAction: this.props.playNextAction,\n songs: this.props.songs.slice(this.props.currentIndex, this.props.currentIndex + 1),\n };\n const fullPlaylistSongsTableProps = {\n playAction: this.props.playAction,\n playNextAction: this.props.playNextAction,\n songs: this.props.songs,\n };\n return (\n
\n
Current song playing \n \n Full playlist \n \n \n );\n }\n}\nPlaylist.propTypes = {\n playAction: PropTypes.func.isRequired,\n playNextAction: PropTypes.func.isRequired,\n songs: PropTypes.instanceOf(Immutable.List).isRequired,\n currentIndex: PropTypes.number.isRequired,\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/components/Playlist.jsx\n **/","// NPM imports\nimport React, { Component, PropTypes } from \"react\";\nimport CSSModules from \"react-css-modules\";\nimport { defineMessages, injectIntl, intlShape, FormattedMessage } from \"react-intl\";\nimport { Link } from \"react-router\";\nimport Immutable from \"immutable\";\nimport FontAwesome from \"react-fontawesome\";\n\n// Local imports\nimport { messagesMap } from \"../../utils\";\n\n// Styles\nimport css from \"../../styles/elements/WebPlayer.scss\";\n\n// Translations\nimport commonMessages from \"../../locales/messagesDescriptors/common\";\nimport messages from \"../../locales/messagesDescriptors/elements/WebPlayer\";\n\n// Define translations\nconst webplayerMessages = defineMessages(messagesMap(Array.concat([], commonMessages, messages)));\n\n\n/**\n * Webplayer component.\n */\nclass WebPlayerCSSIntl extends Component {\n constructor(props) {\n super(props);\n\n // Bind this\n this.artOpacityHandler = this.artOpacityHandler.bind(this);\n }\n\n /**\n * Handle opacity on album art.\n *\n * Set opacity on mouseover / mouseout.\n *\n * @param ev A JS event.\n */\n artOpacityHandler(ev) {\n if (ev.type == \"mouseover\") {\n // On mouse over, reduce opacity\n this.refs.art.style.opacity = \"1\";\n this.refs.artText.style.display = \"none\";\n } else {\n // On mouse out, set opacity back\n this.refs.art.style.opacity = \"0.75\";\n this.refs.artText.style.display = \"block\";\n }\n }\n\n render() {\n const { formatMessage } = this.props.intl;\n\n // Get current song (eventually undefined)\n const song = this.props.currentSong;\n\n // Current status (play or pause) for localization\n const playPause = this.props.isPlaying ? \"pause\" : \"play\";\n // Volume fontawesome icon\n const volumeIcon = this.props.isMute ? \"volume-off\" : \"volume-up\";\n\n // Get classes for random and repeat buttons\n const randomBtnStyles = [\"randomBtn\"];\n const repeatBtnStyles = [\"repeatBtn\"];\n const playlistBtnStyles = [\"playlistBtn\"];\n if (this.props.isRandom) {\n randomBtnStyles.push(\"active\");\n }\n if (this.props.isRepeat) {\n repeatBtnStyles.push(\"active\");\n }\n if (this.props.isPlaylistViewActive) {\n playlistBtnStyles.push(\"active\");\n }\n\n // Check if a song is currently playing\n let art = null;\n let songTitle = null;\n let artistName = null;\n if (song) {\n art = song.get(\"art\");\n songTitle = song.get(\"title\");\n if (this.props.currentArtist) {\n artistName = this.props.currentArtist.get(\"name\");\n }\n }\n\n // Click handlers\n const onPrev = (function () {\n $(this.refs.prevBtn).blur();\n this.props.onPrev();\n }).bind(this);\n const onPlayPause = (function () {\n $(this.refs.playPauseBtn).blur();\n this.props.onPlayPause();\n }).bind(this);\n const onSkip = (function () {\n $(this.refs.nextBtn).blur();\n this.props.onSkip();\n }).bind(this);\n const onMute = (function () {\n $(this.refs.volumeBtn).blur();\n this.props.onMute();\n }).bind(this);\n const onRepeat = (function () {\n $(this.refs.repeatBtn).blur();\n this.props.onRepeat();\n }).bind(this);\n const onRandom = (function () {\n $(this.refs.randomBtn).blur();\n this.props.onRandom();\n }).bind(this);\n\n return (\n
\n
\n
\n
\n
\n
\n {\n (artistName && songTitle)\n ? (\n
\n
{songTitle} \n \n \n \n { artistName }\n \n \n )\n : null\n }\n
\n
\n
\n\n
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n );\n }\n}\n\nWebPlayerCSSIntl.propTypes = {\n isPlaying: PropTypes.bool.isRequired,\n isRandom: PropTypes.bool.isRequired,\n isRepeat: PropTypes.bool.isRequired,\n isMute: PropTypes.bool.isRequired,\n volume: PropTypes.number.isRequired,\n currentIndex: PropTypes.number.isRequired,\n playlist: PropTypes.instanceOf(Immutable.List).isRequired,\n currentSong: PropTypes.instanceOf(Immutable.Map),\n currentArtist: PropTypes.instanceOf(Immutable.Map),\n onPlayPause: PropTypes.func.isRequired,\n onPrev: PropTypes.func.isRequired,\n onSkip: PropTypes.func.isRequired,\n onRandom: PropTypes.func.isRequired,\n onRepeat: PropTypes.func.isRequired,\n onMute: PropTypes.func.isRequired,\n isPlaylistViewActive: PropTypes.bool,\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(CSSModules(WebPlayerCSSIntl, css, { allowMultiple: true }));\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/components/elements/WebPlayer.jsx\n **/","// NPM imports\nimport React, { Component, PropTypes } from \"react\";\nimport { IndexLink, Link} from \"react-router\";\nimport CSSModules from \"react-css-modules\";\nimport { defineMessages, injectIntl, intlShape, FormattedMessage } from \"react-intl\";\n\n// Local imports\nimport { messagesMap } from \"../../utils\";\n\n// Other components\nimport WebPlayer from \"../../views/WebPlayer\";\n\n// Translations\nimport commonMessages from \"../../locales/messagesDescriptors/common\";\nimport messages from \"../../locales/messagesDescriptors/layouts/Sidebar\";\n\n// Styles\nimport css from \"../../styles/layouts/Sidebar.scss\";\n\n// Define translations\nconst sidebarLayoutMessages = defineMessages(messagesMap(Array.concat([], commonMessages, messages)));\n\n\n/**\n * Sidebar layout component, putting children next to the sidebar menu.\n */\nclass SidebarLayoutIntl extends Component {\n render() {\n const { formatMessage } = this.props.intl;\n\n // Check active links\n const isActive = {\n discover: (this.props.location.pathname == \"/discover\") ? \"active\" : \"link\",\n browse: (this.props.location.pathname == \"/browse\") ? \"active\" : \"link\",\n artists: (this.props.location.pathname == \"/artists\") ? \"active\" : \"link\",\n albums: (this.props.location.pathname == \"/albums\") ? \"active\" : \"link\",\n songs: (this.props.location.pathname == \"/songs\") ? \"active\" : \"link\",\n search: (this.props.location.pathname == \"/search\") ? \"active\" : \"link\",\n };\n\n // Hamburger collapsing function\n const collapseHamburger = function () {\n $(\"#main-navbar\").collapse(\"hide\");\n };\n\n return (\n
\n
\n
\n
\n \n \n \n \n \n \n \n
\n \n \n mpache \n \n \n
\n \n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n\n
\n {this.props.children}\n
\n
\n );\n }\n}\nSidebarLayoutIntl.propTypes = {\n children: PropTypes.node,\n intl: intlShape.isRequired,\n};\nexport default injectIntl(CSSModules(SidebarLayoutIntl, css));\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/components/layouts/Sidebar.jsx\n **/","// NPM imports\nimport React, { Component } from \"react\";\n\n\n/**\n * Simple layout, meaning just enclosing children in a div.\n */\nexport default class SimpleLayout extends Component {\n render() {\n return (\n
\n {this.props.children}\n
\n );\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/components/layouts/Simple.jsx\n **/","/**\n * Main container at the top of our application components tree.\n *\n * Just a div wrapper around children for now.\n */\nimport React, { Component, PropTypes } from \"react\";\n\nexport default class App extends Component {\n render() {\n return (\n
\n {this.props.children}\n
\n );\n }\n}\n\nApp.propTypes = {\n children: PropTypes.node,\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/containers/App.jsx\n **/","/**\n * Container wrapping elements neeeding a valid session. Automatically\n * redirects to login form in case such session does not exist.\n */\nimport React, { Component, PropTypes } from \"react\";\nimport { connect } from \"react-redux\";\n\n\nexport class RequireAuthentication extends Component {\n componentWillMount() {\n // Check authentication on mount\n this.checkAuth(this.props.isAuthenticated);\n }\n\n componentWillUpdate(newProps) {\n // Check authentication on update\n this.checkAuth(newProps.isAuthenticated);\n }\n\n /**\n * Handle redirection in case user is not authenticated.\n *\n * @param isAuthenticated A boolean stating whether user has a valid\n * session or not.\n */\n checkAuth(isAuthenticated) {\n if (!isAuthenticated) {\n // Redirect to login, redirecting to the actual page after login.\n this.context.router.replace({\n pathname: \"/login\",\n state: {\n nextPathname: this.props.location.pathname,\n nextQuery: this.props.location.query,\n },\n });\n }\n }\n\n render() {\n return (\n
\n {this.props.isAuthenticated === true\n ? this.props.children\n : null\n }\n
\n );\n }\n}\n\nRequireAuthentication.propTypes = {\n // Injected by React Router\n children: PropTypes.node,\n};\n\nRequireAuthentication.contextTypes = {\n router: PropTypes.object.isRequired,\n};\n\nconst mapStateToProps = (state) => ({\n isAuthenticated: state.auth.isAuthenticated,\n});\n\nexport default connect(mapStateToProps)(RequireAuthentication);\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/containers/RequireAuthentication.js\n **/","/**\n * Root component to render, setting locale, messages, Router and Store.\n */\nimport React, { Component, PropTypes } from \"react\";\nimport { Provider } from \"react-redux\";\nimport { Router } from \"react-router\";\nimport { IntlProvider } from \"react-intl\";\n\nimport routes from \"../routes\";\n\nexport default class Root extends Component {\n render() {\n const { locale, messages, defaultLocale, store, history, render } = this.props;\n return (\n
\n \n \n \n \n );\n }\n}\n\nRoot.propTypes = {\n store: PropTypes.object.isRequired,\n history: PropTypes.object.isRequired,\n render: PropTypes.func,\n locale: PropTypes.string.isRequired,\n messages: PropTypes.object.isRequired,\n defaultLocale: PropTypes.string.isRequired,\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/containers/Root.jsx\n **/","module.exports = {\n \"app.api.invalidResponse\": \"Invalid response text.\", // Invalid response from the API\n \"app.api.emptyResponse\": \"Empty response text.\", // Empty response from the API\n \"app.api.error\": \"Unknown API error.\", // An unknown error occurred from the API\n \"app.common.album\": \"{itemCount, plural, one {album} other {albums}}\", // Album\n \"app.common.art\": \"Art\", // Art\n \"app.common.artist\": \"{itemCount, plural, one {artist} other {artists}}\", // Artist\n \"app.common.cancel\": \"Cancel\", // Cancel\n \"app.common.close\": \"Close\", // Close\n \"app.common.go\": \"Go\", // Go\n \"app.common.loading\": \"Loading…\", // Loading indicator\n \"app.common.pause\": \"Pause\", // Pause icon description\n \"app.common.play\": \"Play\", // Play icon description\n \"app.common.playNext\": \"Play next\", // \"Play next icon descripton\"\n \"app.common.track\": \"{itemCount, plural, one {track} other {tracks}}\", // Track\n \"app.filter.filter\": \"Filter…\", // Filtering input placeholder\n \"app.filter.whatAreWeListeningToToday\": \"What are we listening to today?\", // Description for the filter bar\n \"app.grid.goToArtistPage\": \"Go to artist page\", // Artist thumbnail link title\n \"app.grid.goToAlbumPage\": \"Go to album page\", // Album thumbnail link title\n \"app.login.byebye\": \"See you soon!\", // Info message on successful logout\n \"app.login.connecting\": \"Connecting…\", // Info message while trying to connect\n \"app.login.endpointInputAriaLabel\": \"URL of your Ampache instance (e.g. http://ampache.example.com)\", // ARIA label for the endpoint input\n \"app.login.expired\": \"Your session expired… =(\", // Error message on expired session\n \"app.login.greeting\": \"Welcome back on Ampache, let's go!\", // Greeting to welcome the user to the app\n \"app.login.password\": \"Password\", // Password input placeholder\n \"app.login.rememberMe\": \"Remember me\", // Remember me checkbox label\n \"app.login.signIn\": \"Sign in\", // Sign in\n \"app.login.success\": \"Successfully logged in as { username }!\", // Info message on successful login.\n \"app.login.username\": \"Username\", // Username input placeholder\n \"app.pagination.current\": \"current\", // Current (page)\n \"app.pagination.goToPage\": \"
Go to page {pageNumber}\", // Link content to go to page N. span is here for screen-readers\n \"app.pagination.goToPageWithoutMarkup\": \"Go to page {pageNumber}\", // Link title to go to page N\n \"app.pagination.pageNavigation\": \"Page navigation\", // ARIA label for the nav block containing pagination\n \"app.pagination.pageToGoTo\": \"Page to go to?\", // Title of the pagination modal\n \"app.sidebarLayout.browse\": \"Browse\", // Browse\n \"app.sidebarLayout.browseAlbums\": \"Browse albums\", // Browse albums\n \"app.sidebarLayout.browseArtists\": \"Browse artists\", // Browse artists\n \"app.sidebarLayout.browseSongs\": \"Browse songs\", // Browse songs\n \"app.sidebarLayout.discover\": \"Discover\", // Discover\n \"app.sidebarLayout.home\": \"Home\", // Home\n \"app.sidebarLayout.logout\": \"Logout\", // Logout\n \"app.sidebarLayout.mainNavigationMenu\": \"Main navigation menu\", // ARIA label for the main navigation menu\n \"app.sidebarLayout.settings\": \"Settings\", // Settings\n \"app.sidebarLayout.toggleNavigation\": \"Toggle navigation\", // Screen reader description of toggle navigation button\n \"app.songs.genre\": \"Genre\", // Genre (song)\n \"app.songs.length\": \"Length\", // Length (song)\n \"app.songs.title\": \"Title\", // Title (song)\n \"app.webplayer.by\": \"by\", // Artist affiliation of a song\n \"app.webplayer.next\": \"Next\", // Next button description\n \"app.webplayer.playlist\": \"Playlist\", // Playlist button description\n \"app.webplayer.previous\": \"Previous\", // Previous button description\n \"app.webplayer.random\": \"Random\", // Random button description\n \"app.webplayer.repeat\": \"Repeat\", // Repeat button description\n \"app.webplayer.volume\": \"Volume\", // Volume button description\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/locales/en-US/index.js\n **/","module.exports = {\n \"app.api.invalidResponse\": \"Réponse invalide reçue.\", // Invalid response from the API\n \"app.api.emptyResponse\": \"Réponse vide reçue.\", // Empty response from the API\n \"app.api.error\": \"Erreur inconnue.\", // An unknown error occurred from the API\n \"app.common.album\": \"{itemCount, plural, one {album} other {albums}}\", // Albums\n \"app.common.art\": \"Pochette\", // Art\n \"app.common.artist\": \"{itemCount, plural, one {artiste} other {artistes}}\", // Artists\n \"app.common.cancel\": \"Annuler\", // Cancel\n \"app.common.close\": \"Fermer\", // Close\n \"app.common.go\": \"Aller\", // Go\n \"app.common.loading\": \"Chargement…\", // Loading indicator\n \"app.common.pause\": \"Pause\", // Pause icon description\n \"app.common.play\": \"Jouer\", // PLay icon description\n \"app.common.playNext\": \"Jouer après\", // \"Play next icon descripton\"\n \"app.common.track\": \"{itemCount, plural, one {piste} other {pistes}}\", // Track\n \"app.filter.filter\": \"Filtrer…\", // Filtering input placeholder\n \"app.filter.whatAreWeListeningToToday\": \"Que voulez-vous écouter aujourd'hui\\u00a0?\", // Description for the filter bar\n \"app.grid.goToArtistPage\": \"Aller à la page de l'artiste\", // Artist thumbnail link title\n \"app.grid.goToAlbumPage\": \"Aller à la page de l'album\", // Album thumbnail link title\n \"app.login.byebye\": \"À bientôt\\u00a0!\", // Info message on successful logout\n \"app.login.connecting\": \"Connexion…\", // Info message while trying to connect\n \"app.login.endpointInputAriaLabel\": \"URL de votre Ampache (e.g. http://ampache.example.com)\", // ARIA label for the endpoint input\n \"app.login.expired\": \"Session expirée… =(\", // Error message on expired session\n \"app.login.greeting\": \"Bon retour sur Ampache, c'est parti\\u00a0!\", // Greeting to welcome the user to the app\n \"app.login.password\": \"Mot de passe\", // Password input placeholder\n \"app.login.rememberMe\": \"Se souvenir\", // Remember me checkbox label\n \"app.login.signIn\": \"Connexion\", // Sign in\n \"app.login.success\": \"Connecté en tant que { username }\\u00a0!\", // Info message on successful login.\n \"app.login.username\": \"Utilisateur\", // Username input placeholder\n \"app.pagination.current\": \"actuelle\", // Current (page)\n \"app.pagination.goToPage\": \"
Aller à la page {pageNumber}\", // Link content to go to page N. span is here for screen-readers\n \"app.pagination.goToPageWithoutMarkup\": \"Aller à la page {pageNumber}\", // Link title to go to page N\n \"app.pagination.pageNavigation\": \"Navigation entre les pages\", // ARIA label for the nav block containing pagination\n \"app.pagination.pageToGoTo\": \"Page à laquelle aller\\u00a0?\", // Title of the pagination modal\n \"app.sidebarLayout.browse\": \"Explorer\", // Browse\n \"app.sidebarLayout.browseAlbums\": \"Parcourir les albums\", // Browse albums\n \"app.sidebarLayout.browseArtists\": \"Parcourir les artistes\", // Browse artists\n \"app.sidebarLayout.browseSongs\": \"Parcourir les pistes\", // Browse songs\n \"app.sidebarLayout.discover\": \"Découvrir\", // Discover\n \"app.sidebarLayout.home\": \"Accueil\", // Home\n \"app.sidebarLayout.logout\": \"Déconnexion\", // Logout\n \"app.sidebarLayout.mainNavigationMenu\": \"Menu principal\", // ARIA label for the main navigation menu\n \"app.sidebarLayout.settings\": \"Préférences\", // Settings\n \"app.sidebarLayout.toggleNavigation\": \"Afficher le menu\", // Screen reader description of toggle navigation button\n \"app.songs.genre\": \"Genre\", // Genre (song)\n \"app.songs.length\": \"Durée\", // Length (song)\n \"app.songs.title\": \"Titre\", // Title (song)\n \"app.webplayer.by\": \"par\", // Artist affiliation of a song\n \"app.webplayer.next\": \"Suivant\", // Next button description\n \"app.webplayer.playlist\": \"Liste de lecture\", // Playlist button description\n \"app.webplayer.previous\": \"Précédent\", // Previous button description\n \"app.webplayer.random\": \"Aléatoire\", // Random button description\n \"app.webplayer.repeat\": \"Répéter\", // Repeat button description\n \"app.webplayer.volume\": \"Volume\", // Volume button description\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/locales/fr-FR/index.js\n **/","// Export all the existing locales\nmodule.exports = {\n \"en-US\": require(\"./en-US\"),\n \"fr-FR\": require(\"./fr-FR\"),\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/locales/index.js\n **/","const messages = [\n {\n id: \"app.login.username\",\n defaultMessage: \"Username\",\n description: \"Username input placeholder\",\n },\n {\n id: \"app.login.password\",\n defaultMessage: \"Password\",\n description: \"Password input placeholder\",\n },\n {\n id: \"app.login.signIn\",\n defaultMessage: \"Sign in\",\n description: \"Sign in\",\n },\n {\n id: \"app.login.endpointInputAriaLabel\",\n defaultMessage: \"URL of your Ampache instance (e.g. http://ampache.example.com)\",\n description: \"ARIA label for the endpoint input\",\n },\n {\n id: \"app.login.rememberMe\",\n description: \"Remember me checkbox label\",\n defaultMessage: \"Remember me\",\n },\n {\n id: \"app.login.greeting\",\n description: \"Greeting to welcome the user to the app\",\n defaultMessage: \"Welcome back on Ampache, let's go!\",\n },\n\n // From the auth reducer\n {\n id: \"app.login.connecting\",\n defaultMessage: \"Connecting…\",\n description: \"Info message while trying to connect\",\n },\n {\n id: \"app.login.success\",\n defaultMessage: \"Successfully logged in as { username }!\",\n description: \"Info message on successful login.\",\n },\n {\n id: \"app.login.byebye\",\n defaultMessage: \"See you soon!\",\n description: \"Info message on successful logout\",\n },\n {\n id: \"app.login.expired\",\n defaultMessage: \"Your session expired… =(\",\n description: \"Error message on expired session\",\n },\n];\n\nexport default messages;\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/locales/messagesDescriptors/Login.js\n **/","const messages = [\n {\n \"id\": \"app.songs.title\",\n \"description\": \"Title (song)\",\n \"defaultMessage\": \"Title\",\n },\n {\n \"id\": \"app.songs.genre\",\n \"description\": \"Genre (song)\",\n \"defaultMessage\": \"Genre\",\n },\n {\n \"id\": \"app.songs.length\",\n \"description\": \"Length (song)\",\n \"defaultMessage\": \"Length\",\n },\n];\n\nexport default messages;\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/locales/messagesDescriptors/Songs.js\n **/","const messages = [\n {\n id: \"app.filter.filter\",\n defaultMessage: \"Filter…\",\n description: \"Filtering input placeholder\",\n },\n {\n id: \"app.filter.whatAreWeListeningToToday\",\n description: \"Description for the filter bar\",\n defaultMessage: \"What are we listening to today?\",\n },\n];\n\nexport default messages;\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/locales/messagesDescriptors/elements/FilterBar.js\n **/","const messages = [\n {\n id: \"app.pagination.goToPage\",\n defaultMessage: \"
Go to page {pageNumber}\",\n description: \"Link content to go to page N. span is here for screen-readers\",\n },\n {\n id: \"app.pagination.goToPageWithoutMarkup\",\n defaultMessage: \"Go to page {pageNumber}\",\n description: \"Link title to go to page N\",\n },\n {\n id: \"app.pagination.pageNavigation\",\n defaultMessage: \"Page navigation\",\n description: \"ARIA label for the nav block containing pagination\",\n },\n {\n id: \"app.pagination.pageToGoTo\",\n description: \"Title of the pagination modal\",\n defaultMessage: \"Page to go to?\",\n },\n {\n id: \"app.pagination.current\",\n description: \"Current (page)\",\n defaultMessage: \"current\",\n },\n];\n\nexport default messages;\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/locales/messagesDescriptors/elements/Pagination.js\n **/","const messages = [\n {\n id: \"app.webplayer.by\",\n defaultMessage: \"by\",\n description: \"Artist affiliation of a song\",\n },\n {\n id: \"app.webplayer.previous\",\n defaultMessage: \"Previous\",\n description: \"Previous button description\",\n },\n {\n id: \"app.webplayer.next\",\n defaultMessage: \"Next\",\n description: \"Next button description\",\n },\n {\n id: \"app.webplayer.volume\",\n defaultMessage: \"Volume\",\n description: \"Volume button description\",\n },\n {\n id: \"app.webplayer.repeat\",\n defaultMessage: \"Repeat\",\n description: \"Repeat button description\",\n },\n {\n id: \"app.webplayer.random\",\n defaultMessage: \"Random\",\n description: \"Random button description\",\n },\n {\n id: \"app.webplayer.playlist\",\n defaultMessage: \"Playlist\",\n description: \"Playlist button description\",\n },\n];\n\nexport default messages;\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/locales/messagesDescriptors/elements/WebPlayer.js\n **/","const messages = [\n {\n id: \"app.grid.goToArtistPage\",\n defaultMessage: \"Go to artist page\",\n description: \"Artist thumbnail link title\",\n },\n {\n id: \"app.grid.goToAlbumPage\",\n defaultMessage: \"Go to album page\",\n description: \"Album thumbnail link title\",\n },\n];\n\nexport default messages;\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/locales/messagesDescriptors/grid.js\n **/","const messages = [\n {\n id: \"app.sidebarLayout.mainNavigationMenu\",\n description: \"ARIA label for the main navigation menu\",\n defaultMessage: \"Main navigation menu\",\n },\n {\n id: \"app.sidebarLayout.home\",\n description: \"Home\",\n defaultMessage: \"Home\",\n },\n {\n id: \"app.sidebarLayout.settings\",\n description: \"Settings\",\n defaultMessage: \"Settings\",\n },\n {\n id: \"app.sidebarLayout.logout\",\n description: \"Logout\",\n defaultMessage: \"Logout\",\n },\n {\n id: \"app.sidebarLayout.discover\",\n description: \"Discover\",\n defaultMessage: \"Discover\",\n },\n {\n id: \"app.sidebarLayout.browse\",\n description: \"Browse\",\n defaultMessage: \"Browse\",\n },\n {\n id: \"app.sidebarLayout.browseArtists\",\n description: \"Browse artists\",\n defaultMessage: \"Browse artists\",\n },\n {\n id: \"app.sidebarLayout.browseAlbums\",\n description: \"Browse albums\",\n defaultMessage: \"Browse albums\",\n },\n {\n id: \"app.sidebarLayout.browseSongs\",\n description: \"Browse songs\",\n defaultMessage: \"Browse songs\",\n },\n {\n id: \"app.sidebarLayout.toggleNavigation\",\n description: \"Screen reader description of toggle navigation button\",\n defaultMessage: \"Toggle navigation\",\n },\n];\n\nexport default messages;\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/locales/messagesDescriptors/layouts/Sidebar.js\n **/","/**\n * This file defines API related models.\n */\n\n// NPM imports\nimport { Schema, arrayOf } from \"normalizr\";\n\n\n// Define normalizr schemas for major entities returned by the API\nexport const artist = new Schema(\"artist\"); /** Artist schema */\nexport const album = new Schema(\"album\"); /** Album schema */\nexport const song = new Schema(\"song\"); /** Song schema */\n\n// Explicit relations between them\nartist.define({ // Artist has albums and songs (tracks)\n albums: arrayOf(album),\n songs: arrayOf(song),\n});\n\nalbum.define({ // Album has artist, tracks and tags\n artist: artist,\n tracks: arrayOf(song),\n});\n\nsong.define({ // Track has artist and album\n artist: artist,\n album: album,\n});\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/models/api.js\n **/","/**\n * This file defines authentication related models.\n */\n\n// NPM imports\nimport Immutable from \"immutable\";\n\n\n/** Record to store token parameters */\nexport const tokenRecord = Immutable.Record({\n token: null, /** Token string */\n expires: null, /** Token expiration date */\n});\n\n\n/** Record to store the full auth state */\nexport const stateRecord = new Immutable.Record({\n token: new tokenRecord(), /** Auth token */\n username: null, /** Username */\n endpoint: null, /** Ampache server base URL */\n rememberMe: false, /** Whether to remember me or not */\n isAuthenticated: false, /** Whether authentication is ok or not */\n isAuthenticating: false, /** Whether authentication is in progress or not */\n error: null, /** An error string */\n info: null, /** An info string */\n timerID: null, /** Timer ID for setInterval calls to revive API session */\n});\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/models/auth.js\n **/","/**\n * This file defines entities storage models.\n */\n\n// NPM imports\nimport Immutable from \"immutable\";\n\n/** Record to store the shared entities. */\nexport const stateRecord = new Immutable.Record({\n isFetching: false, /** Whether API fetching is in progress */\n error: null, /** An error string */\n refCounts: new Immutable.Map({\n album: new Immutable.Map(),\n artist: new Immutable.Map(),\n song: new Immutable.Map(),\n }), /** Map of id => reference count for each object type (garbage collection) */\n entities: new Immutable.Map({\n album: new Immutable.Map(),\n artist: new Immutable.Map(),\n song: new Immutable.Map(),\n }), /** Map of id => entity for each object type */\n});\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/models/entities.js\n **/","// NPM import\nimport Immutable from \"immutable\";\n\n/** Record to store the paginated pages state. */\nexport const stateRecord = new Immutable.Record({\n type: null, /** Type of the paginated entries */\n result: new Immutable.List(), /** List of IDs of the resulting entries, maps to the entities store */\n currentPage: 1, /** Number of current page */\n nPages: 1, /** Total number of page in this batch */\n});\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/models/paginated.js\n **/","/**\n * This file defines authentication related models.\n */\n\n// NPM imports\nimport Immutable from \"immutable\";\n\n\n/** Record to store the webplayer state. */\nexport const stateRecord = new Immutable.Record({\n isPlaying: false, /** Whether webplayer is playing */\n isRandom: false, /** Whether random mode is on */\n isRepeat: false, /** Whether repeat mode is on */\n isMute: false, /** Whether sound is muted or not */\n volume: 100, /** Current volume, between 0 and 100 */\n currentIndex: 0, /** Current index in the playlist */\n playlist: new Immutable.List(), /** List of songs IDs, references songs in the entities store */\n});\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/models/webplayer.js\n **/","/**\n * This implements the auth reducer, storing and updating authentication state.\n */\n\n// NPM imports\nimport Cookies from \"js-cookie\";\n\n// Local imports\nimport { createReducer } from \"../utils\";\n\n// Models\nimport { i18nRecord } from \"../models/i18n\";\nimport { tokenRecord, stateRecord } from \"../models/auth\";\n\n// Actions\nimport {\n LOGIN_USER_REQUEST,\n LOGIN_USER_SUCCESS,\n LOGIN_USER_FAILURE,\n LOGIN_USER_EXPIRED,\n LOGOUT_USER } from \"../actions\";\n\n\n/**\n * Initial state, load data from cookies if set\n */\nvar initialState = new stateRecord();\n// Get token\nconst initialToken = Cookies.getJSON(\"token\");\nif (initialToken) {\n initialToken.expires = new Date(initialToken.expires);\n initialState = initialState.set(\n \"token\",\n new tokenRecord({ token: initialToken.token, expires: new Date(initialToken.expires) })\n );\n}\n// Get username\nconst initialUsername = Cookies.get(\"username\");\nif (initialUsername) {\n initialState = initialState.set(\n \"username\",\n initialUsername\n );\n}\n// Get endpoint\nconst initialEndpoint = Cookies.get(\"endpoint\");\nif (initialEndpoint) {\n initialState = initialState.set(\n \"endpoint\",\n initialEndpoint\n );\n}\n// Set remember me\nif (initialUsername && initialEndpoint) {\n initialState = initialState.set(\n \"rememberMe\",\n true\n );\n}\n\n\n/**\n * Reducers\n */\nexport default createReducer(initialState, {\n [LOGIN_USER_REQUEST]: () => {\n return new stateRecord({\n isAuthenticating: true,\n info: new i18nRecord({\n id: \"app.login.connecting\",\n values: {},\n }),\n });\n },\n [LOGIN_USER_SUCCESS]: (state, payload) => {\n return new stateRecord({\n \"isAuthenticated\": true,\n \"token\": new tokenRecord(payload.token),\n \"username\": payload.username,\n \"endpoint\": payload.endpoint,\n \"rememberMe\": payload.rememberMe,\n \"info\": new i18nRecord({\n id: \"app.login.success\",\n values: {username: payload.username},\n }),\n \"timerID\": payload.timerID,\n });\n },\n [LOGIN_USER_FAILURE]: (state, payload) => {\n return new stateRecord({\n \"error\": payload.error,\n });\n },\n [LOGIN_USER_EXPIRED]: (state, payload) => {\n return new stateRecord({\n \"isAuthenticated\": false,\n \"error\": payload.error,\n });\n },\n [LOGOUT_USER]: () => {\n return new stateRecord({\n info: new i18nRecord({\n id: \"app.login.byebye\",\n values: {},\n }),\n });\n },\n});\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/reducers/auth.js\n **/","/**\n * This implements the global entities reducer.\n */\n\n// NPM imports\nimport Immutable from \"immutable\";\n\n// Local imports\nimport { createReducer } from \"../utils\";\n\n// Models\nimport { stateRecord } from \"../models/entities\";\n\n// Actions\nimport {\n API_REQUEST,\n API_FAILURE,\n PUSH_ENTITIES,\n INCREMENT_REFCOUNT,\n DECREMENT_REFCOUNT,\n INVALIDATE_STORE,\n} from \"../actions\";\n\n\n/**\n * Helper methods\n */\n\n/**\n * Update the reference counter for a given item.\n *\n * Do not do any garbage collection.\n *\n * @param state The state object to update.\n * @param keyPath The keyPath to update, from the refCount key.\n * @param incr The increment (or decrement) for the reference counter.\n *\n * @return An updated state.\n */\nfunction updateRefCount(state, keyPath, incr) {\n // Prepend refCounts to keyPath\n const refCountKeyPath = Array.concat([\"refCounts\"], keyPath);\n // Get updated value\n let newRefCount = state.getIn(refCountKeyPath) + incr;\n if (isNaN(newRefCount)) {\n // If NaN, reference does not exist, so set it to ±1\n newRefCount = Math.sign(incr);\n }\n // Update state\n return state.setIn(refCountKeyPath, newRefCount);\n}\n\n\n/**\n * Update the reference counter of a given entity, taking into account the\n * nested objects.\n *\n * Do not do any garbage collection.\n *\n * @param state The state object to update.\n * @param itemName The type of the entity object.\n * @param id The id of the entity.\n * @param entity The entity object, as Immutable.\n * @param incr The increment (or decrement) for the reference counter.\n *\n * @return An updated state.\n */\nfunction updateEntityRefCount(state, itemName, id, entity, incr) {\n let newState = state;\n let albums = null;\n let tracks = null;\n switch (itemName) {\n case \"artist\":\n // Update artist refCount\n newState = updateRefCount(newState, [\"artist\", id], incr);\n // Update nested albums refCount\n albums = entity.get(\"albums\");\n if (Immutable.List.isList(albums)) {\n albums.forEach(function (id) {\n newState = updateRefCount(newState, [\"album\", id], incr);\n });\n }\n // Update nested tracks refCount\n tracks = entity.get(\"songs\");\n if (Immutable.List.isList(tracks)) {\n tracks.forEach(function (id) {\n newState = updateRefCount(newState, [\"song\", id], incr);\n });\n }\n break;\n case \"album\":\n // Update album refCount\n newState = updateRefCount(newState, [\"album\", id], incr);\n // Update nested artist refCount\n newState = updateRefCount(newState, [\"artist\", entity.get(\"artist\")], incr);\n // Update nested tracks refCount\n tracks = entity.get(\"tracks\");\n if (Immutable.List.isList(tracks)) {\n tracks.forEach(function (id) {\n newState = updateRefCount(newState, [\"song\", id], incr);\n });\n }\n break;\n case \"song\":\n // Update track refCount\n newState = updateRefCount(newState, [\"song\", id], incr);\n // Update nested artist refCount\n newState = updateRefCount(newState, [\"artist\", entity.get(\"artist\")], incr);\n // Update nested album refCount\n newState = updateRefCount(newState, [\"album\", entity.get(\"album\")], incr);\n break;\n default:\n // Just update the entity, no nested entities\n newState = updateRefCount(newState, [itemName, id], incr);\n break;\n }\n return newState;\n}\n\n\n/**\n *\n */\nfunction garbageCollection(state) {\n let newState = state;\n state.refCounts.forEach(function (refCounts, itemName) {\n refCounts.forEach(function (refCount, id) {\n if (refCount < 1) {\n // Garbage collection\n newState = newState.deleteIn([\"entities\", itemName, id]);\n newState = newState.deleteIn([\"refCounts\", itemName, id]);\n }\n });\n });\n return newState;\n}\n\n\n/**\n * Initial state\n */\nvar initialState = new stateRecord();\n\n\n/**\n * Reducer\n */\nexport default createReducer(initialState, {\n [API_REQUEST]: (state) => {\n return (\n state\n .set(\"isFetching\", true)\n .set(\"error\", null)\n );\n },\n [API_FAILURE]: (state, payload) => {\n return (\n state\n .set(\"isFetching\", false)\n .set(\"error\", payload.error)\n );\n },\n [PUSH_ENTITIES]: (state, payload) => {\n let newState = state;\n\n // Unset error and isFetching\n newState = state.set(\"isFetching\", false).set(\"error\", payload.error);\n\n // Merge entities\n newState = newState.mergeDeepIn([\"entities\"], payload.entities);\n\n // Increment reference counter\n payload.refCountType.forEach(function (itemName) {\n const entities = payload.entities[itemName];\n for (let id in entities) {\n const entity = newState.getIn([\"entities\", itemName, id]);\n newState = updateEntityRefCount(newState, itemName, id, entity, 1);\n }\n });\n\n return newState;\n },\n [INCREMENT_REFCOUNT]: (state, payload) => {\n let newState = state;\n\n // Increment reference counter\n for (let itemName in payload.entities) {\n const entities = payload.entities[itemName];\n entities.forEach(function (id) {\n const entity = newState.getIn([\"entities\", itemName, id]);\n newState = updateEntityRefCount(newState, itemName, id, entity, 1);\n });\n }\n\n return newState;\n },\n [DECREMENT_REFCOUNT]: (state, payload) => {\n let newState = state;\n\n // Decrement reference counter\n for (let itemName in payload.entities) {\n const entities = payload.entities[itemName];\n entities.forEach(function (id) {\n const entity = newState.getIn([\"entities\", itemName, id]);\n newState = updateEntityRefCount(newState, itemName, id, entity, -1);\n });\n }\n\n // Perform garbage collection\n newState = garbageCollection(newState);\n\n return newState;\n },\n [INVALIDATE_STORE]: () => {\n return new stateRecord();\n },\n});\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/reducers/entities.js\n **/","/**\n *\n */\n\n// NPM imports\nimport { routerReducer as routing } from \"react-router-redux\";\nimport { combineReducers } from \"redux\";\n\n// Import all the available reducers\nimport auth from \"./auth\";\nimport entities from \"./entities\";\nimport paginatedMaker from \"./paginated\";\nimport webplayer from \"./webplayer\";\n\n// Actions\nimport * as ActionTypes from \"../actions\";\n\n// Build paginated reducer\nconst paginated = paginatedMaker([\n ActionTypes.API_REQUEST,\n ActionTypes.API_SUCCESS,\n ActionTypes.API_FAILURE,\n]);\n\n// Export the combined reducers\nexport default combineReducers({\n routing,\n auth,\n entities,\n paginated,\n webplayer,\n});\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/reducers/index.js\n **/","/**\n * This implements a wrapper to create reducers for paginated content.\n */\n\n// NPM imports\nimport Immutable from \"immutable\";\n\n// Local imports\nimport { createReducer } from \"../utils\";\n\n// Models\nimport { stateRecord } from \"../models/paginated\";\n\n// Actions\nimport { CLEAR_PAGINATED_RESULTS, INVALIDATE_STORE } from \"../actions\";\n\n\n/** Initial state of the reducer */\nconst initialState = new stateRecord();\n\n\n/**\n * Creates a reducer managing pagination, given the action types to handle.\n */\nexport default function paginated(types) {\n // Check parameters\n if (!Array.isArray(types) || types.length !== 3) {\n throw new Error(\"Expected types to be an array of three elements.\");\n }\n if (!types.every(t => typeof t === \"string\")) {\n throw new Error(\"Expected types to be strings.\");\n }\n\n const [ requestType, successType, failureType ] = types;\n\n // Create reducer\n return createReducer(initialState, {\n [requestType]: (state) => {\n return state;\n },\n [successType]: (state, payload) => {\n return (\n state\n .set(\"type\", payload.type)\n .set(\"result\", Immutable.fromJS(payload.result))\n .set(\"nPages\", payload.nPages)\n .set(\"currentPage\", payload.currentPage)\n );\n },\n [failureType]: (state) => {\n return state;\n },\n [CLEAR_PAGINATED_RESULTS]: (state) => {\n return state.set(\"result\", new Immutable.List());\n },\n [INVALIDATE_STORE]: () => {\n // Reset state on invalidation\n return new stateRecord();\n },\n });\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/reducers/paginated.js\n **/","/**\n * This implements the webplayer reducers.\n */\n\n// NPM imports\nimport Immutable from \"immutable\";\n\n// Local imports\nimport { createReducer } from \"../utils\";\n\n// Models\nimport { stateRecord } from \"../models/webplayer\";\n\n// Actions\nimport {\n PLAY_PAUSE,\n STOP_PLAYBACK,\n SET_PLAYLIST,\n PUSH_SONG,\n POP_SONG,\n JUMP_TO_SONG,\n PLAY_PREVIOUS_SONG,\n PLAY_NEXT_SONG,\n TOGGLE_RANDOM,\n TOGGLE_REPEAT,\n TOGGLE_MUTE,\n SET_VOLUME,\n INVALIDATE_STORE } from \"../actions\";\n\n\n/**\n * Initial state\n */\n\nvar initialState = new stateRecord();\n\n\n/**\n * Helper functions\n */\n\n/**\n * Stop playback in reducer helper.\n *\n * @param state Current state to update.\n */\nfunction stopPlayback(state) {\n return (\n state\n .set(\"isPlaying\", false)\n .set(\"currentIndex\", 0)\n .set(\"playlist\", new Immutable.List())\n );\n}\n\n\n/**\n * Reducers\n */\n\nexport default createReducer(initialState, {\n [PLAY_PAUSE]: (state, payload) => {\n // Force play or pause\n return state.set(\"isPlaying\", payload.isPlaying);\n },\n [STOP_PLAYBACK]: (state) => {\n // Clear the playlist\n return stopPlayback(state);\n },\n [SET_PLAYLIST]: (state, payload) => {\n // Set current playlist, reset playlist index\n return (\n state\n .set(\"playlist\", new Immutable.List(payload.playlist))\n .set(\"currentIndex\", 0)\n );\n },\n [PUSH_SONG]: (state, payload) => {\n // Push song to playlist\n let newState = state;\n if (payload.index) {\n // If index is specified, insert it at this position\n newState = newState.set(\n \"playlist\",\n newState.get(\"playlist\").insert(payload.index, payload.song)\n );\n if (payload.index <= newState.get(\"currentIndex\")) { // \"<=\" because insertion is made before\n // If we insert before the current position in the playlist, we\n // update the current position to keep the currently played\n // music\n newState = newState.set(\n \"currentIndex\",\n Math.min(newState.get(\"currentIndex\") + 1, newState.get(\"playlist\").size)\n );\n }\n } else {\n // Else, push at the end of the playlist\n newState = newState.set(\n \"playlist\",\n newState.get(\"playlist\").push(payload.song)\n );\n }\n return newState;\n },\n [POP_SONG]: (state, payload) => {\n // Pop song from playlist\n let newState = state.deleteIn([\"playlist\", payload.index]);\n if (payload.index < state.get(\"currentIndex\")) {\n // If we delete before the current position in the playlist, we\n // update the current position to keep the currently played\n // music\n newState = newState.set(\n \"currentIndex\",\n Math.max(newState.get(\"currentIndex\") - 1, 0)\n );\n }\n return newState;\n },\n [JUMP_TO_SONG]: (state, payload) => {\n // Set current index\n const newCurrentIndex = state.get(\"playlist\").findKey(x => x == payload.song);\n return state.set(\"currentIndex\", newCurrentIndex);\n },\n [PLAY_PREVIOUS_SONG]: (state) => {\n const newIndex = state.get(\"currentIndex\") - 1;\n if (newIndex < 0) {\n // If there is an overlow on the left of the playlist, just play\n // first music again\n // TODO: Should seek to beginning of music\n return state;\n } else {\n return state.set(\"currentIndex\", newIndex);\n }\n },\n [PLAY_NEXT_SONG]: (state) => {\n const newIndex = state.get(\"currentIndex\") + 1;\n if (newIndex >= state.get(\"playlist\").size) {\n // If there is an overflow\n if (state.get(\"isRepeat\")) {\n // TODO: Handle repeat\n return state;\n } else {\n // Just stop playback\n return state.set(\"isPlaying\", false);\n }\n } else {\n // Else, play next item\n return state.set(\"currentIndex\", newIndex);\n }\n },\n [TOGGLE_RANDOM]: (state) => {\n return state.set(\"isRandom\", !state.get(\"isRandom\"));\n },\n [TOGGLE_REPEAT]: (state) => {\n return state.set(\"isRepeat\", !state.get(\"isRepeat\"));\n },\n [TOGGLE_MUTE]: (state) => {\n return state.set(\"isMute\", !state.get(\"isMute\"));\n },\n [SET_VOLUME]: (state, payload) => {\n return state.set(\"volume\", payload.volume);\n },\n [INVALIDATE_STORE]: () => {\n return new stateRecord();\n },\n});\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/reducers/webplayer.js\n **/","/**\n * Routes for the React app.\n */\nimport React from \"react\";\nimport { IndexRoute, Route } from \"react-router\";\n\nimport RequireAuthentication from \"./containers/RequireAuthentication\";\nimport App from \"./containers/App\";\nimport SimpleLayout from \"./components/layouts/Simple\";\nimport SidebarLayout from \"./components/layouts/Sidebar\";\nimport ArtistPage from \"./views/ArtistPage\";\nimport ArtistsPage from \"./views/ArtistsPage\";\nimport AlbumPage from \"./views/AlbumPage\";\nimport AlbumsPage from \"./views/AlbumsPage\";\nimport BrowsePage from \"./views/BrowsePage\";\nimport DiscoverPage from \"./views/DiscoverPage\";\nimport HomePage from \"./views/HomePage\";\nimport LoginPage from \"./views/LoginPage\";\nimport LogoutPage from \"./views/LogoutPage\";\nimport PlaylistPage from \"./views/PlaylistPage\";\nimport SongsPage from \"./views/SongsPage\";\n\nexport default (\n
// Main container is App\n // Login is a SimpleLayout\n \n \n // All the rest is a SidebarLayout\n \n // And some pages require authentication\n \n \n \n \n \n \n \n \n \n \n \n \n);\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/routes.js\n **/","/**\n * Store configuration\n */\nif (process.env.NODE_ENV === \"production\") {\n module.exports = require(\"./configureStore.production.js\");\n} else {\n module.exports = require(\"./configureStore.development.js\");\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/store/configureStore.js\n **/","import { createStore, applyMiddleware } from \"redux\";\nimport { hashHistory } from \"react-router\";\nimport { routerMiddleware } from \"react-router-redux\";\nimport thunkMiddleware from \"redux-thunk\";\n\nimport rootReducer from \"../reducers\";\nimport apiMiddleware from \"../middleware/api\";\n\n// Use history\nconst historyMiddleware = routerMiddleware(hashHistory);\n\nexport default function configureStore(preloadedState) {\n return createStore(\n rootReducer,\n preloadedState,\n applyMiddleware(thunkMiddleware, apiMiddleware, historyMiddleware)\n );\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/store/configureStore.production.js\n **/","/**\n * Collection of helper function that are Ampache specific.\n */\n\n// NPM imports\nimport jsSHA from \"jssha\";\n\n\n/**\n * Build an HMAC token for authentication against Ampache API.\n *\n * @param password User password to derive HMAC from.\n * @return An object with the generated HMAC and time used.\n *\n * @remark This builds an HMAC as expected by Ampache API, which is not a\n * standard HMAC.\n */\nexport function buildHMAC(password) {\n const time = Math.floor(Date.now() / 1000);\n\n let shaObj = new jsSHA(\"SHA-256\", \"TEXT\");\n shaObj.update(password);\n const key = shaObj.getHash(\"HEX\");\n\n shaObj = new jsSHA(\"SHA-256\", \"TEXT\");\n shaObj.update(time + key);\n\n return {\n time: time,\n passphrase: shaObj.getHash(\"HEX\"),\n };\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/utils/ampache.js\n **/","/**\n * Collection of helper function to act on Immutable objects.\n */\n\n\n/**\n * Diff two immutables objects supporting the filter method.\n *\n * @param a First Immutable object.\n * @param b Second Immutable object.\n * @returns An Immutable object equal to a except for the items in b.\n */\nexport function immutableDiff(a, b) {\n return a.filter(function (i) {\n return b.indexOf(i) < 0;\n });\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/utils/immutable.js\n **/","/**\n * Collection of helper functions to deal with localization.\n */\nimport { i18nRecord } from \"../models/i18n\";\n\n/**\n * Get the preferred locales from the browser, as an array sorted by preferences.\n */\nexport function getBrowserLocales() {\n let langs = [];\n\n if (navigator.languages) {\n // Chrome does not currently set navigator.language correctly\n // https://code.google.com/p/chromium/issues/detail?id=101138\n // but it does set the first element of navigator.languages correctly\n langs = navigator.languages;\n } else if (navigator.userLanguage) {\n // IE only\n langs = [navigator.userLanguage];\n } else {\n // as of this writing the latest version of firefox + safari set this correctly\n langs = [navigator.language];\n }\n\n // Some browsers does not return uppercase for second part\n let locales = langs.map(function (lang) {\n let locale = lang.split(\"-\");\n return locale[1] ? `${locale[0]}-${locale[1].toUpperCase()}` : lang;\n });\n\n return locales;\n}\n\n\n/**\n * Convert an array of messagesDescriptors to a map.\n */\nexport function messagesMap(messagesDescriptorsArray) {\n let messagesDescriptorsMap = {};\n\n messagesDescriptorsArray.forEach(function (item) {\n messagesDescriptorsMap[item.id] = item;\n });\n\n return messagesDescriptorsMap;\n}\n\n\n/**\n * Format an error message from the state.\n *\n * Error message can be either an i18nRecord, which is to be formatted, or a\n * raw string. This function performs the check and returns the correctly\n * formatted string.\n *\n * @param errorMessage The error message from the state, either plain\n * string or i18nRecord.\n * @param formatMessage react-i18n formatMessage.\n * @param messages List of messages to use for formatting.\n *\n * @return A string for the error.\n */\nexport function handleErrorI18nObject(errorMessage, formatMessage, messages) {\n if (errorMessage instanceof i18nRecord) {\n // If it is an object, format it and return it\n return formatMessage(messages[errorMessage.id], errorMessage.values);\n }\n // Else, it's a string, just return it\n return errorMessage;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/utils/locale.js\n **/","/**\n * Miscellaneous helper functions.\n */\n\n\n/**\n * Strict int checking function.\n *\n * @param value The value to check for int.\n * @return Either NaN if the string was not a valid int representation, or the\n * int.\n */\nexport function filterInt(value) {\n if (/^(\\-|\\+)?([0-9]+|Infinity)$/.test(value)) {\n return Number(value);\n }\n return NaN;\n}\n\n\n/**\n * Helper to format song length.\n *\n * @param time Length of the song in seconds.\n * @return Formatted length as MM:SS.\n */\nexport function formatLength(time) {\n const min = Math.floor(time / 60);\n let sec = (time - 60 * min);\n if (sec < 10) {\n sec = \"0\" + sec;\n }\n return min + \":\" + sec;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/utils/misc.js\n **/","/**\n * Collection of helper functions to deal with pagination.\n */\n\n\n/**\n * Helper function to build a pagination object to pass down the component tree.\n *\n * @param location react-router location props.\n * @param currentPage Number of the current page.\n * @param nPages Total number of pages.\n * @param goToPageAction Action to dispatch to go to a specific page.\n *\n * @return An object containing all the props for the Pagination component.\n */\nexport function buildPaginationObject(location, currentPage, nPages, goToPageAction) {\n const buildLinkToPage = function (pageNumber) {\n return {\n pathname: location.pathname,\n query: Object.assign({}, location.query, { page: pageNumber }),\n };\n };\n return {\n currentPage: currentPage,\n nPages: nPages,\n goToPage: pageNumber => goToPageAction(buildLinkToPage(pageNumber)),\n buildLinkToPage: buildLinkToPage,\n };\n}\n\n\n/**\n * Helper function to compute the buttons to display.\n *\n * Taken from http://stackoverflow.com/a/8608998/2626416\n *\n * @param currentPage Number of the current page.\n * @param nPages Total number of pages.\n * @param maxNumberPagesShown Maximum number of pages button to show.\n *\n * @return An object containing lower limit and upper limit bounds.\n */\nexport function computePaginationBounds(currentPage, nPages, maxNumberPagesShown=5) {\n let lowerLimit = currentPage;\n let upperLimit = currentPage;\n\n for (let b = 1; b < maxNumberPagesShown && b < nPages;) {\n if (lowerLimit > 1 ) {\n lowerLimit--;\n b++;\n }\n if (b < maxNumberPagesShown && upperLimit < nPages) {\n upperLimit++;\n b++;\n }\n }\n\n return {\n lowerLimit: lowerLimit,\n upperLimit: upperLimit + 1, // +1 to ease iteration in for with <\n };\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/utils/pagination.js\n **/","/**\n * Collection of helper functions to deal with reducers.\n */\n\n\n/**\n * Utility function to create a reducer.\n *\n * @param initialState Initial state of the reducer.\n * @param reducerMap Map between action types and reducing functions.\n *\n * @return A reducer.\n */\nexport function createReducer(initialState, reducerMap) {\n return (state = initialState, action) => {\n const reducer = reducerMap[action.type];\n\n return reducer\n ? reducer(state, action.payload)\n : state;\n };\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/utils/reducers.js\n **/","/**\n * Collection of helper functions to deal with URLs.\n */\n\n\n/**\n * Assemble a base URL and its GET parameters.\n *\n * @param endpoint Base URL.\n * @param params An object of GET params and their values.\n *\n * @return A string with the full URL with GET params.\n */\nexport function assembleURLAndParams(endpoint, params) {\n let url = endpoint + \"?\";\n Object.keys(params).forEach(\n key => {\n if (Array.isArray(params[key])) {\n params[key].forEach(value => url += key + \"[]=\" + value + \"&\");\n } else {\n url += key + \"=\" + params[key] + \"&\";\n }\n }\n );\n return url.rstrip(\"&\");\n}\n\n\n/**\n * Clean an endpoint URL.\n *\n * Adds the protocol prefix if not specified, remove trailing slash\n *\n * @param An URL\n * @return The cleaned URL\n */\nexport function cleanURL(endpoint) {\n if (\n !endpoint.startsWith(\"//\") &&\n !endpoint.startsWith(\"http://\") &&\n !endpoint.startsWith(\"https://\"))\n {\n // Handle endpoints of the form \"ampache.example.com\"\n // Append same protocol as currently in use, to avoid mixed content.\n endpoint = window.location.protocol + \"//\" + endpoint;\n }\n\n // Remove trailing slash\n endpoint = endpoint.replace(/\\/$/, \"\");\n\n return endpoint;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/utils/url.js\n **/","import React, { Component } from \"react\";\nimport { bindActionCreators } from \"redux\";\nimport { connect } from \"react-redux\";\nimport Immutable from \"immutable\";\n\nimport * as actionCreators from \"../actions\";\n\nimport Album from \"../components/Album\";\n\n// TODO: AlbumPage should be scrolled ArtistPage\n\nexport class AlbumPage extends Component {\n componentWillMount() {\n // Load the data\n this.props.actions.loadAlbums({\n pageNumber: 1,\n filter: this.props.params.id,\n include: [\"songs\"],\n });\n }\n\n render() {\n if (this.props.album) {\n return (\n
\n );\n }\n return (\n
\n ); // TODO: Loading + error\n }\n}\n\nconst mapStateToProps = (state, ownProps) => {\n const albums = state.api.entities.get(\"album\");\n let album = undefined;\n let songs = new Immutable.List();\n if (albums) {\n // Get artist\n album = albums.find(\n item => item.get(\"id\") == ownProps.params.id\n );\n // Get songs\n const tracks = album.get(\"tracks\");\n if (Immutable.List.isList(tracks)) {\n songs = new Immutable.List(\n tracks.map(\n id => state.api.entities.getIn([\"track\", id])\n )\n );\n }\n }\n return {\n album: album,\n songs: songs,\n };\n};\n\nconst mapDispatchToProps = (dispatch) => ({\n actions: bindActionCreators(actionCreators, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(AlbumPage);\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/views/AlbumPage.jsx\n **/","// NPM imports\nimport React, { Component } from \"react\";\nimport { bindActionCreators } from \"redux\";\nimport { connect } from \"react-redux\";\nimport { defineMessages, injectIntl, intlShape } from \"react-intl\";\nimport Immutable from \"immutable\";\n\n// Local imports\nimport { buildPaginationObject, messagesMap, handleErrorI18nObject } from \"../utils\";\n\n// Actions\nimport * as actionCreators from \"../actions\";\n\n// Components\nimport Albums from \"../components/Albums\";\n\n// Translations\nimport APIMessages from \"../locales/messagesDescriptors/api\";\n\n// Define translations\nconst albumsMessages = defineMessages(messagesMap(Array.concat([], APIMessages)));\n\n\n/**\n * Albums page, grid layout of albums arts.\n */\nclass AlbumsPageIntl extends Component {\n componentWillMount() {\n // Load the data for current page\n const currentPage = parseInt(this.props.location.query.page) || 1;\n this.props.actions.loadPaginatedAlbums({ pageNumber: currentPage });\n }\n\n componentWillReceiveProps(nextProps) {\n // Load the data if page has changed\n const currentPage = parseInt(this.props.location.query.page) || 1;\n const nextPage = parseInt(nextProps.location.query.page) || 1;\n if (currentPage != nextPage) {\n // Unload data on page change\n this.props.actions.clearPaginatedResults();\n // Load new data\n this.props.actions.loadAlbums({pageNumber: nextPage});\n }\n }\n\n componentWillUnmount() {\n // Unload data on page change\n this.props.actions.clearPaginatedResults();\n }\n\n render() {\n const {formatMessage} = this.props.intl;\n\n const pagination = buildPaginationObject(this.props.location, this.props.currentPage, this.props.nPages, this.props.actions.goToPage);\n\n const error = handleErrorI18nObject(this.props.error, formatMessage, albumsMessages);\n\n return (\n
\n );\n }\n}\n\nAlbumsPageIntl.propTypes = {\n intl: intlShape.isRequired,\n};\n\nconst mapStateToProps = (state) => {\n let albumsList = new Immutable.List();\n if (state.paginated.type == \"album\" && state.paginated.result.size > 0) {\n albumsList = state.paginated.result.map(\n id => state.entities.getIn([\"entities\", \"album\", id])\n );\n }\n return {\n isFetching: state.entities.isFetching,\n error: state.entities.error,\n albumsList: albumsList,\n currentPage: state.paginated.currentPage,\n nPages: state.paginated.nPages,\n };\n};\n\nconst mapDispatchToProps = (dispatch) => ({\n actions: bindActionCreators(actionCreators, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(injectIntl(AlbumsPageIntl));\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/views/AlbumsPage.jsx\n **/","// NPM imports\nimport React, { Component } from \"react\";\nimport { bindActionCreators } from \"redux\";\nimport { connect } from \"react-redux\";\nimport { defineMessages, injectIntl, intlShape } from \"react-intl\";\nimport Immutable from \"immutable\";\n\n// Local imports\nimport { messagesMap, handleErrorI18nObject } from \"../utils\";\n\n// Actions\nimport * as actionCreators from \"../actions\";\n\n// Components\nimport Artist from \"../components/Artist\";\n\n// Translations\nimport APIMessages from \"../locales/messagesDescriptors/api\";\n\n// Define translations\nconst artistMessages = defineMessages(messagesMap(Array.concat([], APIMessages)));\n\n\n/**\n * Single artist page.\n */\nclass ArtistPageIntl extends Component {\n componentWillMount() {\n // Load the data\n this.props.actions.loadArtist({\n filter: this.props.params.id,\n include: [\"albums\", \"songs\"],\n });\n }\n\n componentWillUnmount() {\n this.props.actions.decrementRefCount({\n \"artist\": [this.props.artist.get(\"id\")],\n });\n }\n\n render() {\n const {formatMessage} = this.props.intl;\n\n const error = handleErrorI18nObject(this.props.error, formatMessage, artistMessages);\n\n return (\n
\n );\n }\n}\n\nArtistPageIntl.propTypes = {\n intl: intlShape.isRequired,\n};\n\nconst mapStateToProps = (state, ownProps) => {\n // Get artist\n let artist = state.entities.getIn([\"entities\", \"artist\", ownProps.params.id]);\n let albums = new Immutable.List();\n let songs = new Immutable.Map();\n if (artist) {\n // Get albums\n let artistAlbums = artist.get(\"albums\");\n if (Immutable.List.isList(artistAlbums)) {\n albums = artistAlbums.map(\n id => state.entities.getIn([\"entities\", \"album\", id])\n );\n }\n // Get songs\n let artistSongs = artist.get(\"songs\");\n if (Immutable.List.isList(artistSongs)) {\n songs = state.entities.getIn([\"entities\", \"song\"]).filter(\n song => artistSongs.includes(song.get(\"id\"))\n );\n }\n } else {\n artist = new Immutable.Map();\n }\n return {\n isFetching: state.entities.isFetching,\n error: state.entities.error,\n artist: artist,\n albums: albums,\n songs: songs,\n };\n};\n\nconst mapDispatchToProps = (dispatch) => ({\n actions: bindActionCreators(actionCreators, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(injectIntl(ArtistPageIntl));\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/views/ArtistPage.jsx\n **/","// NPM imports\nimport React, { Component } from \"react\";\n\n// Other views\nimport ArtistsPage from \"./ArtistsPage\";\n\n\n/**\n * Browse page is an alias for artists page at the moment.\n */\nexport default class BrowsePage extends Component {\n render() {\n return (\n
\n );\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/views/BrowsePage.jsx\n **/","// NPM imports\nimport React, { Component } from \"react\";\n\n// Components\nimport Discover from \"../components/Discover\";\n\n/**\n * Discover page\n */\nexport default class DiscoverPage extends Component {\n render() {\n return (\n
\n );\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/views/DiscoverPage.jsx\n **/","// NPM imports\nimport React, { Component } from \"react\";\n\n// Other views\nimport ArtistsPage from \"./ArtistsPage\";\n\n/**\n * Homepage is an alias for Artists page at the moment.\n */\nexport default class HomePage extends Component {\n render() {\n return (\n
\n );\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/views/HomePage.jsx\n **/","// NPM imports\nimport React, { Component, PropTypes } from \"react\";\nimport { bindActionCreators } from \"redux\";\nimport { connect } from \"react-redux\";\n\n// Actions\nimport * as actionCreators from \"../actions\";\n\n// Components\nimport Login from \"../components/Login\";\n\n\n/**\n * Login page\n */\nexport class LoginPage extends Component {\n constructor(props) {\n super(props);\n\n // Bind this\n this.handleSubmit = this.handleSubmit.bind(this);\n this._getRedirectTo = this._getRedirectTo.bind(this);\n }\n\n /**\n * Get URL to redirect to based on location props.\n */\n _getRedirectTo() {\n let redirectPathname = \"/\";\n let redirectQuery = {};\n const { location } = this.props;\n if (location.state && location.state.nextPathname) {\n redirectPathname = location.state.nextPathname;\n }\n if (location.state && location.state.nextQuery) {\n redirectQuery = location.state.nextQuery;\n }\n return {\n pathname: redirectPathname,\n query: redirectQuery,\n };\n }\n\n componentWillMount() {\n // This checks if the user is already connected or not and redirects\n // them if it is the case.\n\n // Get next page to redirect to\n const redirectTo = this._getRedirectTo();\n\n if (this.props.isAuthenticated) {\n // If user is already authenticated, redirects them\n this.context.router.replace(redirectTo);\n } else if (this.props.rememberMe) {\n // Else if remember me is set, try to reconnect them\n this.props.actions.loginUser(\n this.props.username,\n this.props.token,\n this.props.endpoint,\n true,\n redirectTo,\n true\n );\n }\n }\n\n /**\n * Handle click on submit button.\n */\n handleSubmit(username, password, endpoint, rememberMe) {\n // Get page to redirect to\n const redirectTo = this._getRedirectTo();\n // Trigger login action\n this.props.actions.loginUser(username, password, endpoint, rememberMe, redirectTo);\n }\n\n render() {\n return (\n
\n );\n }\n}\n\nLoginPage.contextTypes = {\n router: PropTypes.object.isRequired,\n};\n\nconst mapStateToProps = (state) => ({\n username: state.auth.username,\n endpoint: state.auth.endpoint,\n rememberMe: state.auth.rememberMe,\n isAuthenticating: state.auth.isAuthenticating,\n isAuthenticated: state.auth.isAuthenticated,\n token: state.auth.token,\n error: state.auth.error,\n info: state.auth.info,\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n actions: bindActionCreators(actionCreators, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(LoginPage);\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/views/LoginPage.jsx\n **/","// NPM imports\nimport React, { Component } from \"react\";\nimport { bindActionCreators } from \"redux\";\nimport { connect } from \"react-redux\";\n\n// Actions\nimport * as actionCreators from \"../actions\";\n\n\n/**\n * Logout page\n */\nexport class LogoutPage extends Component {\n componentWillMount() {\n // Logout when component is mounted\n this.props.actions.logoutAndRedirect();\n }\n\n render() {\n return (\n
\n );\n }\n}\n\nconst mapDispatchToProps = (dispatch) => ({\n actions: bindActionCreators(actionCreators, dispatch),\n});\n\nexport default connect(null, mapDispatchToProps)(LogoutPage);\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/views/LogoutPage.jsx\n **/","// NPM imports\nimport React, { Component } from \"react\";\nimport { bindActionCreators } from \"redux\";\nimport { connect } from \"react-redux\";\nimport Immutable from \"immutable\";\n\n// Actions\nimport * as actionCreators from \"../actions\";\n\n// Components\nimport Playlist from \"../components/Playlist\";\n\n\n/**\n * Table of songs in the current playlist.\n */\nclass PlaylistPage extends Component {\n render() {\n return (\n
\n );\n }\n}\nconst mapStateToProps = (state) => {\n let songsList = new Immutable.List();\n if (state.webplayer.playlist.size > 0) {\n songsList = state.webplayer.playlist.map(function (id) {\n let song = state.entities.getIn([\"entities\", \"song\", id]);\n // Add artist and album infos to song\n const artist = state.entities.getIn([\"entities\", \"artist\", song.get(\"artist\")]);\n const album = state.entities.getIn([\"entities\", \"album\", song.get(\"album\")]);\n return (\n song\n .set(\"artist\", new Immutable.Map({id: artist.get(\"id\"), name: artist.get(\"name\")}))\n .set(\"album\", new Immutable.Map({id: album.get(\"id\"), name: album.get(\"name\")}))\n );\n });\n }\n return {\n songsList: songsList,\n currentIndex: state.webplayer.currentIndex,\n };\n};\nconst mapDispatchToProps = (dispatch) => ({\n actions: bindActionCreators(actionCreators, dispatch),\n});\nexport default connect(mapStateToProps, mapDispatchToProps)(PlaylistPage);\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/views/PlaylistPage.jsx\n **/","// NPM imports\nimport React, { Component } from \"react\";\nimport { bindActionCreators } from \"redux\";\nimport { connect } from \"react-redux\";\nimport { defineMessages, injectIntl, intlShape } from \"react-intl\";\nimport Immutable from \"immutable\";\n\n// Local imports\nimport { buildPaginationObject, messagesMap, handleErrorI18nObject } from \"../utils\";\n\n// Actions\nimport * as actionCreators from \"../actions\";\n\n// Components\nimport Songs from \"../components/Songs\";\n\n// Translations\nimport APIMessages from \"../locales/messagesDescriptors/api\";\n\n// Define translations\nconst songsMessages = defineMessages(messagesMap(Array.concat([], APIMessages)));\n\n\n/**\n * Paginated table of available songs\n */\nclass SongsPageIntl extends Component {\n componentWillMount() {\n // Load the data for current page\n const currentPage = parseInt(this.props.location.query.page) || 1;\n this.props.actions.loadPaginatedSongs({pageNumber: currentPage});\n }\n\n componentWillReceiveProps(nextProps) {\n // Load the data if page has changed\n const currentPage = parseInt(this.props.location.query.page) || 1;\n const nextPage = parseInt(nextProps.location.query.page) || 1;\n if (currentPage != nextPage) {\n // Unload data on page change\n this.props.actions.clearPaginatedResults();\n // Load new data\n this.props.actions.loadPaginatedSongs({pageNumber: nextPage});\n }\n }\n\n componentWillUnmount() {\n // Unload data on page change\n this.props.actions.clearPaginatedResults();\n }\n\n render() {\n const {formatMessage} = this.props.intl;\n\n const pagination = buildPaginationObject(this.props.location, this.props.currentPage, this.props.nPages, this.props.actions.goToPage);\n\n const error = handleErrorI18nObject(this.props.error, formatMessage, songsMessages);\n\n return (\n
\n );\n }\n}\n\nSongsPageIntl.propTypes = {\n intl: intlShape.isRequired,\n};\n\nconst mapStateToProps = (state) => {\n let songsList = new Immutable.List();\n if (state.paginated.type == \"song\" && state.paginated.result.size > 0) {\n songsList = state.paginated.result.map(function (id) {\n let song = state.entities.getIn([\"entities\", \"song\", id]);\n // Add artist and album infos to song\n const artist = state.entities.getIn([\"entities\", \"artist\", song.get(\"artist\")]);\n const album = state.entities.getIn([\"entities\", \"album\", song.get(\"album\")]);\n return (\n song\n .set(\"artist\", new Immutable.Map({id: artist.get(\"id\"), name: artist.get(\"name\")}))\n .set(\"album\", new Immutable.Map({id: album.get(\"id\"), name: album.get(\"name\")}))\n );\n });\n }\n return {\n isFetching: state.entities.isFetching,\n error: state.entities.error,\n songsList: songsList,\n currentPage: state.paginated.currentPage,\n nPages: state.paginated.nPages,\n };\n};\n\nconst mapDispatchToProps = (dispatch) => ({\n actions: bindActionCreators(actionCreators, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(injectIntl(SongsPageIntl));\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/views/SongsPage.jsx\n **/","// NPM imports\nimport React, { Component, PropTypes } from \"react\";\nimport { bindActionCreators } from \"redux\";\nimport { connect } from \"react-redux\";\nimport { Howl } from \"howler\";\n\n// Actions\nimport * as actionCreators from \"../actions\";\n\n// Components\nimport WebPlayerComponent from \"../components/elements/WebPlayer\";\n\n\n/**\n * Webplayer container.\n */\nclass WebPlayer extends Component {\n constructor(props) {\n super(props);\n\n // Data attributes\n this.howl = null;\n\n // Bind this\n this.startPlaying = this.startPlaying.bind(this);\n this.stopPlaying = this.stopPlaying.bind(this);\n this.isPlaying = this.isPlaying.bind(this);\n }\n\n componentDidMount() {\n // Start playback upon component mount\n this.startPlaying(this.props);\n }\n\n componentWillUpdate(nextProps) {\n // Handle stop\n if (\n // No current song in updated props\n !nextProps.currentSong ||\n // No playlist in updated props\n nextProps.playlist.size < 1 ||\n // Song played is not the song currently played\n (this.props.currentSong && nextProps.currentSong.get(\"id\") != this.props.currentSong.get(\"id\"))\n ) {\n if (this.howl) {\n this.stopPlaying();\n }\n }\n\n // Toggle play / pause\n if (\n // This check ensure we do not start playing multiple times the\n // same song\n (nextProps.isPlaying != this.props.isPlaying) ||\n // Or we should be playing but there is no howl object playing\n (nextProps.isPlaying && !this.isPlaying())\n ) {\n this.startPlaying(nextProps);\n }\n\n // If something is playing back\n if (this.howl) {\n // Set mute / unmute\n this.howl.mute(nextProps.isMute);\n // Set volume\n this.howl.volume(nextProps.volume / 100);\n }\n }\n\n /**\n * Handle playback through Howler and Web Audio API.\n *\n * @params props A set of props to use for setting play parameters.\n */\n startPlaying(props) {\n if (props.isPlaying && props.currentSong) {\n // If it should be playing any song\n // Build a new Howler object with current song to play\n const url = props.currentSong.get(\"url\");\n this.howl = new Howl({\n src: [url],\n html5: true, // Use HTML5 by default to allow streaming\n mute: props.isMute,\n volume: props.volume / 100, // Set current volume\n autoplay: false, // No autoplay, we handle it manually\n onend: () => props.actions.playNextSong(), // Play next song at the end\n });\n // Start playing\n this.howl.play();\n }\n else {\n // If it should not be playing\n if (this.howl) {\n // Pause any running music\n this.howl.pause();\n }\n }\n }\n\n /**\n * Stop playback through Howler and Web Audio API.\n */\n stopPlaying() {\n // Stop music playback\n this.howl.stop();\n // Reset howl object\n this.howl = null;\n }\n\n /**\n * Check whether some music is currently playing or not.\n *\n * @return True / False whether music is playing.\n */\n isPlaying() {\n if (this.howl) {\n return this.howl.playing();\n }\n return false;\n }\n\n render() {\n const webplayerProps = {\n isPlaying: this.props.isPlaying,\n isRandom: this.props.isRandom,\n isRepeat: this.props.isRepeat,\n isMute: this.props.isMute,\n volume: this.props.volume,\n currentIndex: this.props.currentIndex,\n playlist: this.props.playlist,\n currentSong: this.props.currentSong,\n currentArtist: this.props.currentArtist,\n // Use a lambda to ensure no first argument is passed to\n // togglePlaying\n onPlayPause: (() => this.props.actions.togglePlaying()),\n onPrev: this.props.actions.playPreviousSong,\n onSkip: this.props.actions.playNextSong,\n onRandom: this.props.actions.toggleRandom,\n onRepeat: this.props.actions.toggleRepeat,\n onMute: this.props.actions.toggleMute,\n isPlaylistViewActive: (\n (this.props.location && this.props.location.pathname == \"/playlist\")\n ? true\n : false\n ),\n };\n return (\n (this.props.playlist.size > 0)\n ?
\n :
\n );\n }\n}\nWebPlayer.propTypes = {\n location: PropTypes.object,\n};\nconst mapStateToProps = (state) => {\n const currentIndex = state.webplayer.currentIndex;\n const playlist = state.webplayer.playlist;\n\n // Get current song and artist from entities store\n const currentSong = state.entities.getIn([\"entities\", \"song\", playlist.get(currentIndex)]);\n let currentArtist = undefined;\n if (currentSong) {\n currentArtist = state.entities.getIn([\"entities\", \"artist\", currentSong.get(\"artist\")]);\n }\n return {\n isPlaying: state.webplayer.isPlaying,\n isRandom: state.webplayer.isRandom,\n isRepeat: state.webplayer.isRepeat,\n isMute: state.webplayer.isMute,\n volume: state.webplayer.volume,\n currentIndex: currentIndex,\n playlist: playlist,\n currentSong: currentSong,\n currentArtist: currentArtist,\n };\n};\nconst mapDispatchToProps = (dispatch) => ({\n actions: bindActionCreators(actionCreators, dispatch),\n});\nexport default connect(mapStateToProps, mapDispatchToProps)(WebPlayer);\n\n\n\n/** WEBPACK FOOTER **\n ** ./app/views/WebPlayer.jsx\n **/","/**\n * Main JS entry point for all the builds.\n *\n * Performs i18n and initial render.\n */\n// React stuff\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { applyRouterMiddleware, hashHistory } from \"react-router\";\nimport { syncHistoryWithStore } from \"react-router-redux\";\nimport useScroll from \"react-router-scroll\";\n\n// Store\nimport configureStore from \"./app/store/configureStore\";\n\n// i18n stuff\nimport { addLocaleData } from \"react-intl\";\nimport en from \"react-intl/locale-data/en\";\nimport fr from \"react-intl/locale-data/fr\";\n\nimport { getBrowserLocales } from \"./app/utils\";\nimport rawMessages from \"./app/locales\";\n\n// Init store and history\nconst store = configureStore();\nconst history = syncHistoryWithStore(hashHistory, store);\n\n// Get root element\nexport const rootElement = document.getElementById(\"root\");\n\n/**\n * Main function to be called once window.Intl has been populated.\n *\n * Populates the locales messages and perform render.\n */\nexport function onWindowIntl () {\n // Add locales we support\n addLocaleData([...en, ...fr]);\n\n // Fetch current preferred locales from the browser\n const locales = getBrowserLocales();\n\n var locale = \"en-US\"; // Safe default\n // Populate strings with best matching locale\n var strings = {};\n for (var i = 0; i < locales.length; ++i) {\n if (rawMessages[locales[i]]) {\n locale = locales[i];\n strings = rawMessages[locale];\n break; // Break at first matching locale\n }\n }\n // Overload strings with default English translation, in case of missing translations\n strings = Object.assign(rawMessages[\"en-US\"], strings);\n\n // Dynamically set html lang attribute\n document.documentElement.lang = locale;\n\n // Return a rendering function\n return () => {\n const Root = require(\"./app/containers/Root\").default;\n ReactDOM.render(\n
,\n rootElement\n );\n };\n};\n\n/**\n * Ensure window.Intl exists, or polyfill it.\n *\n * @param render Initial rendering function.\n */\nexport function Intl (render) {\n if (!window.Intl) {\n require.ensure([\n \"intl\",\n \"intl/locale-data/jsonp/en.js\",\n \"intl/locale-data/jsonp/fr.js\"\n ], function (require) {\n require(\"intl\");\n require(\"intl/locale-data/jsonp/en.js\");\n require(\"intl/locale-data/jsonp/fr.js\");\n render();\n });\n } else {\n render();\n }\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./index.all.js\n **/","/**\n * This is the main JS entry point.\n * It loads either the production or the development index file, based on the\n * environment variables in use.\n */\nif (process.env.NODE_ENV === \"production\") {\n module.exports = require(\"./index.production.js\");\n} else {\n module.exports = require(\"./index.development.js\");\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./index.js\n **/","/**\n * This is the main JS entry point in production builds.\n */\n\n// Load the common index\nconst index = require(\"./index.all.js\");\n\n// Get the rendering function\nconst render = index.onWindowIntl();\n\n// Perform i18n and render\nindex.Intl(render);\n\n\n\n/** WEBPACK FOOTER **\n ** ./index.production.js\n **/","\"use strict\";\n\nrequire(\"core-js/shim\");\n\nrequire(\"regenerator-runtime/runtime\");\n\nrequire(\"core-js/fn/regexp/escape\");\n\n/* eslint max-len: 0 */\n\nif (global._babelPolyfill) {\n throw new Error(\"only one instance of babel-polyfill is allowed\");\n}\nglobal._babelPolyfill = true;\n\n// Should be removed in the next major release:\n\nvar DEFINE_PROPERTY = \"defineProperty\";\nfunction define(O, key, value) {\n O[key] || Object[DEFINE_PROPERTY](O, key, {\n writable: true,\n configurable: true,\n value: value\n });\n}\n\ndefine(String.prototype, \"padLeft\", \"\".padStart);\ndefine(String.prototype, \"padRight\", \"\".padEnd);\n\n\"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill\".split(\",\").forEach(function (key) {\n [][key] && define(Array, key, Function.call.bind([][key]));\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/babel-polyfill/lib/index.js\n ** module id = 392\n ** module chunks = 0\n **/","require (\"/srv/http/ampache_react/node_modules/extract-text-webpack-plugin/loader.js?{\\\"omit\\\":1,\\\"extract\\\":true,\\\"remove\\\":true}!style!css!resolve-url!sass?sourceMap!./lib/bootstrap.styles.loader.js!./no-op.js\");\nrequire (\"./lib/bootstrap.scripts.loader.js!./no-op.js\");\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/bootstrap-loader/lib/bootstrap.loader.js!./~/bootstrap-loader/no-op.js\n ** module id = 393\n ** module chunks = 0\n **/","require (\"../bootstrap-sass/assets/javascripts/bootstrap/transition\");\nrequire (\"../bootstrap-sass/assets/javascripts/bootstrap/alert\");\nrequire (\"../bootstrap-sass/assets/javascripts/bootstrap/button\");\nrequire (\"../bootstrap-sass/assets/javascripts/bootstrap/carousel\");\nrequire (\"../bootstrap-sass/assets/javascripts/bootstrap/collapse\");\nrequire (\"../bootstrap-sass/assets/javascripts/bootstrap/dropdown\");\nrequire (\"../bootstrap-sass/assets/javascripts/bootstrap/modal\");\nrequire (\"../bootstrap-sass/assets/javascripts/bootstrap/tooltip\");\nrequire (\"../bootstrap-sass/assets/javascripts/bootstrap/popover\");\nrequire (\"../bootstrap-sass/assets/javascripts/bootstrap/scrollspy\");\nrequire (\"../bootstrap-sass/assets/javascripts/bootstrap/tab\");\nrequire (\"../bootstrap-sass/assets/javascripts/bootstrap/affix\");\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/bootstrap-loader/lib/bootstrap.scripts.loader.js!./~/bootstrap-loader/no-op.js\n ** module id = 394\n ** module chunks = 0\n **/","require('./lib/bootstrap.loader!./no-op.js');\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/bootstrap-loader/loader.js\n ** module id = 395\n ** module chunks = 0\n **/","/* ========================================================================\n * Bootstrap: affix.js v3.3.7\n * http://getbootstrap.com/javascript/#affix\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // AFFIX CLASS DEFINITION\n // ======================\n\n var Affix = function (element, options) {\n this.options = $.extend({}, Affix.DEFAULTS, options)\n\n this.$target = $(this.options.target)\n .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))\n\n this.$element = $(element)\n this.affixed = null\n this.unpin = null\n this.pinnedOffset = null\n\n this.checkPosition()\n }\n\n Affix.VERSION = '3.3.7'\n\n Affix.RESET = 'affix affix-top affix-bottom'\n\n Affix.DEFAULTS = {\n offset: 0,\n target: window\n }\n\n Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n var scrollTop = this.$target.scrollTop()\n var position = this.$element.offset()\n var targetHeight = this.$target.height()\n\n if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n if (this.affixed == 'bottom') {\n if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n }\n\n var initializing = this.affixed == null\n var colliderTop = initializing ? scrollTop : position.top\n var colliderHeight = initializing ? targetHeight : height\n\n if (offsetTop != null && scrollTop <= offsetTop) return 'top'\n if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n return false\n }\n\n Affix.prototype.getPinnedOffset = function () {\n if (this.pinnedOffset) return this.pinnedOffset\n this.$element.removeClass(Affix.RESET).addClass('affix')\n var scrollTop = this.$target.scrollTop()\n var position = this.$element.offset()\n return (this.pinnedOffset = position.top - scrollTop)\n }\n\n Affix.prototype.checkPositionWithEventLoop = function () {\n setTimeout($.proxy(this.checkPosition, this), 1)\n }\n\n Affix.prototype.checkPosition = function () {\n if (!this.$element.is(':visible')) return\n\n var height = this.$element.height()\n var offset = this.options.offset\n var offsetTop = offset.top\n var offsetBottom = offset.bottom\n var scrollHeight = Math.max($(document).height(), $(document.body).height())\n\n if (typeof offset != 'object') offsetBottom = offsetTop = offset\n if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)\n if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n if (this.affixed != affix) {\n if (this.unpin != null) this.$element.css('top', '')\n\n var affixType = 'affix' + (affix ? '-' + affix : '')\n var e = $.Event(affixType + '.bs.affix')\n\n this.$element.trigger(e)\n\n if (e.isDefaultPrevented()) return\n\n this.affixed = affix\n this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n this.$element\n .removeClass(Affix.RESET)\n .addClass(affixType)\n .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n }\n\n if (affix == 'bottom') {\n this.$element.offset({\n top: scrollHeight - height - offsetBottom\n })\n }\n }\n\n\n // AFFIX PLUGIN DEFINITION\n // =======================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.affix')\n var options = typeof option == 'object' && option\n\n if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.affix\n\n $.fn.affix = Plugin\n $.fn.affix.Constructor = Affix\n\n\n // AFFIX NO CONFLICT\n // =================\n\n $.fn.affix.noConflict = function () {\n $.fn.affix = old\n return this\n }\n\n\n // AFFIX DATA-API\n // ==============\n\n $(window).on('load', function () {\n $('[data-spy=\"affix\"]').each(function () {\n var $spy = $(this)\n var data = $spy.data()\n\n data.offset = data.offset || {}\n\n if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n if (data.offsetTop != null) data.offset.top = data.offsetTop\n\n Plugin.call($spy, data)\n })\n })\n\n}(jQuery);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/bootstrap-sass/assets/javascripts/bootstrap/affix.js\n ** module id = 396\n ** module chunks = 0\n **/","/* ========================================================================\n * Bootstrap: alert.js v3.3.7\n * http://getbootstrap.com/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // ALERT CLASS DEFINITION\n // ======================\n\n var dismiss = '[data-dismiss=\"alert\"]'\n var Alert = function (el) {\n $(el).on('click', dismiss, this.close)\n }\n\n Alert.VERSION = '3.3.7'\n\n Alert.TRANSITION_DURATION = 150\n\n Alert.prototype.close = function (e) {\n var $this = $(this)\n var selector = $this.attr('data-target')\n\n if (!selector) {\n selector = $this.attr('href')\n selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n }\n\n var $parent = $(selector === '#' ? [] : selector)\n\n if (e) e.preventDefault()\n\n if (!$parent.length) {\n $parent = $this.closest('.alert')\n }\n\n $parent.trigger(e = $.Event('close.bs.alert'))\n\n if (e.isDefaultPrevented()) return\n\n $parent.removeClass('in')\n\n function removeElement() {\n // detach from parent, fire event then clean up data\n $parent.detach().trigger('closed.bs.alert').remove()\n }\n\n $.support.transition && $parent.hasClass('fade') ?\n $parent\n .one('bsTransitionEnd', removeElement)\n .emulateTransitionEnd(Alert.TRANSITION_DURATION) :\n removeElement()\n }\n\n\n // ALERT PLUGIN DEFINITION\n // =======================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.alert')\n\n if (!data) $this.data('bs.alert', (data = new Alert(this)))\n if (typeof option == 'string') data[option].call($this)\n })\n }\n\n var old = $.fn.alert\n\n $.fn.alert = Plugin\n $.fn.alert.Constructor = Alert\n\n\n // ALERT NO CONFLICT\n // =================\n\n $.fn.alert.noConflict = function () {\n $.fn.alert = old\n return this\n }\n\n\n // ALERT DATA-API\n // ==============\n\n $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/bootstrap-sass/assets/javascripts/bootstrap/alert.js\n ** module id = 397\n ** module chunks = 0\n **/","/* ========================================================================\n * Bootstrap: button.js v3.3.7\n * http://getbootstrap.com/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // BUTTON PUBLIC CLASS DEFINITION\n // ==============================\n\n var Button = function (element, options) {\n this.$element = $(element)\n this.options = $.extend({}, Button.DEFAULTS, options)\n this.isLoading = false\n }\n\n Button.VERSION = '3.3.7'\n\n Button.DEFAULTS = {\n loadingText: 'loading...'\n }\n\n Button.prototype.setState = function (state) {\n var d = 'disabled'\n var $el = this.$element\n var val = $el.is('input') ? 'val' : 'html'\n var data = $el.data()\n\n state += 'Text'\n\n if (data.resetText == null) $el.data('resetText', $el[val]())\n\n // push to event loop to allow forms to submit\n setTimeout($.proxy(function () {\n $el[val](data[state] == null ? this.options[state] : data[state])\n\n if (state == 'loadingText') {\n this.isLoading = true\n $el.addClass(d).attr(d, d).prop(d, true)\n } else if (this.isLoading) {\n this.isLoading = false\n $el.removeClass(d).removeAttr(d).prop(d, false)\n }\n }, this), 0)\n }\n\n Button.prototype.toggle = function () {\n var changed = true\n var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n if ($parent.length) {\n var $input = this.$element.find('input')\n if ($input.prop('type') == 'radio') {\n if ($input.prop('checked')) changed = false\n $parent.find('.active').removeClass('active')\n this.$element.addClass('active')\n } else if ($input.prop('type') == 'checkbox') {\n if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false\n this.$element.toggleClass('active')\n }\n $input.prop('checked', this.$element.hasClass('active'))\n if (changed) $input.trigger('change')\n } else {\n this.$element.attr('aria-pressed', !this.$element.hasClass('active'))\n this.$element.toggleClass('active')\n }\n }\n\n\n // BUTTON PLUGIN DEFINITION\n // ========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.button')\n var options = typeof option == 'object' && option\n\n if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n if (option == 'toggle') data.toggle()\n else if (option) data.setState(option)\n })\n }\n\n var old = $.fn.button\n\n $.fn.button = Plugin\n $.fn.button.Constructor = Button\n\n\n // BUTTON NO CONFLICT\n // ==================\n\n $.fn.button.noConflict = function () {\n $.fn.button = old\n return this\n }\n\n\n // BUTTON DATA-API\n // ===============\n\n $(document)\n .on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n var $btn = $(e.target).closest('.btn')\n Plugin.call($btn, 'toggle')\n if (!($(e.target).is('input[type=\"radio\"], input[type=\"checkbox\"]'))) {\n // Prevent double click on radios, and the double selections (so cancellation) on checkboxes\n e.preventDefault()\n // The target component still receive the focus\n if ($btn.is('input,button')) $btn.trigger('focus')\n else $btn.find('input:visible,button:visible').first().trigger('focus')\n }\n })\n .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))\n })\n\n}(jQuery);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/bootstrap-sass/assets/javascripts/bootstrap/button.js\n ** module id = 398\n ** module chunks = 0\n **/","/* ========================================================================\n * Bootstrap: carousel.js v3.3.7\n * http://getbootstrap.com/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // CAROUSEL CLASS DEFINITION\n // =========================\n\n var Carousel = function (element, options) {\n this.$element = $(element)\n this.$indicators = this.$element.find('.carousel-indicators')\n this.options = options\n this.paused = null\n this.sliding = null\n this.interval = null\n this.$active = null\n this.$items = null\n\n this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))\n\n this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element\n .on('mouseenter.bs.carousel', $.proxy(this.pause, this))\n .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))\n }\n\n Carousel.VERSION = '3.3.7'\n\n Carousel.TRANSITION_DURATION = 600\n\n Carousel.DEFAULTS = {\n interval: 5000,\n pause: 'hover',\n wrap: true,\n keyboard: true\n }\n\n Carousel.prototype.keydown = function (e) {\n if (/input|textarea/i.test(e.target.tagName)) return\n switch (e.which) {\n case 37: this.prev(); break\n case 39: this.next(); break\n default: return\n }\n\n e.preventDefault()\n }\n\n Carousel.prototype.cycle = function (e) {\n e || (this.paused = false)\n\n this.interval && clearInterval(this.interval)\n\n this.options.interval\n && !this.paused\n && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n return this\n }\n\n Carousel.prototype.getItemIndex = function (item) {\n this.$items = item.parent().children('.item')\n return this.$items.index(item || this.$active)\n }\n\n Carousel.prototype.getItemForDirection = function (direction, active) {\n var activeIndex = this.getItemIndex(active)\n var willWrap = (direction == 'prev' && activeIndex === 0)\n || (direction == 'next' && activeIndex == (this.$items.length - 1))\n if (willWrap && !this.options.wrap) return active\n var delta = direction == 'prev' ? -1 : 1\n var itemIndex = (activeIndex + delta) % this.$items.length\n return this.$items.eq(itemIndex)\n }\n\n Carousel.prototype.to = function (pos) {\n var that = this\n var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))\n\n if (pos > (this.$items.length - 1) || pos < 0) return\n\n if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, \"slid\"\n if (activeIndex == pos) return this.pause().cycle()\n\n return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))\n }\n\n Carousel.prototype.pause = function (e) {\n e || (this.paused = true)\n\n if (this.$element.find('.next, .prev').length && $.support.transition) {\n this.$element.trigger($.support.transition.end)\n this.cycle(true)\n }\n\n this.interval = clearInterval(this.interval)\n\n return this\n }\n\n Carousel.prototype.next = function () {\n if (this.sliding) return\n return this.slide('next')\n }\n\n Carousel.prototype.prev = function () {\n if (this.sliding) return\n return this.slide('prev')\n }\n\n Carousel.prototype.slide = function (type, next) {\n var $active = this.$element.find('.item.active')\n var $next = next || this.getItemForDirection(type, $active)\n var isCycling = this.interval\n var direction = type == 'next' ? 'left' : 'right'\n var that = this\n\n if ($next.hasClass('active')) return (this.sliding = false)\n\n var relatedTarget = $next[0]\n var slideEvent = $.Event('slide.bs.carousel', {\n relatedTarget: relatedTarget,\n direction: direction\n })\n this.$element.trigger(slideEvent)\n if (slideEvent.isDefaultPrevented()) return\n\n this.sliding = true\n\n isCycling && this.pause()\n\n if (this.$indicators.length) {\n this.$indicators.find('.active').removeClass('active')\n var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])\n $nextIndicator && $nextIndicator.addClass('active')\n }\n\n var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, \"slid\"\n if ($.support.transition && this.$element.hasClass('slide')) {\n $next.addClass(type)\n $next[0].offsetWidth // force reflow\n $active.addClass(direction)\n $next.addClass(direction)\n $active\n .one('bsTransitionEnd', function () {\n $next.removeClass([type, direction].join(' ')).addClass('active')\n $active.removeClass(['active', direction].join(' '))\n that.sliding = false\n setTimeout(function () {\n that.$element.trigger(slidEvent)\n }, 0)\n })\n .emulateTransitionEnd(Carousel.TRANSITION_DURATION)\n } else {\n $active.removeClass('active')\n $next.addClass('active')\n this.sliding = false\n this.$element.trigger(slidEvent)\n }\n\n isCycling && this.cycle()\n\n return this\n }\n\n\n // CAROUSEL PLUGIN DEFINITION\n // ==========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.carousel')\n var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n var action = typeof option == 'string' ? option : options.slide\n\n if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n if (typeof option == 'number') data.to(option)\n else if (action) data[action]()\n else if (options.interval) data.pause().cycle()\n })\n }\n\n var old = $.fn.carousel\n\n $.fn.carousel = Plugin\n $.fn.carousel.Constructor = Carousel\n\n\n // CAROUSEL NO CONFLICT\n // ====================\n\n $.fn.carousel.noConflict = function () {\n $.fn.carousel = old\n return this\n }\n\n\n // CAROUSEL DATA-API\n // =================\n\n var clickHandler = function (e) {\n var href\n var $this = $(this)\n var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n if (!$target.hasClass('carousel')) return\n var options = $.extend({}, $target.data(), $this.data())\n var slideIndex = $this.attr('data-slide-to')\n if (slideIndex) options.interval = false\n\n Plugin.call($target, options)\n\n if (slideIndex) {\n $target.data('bs.carousel').to(slideIndex)\n }\n\n e.preventDefault()\n }\n\n $(document)\n .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)\n .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)\n\n $(window).on('load', function () {\n $('[data-ride=\"carousel\"]').each(function () {\n var $carousel = $(this)\n Plugin.call($carousel, $carousel.data())\n })\n })\n\n}(jQuery);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/bootstrap-sass/assets/javascripts/bootstrap/carousel.js\n ** module id = 399\n ** module chunks = 0\n **/","/* ========================================================================\n * Bootstrap: collapse.js v3.3.7\n * http://getbootstrap.com/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n/* jshint latedef: false */\n\n+function ($) {\n 'use strict';\n\n // COLLAPSE PUBLIC CLASS DEFINITION\n // ================================\n\n var Collapse = function (element, options) {\n this.$element = $(element)\n this.options = $.extend({}, Collapse.DEFAULTS, options)\n this.$trigger = $('[data-toggle=\"collapse\"][href=\"#' + element.id + '\"],' +\n '[data-toggle=\"collapse\"][data-target=\"#' + element.id + '\"]')\n this.transitioning = null\n\n if (this.options.parent) {\n this.$parent = this.getParent()\n } else {\n this.addAriaAndCollapsedClass(this.$element, this.$trigger)\n }\n\n if (this.options.toggle) this.toggle()\n }\n\n Collapse.VERSION = '3.3.7'\n\n Collapse.TRANSITION_DURATION = 350\n\n Collapse.DEFAULTS = {\n toggle: true\n }\n\n Collapse.prototype.dimension = function () {\n var hasWidth = this.$element.hasClass('width')\n return hasWidth ? 'width' : 'height'\n }\n\n Collapse.prototype.show = function () {\n if (this.transitioning || this.$element.hasClass('in')) return\n\n var activesData\n var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')\n\n if (actives && actives.length) {\n activesData = actives.data('bs.collapse')\n if (activesData && activesData.transitioning) return\n }\n\n var startEvent = $.Event('show.bs.collapse')\n this.$element.trigger(startEvent)\n if (startEvent.isDefaultPrevented()) return\n\n if (actives && actives.length) {\n Plugin.call(actives, 'hide')\n activesData || actives.data('bs.collapse', null)\n }\n\n var dimension = this.dimension()\n\n this.$element\n .removeClass('collapse')\n .addClass('collapsing')[dimension](0)\n .attr('aria-expanded', true)\n\n this.$trigger\n .removeClass('collapsed')\n .attr('aria-expanded', true)\n\n this.transitioning = 1\n\n var complete = function () {\n this.$element\n .removeClass('collapsing')\n .addClass('collapse in')[dimension]('')\n this.transitioning = 0\n this.$element\n .trigger('shown.bs.collapse')\n }\n\n if (!$.support.transition) return complete.call(this)\n\n var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n this.$element\n .one('bsTransitionEnd', $.proxy(complete, this))\n .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\n }\n\n Collapse.prototype.hide = function () {\n if (this.transitioning || !this.$element.hasClass('in')) return\n\n var startEvent = $.Event('hide.bs.collapse')\n this.$element.trigger(startEvent)\n if (startEvent.isDefaultPrevented()) return\n\n var dimension = this.dimension()\n\n this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n this.$element\n .addClass('collapsing')\n .removeClass('collapse in')\n .attr('aria-expanded', false)\n\n this.$trigger\n .addClass('collapsed')\n .attr('aria-expanded', false)\n\n this.transitioning = 1\n\n var complete = function () {\n this.transitioning = 0\n this.$element\n .removeClass('collapsing')\n .addClass('collapse')\n .trigger('hidden.bs.collapse')\n }\n\n if (!$.support.transition) return complete.call(this)\n\n this.$element\n [dimension](0)\n .one('bsTransitionEnd', $.proxy(complete, this))\n .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n }\n\n Collapse.prototype.toggle = function () {\n this[this.$element.hasClass('in') ? 'hide' : 'show']()\n }\n\n Collapse.prototype.getParent = function () {\n return $(this.options.parent)\n .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n .each($.proxy(function (i, element) {\n var $element = $(element)\n this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\n }, this))\n .end()\n }\n\n Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n var isOpen = $element.hasClass('in')\n\n $element.attr('aria-expanded', isOpen)\n $trigger\n .toggleClass('collapsed', !isOpen)\n .attr('aria-expanded', isOpen)\n }\n\n function getTargetFromTrigger($trigger) {\n var href\n var target = $trigger.attr('data-target')\n || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n\n return $(target)\n }\n\n\n // COLLAPSE PLUGIN DEFINITION\n // ==========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.collapse')\n var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false\n if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.collapse\n\n $.fn.collapse = Plugin\n $.fn.collapse.Constructor = Collapse\n\n\n // COLLAPSE NO CONFLICT\n // ====================\n\n $.fn.collapse.noConflict = function () {\n $.fn.collapse = old\n return this\n }\n\n\n // COLLAPSE DATA-API\n // =================\n\n $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n var $this = $(this)\n\n if (!$this.attr('data-target')) e.preventDefault()\n\n var $target = getTargetFromTrigger($this)\n var data = $target.data('bs.collapse')\n var option = data ? 'toggle' : $this.data()\n\n Plugin.call($target, option)\n })\n\n}(jQuery);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/bootstrap-sass/assets/javascripts/bootstrap/collapse.js\n ** module id = 400\n ** module chunks = 0\n **/","/* ========================================================================\n * Bootstrap: dropdown.js v3.3.7\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // DROPDOWN CLASS DEFINITION\n // =========================\n\n var backdrop = '.dropdown-backdrop'\n var toggle = '[data-toggle=\"dropdown\"]'\n var Dropdown = function (element) {\n $(element).on('click.bs.dropdown', this.toggle)\n }\n\n Dropdown.VERSION = '3.3.7'\n\n function getParent($this) {\n var selector = $this.attr('data-target')\n\n if (!selector) {\n selector = $this.attr('href')\n selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n }\n\n var $parent = selector && $(selector)\n\n return $parent && $parent.length ? $parent : $this.parent()\n }\n\n function clearMenus(e) {\n if (e && e.which === 3) return\n $(backdrop).remove()\n $(toggle).each(function () {\n var $this = $(this)\n var $parent = getParent($this)\n var relatedTarget = { relatedTarget: this }\n\n if (!$parent.hasClass('open')) return\n\n if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\n\n $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n if (e.isDefaultPrevented()) return\n\n $this.attr('aria-expanded', 'false')\n $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\n })\n }\n\n Dropdown.prototype.toggle = function (e) {\n var $this = $(this)\n\n if ($this.is('.disabled, :disabled')) return\n\n var $parent = getParent($this)\n var isActive = $parent.hasClass('open')\n\n clearMenus()\n\n if (!isActive) {\n if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n // if mobile we use a backdrop because click events don't delegate\n $(document.createElement('div'))\n .addClass('dropdown-backdrop')\n .insertAfter($(this))\n .on('click', clearMenus)\n }\n\n var relatedTarget = { relatedTarget: this }\n $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n if (e.isDefaultPrevented()) return\n\n $this\n .trigger('focus')\n .attr('aria-expanded', 'true')\n\n $parent\n .toggleClass('open')\n .trigger($.Event('shown.bs.dropdown', relatedTarget))\n }\n\n return false\n }\n\n Dropdown.prototype.keydown = function (e) {\n if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n var $this = $(this)\n\n e.preventDefault()\n e.stopPropagation()\n\n if ($this.is('.disabled, :disabled')) return\n\n var $parent = getParent($this)\n var isActive = $parent.hasClass('open')\n\n if (!isActive && e.which != 27 || isActive && e.which == 27) {\n if (e.which == 27) $parent.find(toggle).trigger('focus')\n return $this.trigger('click')\n }\n\n var desc = ' li:not(.disabled):visible a'\n var $items = $parent.find('.dropdown-menu' + desc)\n\n if (!$items.length) return\n\n var index = $items.index(e.target)\n\n if (e.which == 38 && index > 0) index-- // up\n if (e.which == 40 && index < $items.length - 1) index++ // down\n if (!~index) index = 0\n\n $items.eq(index).trigger('focus')\n }\n\n\n // DROPDOWN PLUGIN DEFINITION\n // ==========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.dropdown')\n\n if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n if (typeof option == 'string') data[option].call($this)\n })\n }\n\n var old = $.fn.dropdown\n\n $.fn.dropdown = Plugin\n $.fn.dropdown.Constructor = Dropdown\n\n\n // DROPDOWN NO CONFLICT\n // ====================\n\n $.fn.dropdown.noConflict = function () {\n $.fn.dropdown = old\n return this\n }\n\n\n // APPLY TO STANDARD DROPDOWN ELEMENTS\n // ===================================\n\n $(document)\n .on('click.bs.dropdown.data-api', clearMenus)\n .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\n\n}(jQuery);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/bootstrap-sass/assets/javascripts/bootstrap/dropdown.js\n ** module id = 401\n ** module chunks = 0\n **/","/* ========================================================================\n * Bootstrap: modal.js v3.3.7\n * http://getbootstrap.com/javascript/#modals\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // MODAL CLASS DEFINITION\n // ======================\n\n var Modal = function (element, options) {\n this.options = options\n this.$body = $(document.body)\n this.$element = $(element)\n this.$dialog = this.$element.find('.modal-dialog')\n this.$backdrop = null\n this.isShown = null\n this.originalBodyPad = null\n this.scrollbarWidth = 0\n this.ignoreBackdropClick = false\n\n if (this.options.remote) {\n this.$element\n .find('.modal-content')\n .load(this.options.remote, $.proxy(function () {\n this.$element.trigger('loaded.bs.modal')\n }, this))\n }\n }\n\n Modal.VERSION = '3.3.7'\n\n Modal.TRANSITION_DURATION = 300\n Modal.BACKDROP_TRANSITION_DURATION = 150\n\n Modal.DEFAULTS = {\n backdrop: true,\n keyboard: true,\n show: true\n }\n\n Modal.prototype.toggle = function (_relatedTarget) {\n return this.isShown ? this.hide() : this.show(_relatedTarget)\n }\n\n Modal.prototype.show = function (_relatedTarget) {\n var that = this\n var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n this.$element.trigger(e)\n\n if (this.isShown || e.isDefaultPrevented()) return\n\n this.isShown = true\n\n this.checkScrollbar()\n this.setScrollbar()\n this.$body.addClass('modal-open')\n\n this.escape()\n this.resize()\n\n this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true\n })\n })\n\n this.backdrop(function () {\n var transition = $.support.transition && that.$element.hasClass('fade')\n\n if (!that.$element.parent().length) {\n that.$element.appendTo(that.$body) // don't move modals dom position\n }\n\n that.$element\n .show()\n .scrollTop(0)\n\n that.adjustDialog()\n\n if (transition) {\n that.$element[0].offsetWidth // force reflow\n }\n\n that.$element.addClass('in')\n\n that.enforceFocus()\n\n var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n transition ?\n that.$dialog // wait for modal to slide in\n .one('bsTransitionEnd', function () {\n that.$element.trigger('focus').trigger(e)\n })\n .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n that.$element.trigger('focus').trigger(e)\n })\n }\n\n Modal.prototype.hide = function (e) {\n if (e) e.preventDefault()\n\n e = $.Event('hide.bs.modal')\n\n this.$element.trigger(e)\n\n if (!this.isShown || e.isDefaultPrevented()) return\n\n this.isShown = false\n\n this.escape()\n this.resize()\n\n $(document).off('focusin.bs.modal')\n\n this.$element\n .removeClass('in')\n .off('click.dismiss.bs.modal')\n .off('mouseup.dismiss.bs.modal')\n\n this.$dialog.off('mousedown.dismiss.bs.modal')\n\n $.support.transition && this.$element.hasClass('fade') ?\n this.$element\n .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n this.hideModal()\n }\n\n Modal.prototype.enforceFocus = function () {\n $(document)\n .off('focusin.bs.modal') // guard against infinite focus loop\n .on('focusin.bs.modal', $.proxy(function (e) {\n if (document !== e.target &&\n this.$element[0] !== e.target &&\n !this.$element.has(e.target).length) {\n this.$element.trigger('focus')\n }\n }, this))\n }\n\n Modal.prototype.escape = function () {\n if (this.isShown && this.options.keyboard) {\n this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n e.which == 27 && this.hide()\n }, this))\n } else if (!this.isShown) {\n this.$element.off('keydown.dismiss.bs.modal')\n }\n }\n\n Modal.prototype.resize = function () {\n if (this.isShown) {\n $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n } else {\n $(window).off('resize.bs.modal')\n }\n }\n\n Modal.prototype.hideModal = function () {\n var that = this\n this.$element.hide()\n this.backdrop(function () {\n that.$body.removeClass('modal-open')\n that.resetAdjustments()\n that.resetScrollbar()\n that.$element.trigger('hidden.bs.modal')\n })\n }\n\n Modal.prototype.removeBackdrop = function () {\n this.$backdrop && this.$backdrop.remove()\n this.$backdrop = null\n }\n\n Modal.prototype.backdrop = function (callback) {\n var that = this\n var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n if (this.isShown && this.options.backdrop) {\n var doAnimate = $.support.transition && animate\n\n this.$backdrop = $(document.createElement('div'))\n .addClass('modal-backdrop ' + animate)\n .appendTo(this.$body)\n\n this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n if (this.ignoreBackdropClick) {\n this.ignoreBackdropClick = false\n return\n }\n if (e.target !== e.currentTarget) return\n this.options.backdrop == 'static'\n ? this.$element[0].focus()\n : this.hide()\n }, this))\n\n if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n this.$backdrop.addClass('in')\n\n if (!callback) return\n\n doAnimate ?\n this.$backdrop\n .one('bsTransitionEnd', callback)\n .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n callback()\n\n } else if (!this.isShown && this.$backdrop) {\n this.$backdrop.removeClass('in')\n\n var callbackRemove = function () {\n that.removeBackdrop()\n callback && callback()\n }\n $.support.transition && this.$element.hasClass('fade') ?\n this.$backdrop\n .one('bsTransitionEnd', callbackRemove)\n .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n callbackRemove()\n\n } else if (callback) {\n callback()\n }\n }\n\n // these following methods are used to handle overflowing modals\n\n Modal.prototype.handleUpdate = function () {\n this.adjustDialog()\n }\n\n Modal.prototype.adjustDialog = function () {\n var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n this.$element.css({\n paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n })\n }\n\n Modal.prototype.resetAdjustments = function () {\n this.$element.css({\n paddingLeft: '',\n paddingRight: ''\n })\n }\n\n Modal.prototype.checkScrollbar = function () {\n var fullWindowWidth = window.innerWidth\n if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8\n var documentElementRect = document.documentElement.getBoundingClientRect()\n fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n }\n this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n this.scrollbarWidth = this.measureScrollbar()\n }\n\n Modal.prototype.setScrollbar = function () {\n var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n this.originalBodyPad = document.body.style.paddingRight || ''\n if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)\n }\n\n Modal.prototype.resetScrollbar = function () {\n this.$body.css('padding-right', this.originalBodyPad)\n }\n\n Modal.prototype.measureScrollbar = function () { // thx walsh\n var scrollDiv = document.createElement('div')\n scrollDiv.className = 'modal-scrollbar-measure'\n this.$body.append(scrollDiv)\n var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n this.$body[0].removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n\n // MODAL PLUGIN DEFINITION\n // =======================\n\n function Plugin(option, _relatedTarget) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.modal')\n var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n if (typeof option == 'string') data[option](_relatedTarget)\n else if (options.show) data.show(_relatedTarget)\n })\n }\n\n var old = $.fn.modal\n\n $.fn.modal = Plugin\n $.fn.modal.Constructor = Modal\n\n\n // MODAL NO CONFLICT\n // =================\n\n $.fn.modal.noConflict = function () {\n $.fn.modal = old\n return this\n }\n\n\n // MODAL DATA-API\n // ==============\n\n $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n var $this = $(this)\n var href = $this.attr('href')\n var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) // strip for ie7\n var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n if ($this.is('a')) e.preventDefault()\n\n $target.one('show.bs.modal', function (showEvent) {\n if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n $target.one('hidden.bs.modal', function () {\n $this.is(':visible') && $this.trigger('focus')\n })\n })\n Plugin.call($target, option, this)\n })\n\n}(jQuery);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/bootstrap-sass/assets/javascripts/bootstrap/modal.js\n ** module id = 402\n ** module chunks = 0\n **/","/* ========================================================================\n * Bootstrap: popover.js v3.3.7\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // POPOVER PUBLIC CLASS DEFINITION\n // ===============================\n\n var Popover = function (element, options) {\n this.init('popover', element, options)\n }\n\n if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n Popover.VERSION = '3.3.7'\n\n Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '
'\n })\n\n\n // NOTE: POPOVER EXTENDS tooltip.js\n // ================================\n\n Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n Popover.prototype.constructor = Popover\n\n Popover.prototype.getDefaults = function () {\n return Popover.DEFAULTS\n }\n\n Popover.prototype.setContent = function () {\n var $tip = this.tip()\n var title = this.getTitle()\n var content = this.getContent()\n\n $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events\n this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'\n ](content)\n\n $tip.removeClass('fade top bottom left right in')\n\n // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n // this manually by checking the contents.\n if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n }\n\n Popover.prototype.hasContent = function () {\n return this.getTitle() || this.getContent()\n }\n\n Popover.prototype.getContent = function () {\n var $e = this.$element\n var o = this.options\n\n return $e.attr('data-content')\n || (typeof o.content == 'function' ?\n o.content.call($e[0]) :\n o.content)\n }\n\n Popover.prototype.arrow = function () {\n return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n }\n\n\n // POPOVER PLUGIN DEFINITION\n // =========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.popover')\n var options = typeof option == 'object' && option\n\n if (!data && /destroy|hide/.test(option)) return\n if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.popover\n\n $.fn.popover = Plugin\n $.fn.popover.Constructor = Popover\n\n\n // POPOVER NO CONFLICT\n // ===================\n\n $.fn.popover.noConflict = function () {\n $.fn.popover = old\n return this\n }\n\n}(jQuery);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/bootstrap-sass/assets/javascripts/bootstrap/popover.js\n ** module id = 403\n ** module chunks = 0\n **/","/* ========================================================================\n * Bootstrap: scrollspy.js v3.3.7\n * http://getbootstrap.com/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // SCROLLSPY CLASS DEFINITION\n // ==========================\n\n function ScrollSpy(element, options) {\n this.$body = $(document.body)\n this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)\n this.options = $.extend({}, ScrollSpy.DEFAULTS, options)\n this.selector = (this.options.target || '') + ' .nav li > a'\n this.offsets = []\n this.targets = []\n this.activeTarget = null\n this.scrollHeight = 0\n\n this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))\n this.refresh()\n this.process()\n }\n\n ScrollSpy.VERSION = '3.3.7'\n\n ScrollSpy.DEFAULTS = {\n offset: 10\n }\n\n ScrollSpy.prototype.getScrollHeight = function () {\n return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)\n }\n\n ScrollSpy.prototype.refresh = function () {\n var that = this\n var offsetMethod = 'offset'\n var offsetBase = 0\n\n this.offsets = []\n this.targets = []\n this.scrollHeight = this.getScrollHeight()\n\n if (!$.isWindow(this.$scrollElement[0])) {\n offsetMethod = 'position'\n offsetBase = this.$scrollElement.scrollTop()\n }\n\n this.$body\n .find(this.selector)\n .map(function () {\n var $el = $(this)\n var href = $el.data('target') || $el.attr('href')\n var $href = /^#./.test(href) && $(href)\n\n return ($href\n && $href.length\n && $href.is(':visible')\n && [[$href[offsetMethod]().top + offsetBase, href]]) || null\n })\n .sort(function (a, b) { return a[0] - b[0] })\n .each(function () {\n that.offsets.push(this[0])\n that.targets.push(this[1])\n })\n }\n\n ScrollSpy.prototype.process = function () {\n var scrollTop = this.$scrollElement.scrollTop() + this.options.offset\n var scrollHeight = this.getScrollHeight()\n var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()\n var offsets = this.offsets\n var targets = this.targets\n var activeTarget = this.activeTarget\n var i\n\n if (this.scrollHeight != scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)\n }\n\n if (activeTarget && scrollTop < offsets[0]) {\n this.activeTarget = null\n return this.clear()\n }\n\n for (i = offsets.length; i--;) {\n activeTarget != targets[i]\n && scrollTop >= offsets[i]\n && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])\n && this.activate(targets[i])\n }\n }\n\n ScrollSpy.prototype.activate = function (target) {\n this.activeTarget = target\n\n this.clear()\n\n var selector = this.selector +\n '[data-target=\"' + target + '\"],' +\n this.selector + '[href=\"' + target + '\"]'\n\n var active = $(selector)\n .parents('li')\n .addClass('active')\n\n if (active.parent('.dropdown-menu').length) {\n active = active\n .closest('li.dropdown')\n .addClass('active')\n }\n\n active.trigger('activate.bs.scrollspy')\n }\n\n ScrollSpy.prototype.clear = function () {\n $(this.selector)\n .parentsUntil(this.options.target, '.active')\n .removeClass('active')\n }\n\n\n // SCROLLSPY PLUGIN DEFINITION\n // ===========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.scrollspy')\n var options = typeof option == 'object' && option\n\n if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.scrollspy\n\n $.fn.scrollspy = Plugin\n $.fn.scrollspy.Constructor = ScrollSpy\n\n\n // SCROLLSPY NO CONFLICT\n // =====================\n\n $.fn.scrollspy.noConflict = function () {\n $.fn.scrollspy = old\n return this\n }\n\n\n // SCROLLSPY DATA-API\n // ==================\n\n $(window).on('load.bs.scrollspy.data-api', function () {\n $('[data-spy=\"scroll\"]').each(function () {\n var $spy = $(this)\n Plugin.call($spy, $spy.data())\n })\n })\n\n}(jQuery);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/bootstrap-sass/assets/javascripts/bootstrap/scrollspy.js\n ** module id = 404\n ** module chunks = 0\n **/","/* ========================================================================\n * Bootstrap: tab.js v3.3.7\n * http://getbootstrap.com/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // TAB CLASS DEFINITION\n // ====================\n\n var Tab = function (element) {\n // jscs:disable requireDollarBeforejQueryAssignment\n this.element = $(element)\n // jscs:enable requireDollarBeforejQueryAssignment\n }\n\n Tab.VERSION = '3.3.7'\n\n Tab.TRANSITION_DURATION = 150\n\n Tab.prototype.show = function () {\n var $this = this.element\n var $ul = $this.closest('ul:not(.dropdown-menu)')\n var selector = $this.data('target')\n\n if (!selector) {\n selector = $this.attr('href')\n selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n }\n\n if ($this.parent('li').hasClass('active')) return\n\n var $previous = $ul.find('.active:last a')\n var hideEvent = $.Event('hide.bs.tab', {\n relatedTarget: $this[0]\n })\n var showEvent = $.Event('show.bs.tab', {\n relatedTarget: $previous[0]\n })\n\n $previous.trigger(hideEvent)\n $this.trigger(showEvent)\n\n if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\n\n var $target = $(selector)\n\n this.activate($this.closest('li'), $ul)\n this.activate($target, $target.parent(), function () {\n $previous.trigger({\n type: 'hidden.bs.tab',\n relatedTarget: $this[0]\n })\n $this.trigger({\n type: 'shown.bs.tab',\n relatedTarget: $previous[0]\n })\n })\n }\n\n Tab.prototype.activate = function (element, container, callback) {\n var $active = container.find('> .active')\n var transition = callback\n && $.support.transition\n && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)\n\n function next() {\n $active\n .removeClass('active')\n .find('> .dropdown-menu > .active')\n .removeClass('active')\n .end()\n .find('[data-toggle=\"tab\"]')\n .attr('aria-expanded', false)\n\n element\n .addClass('active')\n .find('[data-toggle=\"tab\"]')\n .attr('aria-expanded', true)\n\n if (transition) {\n element[0].offsetWidth // reflow for transition\n element.addClass('in')\n } else {\n element.removeClass('fade')\n }\n\n if (element.parent('.dropdown-menu').length) {\n element\n .closest('li.dropdown')\n .addClass('active')\n .end()\n .find('[data-toggle=\"tab\"]')\n .attr('aria-expanded', true)\n }\n\n callback && callback()\n }\n\n $active.length && transition ?\n $active\n .one('bsTransitionEnd', next)\n .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\n next()\n\n $active.removeClass('in')\n }\n\n\n // TAB PLUGIN DEFINITION\n // =====================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.tab')\n\n if (!data) $this.data('bs.tab', (data = new Tab(this)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.tab\n\n $.fn.tab = Plugin\n $.fn.tab.Constructor = Tab\n\n\n // TAB NO CONFLICT\n // ===============\n\n $.fn.tab.noConflict = function () {\n $.fn.tab = old\n return this\n }\n\n\n // TAB DATA-API\n // ============\n\n var clickHandler = function (e) {\n e.preventDefault()\n Plugin.call($(this), 'show')\n }\n\n $(document)\n .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\n .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\n\n}(jQuery);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/bootstrap-sass/assets/javascripts/bootstrap/tab.js\n ** module id = 405\n ** module chunks = 0\n **/","/* ========================================================================\n * Bootstrap: tooltip.js v3.3.7\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // TOOLTIP PUBLIC CLASS DEFINITION\n // ===============================\n\n var Tooltip = function (element, options) {\n this.type = null\n this.options = null\n this.enabled = null\n this.timeout = null\n this.hoverState = null\n this.$element = null\n this.inState = null\n\n this.init('tooltip', element, options)\n }\n\n Tooltip.VERSION = '3.3.7'\n\n Tooltip.TRANSITION_DURATION = 150\n\n Tooltip.DEFAULTS = {\n animation: true,\n placement: 'top',\n selector: false,\n template: '
',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n container: false,\n viewport: {\n selector: 'body',\n padding: 0\n }\n }\n\n Tooltip.prototype.init = function (type, element, options) {\n this.enabled = true\n this.type = type\n this.$element = $(element)\n this.options = this.getOptions(options)\n this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n this.inState = { click: false, hover: false, focus: false }\n\n if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n }\n\n var triggers = this.options.trigger.split(' ')\n\n for (var i = triggers.length; i--;) {\n var trigger = triggers[i]\n\n if (trigger == 'click') {\n this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n } else if (trigger != 'manual') {\n var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'\n var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n }\n }\n\n this.options.selector ?\n (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n this.fixTitle()\n }\n\n Tooltip.prototype.getDefaults = function () {\n return Tooltip.DEFAULTS\n }\n\n Tooltip.prototype.getOptions = function (options) {\n options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n if (options.delay && typeof options.delay == 'number') {\n options.delay = {\n show: options.delay,\n hide: options.delay\n }\n }\n\n return options\n }\n\n Tooltip.prototype.getDelegateOptions = function () {\n var options = {}\n var defaults = this.getDefaults()\n\n this._options && $.each(this._options, function (key, value) {\n if (defaults[key] != value) options[key] = value\n })\n\n return options\n }\n\n Tooltip.prototype.enter = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget).data('bs.' + this.type)\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n $(obj.currentTarget).data('bs.' + this.type, self)\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n }\n\n if (self.tip().hasClass('in') || self.hoverState == 'in') {\n self.hoverState = 'in'\n return\n }\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'in'\n\n if (!self.options.delay || !self.options.delay.show) return self.show()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'in') self.show()\n }, self.options.delay.show)\n }\n\n Tooltip.prototype.isInStateTrue = function () {\n for (var key in this.inState) {\n if (this.inState[key]) return true\n }\n\n return false\n }\n\n Tooltip.prototype.leave = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget).data('bs.' + this.type)\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n $(obj.currentTarget).data('bs.' + this.type, self)\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n }\n\n if (self.isInStateTrue()) return\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'out'\n\n if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'out') self.hide()\n }, self.options.delay.hide)\n }\n\n Tooltip.prototype.show = function () {\n var e = $.Event('show.bs.' + this.type)\n\n if (this.hasContent() && this.enabled) {\n this.$element.trigger(e)\n\n var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n if (e.isDefaultPrevented() || !inDom) return\n var that = this\n\n var $tip = this.tip()\n\n var tipId = this.getUID(this.type)\n\n this.setContent()\n $tip.attr('id', tipId)\n this.$element.attr('aria-describedby', tipId)\n\n if (this.options.animation) $tip.addClass('fade')\n\n var placement = typeof this.options.placement == 'function' ?\n this.options.placement.call(this, $tip[0], this.$element[0]) :\n this.options.placement\n\n var autoToken = /\\s?auto?\\s?/i\n var autoPlace = autoToken.test(placement)\n if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n $tip\n .detach()\n .css({ top: 0, left: 0, display: 'block' })\n .addClass(placement)\n .data('bs.' + this.type, this)\n\n this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n this.$element.trigger('inserted.bs.' + this.type)\n\n var pos = this.getPosition()\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (autoPlace) {\n var orgPlacement = placement\n var viewportDim = this.getPosition(this.$viewport)\n\n placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :\n placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :\n placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :\n placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :\n placement\n\n $tip\n .removeClass(orgPlacement)\n .addClass(placement)\n }\n\n var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n this.applyPlacement(calculatedOffset, placement)\n\n var complete = function () {\n var prevHoverState = that.hoverState\n that.$element.trigger('shown.bs.' + that.type)\n that.hoverState = null\n\n if (prevHoverState == 'out') that.leave(that)\n }\n\n $.support.transition && this.$tip.hasClass('fade') ?\n $tip\n .one('bsTransitionEnd', complete)\n .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n complete()\n }\n }\n\n Tooltip.prototype.applyPlacement = function (offset, placement) {\n var $tip = this.tip()\n var width = $tip[0].offsetWidth\n var height = $tip[0].offsetHeight\n\n // manually read margins because getBoundingClientRect includes difference\n var marginTop = parseInt($tip.css('margin-top'), 10)\n var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n // we must check for NaN for ie 8/9\n if (isNaN(marginTop)) marginTop = 0\n if (isNaN(marginLeft)) marginLeft = 0\n\n offset.top += marginTop\n offset.left += marginLeft\n\n // $.fn.offset doesn't round pixel values\n // so we use setOffset directly with our own function B-0\n $.offset.setOffset($tip[0], $.extend({\n using: function (props) {\n $tip.css({\n top: Math.round(props.top),\n left: Math.round(props.left)\n })\n }\n }, offset), 0)\n\n $tip.addClass('in')\n\n // check to see if placing tip in new offset caused the tip to resize itself\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (placement == 'top' && actualHeight != height) {\n offset.top = offset.top + height - actualHeight\n }\n\n var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n if (delta.left) offset.left += delta.left\n else offset.top += delta.top\n\n var isVertical = /top|bottom/.test(placement)\n var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n $tip.offset(offset)\n this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n }\n\n Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n this.arrow()\n .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n .css(isVertical ? 'top' : 'left', '')\n }\n\n Tooltip.prototype.setContent = function () {\n var $tip = this.tip()\n var title = this.getTitle()\n\n $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n $tip.removeClass('fade in top bottom left right')\n }\n\n Tooltip.prototype.hide = function (callback) {\n var that = this\n var $tip = $(this.$tip)\n var e = $.Event('hide.bs.' + this.type)\n\n function complete() {\n if (that.hoverState != 'in') $tip.detach()\n if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.\n that.$element\n .removeAttr('aria-describedby')\n .trigger('hidden.bs.' + that.type)\n }\n callback && callback()\n }\n\n this.$element.trigger(e)\n\n if (e.isDefaultPrevented()) return\n\n $tip.removeClass('in')\n\n $.support.transition && $tip.hasClass('fade') ?\n $tip\n .one('bsTransitionEnd', complete)\n .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n complete()\n\n this.hoverState = null\n\n return this\n }\n\n Tooltip.prototype.fixTitle = function () {\n var $e = this.$element\n if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n }\n }\n\n Tooltip.prototype.hasContent = function () {\n return this.getTitle()\n }\n\n Tooltip.prototype.getPosition = function ($element) {\n $element = $element || this.$element\n\n var el = $element[0]\n var isBody = el.tagName == 'BODY'\n\n var elRect = el.getBoundingClientRect()\n if (elRect.width == null) {\n // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n }\n var isSvg = window.SVGElement && el instanceof window.SVGElement\n // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.\n // See https://github.com/twbs/bootstrap/issues/20280\n var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())\n var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n return $.extend({}, elRect, scroll, outerDims, elOffset)\n }\n\n Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n }\n\n Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n var delta = { top: 0, left: 0 }\n if (!this.$viewport) return delta\n\n var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n var viewportDimensions = this.getPosition(this.$viewport)\n\n if (/right|left/.test(placement)) {\n var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll\n var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n if (topEdgeOffset < viewportDimensions.top) { // top overflow\n delta.top = viewportDimensions.top - topEdgeOffset\n } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n }\n } else {\n var leftEdgeOffset = pos.left - viewportPadding\n var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n delta.left = viewportDimensions.left - leftEdgeOffset\n } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n }\n }\n\n return delta\n }\n\n Tooltip.prototype.getTitle = function () {\n var title\n var $e = this.$element\n var o = this.options\n\n title = $e.attr('data-original-title')\n || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)\n\n return title\n }\n\n Tooltip.prototype.getUID = function (prefix) {\n do prefix += ~~(Math.random() * 1000000)\n while (document.getElementById(prefix))\n return prefix\n }\n\n Tooltip.prototype.tip = function () {\n if (!this.$tip) {\n this.$tip = $(this.options.template)\n if (this.$tip.length != 1) {\n throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n }\n }\n return this.$tip\n }\n\n Tooltip.prototype.arrow = function () {\n return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n }\n\n Tooltip.prototype.enable = function () {\n this.enabled = true\n }\n\n Tooltip.prototype.disable = function () {\n this.enabled = false\n }\n\n Tooltip.prototype.toggleEnabled = function () {\n this.enabled = !this.enabled\n }\n\n Tooltip.prototype.toggle = function (e) {\n var self = this\n if (e) {\n self = $(e.currentTarget).data('bs.' + this.type)\n if (!self) {\n self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n $(e.currentTarget).data('bs.' + this.type, self)\n }\n }\n\n if (e) {\n self.inState.click = !self.inState.click\n if (self.isInStateTrue()) self.enter(self)\n else self.leave(self)\n } else {\n self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n }\n }\n\n Tooltip.prototype.destroy = function () {\n var that = this\n clearTimeout(this.timeout)\n this.hide(function () {\n that.$element.off('.' + that.type).removeData('bs.' + that.type)\n if (that.$tip) {\n that.$tip.detach()\n }\n that.$tip = null\n that.$arrow = null\n that.$viewport = null\n that.$element = null\n })\n }\n\n\n // TOOLTIP PLUGIN DEFINITION\n // =========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.tooltip')\n var options = typeof option == 'object' && option\n\n if (!data && /destroy|hide/.test(option)) return\n if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.tooltip\n\n $.fn.tooltip = Plugin\n $.fn.tooltip.Constructor = Tooltip\n\n\n // TOOLTIP NO CONFLICT\n // ===================\n\n $.fn.tooltip.noConflict = function () {\n $.fn.tooltip = old\n return this\n }\n\n}(jQuery);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/bootstrap-sass/assets/javascripts/bootstrap/tooltip.js\n ** module id = 406\n ** module chunks = 0\n **/","/* ========================================================================\n * Bootstrap: transition.js v3.3.7\n * http://getbootstrap.com/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n // ============================================================\n\n function transitionEnd() {\n var el = document.createElement('bootstrap')\n\n var transEndEventNames = {\n WebkitTransition : 'webkitTransitionEnd',\n MozTransition : 'transitionend',\n OTransition : 'oTransitionEnd otransitionend',\n transition : 'transitionend'\n }\n\n for (var name in transEndEventNames) {\n if (el.style[name] !== undefined) {\n return { end: transEndEventNames[name] }\n }\n }\n\n return false // explicit for ie8 ( ._.)\n }\n\n // http://blog.alexmaccaw.com/css-transitions\n $.fn.emulateTransitionEnd = function (duration) {\n var called = false\n var $el = this\n $(this).one('bsTransitionEnd', function () { called = true })\n var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n setTimeout(callback, duration)\n return this\n }\n\n $(function () {\n $.support.transition = transitionEnd()\n\n if (!$.support.transition) return\n\n $.event.special.bsTransitionEnd = {\n bindType: $.support.transition.end,\n delegateType: $.support.transition.end,\n handle: function (e) {\n if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n }\n }\n })\n\n}(jQuery);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/bootstrap-sass/assets/javascripts/bootstrap/transition.js\n ** module id = 407\n ** module chunks = 0\n **/","require('../../modules/core.regexp.escape');\nmodule.exports = require('../../modules/_core').RegExp.escape;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/fn/regexp/escape.js\n ** module id = 408\n ** module chunks = 0\n **/","var isObject = require('./_is-object')\r\n , isArray = require('./_is-array')\r\n , SPECIES = require('./_wks')('species');\r\n\r\nmodule.exports = function(original){\r\n var C;\r\n if(isArray(original)){\r\n C = original.constructor;\r\n // cross-realm fallback\r\n if(typeof C == 'function' && (C === Array || isArray(C.prototype)))C = undefined;\r\n if(isObject(C)){\r\n C = C[SPECIES];\r\n if(C === null)C = undefined;\r\n }\r\n } return C === undefined ? Array : C;\r\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_array-species-constructor.js\n ** module id = 409\n ** module chunks = 0\n **/","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function(original, length){\n return new (speciesConstructor(original))(length);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_array-species-create.js\n ** module id = 410\n ** module chunks = 0\n **/","'use strict';\r\nvar anObject = require('./_an-object')\r\n , toPrimitive = require('./_to-primitive')\r\n , NUMBER = 'number';\r\n\r\nmodule.exports = function(hint){\r\n if(hint !== 'string' && hint !== NUMBER && hint !== 'default')throw TypeError('Incorrect hint');\r\n return toPrimitive(anObject(this), hint != NUMBER);\r\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_date-to-primitive.js\n ** module id = 411\n ** module chunks = 0\n **/","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys')\n , gOPS = require('./_object-gops')\n , pIE = require('./_object-pie');\nmodule.exports = function(it){\n var result = getKeys(it)\n , getSymbols = gOPS.f;\n if(getSymbols){\n var symbols = getSymbols(it)\n , isEnum = pIE.f\n , i = 0\n , key;\n while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))result.push(key);\n } return result;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_enum-keys.js\n ** module id = 412\n ** module chunks = 0\n **/","var getKeys = require('./_object-keys')\n , toIObject = require('./_to-iobject');\nmodule.exports = function(object, el){\n var O = toIObject(object)\n , keys = getKeys(O)\n , length = keys.length\n , index = 0\n , key;\n while(length > index)if(O[key = keys[index++]] === el)return key;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_keyof.js\n ** module id = 413\n ** module chunks = 0\n **/","'use strict';\nvar path = require('./_path')\n , invoke = require('./_invoke')\n , aFunction = require('./_a-function');\nmodule.exports = function(/* ...pargs */){\n var fn = aFunction(this)\n , length = arguments.length\n , pargs = Array(length)\n , i = 0\n , _ = path._\n , holder = false;\n while(length > i)if((pargs[i] = arguments[i++]) === _)holder = true;\n return function(/* ...args */){\n var that = this\n , aLen = arguments.length\n , j = 0, k = 0, args;\n if(!holder && !aLen)return invoke(fn, pargs, that);\n args = pargs.slice();\n if(holder)for(;length > j; j++)if(args[j] === _)args[j] = arguments[k++];\n while(aLen > k)args.push(arguments[k++]);\n return invoke(fn, args, that);\n };\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_partial.js\n ** module id = 414\n ** module chunks = 0\n **/","module.exports = require('./_global');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_path.js\n ** module id = 415\n ** module chunks = 0\n **/","module.exports = function(regExp, replace){\n var replacer = replace === Object(replace) ? function(part){\n return replace[part];\n } : replace;\n return function(it){\n return String(it).replace(regExp, replacer);\n };\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_replacer.js\n ** module id = 416\n ** module chunks = 0\n **/","var classof = require('./_classof')\n , ITERATOR = require('./_wks')('iterator')\n , Iterators = require('./_iterators');\nmodule.exports = require('./_core').isIterable = function(it){\n var O = Object(it);\n return O[ITERATOR] !== undefined\n || '@@iterator' in O\n || Iterators.hasOwnProperty(classof(O));\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/core.is-iterable.js\n ** module id = 417\n ** module chunks = 0\n **/","// https://github.com/benjamingr/RexExp.escape\nvar $export = require('./_export')\n , $re = require('./_replacer')(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n$export($export.S, 'RegExp', {escape: function escape(it){ return $re(it); }});\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/core.regexp.escape.js\n ** module id = 418\n ** module chunks = 0\n **/","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', {copyWithin: require('./_array-copy-within')});\n\nrequire('./_add-to-unscopables')('copyWithin');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.copy-within.js\n ** module id = 419\n ** module chunks = 0\n **/","'use strict';\r\nvar $export = require('./_export')\r\n , $every = require('./_array-methods')(4);\r\n\r\n$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {\r\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\r\n every: function every(callbackfn /* , thisArg */){\r\n return $every(this, callbackfn, arguments[1]);\r\n }\r\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.every.js\n ** module id = 420\n ** module chunks = 0\n **/","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', {fill: require('./_array-fill')});\n\nrequire('./_add-to-unscopables')('fill');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.fill.js\n ** module id = 421\n ** module chunks = 0\n **/","'use strict';\nvar $export = require('./_export')\n , $filter = require('./_array-methods')(2);\n\n$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */){\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.filter.js\n ** module id = 422\n ** module chunks = 0\n **/","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export')\n , $find = require('./_array-methods')(6)\n , KEY = 'findIndex'\n , forced = true;\n// Shouldn't skip holes\nif(KEY in [])Array(1)[KEY](function(){ forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn/*, that = undefined */){\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.find-index.js\n ** module id = 423\n ** module chunks = 0\n **/","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export')\n , $find = require('./_array-methods')(5)\n , KEY = 'find'\n , forced = true;\n// Shouldn't skip holes\nif(KEY in [])Array(1)[KEY](function(){ forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn/*, that = undefined */){\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.find.js\n ** module id = 424\n ** module chunks = 0\n **/","'use strict';\r\nvar $export = require('./_export')\r\n , $forEach = require('./_array-methods')(0)\r\n , STRICT = require('./_strict-method')([].forEach, true);\r\n\r\n$export($export.P + $export.F * !STRICT, 'Array', {\r\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\r\n forEach: function forEach(callbackfn /* , thisArg */){\r\n return $forEach(this, callbackfn, arguments[1]);\r\n }\r\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.for-each.js\n ** module id = 425\n ** module chunks = 0\n **/","'use strict';\nvar ctx = require('./_ctx')\n , $export = require('./_export')\n , toObject = require('./_to-object')\n , call = require('./_iter-call')\n , isArrayIter = require('./_is-array-iter')\n , toLength = require('./_to-length')\n , createProperty = require('./_create-property')\n , getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function(iter){ Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike/*, mapfn = undefined, thisArg = undefined*/){\n var O = toObject(arrayLike)\n , C = typeof this == 'function' ? this : Array\n , aLen = arguments.length\n , mapfn = aLen > 1 ? arguments[1] : undefined\n , mapping = mapfn !== undefined\n , index = 0\n , iterFn = getIterFn(O)\n , length, result, step, iterator;\n if(mapping)mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if(iterFn != undefined && !(C == Array && isArrayIter(iterFn))){\n for(iterator = iterFn.call(O), result = new C; !(step = iterator.next()).done; index++){\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for(result = new C(length); length > index; index++){\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.from.js\n ** module id = 426\n ** module chunks = 0\n **/","'use strict';\r\nvar $export = require('./_export')\r\n , $indexOf = require('./_array-includes')(false)\r\n , $native = [].indexOf\r\n , NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\r\n\r\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\r\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\r\n indexOf: function indexOf(searchElement /*, fromIndex = 0 */){\r\n return NEGATIVE_ZERO\r\n // convert -0 to +0\r\n ? $native.apply(this, arguments) || 0\r\n : $indexOf(this, searchElement, arguments[1]);\r\n }\r\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.index-of.js\n ** module id = 427\n ** module chunks = 0\n **/","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\r\nvar $export = require('./_export');\r\n\r\n$export($export.S, 'Array', {isArray: require('./_is-array')});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.is-array.js\n ** module id = 428\n ** module chunks = 0\n **/","'use strict';\r\n// 22.1.3.13 Array.prototype.join(separator)\r\nvar $export = require('./_export')\r\n , toIObject = require('./_to-iobject')\r\n , arrayJoin = [].join;\r\n\r\n// fallback for not array-like strings\r\n$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {\r\n join: function join(separator){\r\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\r\n }\r\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.join.js\n ** module id = 429\n ** module chunks = 0\n **/","'use strict';\r\nvar $export = require('./_export')\r\n , toIObject = require('./_to-iobject')\r\n , toInteger = require('./_to-integer')\r\n , toLength = require('./_to-length')\r\n , $native = [].lastIndexOf\r\n , NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\r\n\r\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\r\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\r\n lastIndexOf: function lastIndexOf(searchElement /*, fromIndex = @[*-1] */){\r\n // convert -0 to +0\r\n if(NEGATIVE_ZERO)return $native.apply(this, arguments) || 0;\r\n var O = toIObject(this)\r\n , length = toLength(O.length)\r\n , index = length - 1;\r\n if(arguments.length > 1)index = Math.min(index, toInteger(arguments[1]));\r\n if(index < 0)index = length + index;\r\n for(;index >= 0; index--)if(index in O)if(O[index] === searchElement)return index || 0;\r\n return -1;\r\n }\r\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.last-index-of.js\n ** module id = 430\n ** module chunks = 0\n **/","'use strict';\r\nvar $export = require('./_export')\r\n , $map = require('./_array-methods')(1);\r\n\r\n$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {\r\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\r\n map: function map(callbackfn /* , thisArg */){\r\n return $map(this, callbackfn, arguments[1]);\r\n }\r\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.map.js\n ** module id = 431\n ** module chunks = 0\n **/","'use strict';\nvar $export = require('./_export')\n , createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function(){\n function F(){}\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */){\n var index = 0\n , aLen = arguments.length\n , result = new (typeof this == 'function' ? this : Array)(aLen);\n while(aLen > index)createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.of.js\n ** module id = 432\n ** module chunks = 0\n **/","'use strict';\r\nvar $export = require('./_export')\r\n , $reduce = require('./_array-reduce');\r\n\r\n$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {\r\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\r\n reduceRight: function reduceRight(callbackfn /* , initialValue */){\r\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\r\n }\r\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.reduce-right.js\n ** module id = 433\n ** module chunks = 0\n **/","'use strict';\r\nvar $export = require('./_export')\r\n , $reduce = require('./_array-reduce');\r\n\r\n$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {\r\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\r\n reduce: function reduce(callbackfn /* , initialValue */){\r\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\r\n }\r\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.reduce.js\n ** module id = 434\n ** module chunks = 0\n **/","'use strict';\r\nvar $export = require('./_export')\r\n , html = require('./_html')\r\n , cof = require('./_cof')\r\n , toIndex = require('./_to-index')\r\n , toLength = require('./_to-length')\r\n , arraySlice = [].slice;\r\n\r\n// fallback for not array-like ES3 strings and DOM objects\r\n$export($export.P + $export.F * require('./_fails')(function(){\r\n if(html)arraySlice.call(html);\r\n}), 'Array', {\r\n slice: function slice(begin, end){\r\n var len = toLength(this.length)\r\n , klass = cof(this);\r\n end = end === undefined ? len : end;\r\n if(klass == 'Array')return arraySlice.call(this, begin, end);\r\n var start = toIndex(begin, len)\r\n , upTo = toIndex(end, len)\r\n , size = toLength(upTo - start)\r\n , cloned = Array(size)\r\n , i = 0;\r\n for(; i < size; i++)cloned[i] = klass == 'String'\r\n ? this.charAt(start + i)\r\n : this[start + i];\r\n return cloned;\r\n }\r\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.slice.js\n ** module id = 435\n ** module chunks = 0\n **/","'use strict';\r\nvar $export = require('./_export')\r\n , $some = require('./_array-methods')(3);\r\n\r\n$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {\r\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\r\n some: function some(callbackfn /* , thisArg */){\r\n return $some(this, callbackfn, arguments[1]);\r\n }\r\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.some.js\n ** module id = 436\n ** module chunks = 0\n **/","'use strict';\r\nvar $export = require('./_export')\r\n , aFunction = require('./_a-function')\r\n , toObject = require('./_to-object')\r\n , fails = require('./_fails')\r\n , $sort = [].sort\r\n , test = [1, 2, 3];\r\n\r\n$export($export.P + $export.F * (fails(function(){\r\n // IE8-\r\n test.sort(undefined);\r\n}) || !fails(function(){\r\n // V8 bug\r\n test.sort(null);\r\n // Old WebKit\r\n}) || !require('./_strict-method')($sort)), 'Array', {\r\n // 22.1.3.25 Array.prototype.sort(comparefn)\r\n sort: function sort(comparefn){\r\n return comparefn === undefined\r\n ? $sort.call(toObject(this))\r\n : $sort.call(toObject(this), aFunction(comparefn));\r\n }\r\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.sort.js\n ** module id = 437\n ** module chunks = 0\n **/","require('./_set-species')('Array');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.species.js\n ** module id = 438\n ** module chunks = 0\n **/","// 20.3.3.1 / 15.9.4.4 Date.now()\r\nvar $export = require('./_export');\r\n\r\n$export($export.S, 'Date', {now: function(){ return new Date().getTime(); }});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.date.now.js\n ** module id = 439\n ** module chunks = 0\n **/","'use strict';\r\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\r\nvar $export = require('./_export')\r\n , fails = require('./_fails')\r\n , getTime = Date.prototype.getTime;\r\n\r\nvar lz = function(num){\r\n return num > 9 ? num : '0' + num;\r\n};\r\n\r\n// PhantomJS / old WebKit has a broken implementations\r\n$export($export.P + $export.F * (fails(function(){\r\n return new Date(-5e13 - 1).toISOString() != '0385-07-25T07:06:39.999Z';\r\n}) || !fails(function(){\r\n new Date(NaN).toISOString();\r\n})), 'Date', {\r\n toISOString: function toISOString(){\r\n if(!isFinite(getTime.call(this)))throw RangeError('Invalid time value');\r\n var d = this\r\n , y = d.getUTCFullYear()\r\n , m = d.getUTCMilliseconds()\r\n , s = y < 0 ? '-' : y > 9999 ? '+' : '';\r\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\r\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\r\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\r\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\r\n }\r\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.date.to-iso-string.js\n ** module id = 440\n ** module chunks = 0\n **/","'use strict';\nvar $export = require('./_export')\n , toObject = require('./_to-object')\n , toPrimitive = require('./_to-primitive');\n\n$export($export.P + $export.F * require('./_fails')(function(){\n return new Date(NaN).toJSON() !== null || Date.prototype.toJSON.call({toISOString: function(){ return 1; }}) !== 1;\n}), 'Date', {\n toJSON: function toJSON(key){\n var O = toObject(this)\n , pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.date.to-json.js\n ** module id = 441\n ** module chunks = 0\n **/","var TO_PRIMITIVE = require('./_wks')('toPrimitive')\r\n , proto = Date.prototype;\r\n\r\nif(!(TO_PRIMITIVE in proto))require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.date.to-primitive.js\n ** module id = 442\n ** module chunks = 0\n **/","var DateProto = Date.prototype\n , INVALID_DATE = 'Invalid Date'\n , TO_STRING = 'toString'\n , $toString = DateProto[TO_STRING]\n , getTime = DateProto.getTime;\nif(new Date(NaN) + '' != INVALID_DATE){\n require('./_redefine')(DateProto, TO_STRING, function toString(){\n var value = getTime.call(this);\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.date.to-string.js\n ** module id = 443\n ** module chunks = 0\n **/","// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\r\nvar $export = require('./_export');\r\n\r\n$export($export.P, 'Function', {bind: require('./_bind')});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.function.bind.js\n ** module id = 444\n ** module chunks = 0\n **/","'use strict';\nvar isObject = require('./_is-object')\n , getPrototypeOf = require('./_object-gpo')\n , HAS_INSTANCE = require('./_wks')('hasInstance')\n , FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif(!(HAS_INSTANCE in FunctionProto))require('./_object-dp').f(FunctionProto, HAS_INSTANCE, {value: function(O){\n if(typeof this != 'function' || !isObject(O))return false;\n if(!isObject(this.prototype))return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while(O = getPrototypeOf(O))if(this.prototype === O)return true;\n return false;\n}});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.function.has-instance.js\n ** module id = 445\n ** module chunks = 0\n **/","var dP = require('./_object-dp').f\n , createDesc = require('./_property-desc')\n , has = require('./_has')\n , FProto = Function.prototype\n , nameRE = /^\\s*function ([^ (]*)/\n , NAME = 'name';\n\nvar isExtensible = Object.isExtensible || function(){\n return true;\n};\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function(){\n try {\n var that = this\n , name = ('' + that).match(nameRE)[1];\n has(that, NAME) || !isExtensible(that) || dP(that, NAME, createDesc(5, name));\n return name;\n } catch(e){\n return '';\n }\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.function.name.js\n ** module id = 446\n ** module chunks = 0\n **/","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export')\n , log1p = require('./_math-log1p')\n , sqrt = Math.sqrt\n , $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN \n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x){\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.acosh.js\n ** module id = 447\n ** module chunks = 0\n **/","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export')\n , $asinh = Math.asinh;\n\nfunction asinh(x){\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0 \n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', {asinh: asinh});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.asinh.js\n ** module id = 448\n ** module chunks = 0\n **/","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export')\n , $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0 \n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x){\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.atanh.js\n ** module id = 449\n ** module chunks = 0\n **/","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export')\n , sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x){\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.cbrt.js\n ** module id = 450\n ** module chunks = 0\n **/","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x){\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.clz32.js\n ** module id = 451\n ** module chunks = 0\n **/","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export')\n , exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x){\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.cosh.js\n ** module id = 452\n ** module chunks = 0\n **/","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export')\n , $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', {expm1: $expm1});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.expm1.js\n ** module id = 453\n ** module chunks = 0\n **/","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export')\n , sign = require('./_math-sign')\n , pow = Math.pow\n , EPSILON = pow(2, -52)\n , EPSILON32 = pow(2, -23)\n , MAX32 = pow(2, 127) * (2 - EPSILON32)\n , MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function(n){\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\n\n$export($export.S, 'Math', {\n fround: function fround(x){\n var $abs = Math.abs(x)\n , $sign = sign(x)\n , a, result;\n if($abs < MIN32)return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n if(result > MAX32 || result != result)return $sign * Infinity;\n return $sign * result;\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.fround.js\n ** module id = 454\n ** module chunks = 0\n **/","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export')\n , abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2){ // eslint-disable-line no-unused-vars\n var sum = 0\n , i = 0\n , aLen = arguments.length\n , larg = 0\n , arg, div;\n while(i < aLen){\n arg = abs(arguments[i++]);\n if(larg < arg){\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if(arg > 0){\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.hypot.js\n ** module id = 455\n ** module chunks = 0\n **/","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export')\n , $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function(){\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y){\n var UINT16 = 0xffff\n , xn = +x\n , yn = +y\n , xl = UINT16 & xn\n , yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.imul.js\n ** module id = 456\n ** module chunks = 0\n **/","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x){\n return Math.log(x) / Math.LN10;\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.log10.js\n ** module id = 457\n ** module chunks = 0\n **/","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {log1p: require('./_math-log1p')});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.log1p.js\n ** module id = 458\n ** module chunks = 0\n **/","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x){\n return Math.log(x) / Math.LN2;\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.log2.js\n ** module id = 459\n ** module chunks = 0\n **/","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {sign: require('./_math-sign')});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.sign.js\n ** module id = 460\n ** module chunks = 0\n **/","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export')\n , expm1 = require('./_math-expm1')\n , exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function(){\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x){\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.sinh.js\n ** module id = 461\n ** module chunks = 0\n **/","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export')\n , expm1 = require('./_math-expm1')\n , exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x){\n var a = expm1(x = +x)\n , b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.tanh.js\n ** module id = 462\n ** module chunks = 0\n **/","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it){\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.trunc.js\n ** module id = 463\n ** module chunks = 0\n **/","'use strict';\nvar global = require('./_global')\n , has = require('./_has')\n , cof = require('./_cof')\n , inheritIfRequired = require('./_inherit-if-required')\n , toPrimitive = require('./_to-primitive')\n , fails = require('./_fails')\n , gOPN = require('./_object-gopn').f\n , gOPD = require('./_object-gopd').f\n , dP = require('./_object-dp').f\n , $trim = require('./_string-trim').trim\n , NUMBER = 'Number'\n , $Number = global[NUMBER]\n , Base = $Number\n , proto = $Number.prototype\n // Opera ~12 has broken Object#toString\n , BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER\n , TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function(argument){\n var it = toPrimitive(argument, false);\n if(typeof it == 'string' && it.length > 2){\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0)\n , third, radix, maxCode;\n if(first === 43 || first === 45){\n third = it.charCodeAt(2);\n if(third === 88 || third === 120)return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if(first === 48){\n switch(it.charCodeAt(1)){\n case 66 : case 98 : radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79 : case 111 : radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default : return +it;\n }\n for(var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++){\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if(code < 48 || code > maxCode)return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif(!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')){\n $Number = function Number(value){\n var it = arguments.length < 1 ? 0 : value\n , that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function(){ proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for(var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++){\n if(has(Base, key = keys[j]) && !has($Number, key)){\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.number.constructor.js\n ** module id = 464\n ** module chunks = 0\n **/","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {EPSILON: Math.pow(2, -52)});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.number.epsilon.js\n ** module id = 465\n ** module chunks = 0\n **/","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export')\n , _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it){\n return typeof it == 'number' && _isFinite(it);\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.number.is-finite.js\n ** module id = 466\n ** module chunks = 0\n **/","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {isInteger: require('./_is-integer')});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.number.is-integer.js\n ** module id = 467\n ** module chunks = 0\n **/","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number){\n return number != number;\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.number.is-nan.js\n ** module id = 468\n ** module chunks = 0\n **/","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export')\n , isInteger = require('./_is-integer')\n , abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number){\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.number.is-safe-integer.js\n ** module id = 469\n ** module chunks = 0\n **/","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {MAX_SAFE_INTEGER: 0x1fffffffffffff});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.number.max-safe-integer.js\n ** module id = 470\n ** module chunks = 0\n **/","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {MIN_SAFE_INTEGER: -0x1fffffffffffff});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.number.min-safe-integer.js\n ** module id = 471\n ** module chunks = 0\n **/","var $export = require('./_export')\n , $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', {parseFloat: $parseFloat});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.number.parse-float.js\n ** module id = 472\n ** module chunks = 0\n **/","var $export = require('./_export')\n , $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', {parseInt: $parseInt});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.number.parse-int.js\n ** module id = 473\n ** module chunks = 0\n **/","'use strict';\r\nvar $export = require('./_export')\r\n , anInstance = require('./_an-instance')\r\n , toInteger = require('./_to-integer')\r\n , aNumberValue = require('./_a-number-value')\r\n , repeat = require('./_string-repeat')\r\n , $toFixed = 1..toFixed\r\n , floor = Math.floor\r\n , data = [0, 0, 0, 0, 0, 0]\r\n , ERROR = 'Number.toFixed: incorrect invocation!'\r\n , ZERO = '0';\r\n\r\nvar multiply = function(n, c){\r\n var i = -1\r\n , c2 = c;\r\n while(++i < 6){\r\n c2 += n * data[i];\r\n data[i] = c2 % 1e7;\r\n c2 = floor(c2 / 1e7);\r\n }\r\n};\r\nvar divide = function(n){\r\n var i = 6\r\n , c = 0;\r\n while(--i >= 0){\r\n c += data[i];\r\n data[i] = floor(c / n);\r\n c = (c % n) * 1e7;\r\n }\r\n};\r\nvar numToString = function(){\r\n var i = 6\r\n , s = '';\r\n while(--i >= 0){\r\n if(s !== '' || i === 0 || data[i] !== 0){\r\n var t = String(data[i]);\r\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\r\n }\r\n } return s;\r\n};\r\nvar pow = function(x, n, acc){\r\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\r\n};\r\nvar log = function(x){\r\n var n = 0\r\n , x2 = x;\r\n while(x2 >= 4096){\r\n n += 12;\r\n x2 /= 4096;\r\n }\r\n while(x2 >= 2){\r\n n += 1;\r\n x2 /= 2;\r\n } return n;\r\n};\r\n\r\n$export($export.P + $export.F * (!!$toFixed && (\r\n 0.00008.toFixed(3) !== '0.000' ||\r\n 0.9.toFixed(0) !== '1' ||\r\n 1.255.toFixed(2) !== '1.25' ||\r\n 1000000000000000128..toFixed(0) !== '1000000000000000128'\r\n) || !require('./_fails')(function(){\r\n // V8 ~ Android 4.3-\r\n $toFixed.call({});\r\n})), 'Number', {\r\n toFixed: function toFixed(fractionDigits){\r\n var x = aNumberValue(this, ERROR)\r\n , f = toInteger(fractionDigits)\r\n , s = ''\r\n , m = ZERO\r\n , e, z, j, k;\r\n if(f < 0 || f > 20)throw RangeError(ERROR);\r\n if(x != x)return 'NaN';\r\n if(x <= -1e21 || x >= 1e21)return String(x);\r\n if(x < 0){\r\n s = '-';\r\n x = -x;\r\n }\r\n if(x > 1e-21){\r\n e = log(x * pow(2, 69, 1)) - 69;\r\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\r\n z *= 0x10000000000000;\r\n e = 52 - e;\r\n if(e > 0){\r\n multiply(0, z);\r\n j = f;\r\n while(j >= 7){\r\n multiply(1e7, 0);\r\n j -= 7;\r\n }\r\n multiply(pow(10, j, 1), 0);\r\n j = e - 1;\r\n while(j >= 23){\r\n divide(1 << 23);\r\n j -= 23;\r\n }\r\n divide(1 << j);\r\n multiply(1, 1);\r\n divide(2);\r\n m = numToString();\r\n } else {\r\n multiply(0, z);\r\n multiply(1 << -e, 0);\r\n m = numToString() + repeat.call(ZERO, f);\r\n }\r\n }\r\n if(f > 0){\r\n k = m.length;\r\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\r\n } else {\r\n m = s + m;\r\n } return m;\r\n }\r\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.number.to-fixed.js\n ** module id = 474\n ** module chunks = 0\n **/","'use strict';\r\nvar $export = require('./_export')\r\n , $fails = require('./_fails')\r\n , aNumberValue = require('./_a-number-value')\r\n , $toPrecision = 1..toPrecision;\r\n\r\n$export($export.P + $export.F * ($fails(function(){\r\n // IE7-\r\n return $toPrecision.call(1, undefined) !== '1';\r\n}) || !$fails(function(){\r\n // V8 ~ Android 4.3-\r\n $toPrecision.call({});\r\n})), 'Number', {\r\n toPrecision: function toPrecision(precision){\r\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\r\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision); \r\n }\r\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.number.to-precision.js\n ** module id = 475\n ** module chunks = 0\n **/","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', {assign: require('./_object-assign')});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.assign.js\n ** module id = 476\n ** module chunks = 0\n **/","var $export = require('./_export')\r\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\r\n$export($export.S, 'Object', {create: require('./_object-create')});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.create.js\n ** module id = 477\n ** module chunks = 0\n **/","var $export = require('./_export');\r\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\r\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', {defineProperties: require('./_object-dps')});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.define-properties.js\n ** module id = 478\n ** module chunks = 0\n **/","var $export = require('./_export');\r\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\r\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', {defineProperty: require('./_object-dp').f});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.define-property.js\n ** module id = 479\n ** module chunks = 0\n **/","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object')\n , meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function($freeze){\n return function freeze(it){\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.freeze.js\n ** module id = 480\n ** module chunks = 0\n **/","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject')\n , $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function(){\n return function getOwnPropertyDescriptor(it, key){\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.get-own-property-descriptor.js\n ** module id = 481\n ** module chunks = 0\n **/","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function(){\n return require('./_object-gopn-ext').f;\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.get-own-property-names.js\n ** module id = 482\n ** module chunks = 0\n **/","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object')\n , $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function(){\n return function getPrototypeOf(it){\n return $getPrototypeOf(toObject(it));\n };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.get-prototype-of.js\n ** module id = 483\n ** module chunks = 0\n **/","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function($isExtensible){\n return function isExtensible(it){\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.is-extensible.js\n ** module id = 484\n ** module chunks = 0\n **/","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function($isFrozen){\n return function isFrozen(it){\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.is-frozen.js\n ** module id = 485\n ** module chunks = 0\n **/","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function($isSealed){\n return function isSealed(it){\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.is-sealed.js\n ** module id = 486\n ** module chunks = 0\n **/","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', {is: require('./_same-value')});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.is.js\n ** module id = 487\n ** module chunks = 0\n **/","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object')\n , $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function(){\n return function keys(it){\n return $keys(toObject(it));\n };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.keys.js\n ** module id = 488\n ** module chunks = 0\n **/","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object')\n , meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function($preventExtensions){\n return function preventExtensions(it){\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.prevent-extensions.js\n ** module id = 489\n ** module chunks = 0\n **/","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object')\n , meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function($seal){\n return function seal(it){\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.seal.js\n ** module id = 490\n ** module chunks = 0\n **/","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', {setPrototypeOf: require('./_set-proto').set});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.set-prototype-of.js\n ** module id = 491\n ** module chunks = 0\n **/","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof')\n , test = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif(test + '' != '[object z]'){\n require('./_redefine')(Object.prototype, 'toString', function toString(){\n return '[object ' + classof(this) + ']';\n }, true);\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.to-string.js\n ** module id = 492\n ** module chunks = 0\n **/","var $export = require('./_export')\r\n , $parseFloat = require('./_parse-float');\r\n// 18.2.4 parseFloat(string)\r\n$export($export.G + $export.F * (parseFloat != $parseFloat), {parseFloat: $parseFloat});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.parse-float.js\n ** module id = 493\n ** module chunks = 0\n **/","var $export = require('./_export')\r\n , $parseInt = require('./_parse-int');\r\n// 18.2.5 parseInt(string, radix)\r\n$export($export.G + $export.F * (parseInt != $parseInt), {parseInt: $parseInt});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.parse-int.js\n ** module id = 494\n ** module chunks = 0\n **/","'use strict';\nvar LIBRARY = require('./_library')\n , global = require('./_global')\n , ctx = require('./_ctx')\n , classof = require('./_classof')\n , $export = require('./_export')\n , isObject = require('./_is-object')\n , anObject = require('./_an-object')\n , aFunction = require('./_a-function')\n , anInstance = require('./_an-instance')\n , forOf = require('./_for-of')\n , setProto = require('./_set-proto').set\n , speciesConstructor = require('./_species-constructor')\n , task = require('./_task').set\n , microtask = require('./_microtask')()\n , PROMISE = 'Promise'\n , TypeError = global.TypeError\n , process = global.process\n , $Promise = global[PROMISE]\n , process = global.process\n , isNode = classof(process) == 'process'\n , empty = function(){ /* empty */ }\n , Internal, GenericPromiseCapability, Wrapper;\n\nvar USE_NATIVE = !!function(){\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1)\n , FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function(exec){ exec(empty, empty); };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch(e){ /* empty */ }\n}();\n\n// helpers\nvar sameConstructor = function(a, b){\n // with library wrapper special case\n return a === b || a === $Promise && b === Wrapper;\n};\nvar isThenable = function(it){\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar newPromiseCapability = function(C){\n return sameConstructor($Promise, C)\n ? new PromiseCapability(C)\n : new GenericPromiseCapability(C);\n};\nvar PromiseCapability = GenericPromiseCapability = function(C){\n var resolve, reject;\n this.promise = new C(function($$resolve, $$reject){\n if(resolve !== undefined || reject !== undefined)throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n};\nvar perform = function(exec){\n try {\n exec();\n } catch(e){\n return {error: e};\n }\n};\nvar notify = function(promise, isReject){\n if(promise._n)return;\n promise._n = true;\n var chain = promise._c;\n microtask(function(){\n var value = promise._v\n , ok = promise._s == 1\n , i = 0;\n var run = function(reaction){\n var handler = ok ? reaction.ok : reaction.fail\n , resolve = reaction.resolve\n , reject = reaction.reject\n , domain = reaction.domain\n , result, then;\n try {\n if(handler){\n if(!ok){\n if(promise._h == 2)onHandleUnhandled(promise);\n promise._h = 1;\n }\n if(handler === true)result = value;\n else {\n if(domain)domain.enter();\n result = handler(value);\n if(domain)domain.exit();\n }\n if(result === reaction.promise){\n reject(TypeError('Promise-chain cycle'));\n } else if(then = isThenable(result)){\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch(e){\n reject(e);\n }\n };\n while(chain.length > i)run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if(isReject && !promise._h)onUnhandled(promise);\n });\n};\nvar onUnhandled = function(promise){\n task.call(global, function(){\n var value = promise._v\n , abrupt, handler, console;\n if(isUnhandled(promise)){\n abrupt = perform(function(){\n if(isNode){\n process.emit('unhandledRejection', value, promise);\n } else if(handler = global.onunhandledrejection){\n handler({promise: promise, reason: value});\n } else if((console = global.console) && console.error){\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if(abrupt)throw abrupt.error;\n });\n};\nvar isUnhandled = function(promise){\n if(promise._h == 1)return false;\n var chain = promise._a || promise._c\n , i = 0\n , reaction;\n while(chain.length > i){\n reaction = chain[i++];\n if(reaction.fail || !isUnhandled(reaction.promise))return false;\n } return true;\n};\nvar onHandleUnhandled = function(promise){\n task.call(global, function(){\n var handler;\n if(isNode){\n process.emit('rejectionHandled', promise);\n } else if(handler = global.onrejectionhandled){\n handler({promise: promise, reason: promise._v});\n }\n });\n};\nvar $reject = function(value){\n var promise = this;\n if(promise._d)return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if(!promise._a)promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function(value){\n var promise = this\n , then;\n if(promise._d)return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if(promise === value)throw TypeError(\"Promise can't be resolved itself\");\n if(then = isThenable(value)){\n microtask(function(){\n var wrapper = {_w: promise, _d: false}; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch(e){\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch(e){\n $reject.call({_w: promise, _d: false}, e); // wrap\n }\n};\n\n// constructor polyfill\nif(!USE_NATIVE){\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor){\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch(err){\n $reject.call(this, err);\n }\n };\n Internal = function Promise(executor){\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected){\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if(this._a)this._a.push(reaction);\n if(this._s)notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function(onRejected){\n return this.then(undefined, onRejected);\n }\n });\n PromiseCapability = function(){\n var promise = new Internal;\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, {Promise: $Promise});\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r){\n var capability = newPromiseCapability(this)\n , $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x){\n // instanceof instead of internal slot check because we should fix it without replacement native Promise core\n if(x instanceof $Promise && sameConstructor(x.constructor, this))return x;\n var capability = newPromiseCapability(this)\n , $$resolve = capability.resolve;\n $$resolve(x);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function(iter){\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable){\n var C = this\n , capability = newPromiseCapability(C)\n , resolve = capability.resolve\n , reject = capability.reject;\n var abrupt = perform(function(){\n var values = []\n , index = 0\n , remaining = 1;\n forOf(iterable, false, function(promise){\n var $index = index++\n , alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function(value){\n if(alreadyCalled)return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if(abrupt)reject(abrupt.error);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable){\n var C = this\n , capability = newPromiseCapability(C)\n , reject = capability.reject;\n var abrupt = perform(function(){\n forOf(iterable, false, function(promise){\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if(abrupt)reject(abrupt.error);\n return capability.promise;\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.promise.js\n ** module id = 495\n ** module chunks = 0\n **/","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export')\n , aFunction = require('./_a-function')\n , anObject = require('./_an-object')\n , _apply = Function.apply;\n\n$export($export.S, 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList){\n return _apply.call(aFunction(target), thisArgument, anObject(argumentsList));\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.apply.js\n ** module id = 496\n ** module chunks = 0\n **/","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export')\n , create = require('./_object-create')\n , aFunction = require('./_a-function')\n , anObject = require('./_an-object')\n , isObject = require('./_is-object')\n , bind = require('./_bind');\n\n// MS Edge supports only 2 arguments\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\n$export($export.S + $export.F * require('./_fails')(function(){\n function F(){}\n return !(Reflect.construct(function(){}, [], F) instanceof F);\n}), 'Reflect', {\n construct: function construct(Target, args /*, newTarget*/){\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if(Target == newTarget){\n // w/o altered newTarget, optimization for 0-4 arguments\n switch(args.length){\n case 0: return new Target;\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args));\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype\n , instance = create(isObject(proto) ? proto : Object.prototype)\n , result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.construct.js\n ** module id = 497\n ** module chunks = 0\n **/","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp')\n , $export = require('./_export')\n , anObject = require('./_an-object')\n , toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function(){\n Reflect.defineProperty(dP.f({}, 1, {value: 1}), 1, {value: 2});\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes){\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch(e){\n return false;\n }\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.define-property.js\n ** module id = 498\n ** module chunks = 0\n **/","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export')\n , gOPD = require('./_object-gopd').f\n , anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey){\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.delete-property.js\n ** module id = 499\n ** module chunks = 0\n **/","'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export = require('./_export')\n , anObject = require('./_an-object');\nvar Enumerate = function(iterated){\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = [] // keys\n , key;\n for(key in iterated)keys.push(key);\n};\nrequire('./_iter-create')(Enumerate, 'Object', function(){\n var that = this\n , keys = that._k\n , key;\n do {\n if(that._i >= keys.length)return {value: undefined, done: true};\n } while(!((key = keys[that._i++]) in that._t));\n return {value: key, done: false};\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target){\n return new Enumerate(target);\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.enumerate.js\n ** module id = 500\n ** module chunks = 0\n **/","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd')\n , $export = require('./_export')\n , anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey){\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.get-own-property-descriptor.js\n ** module id = 501\n ** module chunks = 0\n **/","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export')\n , getProto = require('./_object-gpo')\n , anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target){\n return getProto(anObject(target));\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.get-prototype-of.js\n ** module id = 502\n ** module chunks = 0\n **/","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd')\n , getPrototypeOf = require('./_object-gpo')\n , has = require('./_has')\n , $export = require('./_export')\n , isObject = require('./_is-object')\n , anObject = require('./_an-object');\n\nfunction get(target, propertyKey/*, receiver*/){\n var receiver = arguments.length < 3 ? target : arguments[2]\n , desc, proto;\n if(anObject(target) === receiver)return target[propertyKey];\n if(desc = gOPD.f(target, propertyKey))return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if(isObject(proto = getPrototypeOf(target)))return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', {get: get});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.get.js\n ** module id = 503\n ** module chunks = 0\n **/","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey){\n return propertyKey in target;\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.has.js\n ** module id = 504\n ** module chunks = 0\n **/","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export')\n , anObject = require('./_an-object')\n , $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target){\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.is-extensible.js\n ** module id = 505\n ** module chunks = 0\n **/","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {ownKeys: require('./_own-keys')});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.own-keys.js\n ** module id = 506\n ** module chunks = 0\n **/","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export')\n , anObject = require('./_an-object')\n , $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target){\n anObject(target);\n try {\n if($preventExtensions)$preventExtensions(target);\n return true;\n } catch(e){\n return false;\n }\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.prevent-extensions.js\n ** module id = 507\n ** module chunks = 0\n **/","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export')\n , setProto = require('./_set-proto');\n\nif(setProto)$export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto){\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch(e){\n return false;\n }\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.set-prototype-of.js\n ** module id = 508\n ** module chunks = 0\n **/","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp')\n , gOPD = require('./_object-gopd')\n , getPrototypeOf = require('./_object-gpo')\n , has = require('./_has')\n , $export = require('./_export')\n , createDesc = require('./_property-desc')\n , anObject = require('./_an-object')\n , isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V/*, receiver*/){\n var receiver = arguments.length < 4 ? target : arguments[3]\n , ownDesc = gOPD.f(anObject(target), propertyKey)\n , existingDescriptor, proto;\n if(!ownDesc){\n if(isObject(proto = getPrototypeOf(target))){\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if(has(ownDesc, 'value')){\n if(ownDesc.writable === false || !isObject(receiver))return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', {set: set});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.set.js\n ** module id = 509\n ** module chunks = 0\n **/","var global = require('./_global')\n , inheritIfRequired = require('./_inherit-if-required')\n , dP = require('./_object-dp').f\n , gOPN = require('./_object-gopn').f\n , isRegExp = require('./_is-regexp')\n , $flags = require('./_flags')\n , $RegExp = global.RegExp\n , Base = $RegExp\n , proto = $RegExp.prototype\n , re1 = /a/g\n , re2 = /a/g\n // \"new\" creates a new object, old webkit buggy here\n , CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif(require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function(){\n re2[require('./_wks')('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))){\n $RegExp = function RegExp(p, f){\n var tiRE = this instanceof $RegExp\n , piRE = isRegExp(p)\n , fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function(key){\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function(){ return Base[key]; },\n set: function(it){ Base[key] = it; }\n });\n };\n for(var keys = gOPN(Base), i = 0; keys.length > i; )proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.regexp.constructor.js\n ** module id = 510\n ** module chunks = 0\n **/","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function(defined, MATCH, $match){\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp){\n 'use strict';\n var O = defined(this)\n , fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.regexp.match.js\n ** module id = 511\n ** module chunks = 0\n **/","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function(defined, REPLACE, $replace){\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue){\n 'use strict';\n var O = defined(this)\n , fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.regexp.replace.js\n ** module id = 512\n ** module chunks = 0\n **/","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function(defined, SEARCH, $search){\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp){\n 'use strict';\n var O = defined(this)\n , fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.regexp.search.js\n ** module id = 513\n ** module chunks = 0\n **/","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function(defined, SPLIT, $split){\n 'use strict';\n var isRegExp = require('./_is-regexp')\n , _split = $split\n , $push = [].push\n , $SPLIT = 'split'\n , LENGTH = 'length'\n , LAST_INDEX = 'lastIndex';\n if(\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ){\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function(separator, limit){\n var string = String(this);\n if(separator === undefined && limit === 0)return [];\n // If `separator` is not a regex, use native split\n if(!isRegExp(separator))return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if(!NPCG)separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while(match = separatorCopy.exec(string)){\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if(lastIndex > lastLastIndex){\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n if(!NPCG && match[LENGTH] > 1)match[0].replace(separator2, function(){\n for(i = 1; i < arguments[LENGTH] - 2; i++)if(arguments[i] === undefined)match[i] = undefined;\n });\n if(match[LENGTH] > 1 && match.index < string[LENGTH])$push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if(output[LENGTH] >= splitLimit)break;\n }\n if(separatorCopy[LAST_INDEX] === match.index)separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if(lastLastIndex === string[LENGTH]){\n if(lastLength || !separatorCopy.test(''))output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if('0'[$SPLIT](undefined, 0)[LENGTH]){\n $split = function(separator, limit){\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit){\n var O = defined(this)\n , fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.regexp.split.js\n ** module id = 514\n ** module chunks = 0\n **/","'use strict';\r\nrequire('./es6.regexp.flags');\r\nvar anObject = require('./_an-object')\r\n , $flags = require('./_flags')\r\n , DESCRIPTORS = require('./_descriptors')\r\n , TO_STRING = 'toString'\r\n , $toString = /./[TO_STRING];\r\n\r\nvar define = function(fn){\r\n require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\r\n};\r\n\r\n// 21.2.5.14 RegExp.prototype.toString()\r\nif(require('./_fails')(function(){ return $toString.call({source: 'a', flags: 'b'}) != '/a/b'; })){\r\n define(function toString(){\r\n var R = anObject(this);\r\n return '/'.concat(R.source, '/',\r\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\r\n });\r\n// FF44- RegExp#toString has a wrong name\r\n} else if($toString.name != TO_STRING){\r\n define(function toString(){\r\n return $toString.call(this);\r\n });\r\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.regexp.to-string.js\n ** module id = 515\n ** module chunks = 0\n **/","'use strict';\n// B.2.3.2 String.prototype.anchor(name)\nrequire('./_string-html')('anchor', function(createHTML){\n return function anchor(name){\n return createHTML(this, 'a', 'name', name);\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.anchor.js\n ** module id = 516\n ** module chunks = 0\n **/","'use strict';\n// B.2.3.3 String.prototype.big()\nrequire('./_string-html')('big', function(createHTML){\n return function big(){\n return createHTML(this, 'big', '', '');\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.big.js\n ** module id = 517\n ** module chunks = 0\n **/","'use strict';\n// B.2.3.4 String.prototype.blink()\nrequire('./_string-html')('blink', function(createHTML){\n return function blink(){\n return createHTML(this, 'blink', '', '');\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.blink.js\n ** module id = 518\n ** module chunks = 0\n **/","'use strict';\n// B.2.3.5 String.prototype.bold()\nrequire('./_string-html')('bold', function(createHTML){\n return function bold(){\n return createHTML(this, 'b', '', '');\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.bold.js\n ** module id = 519\n ** module chunks = 0\n **/","'use strict';\nvar $export = require('./_export')\n , $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos){\n return $at(this, pos);\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.code-point-at.js\n ** module id = 520\n ** module chunks = 0\n **/","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export')\n , toLength = require('./_to-length')\n , context = require('./_string-context')\n , ENDS_WITH = 'endsWith'\n , $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /*, endPosition = @length */){\n var that = context(this, searchString, ENDS_WITH)\n , endPosition = arguments.length > 1 ? arguments[1] : undefined\n , len = toLength(that.length)\n , end = endPosition === undefined ? len : Math.min(toLength(endPosition), len)\n , search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.ends-with.js\n ** module id = 521\n ** module chunks = 0\n **/","'use strict';\n// B.2.3.6 String.prototype.fixed()\nrequire('./_string-html')('fixed', function(createHTML){\n return function fixed(){\n return createHTML(this, 'tt', '', '');\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.fixed.js\n ** module id = 522\n ** module chunks = 0\n **/","'use strict';\n// B.2.3.7 String.prototype.fontcolor(color)\nrequire('./_string-html')('fontcolor', function(createHTML){\n return function fontcolor(color){\n return createHTML(this, 'font', 'color', color);\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.fontcolor.js\n ** module id = 523\n ** module chunks = 0\n **/","'use strict';\n// B.2.3.8 String.prototype.fontsize(size)\nrequire('./_string-html')('fontsize', function(createHTML){\n return function fontsize(size){\n return createHTML(this, 'font', 'size', size);\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.fontsize.js\n ** module id = 524\n ** module chunks = 0\n **/","var $export = require('./_export')\n , toIndex = require('./_to-index')\n , fromCharCode = String.fromCharCode\n , $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x){ // eslint-disable-line no-unused-vars\n var res = []\n , aLen = arguments.length\n , i = 0\n , code;\n while(aLen > i){\n code = +arguments[i++];\n if(toIndex(code, 0x10ffff) !== code)throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.from-code-point.js\n ** module id = 525\n ** module chunks = 0\n **/","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export')\n , context = require('./_string-context')\n , INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /*, position = 0 */){\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.includes.js\n ** module id = 526\n ** module chunks = 0\n **/","'use strict';\n// B.2.3.9 String.prototype.italics()\nrequire('./_string-html')('italics', function(createHTML){\n return function italics(){\n return createHTML(this, 'i', '', '');\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.italics.js\n ** module id = 527\n ** module chunks = 0\n **/","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function(iterated){\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function(){\n var O = this._t\n , index = this._i\n , point;\n if(index >= O.length)return {value: undefined, done: true};\n point = $at(O, index);\n this._i += point.length;\n return {value: point, done: false};\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.iterator.js\n ** module id = 528\n ** module chunks = 0\n **/","'use strict';\n// B.2.3.10 String.prototype.link(url)\nrequire('./_string-html')('link', function(createHTML){\n return function link(url){\n return createHTML(this, 'a', 'href', url);\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.link.js\n ** module id = 529\n ** module chunks = 0\n **/","var $export = require('./_export')\n , toIObject = require('./_to-iobject')\n , toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite){\n var tpl = toIObject(callSite.raw)\n , len = toLength(tpl.length)\n , aLen = arguments.length\n , res = []\n , i = 0;\n while(len > i){\n res.push(String(tpl[i++]));\n if(i < aLen)res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.raw.js\n ** module id = 530\n ** module chunks = 0\n **/","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.repeat.js\n ** module id = 531\n ** module chunks = 0\n **/","'use strict';\n// B.2.3.11 String.prototype.small()\nrequire('./_string-html')('small', function(createHTML){\n return function small(){\n return createHTML(this, 'small', '', '');\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.small.js\n ** module id = 532\n ** module chunks = 0\n **/","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export')\n , toLength = require('./_to-length')\n , context = require('./_string-context')\n , STARTS_WITH = 'startsWith'\n , $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /*, position = 0 */){\n var that = context(this, searchString, STARTS_WITH)\n , index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length))\n , search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.starts-with.js\n ** module id = 533\n ** module chunks = 0\n **/","'use strict';\n// B.2.3.12 String.prototype.strike()\nrequire('./_string-html')('strike', function(createHTML){\n return function strike(){\n return createHTML(this, 'strike', '', '');\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.strike.js\n ** module id = 534\n ** module chunks = 0\n **/","'use strict';\n// B.2.3.13 String.prototype.sub()\nrequire('./_string-html')('sub', function(createHTML){\n return function sub(){\n return createHTML(this, 'sub', '', '');\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.sub.js\n ** module id = 535\n ** module chunks = 0\n **/","'use strict';\n// B.2.3.14 String.prototype.sup()\nrequire('./_string-html')('sup', function(createHTML){\n return function sup(){\n return createHTML(this, 'sup', '', '');\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.sup.js\n ** module id = 536\n ** module chunks = 0\n **/","'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./_string-trim')('trim', function($trim){\n return function trim(){\n return $trim(this, 3);\n };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.trim.js\n ** module id = 537\n ** module chunks = 0\n **/","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global')\n , has = require('./_has')\n , DESCRIPTORS = require('./_descriptors')\n , $export = require('./_export')\n , redefine = require('./_redefine')\n , META = require('./_meta').KEY\n , $fails = require('./_fails')\n , shared = require('./_shared')\n , setToStringTag = require('./_set-to-string-tag')\n , uid = require('./_uid')\n , wks = require('./_wks')\n , wksExt = require('./_wks-ext')\n , wksDefine = require('./_wks-define')\n , keyOf = require('./_keyof')\n , enumKeys = require('./_enum-keys')\n , isArray = require('./_is-array')\n , anObject = require('./_an-object')\n , toIObject = require('./_to-iobject')\n , toPrimitive = require('./_to-primitive')\n , createDesc = require('./_property-desc')\n , _create = require('./_object-create')\n , gOPNExt = require('./_object-gopn-ext')\n , $GOPD = require('./_object-gopd')\n , $DP = require('./_object-dp')\n , $keys = require('./_object-keys')\n , gOPD = $GOPD.f\n , dP = $DP.f\n , gOPN = gOPNExt.f\n , $Symbol = global.Symbol\n , $JSON = global.JSON\n , _stringify = $JSON && $JSON.stringify\n , PROTOTYPE = 'prototype'\n , HIDDEN = wks('_hidden')\n , TO_PRIMITIVE = wks('toPrimitive')\n , isEnum = {}.propertyIsEnumerable\n , SymbolRegistry = shared('symbol-registry')\n , AllSymbols = shared('symbols')\n , OPSymbols = shared('op-symbols')\n , ObjectProto = Object[PROTOTYPE]\n , USE_NATIVE = typeof $Symbol == 'function'\n , QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function(){\n return _create(dP({}, 'a', {\n get: function(){ return dP(this, 'a', {value: 7}).a; }\n })).a != 7;\n}) ? function(it, key, D){\n var protoDesc = gOPD(ObjectProto, key);\n if(protoDesc)delete ObjectProto[key];\n dP(it, key, D);\n if(protoDesc && it !== ObjectProto)dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function(tag){\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function(it){\n return typeof it == 'symbol';\n} : function(it){\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D){\n if(it === ObjectProto)$defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if(has(AllSymbols, key)){\n if(!D.enumerable){\n if(!has(it, HIDDEN))dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false;\n D = _create(D, {enumerable: createDesc(0, false)});\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P){\n anObject(it);\n var keys = enumKeys(P = toIObject(P))\n , i = 0\n , l = keys.length\n , key;\n while(l > i)$defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P){\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key){\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if(this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){\n it = toIObject(it);\n key = toPrimitive(key, true);\n if(it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return;\n var D = gOPD(it, key);\n if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it){\n var names = gOPN(toIObject(it))\n , result = []\n , i = 0\n , key;\n while(names.length > i){\n if(!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META)result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it){\n var IS_OP = it === ObjectProto\n , names = gOPN(IS_OP ? OPSymbols : toIObject(it))\n , result = []\n , i = 0\n , key;\n while(names.length > i){\n if(has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true))result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif(!USE_NATIVE){\n $Symbol = function Symbol(){\n if(this instanceof $Symbol)throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function(value){\n if(this === ObjectProto)$set.call(OPSymbols, value);\n if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if(DESCRIPTORS && setter)setSymbolDesc(ObjectProto, tag, {configurable: true, set: $set});\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString(){\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if(DESCRIPTORS && !require('./_library')){\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function(name){\n return wrap(wks(name));\n }\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, {Symbol: $Symbol});\n\nfor(var symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), i = 0; symbols.length > i; )wks(symbols[i++]);\n\nfor(var symbols = $keys(wks.store), i = 0; symbols.length > i; )wksDefine(symbols[i++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function(key){\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(key){\n if(isSymbol(key))return keyOf(SymbolRegistry, key);\n throw TypeError(key + ' is not a symbol!');\n },\n useSetter: function(){ setter = true; },\n useSimple: function(){ setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function(){\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it){\n if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined\n var args = [it]\n , i = 1\n , replacer, $replacer;\n while(arguments.length > i)args.push(arguments[i++]);\n replacer = args[1];\n if(typeof replacer == 'function')$replacer = replacer;\n if($replacer || !isArray(replacer))replacer = function(key, value){\n if($replacer)value = $replacer.call(this, key, value);\n if(!isSymbol(value))return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.symbol.js\n ** module id = 538\n ** module chunks = 0\n **/","'use strict';\nvar $export = require('./_export')\n , $typed = require('./_typed')\n , buffer = require('./_typed-buffer')\n , anObject = require('./_an-object')\n , toIndex = require('./_to-index')\n , toLength = require('./_to-length')\n , isObject = require('./_is-object')\n , TYPED_ARRAY = require('./_wks')('typed_array')\n , ArrayBuffer = require('./_global').ArrayBuffer\n , speciesConstructor = require('./_species-constructor')\n , $ArrayBuffer = buffer.ArrayBuffer\n , $DataView = buffer.DataView\n , $isView = $typed.ABV && ArrayBuffer.isView\n , $slice = $ArrayBuffer.prototype.slice\n , VIEW = $typed.VIEW\n , ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), {ArrayBuffer: $ArrayBuffer});\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it){\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function(){\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end){\n if($slice !== undefined && end === undefined)return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength\n , first = toIndex(start, len)\n , final = toIndex(end === undefined ? len : end, len)\n , result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first))\n , viewS = new $DataView(this)\n , viewT = new $DataView(result)\n , index = 0;\n while(first < final){\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.typed.array-buffer.js\n ** module id = 539\n ** module chunks = 0\n **/","var $export = require('./_export');\n$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {\n DataView: require('./_typed-buffer').DataView\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.typed.data-view.js\n ** module id = 540\n ** module chunks = 0\n **/","require('./_typed-array')('Float32', 4, function(init){\n return function Float32Array(data, byteOffset, length){\n return init(this, data, byteOffset, length);\n };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.typed.float32-array.js\n ** module id = 541\n ** module chunks = 0\n **/","require('./_typed-array')('Float64', 8, function(init){\n return function Float64Array(data, byteOffset, length){\n return init(this, data, byteOffset, length);\n };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.typed.float64-array.js\n ** module id = 542\n ** module chunks = 0\n **/","require('./_typed-array')('Int16', 2, function(init){\n return function Int16Array(data, byteOffset, length){\n return init(this, data, byteOffset, length);\n };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.typed.int16-array.js\n ** module id = 543\n ** module chunks = 0\n **/","require('./_typed-array')('Int32', 4, function(init){\n return function Int32Array(data, byteOffset, length){\n return init(this, data, byteOffset, length);\n };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.typed.int32-array.js\n ** module id = 544\n ** module chunks = 0\n **/","require('./_typed-array')('Int8', 1, function(init){\n return function Int8Array(data, byteOffset, length){\n return init(this, data, byteOffset, length);\n };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.typed.int8-array.js\n ** module id = 545\n ** module chunks = 0\n **/","require('./_typed-array')('Uint16', 2, function(init){\n return function Uint16Array(data, byteOffset, length){\n return init(this, data, byteOffset, length);\n };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.typed.uint16-array.js\n ** module id = 546\n ** module chunks = 0\n **/","require('./_typed-array')('Uint32', 4, function(init){\n return function Uint32Array(data, byteOffset, length){\n return init(this, data, byteOffset, length);\n };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.typed.uint32-array.js\n ** module id = 547\n ** module chunks = 0\n **/","require('./_typed-array')('Uint8', 1, function(init){\n return function Uint8Array(data, byteOffset, length){\n return init(this, data, byteOffset, length);\n };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.typed.uint8-array.js\n ** module id = 548\n ** module chunks = 0\n **/","require('./_typed-array')('Uint8', 1, function(init){\n return function Uint8ClampedArray(data, byteOffset, length){\n return init(this, data, byteOffset, length);\n };\n}, true);\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.typed.uint8-clamped-array.js\n ** module id = 549\n ** module chunks = 0\n **/","'use strict';\nvar weak = require('./_collection-weak');\n\n// 23.4 WeakSet Objects\nrequire('./_collection')('WeakSet', function(get){\n return function WeakSet(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value){\n return weak.def(this, value, true);\n }\n}, weak, false, true);\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.weak-set.js\n ** module id = 550\n ** module chunks = 0\n **/","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export')\n , $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /*, fromIndex = 0 */){\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.array.includes.js\n ** module id = 551\n ** module chunks = 0\n **/","// https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask\r\nvar $export = require('./_export')\r\n , microtask = require('./_microtask')()\r\n , process = require('./_global').process\r\n , isNode = require('./_cof')(process) == 'process';\r\n\r\n$export($export.G, {\r\n asap: function asap(fn){\r\n var domain = isNode && process.domain;\r\n microtask(domain ? domain.bind(fn) : fn);\r\n }\r\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.asap.js\n ** module id = 552\n ** module chunks = 0\n **/","// https://github.com/ljharb/proposal-is-error\nvar $export = require('./_export')\n , cof = require('./_cof');\n\n$export($export.S, 'Error', {\n isError: function isError(it){\n return cof(it) === 'Error';\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.error.is-error.js\n ** module id = 553\n ** module chunks = 0\n **/","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./_export');\n\n$export($export.P + $export.R, 'Map', {toJSON: require('./_collection-to-json')('Map')});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.map.to-json.js\n ** module id = 554\n ** module chunks = 0\n **/","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n iaddh: function iaddh(x0, x1, y0, y1){\n var $x0 = x0 >>> 0\n , $x1 = x1 >>> 0\n , $y0 = y0 >>> 0;\n return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.math.iaddh.js\n ** module id = 555\n ** module chunks = 0\n **/","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n imulh: function imulh(u, v){\n var UINT16 = 0xffff\n , $u = +u\n , $v = +v\n , u0 = $u & UINT16\n , v0 = $v & UINT16\n , u1 = $u >> 16\n , v1 = $v >> 16\n , t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.math.imulh.js\n ** module id = 556\n ** module chunks = 0\n **/","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n isubh: function isubh(x0, x1, y0, y1){\n var $x0 = x0 >>> 0\n , $x1 = x1 >>> 0\n , $y0 = y0 >>> 0;\n return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.math.isubh.js\n ** module id = 557\n ** module chunks = 0\n **/","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n umulh: function umulh(u, v){\n var UINT16 = 0xffff\n , $u = +u\n , $v = +v\n , u0 = $u & UINT16\n , v0 = $v & UINT16\n , u1 = $u >>> 16\n , v1 = $v >>> 16\n , t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.math.umulh.js\n ** module id = 558\n ** module chunks = 0\n **/","'use strict';\r\nvar $export = require('./_export')\r\n , toObject = require('./_to-object')\r\n , aFunction = require('./_a-function')\r\n , $defineProperty = require('./_object-dp');\r\n\r\n// B.2.2.2 Object.prototype.__defineGetter__(P, getter)\r\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\r\n __defineGetter__: function __defineGetter__(P, getter){\r\n $defineProperty.f(toObject(this), P, {get: aFunction(getter), enumerable: true, configurable: true});\r\n }\r\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.object.define-getter.js\n ** module id = 559\n ** module chunks = 0\n **/","'use strict';\r\nvar $export = require('./_export')\r\n , toObject = require('./_to-object')\r\n , aFunction = require('./_a-function')\r\n , $defineProperty = require('./_object-dp');\r\n\r\n// B.2.2.3 Object.prototype.__defineSetter__(P, setter)\r\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\r\n __defineSetter__: function __defineSetter__(P, setter){\r\n $defineProperty.f(toObject(this), P, {set: aFunction(setter), enumerable: true, configurable: true});\r\n }\r\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.object.define-setter.js\n ** module id = 560\n ** module chunks = 0\n **/","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export')\n , $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it){\n return $entries(it);\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.object.entries.js\n ** module id = 561\n ** module chunks = 0\n **/","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export')\n , ownKeys = require('./_own-keys')\n , toIObject = require('./_to-iobject')\n , gOPD = require('./_object-gopd')\n , createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object){\n var O = toIObject(object)\n , getDesc = gOPD.f\n , keys = ownKeys(O)\n , result = {}\n , i = 0\n , key, D;\n while(keys.length > i)createProperty(result, key = keys[i++], getDesc(O, key));\n return result;\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.object.get-own-property-descriptors.js\n ** module id = 562\n ** module chunks = 0\n **/","'use strict';\r\nvar $export = require('./_export')\r\n , toObject = require('./_to-object')\r\n , toPrimitive = require('./_to-primitive')\r\n , getPrototypeOf = require('./_object-gpo')\r\n , getOwnPropertyDescriptor = require('./_object-gopd').f;\r\n\r\n// B.2.2.4 Object.prototype.__lookupGetter__(P)\r\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\r\n __lookupGetter__: function __lookupGetter__(P){\r\n var O = toObject(this)\r\n , K = toPrimitive(P, true)\r\n , D;\r\n do {\r\n if(D = getOwnPropertyDescriptor(O, K))return D.get;\r\n } while(O = getPrototypeOf(O));\r\n }\r\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.object.lookup-getter.js\n ** module id = 563\n ** module chunks = 0\n **/","'use strict';\r\nvar $export = require('./_export')\r\n , toObject = require('./_to-object')\r\n , toPrimitive = require('./_to-primitive')\r\n , getPrototypeOf = require('./_object-gpo')\r\n , getOwnPropertyDescriptor = require('./_object-gopd').f;\r\n\r\n// B.2.2.5 Object.prototype.__lookupSetter__(P)\r\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\r\n __lookupSetter__: function __lookupSetter__(P){\r\n var O = toObject(this)\r\n , K = toPrimitive(P, true)\r\n , D;\r\n do {\r\n if(D = getOwnPropertyDescriptor(O, K))return D.set;\r\n } while(O = getPrototypeOf(O));\r\n }\r\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.object.lookup-setter.js\n ** module id = 564\n ** module chunks = 0\n **/","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export')\n , $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it){\n return $values(it);\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.object.values.js\n ** module id = 565\n ** module chunks = 0\n **/","'use strict';\r\n// https://github.com/zenparsing/es-observable\r\nvar $export = require('./_export')\r\n , global = require('./_global')\r\n , core = require('./_core')\r\n , microtask = require('./_microtask')()\r\n , OBSERVABLE = require('./_wks')('observable')\r\n , aFunction = require('./_a-function')\r\n , anObject = require('./_an-object')\r\n , anInstance = require('./_an-instance')\r\n , redefineAll = require('./_redefine-all')\r\n , hide = require('./_hide')\r\n , forOf = require('./_for-of')\r\n , RETURN = forOf.RETURN;\r\n\r\nvar getMethod = function(fn){\r\n return fn == null ? undefined : aFunction(fn);\r\n};\r\n\r\nvar cleanupSubscription = function(subscription){\r\n var cleanup = subscription._c;\r\n if(cleanup){\r\n subscription._c = undefined;\r\n cleanup();\r\n }\r\n};\r\n\r\nvar subscriptionClosed = function(subscription){\r\n return subscription._o === undefined;\r\n};\r\n\r\nvar closeSubscription = function(subscription){\r\n if(!subscriptionClosed(subscription)){\r\n subscription._o = undefined;\r\n cleanupSubscription(subscription);\r\n }\r\n};\r\n\r\nvar Subscription = function(observer, subscriber){\r\n anObject(observer);\r\n this._c = undefined;\r\n this._o = observer;\r\n observer = new SubscriptionObserver(this);\r\n try {\r\n var cleanup = subscriber(observer)\r\n , subscription = cleanup;\r\n if(cleanup != null){\r\n if(typeof cleanup.unsubscribe === 'function')cleanup = function(){ subscription.unsubscribe(); };\r\n else aFunction(cleanup);\r\n this._c = cleanup;\r\n }\r\n } catch(e){\r\n observer.error(e);\r\n return;\r\n } if(subscriptionClosed(this))cleanupSubscription(this);\r\n};\r\n\r\nSubscription.prototype = redefineAll({}, {\r\n unsubscribe: function unsubscribe(){ closeSubscription(this); }\r\n});\r\n\r\nvar SubscriptionObserver = function(subscription){\r\n this._s = subscription;\r\n};\r\n\r\nSubscriptionObserver.prototype = redefineAll({}, {\r\n next: function next(value){\r\n var subscription = this._s;\r\n if(!subscriptionClosed(subscription)){\r\n var observer = subscription._o;\r\n try {\r\n var m = getMethod(observer.next);\r\n if(m)return m.call(observer, value);\r\n } catch(e){\r\n try {\r\n closeSubscription(subscription);\r\n } finally {\r\n throw e;\r\n }\r\n }\r\n }\r\n },\r\n error: function error(value){\r\n var subscription = this._s;\r\n if(subscriptionClosed(subscription))throw value;\r\n var observer = subscription._o;\r\n subscription._o = undefined;\r\n try {\r\n var m = getMethod(observer.error);\r\n if(!m)throw value;\r\n value = m.call(observer, value);\r\n } catch(e){\r\n try {\r\n cleanupSubscription(subscription);\r\n } finally {\r\n throw e;\r\n }\r\n } cleanupSubscription(subscription);\r\n return value;\r\n },\r\n complete: function complete(value){\r\n var subscription = this._s;\r\n if(!subscriptionClosed(subscription)){\r\n var observer = subscription._o;\r\n subscription._o = undefined;\r\n try {\r\n var m = getMethod(observer.complete);\r\n value = m ? m.call(observer, value) : undefined;\r\n } catch(e){\r\n try {\r\n cleanupSubscription(subscription);\r\n } finally {\r\n throw e;\r\n }\r\n } cleanupSubscription(subscription);\r\n return value;\r\n }\r\n }\r\n});\r\n\r\nvar $Observable = function Observable(subscriber){\r\n anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);\r\n};\r\n\r\nredefineAll($Observable.prototype, {\r\n subscribe: function subscribe(observer){\r\n return new Subscription(observer, this._f);\r\n },\r\n forEach: function forEach(fn){\r\n var that = this;\r\n return new (core.Promise || global.Promise)(function(resolve, reject){\r\n aFunction(fn);\r\n var subscription = that.subscribe({\r\n next : function(value){\r\n try {\r\n return fn(value);\r\n } catch(e){\r\n reject(e);\r\n subscription.unsubscribe();\r\n }\r\n },\r\n error: reject,\r\n complete: resolve\r\n });\r\n });\r\n }\r\n});\r\n\r\nredefineAll($Observable, {\r\n from: function from(x){\r\n var C = typeof this === 'function' ? this : $Observable;\r\n var method = getMethod(anObject(x)[OBSERVABLE]);\r\n if(method){\r\n var observable = anObject(method.call(x));\r\n return observable.constructor === C ? observable : new C(function(observer){\r\n return observable.subscribe(observer);\r\n });\r\n }\r\n return new C(function(observer){\r\n var done = false;\r\n microtask(function(){\r\n if(!done){\r\n try {\r\n if(forOf(x, false, function(it){\r\n observer.next(it);\r\n if(done)return RETURN;\r\n }) === RETURN)return;\r\n } catch(e){\r\n if(done)throw e;\r\n observer.error(e);\r\n return;\r\n } observer.complete();\r\n }\r\n });\r\n return function(){ done = true; };\r\n });\r\n },\r\n of: function of(){\r\n for(var i = 0, l = arguments.length, items = Array(l); i < l;)items[i] = arguments[i++];\r\n return new (typeof this === 'function' ? this : $Observable)(function(observer){\r\n var done = false;\r\n microtask(function(){\r\n if(!done){\r\n for(var i = 0; i < items.length; ++i){\r\n observer.next(items[i]);\r\n if(done)return;\r\n } observer.complete();\r\n }\r\n });\r\n return function(){ done = true; };\r\n });\r\n }\r\n});\r\n\r\nhide($Observable.prototype, OBSERVABLE, function(){ return this; });\r\n\r\n$export($export.G, {Observable: $Observable});\r\n\r\nrequire('./_set-species')('Observable');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.observable.js\n ** module id = 566\n ** module chunks = 0\n **/","var metadata = require('./_metadata')\n , anObject = require('./_an-object')\n , toMetaKey = metadata.key\n , ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey){\n ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));\n}});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.reflect.define-metadata.js\n ** module id = 567\n ** module chunks = 0\n **/","var metadata = require('./_metadata')\n , anObject = require('./_an-object')\n , toMetaKey = metadata.key\n , getOrCreateMetadataMap = metadata.map\n , store = metadata.store;\n\nmetadata.exp({deleteMetadata: function deleteMetadata(metadataKey, target /*, targetKey */){\n var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2])\n , metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);\n if(metadataMap === undefined || !metadataMap['delete'](metadataKey))return false;\n if(metadataMap.size)return true;\n var targetMetadata = store.get(target);\n targetMetadata['delete'](targetKey);\n return !!targetMetadata.size || store['delete'](target);\n}});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.reflect.delete-metadata.js\n ** module id = 568\n ** module chunks = 0\n **/","var Set = require('./es6.set')\n , from = require('./_array-from-iterable')\n , metadata = require('./_metadata')\n , anObject = require('./_an-object')\n , getPrototypeOf = require('./_object-gpo')\n , ordinaryOwnMetadataKeys = metadata.keys\n , toMetaKey = metadata.key;\n\nvar ordinaryMetadataKeys = function(O, P){\n var oKeys = ordinaryOwnMetadataKeys(O, P)\n , parent = getPrototypeOf(O);\n if(parent === null)return oKeys;\n var pKeys = ordinaryMetadataKeys(parent, P);\n return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;\n};\n\nmetadata.exp({getMetadataKeys: function getMetadataKeys(target /*, targetKey */){\n return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n}});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.reflect.get-metadata-keys.js\n ** module id = 569\n ** module chunks = 0\n **/","var metadata = require('./_metadata')\n , anObject = require('./_an-object')\n , getPrototypeOf = require('./_object-gpo')\n , ordinaryHasOwnMetadata = metadata.has\n , ordinaryGetOwnMetadata = metadata.get\n , toMetaKey = metadata.key;\n\nvar ordinaryGetMetadata = function(MetadataKey, O, P){\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if(hasOwn)return ordinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\nmetadata.exp({getMetadata: function getMetadata(metadataKey, target /*, targetKey */){\n return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n}});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.reflect.get-metadata.js\n ** module id = 570\n ** module chunks = 0\n **/","var metadata = require('./_metadata')\n , anObject = require('./_an-object')\n , ordinaryOwnMetadataKeys = metadata.keys\n , toMetaKey = metadata.key;\n\nmetadata.exp({getOwnMetadataKeys: function getOwnMetadataKeys(target /*, targetKey */){\n return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n}});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.reflect.get-own-metadata-keys.js\n ** module id = 571\n ** module chunks = 0\n **/","var metadata = require('./_metadata')\n , anObject = require('./_an-object')\n , ordinaryGetOwnMetadata = metadata.get\n , toMetaKey = metadata.key;\n\nmetadata.exp({getOwnMetadata: function getOwnMetadata(metadataKey, target /*, targetKey */){\n return ordinaryGetOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n}});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.reflect.get-own-metadata.js\n ** module id = 572\n ** module chunks = 0\n **/","var metadata = require('./_metadata')\n , anObject = require('./_an-object')\n , getPrototypeOf = require('./_object-gpo')\n , ordinaryHasOwnMetadata = metadata.has\n , toMetaKey = metadata.key;\n\nvar ordinaryHasMetadata = function(MetadataKey, O, P){\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if(hasOwn)return true;\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\nmetadata.exp({hasMetadata: function hasMetadata(metadataKey, target /*, targetKey */){\n return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n}});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.reflect.has-metadata.js\n ** module id = 573\n ** module chunks = 0\n **/","var metadata = require('./_metadata')\n , anObject = require('./_an-object')\n , ordinaryHasOwnMetadata = metadata.has\n , toMetaKey = metadata.key;\n\nmetadata.exp({hasOwnMetadata: function hasOwnMetadata(metadataKey, target /*, targetKey */){\n return ordinaryHasOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n}});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.reflect.has-own-metadata.js\n ** module id = 574\n ** module chunks = 0\n **/","var metadata = require('./_metadata')\n , anObject = require('./_an-object')\n , aFunction = require('./_a-function')\n , toMetaKey = metadata.key\n , ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({metadata: function metadata(metadataKey, metadataValue){\n return function decorator(target, targetKey){\n ordinaryDefineOwnMetadata(\n metadataKey, metadataValue,\n (targetKey !== undefined ? anObject : aFunction)(target),\n toMetaKey(targetKey)\n );\n };\n}});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.reflect.metadata.js\n ** module id = 575\n ** module chunks = 0\n **/","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./_export');\n\n$export($export.P + $export.R, 'Set', {toJSON: require('./_collection-to-json')('Set')});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.set.to-json.js\n ** module id = 576\n ** module chunks = 0\n **/","'use strict';\n// https://github.com/mathiasbynens/String.prototype.at\nvar $export = require('./_export')\n , $at = require('./_string-at')(true);\n\n$export($export.P, 'String', {\n at: function at(pos){\n return $at(this, pos);\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.string.at.js\n ** module id = 577\n ** module chunks = 0\n **/","'use strict';\r\n// https://tc39.github.io/String.prototype.matchAll/\r\nvar $export = require('./_export')\r\n , defined = require('./_defined')\r\n , toLength = require('./_to-length')\r\n , isRegExp = require('./_is-regexp')\r\n , getFlags = require('./_flags')\r\n , RegExpProto = RegExp.prototype;\r\n\r\nvar $RegExpStringIterator = function(regexp, string){\r\n this._r = regexp;\r\n this._s = string;\r\n};\r\n\r\nrequire('./_iter-create')($RegExpStringIterator, 'RegExp String', function next(){\r\n var match = this._r.exec(this._s);\r\n return {value: match, done: match === null};\r\n});\r\n\r\n$export($export.P, 'String', {\r\n matchAll: function matchAll(regexp){\r\n defined(this);\r\n if(!isRegExp(regexp))throw TypeError(regexp + ' is not a regexp!');\r\n var S = String(this)\r\n , flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp)\r\n , rx = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);\r\n rx.lastIndex = toLength(regexp.lastIndex);\r\n return new $RegExpStringIterator(rx, S);\r\n }\r\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.string.match-all.js\n ** module id = 578\n ** module chunks = 0\n **/","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export')\n , $pad = require('./_string-pad');\n\n$export($export.P, 'String', {\n padEnd: function padEnd(maxLength /*, fillString = ' ' */){\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.string.pad-end.js\n ** module id = 579\n ** module chunks = 0\n **/","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export')\n , $pad = require('./_string-pad');\n\n$export($export.P, 'String', {\n padStart: function padStart(maxLength /*, fillString = ' ' */){\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.string.pad-start.js\n ** module id = 580\n ** module chunks = 0\n **/","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimLeft', function($trim){\n return function trimLeft(){\n return $trim(this, 1);\n };\n}, 'trimStart');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.string.trim-left.js\n ** module id = 581\n ** module chunks = 0\n **/","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimRight', function($trim){\n return function trimRight(){\n return $trim(this, 2);\n };\n}, 'trimEnd');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.string.trim-right.js\n ** module id = 582\n ** module chunks = 0\n **/","require('./_wks-define')('asyncIterator');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.symbol.async-iterator.js\n ** module id = 583\n ** module chunks = 0\n **/","require('./_wks-define')('observable');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.symbol.observable.js\n ** module id = 584\n ** module chunks = 0\n **/","// https://github.com/ljharb/proposal-global\nvar $export = require('./_export');\n\n$export($export.S, 'System', {global: require('./_global')});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.system.global.js\n ** module id = 585\n ** module chunks = 0\n **/","var $iterators = require('./es6.array.iterator')\n , redefine = require('./_redefine')\n , global = require('./_global')\n , hide = require('./_hide')\n , Iterators = require('./_iterators')\n , wks = require('./_wks')\n , ITERATOR = wks('iterator')\n , TO_STRING_TAG = wks('toStringTag')\n , ArrayValues = Iterators.Array;\n\nfor(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){\n var NAME = collections[i]\n , Collection = global[NAME]\n , proto = Collection && Collection.prototype\n , key;\n if(proto){\n if(!proto[ITERATOR])hide(proto, ITERATOR, ArrayValues);\n if(!proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n for(key in $iterators)if(!proto[key])redefine(proto, key, $iterators[key], true);\n }\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/web.dom.iterable.js\n ** module id = 586\n ** module chunks = 0\n **/","var $export = require('./_export')\n , $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/web.immediate.js\n ** module id = 587\n ** module chunks = 0\n **/","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global')\n , $export = require('./_export')\n , invoke = require('./_invoke')\n , partial = require('./_partial')\n , navigator = global.navigator\n , MSIE = !!navigator && /MSIE .\\./.test(navigator.userAgent); // <- dirty ie9- check\nvar wrap = function(set){\n return MSIE ? function(fn, time /*, ...args */){\n return set(invoke(\n partial,\n [].slice.call(arguments, 2),\n typeof fn == 'function' ? fn : Function(fn)\n ), time);\n } : set;\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/web.timers.js\n ** module id = 588\n ** module chunks = 0\n **/","require('./modules/es6.symbol');\nrequire('./modules/es6.object.create');\nrequire('./modules/es6.object.define-property');\nrequire('./modules/es6.object.define-properties');\nrequire('./modules/es6.object.get-own-property-descriptor');\nrequire('./modules/es6.object.get-prototype-of');\nrequire('./modules/es6.object.keys');\nrequire('./modules/es6.object.get-own-property-names');\nrequire('./modules/es6.object.freeze');\nrequire('./modules/es6.object.seal');\nrequire('./modules/es6.object.prevent-extensions');\nrequire('./modules/es6.object.is-frozen');\nrequire('./modules/es6.object.is-sealed');\nrequire('./modules/es6.object.is-extensible');\nrequire('./modules/es6.object.assign');\nrequire('./modules/es6.object.is');\nrequire('./modules/es6.object.set-prototype-of');\nrequire('./modules/es6.object.to-string');\nrequire('./modules/es6.function.bind');\nrequire('./modules/es6.function.name');\nrequire('./modules/es6.function.has-instance');\nrequire('./modules/es6.parse-int');\nrequire('./modules/es6.parse-float');\nrequire('./modules/es6.number.constructor');\nrequire('./modules/es6.number.to-fixed');\nrequire('./modules/es6.number.to-precision');\nrequire('./modules/es6.number.epsilon');\nrequire('./modules/es6.number.is-finite');\nrequire('./modules/es6.number.is-integer');\nrequire('./modules/es6.number.is-nan');\nrequire('./modules/es6.number.is-safe-integer');\nrequire('./modules/es6.number.max-safe-integer');\nrequire('./modules/es6.number.min-safe-integer');\nrequire('./modules/es6.number.parse-float');\nrequire('./modules/es6.number.parse-int');\nrequire('./modules/es6.math.acosh');\nrequire('./modules/es6.math.asinh');\nrequire('./modules/es6.math.atanh');\nrequire('./modules/es6.math.cbrt');\nrequire('./modules/es6.math.clz32');\nrequire('./modules/es6.math.cosh');\nrequire('./modules/es6.math.expm1');\nrequire('./modules/es6.math.fround');\nrequire('./modules/es6.math.hypot');\nrequire('./modules/es6.math.imul');\nrequire('./modules/es6.math.log10');\nrequire('./modules/es6.math.log1p');\nrequire('./modules/es6.math.log2');\nrequire('./modules/es6.math.sign');\nrequire('./modules/es6.math.sinh');\nrequire('./modules/es6.math.tanh');\nrequire('./modules/es6.math.trunc');\nrequire('./modules/es6.string.from-code-point');\nrequire('./modules/es6.string.raw');\nrequire('./modules/es6.string.trim');\nrequire('./modules/es6.string.iterator');\nrequire('./modules/es6.string.code-point-at');\nrequire('./modules/es6.string.ends-with');\nrequire('./modules/es6.string.includes');\nrequire('./modules/es6.string.repeat');\nrequire('./modules/es6.string.starts-with');\nrequire('./modules/es6.string.anchor');\nrequire('./modules/es6.string.big');\nrequire('./modules/es6.string.blink');\nrequire('./modules/es6.string.bold');\nrequire('./modules/es6.string.fixed');\nrequire('./modules/es6.string.fontcolor');\nrequire('./modules/es6.string.fontsize');\nrequire('./modules/es6.string.italics');\nrequire('./modules/es6.string.link');\nrequire('./modules/es6.string.small');\nrequire('./modules/es6.string.strike');\nrequire('./modules/es6.string.sub');\nrequire('./modules/es6.string.sup');\nrequire('./modules/es6.date.now');\nrequire('./modules/es6.date.to-json');\nrequire('./modules/es6.date.to-iso-string');\nrequire('./modules/es6.date.to-string');\nrequire('./modules/es6.date.to-primitive');\nrequire('./modules/es6.array.is-array');\nrequire('./modules/es6.array.from');\nrequire('./modules/es6.array.of');\nrequire('./modules/es6.array.join');\nrequire('./modules/es6.array.slice');\nrequire('./modules/es6.array.sort');\nrequire('./modules/es6.array.for-each');\nrequire('./modules/es6.array.map');\nrequire('./modules/es6.array.filter');\nrequire('./modules/es6.array.some');\nrequire('./modules/es6.array.every');\nrequire('./modules/es6.array.reduce');\nrequire('./modules/es6.array.reduce-right');\nrequire('./modules/es6.array.index-of');\nrequire('./modules/es6.array.last-index-of');\nrequire('./modules/es6.array.copy-within');\nrequire('./modules/es6.array.fill');\nrequire('./modules/es6.array.find');\nrequire('./modules/es6.array.find-index');\nrequire('./modules/es6.array.species');\nrequire('./modules/es6.array.iterator');\nrequire('./modules/es6.regexp.constructor');\nrequire('./modules/es6.regexp.to-string');\nrequire('./modules/es6.regexp.flags');\nrequire('./modules/es6.regexp.match');\nrequire('./modules/es6.regexp.replace');\nrequire('./modules/es6.regexp.search');\nrequire('./modules/es6.regexp.split');\nrequire('./modules/es6.promise');\nrequire('./modules/es6.map');\nrequire('./modules/es6.set');\nrequire('./modules/es6.weak-map');\nrequire('./modules/es6.weak-set');\nrequire('./modules/es6.typed.array-buffer');\nrequire('./modules/es6.typed.data-view');\nrequire('./modules/es6.typed.int8-array');\nrequire('./modules/es6.typed.uint8-array');\nrequire('./modules/es6.typed.uint8-clamped-array');\nrequire('./modules/es6.typed.int16-array');\nrequire('./modules/es6.typed.uint16-array');\nrequire('./modules/es6.typed.int32-array');\nrequire('./modules/es6.typed.uint32-array');\nrequire('./modules/es6.typed.float32-array');\nrequire('./modules/es6.typed.float64-array');\nrequire('./modules/es6.reflect.apply');\nrequire('./modules/es6.reflect.construct');\nrequire('./modules/es6.reflect.define-property');\nrequire('./modules/es6.reflect.delete-property');\nrequire('./modules/es6.reflect.enumerate');\nrequire('./modules/es6.reflect.get');\nrequire('./modules/es6.reflect.get-own-property-descriptor');\nrequire('./modules/es6.reflect.get-prototype-of');\nrequire('./modules/es6.reflect.has');\nrequire('./modules/es6.reflect.is-extensible');\nrequire('./modules/es6.reflect.own-keys');\nrequire('./modules/es6.reflect.prevent-extensions');\nrequire('./modules/es6.reflect.set');\nrequire('./modules/es6.reflect.set-prototype-of');\nrequire('./modules/es7.array.includes');\nrequire('./modules/es7.string.at');\nrequire('./modules/es7.string.pad-start');\nrequire('./modules/es7.string.pad-end');\nrequire('./modules/es7.string.trim-left');\nrequire('./modules/es7.string.trim-right');\nrequire('./modules/es7.string.match-all');\nrequire('./modules/es7.symbol.async-iterator');\nrequire('./modules/es7.symbol.observable');\nrequire('./modules/es7.object.get-own-property-descriptors');\nrequire('./modules/es7.object.values');\nrequire('./modules/es7.object.entries');\nrequire('./modules/es7.object.define-getter');\nrequire('./modules/es7.object.define-setter');\nrequire('./modules/es7.object.lookup-getter');\nrequire('./modules/es7.object.lookup-setter');\nrequire('./modules/es7.map.to-json');\nrequire('./modules/es7.set.to-json');\nrequire('./modules/es7.system.global');\nrequire('./modules/es7.error.is-error');\nrequire('./modules/es7.math.iaddh');\nrequire('./modules/es7.math.isubh');\nrequire('./modules/es7.math.imulh');\nrequire('./modules/es7.math.umulh');\nrequire('./modules/es7.reflect.define-metadata');\nrequire('./modules/es7.reflect.delete-metadata');\nrequire('./modules/es7.reflect.get-metadata');\nrequire('./modules/es7.reflect.get-metadata-keys');\nrequire('./modules/es7.reflect.get-own-metadata');\nrequire('./modules/es7.reflect.get-own-metadata-keys');\nrequire('./modules/es7.reflect.has-metadata');\nrequire('./modules/es7.reflect.has-own-metadata');\nrequire('./modules/es7.reflect.metadata');\nrequire('./modules/es7.asap');\nrequire('./modules/es7.observable');\nrequire('./modules/web.timers');\nrequire('./modules/web.immediate');\nrequire('./modules/web.dom.iterable');\nmodule.exports = require('./modules/_core');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/shim.js\n ** module id = 589\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 = 590\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 = 591\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 = 592\n ** module chunks = 0\n **/","'use strict';\nvar canUseDOM = require('../util/inDOM');\nvar off = function off() {};\n\nif (canUseDOM) {\n\n off = (function () {\n\n if (document.addEventListener) return function (node, eventName, handler, capture) {\n return node.removeEventListener(eventName, handler, capture || false);\n };else if (document.attachEvent) return function (node, eventName, handler) {\n return node.detachEvent('on' + eventName, handler);\n };\n })();\n}\n\nmodule.exports = off;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/dom-helpers/events/off.js\n ** module id = 593\n ** module chunks = 0\n **/","'use strict';\nvar canUseDOM = require('../util/inDOM');\nvar on = function on() {};\n\nif (canUseDOM) {\n on = (function () {\n\n if (document.addEventListener) return function (node, eventName, handler, capture) {\n return node.addEventListener(eventName, handler, capture || false);\n };else if (document.attachEvent) return function (node, eventName, handler) {\n return node.attachEvent('on' + eventName, handler);\n };\n })();\n}\n\nmodule.exports = on;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/dom-helpers/events/on.js\n ** module id = 594\n ** module chunks = 0\n **/","'use strict';\nvar getWindow = require('./isWindow');\n\nmodule.exports = function scrollTop(node, val) {\n var win = getWindow(node);\n\n if (val === undefined) return win ? 'pageXOffset' in win ? win.pageXOffset : win.document.documentElement.scrollLeft : node.scrollLeft;\n\n if (win) win.scrollTo(val, 'pageYOffset' in win ? win.pageYOffset : win.document.documentElement.scrollTop);else node.scrollLeft = val;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/dom-helpers/query/scrollLeft.js\n ** module id = 595\n ** module chunks = 0\n **/","'use strict';\nvar getWindow = require('./isWindow');\n\nmodule.exports = function scrollTop(node, val) {\n var win = getWindow(node);\n\n if (val === undefined) return win ? 'pageYOffset' in win ? win.pageYOffset : win.document.documentElement.scrollTop : node.scrollTop;\n\n if (win) win.scrollTo('pageXOffset' in win ? win.pageXOffset : win.document.documentElement.scrollLeft, val);else node.scrollTop = val;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/dom-helpers/query/scrollTop.js\n ** module id = 596\n ** module chunks = 0\n **/","'use strict';\n\nvar canUseDOM = require('./inDOM');\n\nvar vendors = ['', 'webkit', 'moz', 'o', 'ms'],\n cancel = 'clearTimeout',\n raf = fallback,\n compatRaf;\n\nvar getKey = function getKey(vendor, k) {\n return vendor + (!vendor ? k : k[0].toUpperCase() + k.substr(1)) + 'AnimationFrame';\n};\n\nif (canUseDOM) {\n vendors.some(function (vendor) {\n var rafKey = getKey(vendor, 'request');\n\n if (rafKey in window) {\n cancel = getKey(vendor, 'cancel');\n return raf = function (cb) {\n return window[rafKey](cb);\n };\n }\n });\n}\n\n/* https://github.com/component/raf */\nvar prev = new Date().getTime();\n\nfunction fallback(fn) {\n var curr = new Date().getTime(),\n ms = Math.max(0, 16 - (curr - prev)),\n req = setTimeout(fn, ms);\n\n prev = curr;\n return req;\n}\n\ncompatRaf = function (cb) {\n return raf(cb);\n};\ncompatRaf.cancel = function (id) {\n return window[cancel](id);\n};\n\nmodule.exports = compatRaf;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/dom-helpers/util/requestAnimationFrame.js\n ** module id = 597\n ** module chunks = 0\n **/","// removed by extract-text-webpack-plugin\nmodule.exports = {\"row\":\"Album__row__2o5fb\",\"art\":\"Album__art__1tMui\",\"play\":\"Album__play__2zFWE Songs__play__1O6-p\",\"playNext\":\"Album__playNext__3KXjB Songs__playNext__2v-xp\",\"nameRow\":\"Album__nameRow__12kfS\",\"artRow\":\"Album__artRow__3ouy5\",\"songs\":\"Album__songs__1PPsj Songs__songs__CIaD9\"};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./app/styles/Album.scss\n ** module id = 601\n ** module chunks = 0\n **/","// removed by extract-text-webpack-plugin\nmodule.exports = {\"name\":\"Artist__name__3mI6y\",\"art\":\"Artist__art__3QV3w\"};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./app/styles/Artist.scss\n ** module id = 602\n ** module chunks = 0\n **/","// removed by extract-text-webpack-plugin\nmodule.exports = {\"noMarginTop\":\"Discover__noMarginTop__2bubk\",\"h2Title\":\"Discover__h2Title__25yU5\",\"caret\":\"Discover__caret__1zwQ4\",\"dashedUnderline\":\"Discover__dashedUnderline__2ePE6\",\"dropdown-menu\":\"Discover__dropdown-menu__o2cZr\"};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./app/styles/Discover.scss\n ** module id = 603\n ** module chunks = 0\n **/","// removed by extract-text-webpack-plugin\nmodule.exports = {\"titleImage\":\"Login__titleImage__33L1L\",\"submit\":\"Login__submit__1BiPC\"};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./app/styles/Login.scss\n ** module id = 604\n ** module chunks = 0\n **/","// removed by extract-text-webpack-plugin\nmodule.exports = {\"play\":\"Songs__play__1O6-p\",\"playNext\":\"Songs__playNext__2v-xp\",\"songs\":\"Songs__songs__CIaD9\"};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./app/styles/Songs.scss\n ** module id = 605\n ** module chunks = 0\n **/","// removed by extract-text-webpack-plugin\nmodule.exports = {\"filter\":\"FilterBar__filter__2xukG\",\"legend\":\"FilterBar__legend__1wPAA\",\"form-group\":\"FilterBar__form-group__3coaa\"};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./app/styles/elements/FilterBar.scss\n ** module id = 606\n ** module chunks = 0\n **/","// removed by extract-text-webpack-plugin\nmodule.exports = {\"placeholders\":\"Grid__placeholders__3sosj\",\"name\":\"Grid__name__2qx8M\",\"art\":\"Grid__art__2OMDU\"};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./app/styles/elements/Grid.scss\n ** module id = 607\n ** module chunks = 0\n **/","// removed by extract-text-webpack-plugin\nmodule.exports = {\"nav\":\"Pagination__nav__1sgUO\",\"pointer\":\"Pagination__pointer__27wCb\"};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./app/styles/elements/Pagination.scss\n ** module id = 608\n ** module chunks = 0\n **/","// removed by extract-text-webpack-plugin\nmodule.exports = {\"webplayer\":\"WebPlayer__webplayer__22F_4\",\"art\":\"WebPlayer__art__omkHN\",\"artRow\":\"WebPlayer__artRow__9onVV\",\"controls\":\"WebPlayer__controls__we9ux\",\"btn\":\"WebPlayer__btn__1S8Hy\",\"prevBtn\":\"WebPlayer__prevBtn__QTVVR WebPlayer__btn__1S8Hy\",\"playPauseBtn\":\"WebPlayer__playPauseBtn__yN44O WebPlayer__btn__1S8Hy\",\"nextBtn\":\"WebPlayer__nextBtn__2582V WebPlayer__btn__1S8Hy\",\"volumeBtn\":\"WebPlayer__volumeBtn__2OcLS WebPlayer__btn__1S8Hy\",\"repeatBtn\":\"WebPlayer__repeatBtn__w2JIN WebPlayer__btn__1S8Hy\",\"randomBtn\":\"WebPlayer__randomBtn__2NB_N WebPlayer__btn__1S8Hy\",\"playlistBtn\":\"WebPlayer__playlistBtn__3rkYH WebPlayer__btn__1S8Hy\",\"active\":\"WebPlayer__active__3OOYe\"};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./app/styles/elements/WebPlayer.scss\n ** module id = 609\n ** module chunks = 0\n **/","// removed by extract-text-webpack-plugin\nmodule.exports = {\"sidebar\":\"Sidebar__sidebar__2XLQ1\",\"collapse\":\"Sidebar__collapse__3-rUF\",\"link\":\"Sidebar__link__1faG5\",\"active\":\"Sidebar__active__3HL57 Sidebar__link__1faG5\",\"title\":\"Sidebar__title__XR8sf\",\"imgTitle\":\"Sidebar__imgTitle__1iVIJ\",\"toggle\":\"Sidebar__toggle__32s05\",\"icon-bar\":\"Sidebar__icon-bar__kStJV\",\"icon-navbar\":\"Sidebar__icon-navbar__1oNVr\",\"container-fluid\":\"Sidebar__container-fluid__3rTUW\",\"nav\":\"Sidebar__nav__13nUO\",\"main-panel\":\"Sidebar__main-panel__3FfOV\",\"nav-list\":\"Sidebar__nav-list__1jNav\"};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./app/styles/layouts/Sidebar.scss\n ** module id = 610\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\nvar _hyphenPattern = /-(.)/g;\n\n/**\n * Camelcases a hyphenated string, for example:\n *\n * > camelize('background-color')\n * < \"backgroundColor\"\n *\n * @param {string} string\n * @return {string}\n */\nfunction camelize(string) {\n return string.replace(_hyphenPattern, function (_, character) {\n return character.toUpperCase();\n });\n}\n\nmodule.exports = camelize;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/camelize.js\n ** module id = 611\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'use strict';\n\nvar camelize = require('./camelize');\n\nvar msPattern = /^-ms-/;\n\n/**\n * Camelcases a hyphenated CSS property name, for example:\n *\n * > camelizeStyleName('background-color')\n * < \"backgroundColor\"\n * > camelizeStyleName('-moz-transition')\n * < \"MozTransition\"\n * > camelizeStyleName('-ms-transition')\n * < \"msTransition\"\n *\n * As Andi Smith suggests\n * (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix\n * is converted to lowercase `ms`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction camelizeStyleName(string) {\n return camelize(string.replace(msPattern, 'ms-'));\n}\n\nmodule.exports = camelizeStyleName;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/camelizeStyleName.js\n ** module id = 612\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\nvar isTextNode = require('./isTextNode');\n\n/*eslint-disable no-bitwise */\n\n/**\n * Checks if a given DOM node contains or is another DOM node.\n */\nfunction containsNode(outerNode, innerNode) {\n if (!outerNode || !innerNode) {\n return false;\n } else if (outerNode === innerNode) {\n return true;\n } else if (isTextNode(outerNode)) {\n return false;\n } else if (isTextNode(innerNode)) {\n return containsNode(outerNode, innerNode.parentNode);\n } else if ('contains' in outerNode) {\n return outerNode.contains(innerNode);\n } else if (outerNode.compareDocumentPosition) {\n return !!(outerNode.compareDocumentPosition(innerNode) & 16);\n } else {\n return false;\n }\n}\n\nmodule.exports = containsNode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/containsNode.js\n ** module id = 613\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\nvar invariant = require('./invariant');\n\n/**\n * Convert array-like objects to arrays.\n *\n * This API assumes the caller knows the contents of the data type. For less\n * well defined inputs use createArrayFromMixed.\n *\n * @param {object|function|filelist} obj\n * @return {array}\n */\nfunction toArray(obj) {\n var length = obj.length;\n\n // Some browsers builtin objects can report typeof 'function' (e.g. NodeList\n // in old versions of Safari).\n !(!Array.isArray(obj) && (typeof obj === 'object' || typeof obj === 'function')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Array-like object expected') : invariant(false) : void 0;\n\n !(typeof length === 'number') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object needs a length property') : invariant(false) : void 0;\n\n !(length === 0 || length - 1 in obj) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object should have keys for indices') : invariant(false) : void 0;\n\n !(typeof obj.callee !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object can\\'t be `arguments`. Use rest params ' + '(function(...args) {}) or Array.from() instead.') : invariant(false) : void 0;\n\n // Old IE doesn't give collections access to hasOwnProperty. Assume inputs\n // without method will throw during the slice call and skip straight to the\n // fallback.\n if (obj.hasOwnProperty) {\n try {\n return Array.prototype.slice.call(obj);\n } catch (e) {\n // IE < 9 does not support Array#slice on collections objects\n }\n }\n\n // Fall back to copying key by key. This assumes all keys have a value,\n // so will not preserve sparsely populated inputs.\n var ret = Array(length);\n for (var ii = 0; ii < length; ii++) {\n ret[ii] = obj[ii];\n }\n return ret;\n}\n\n/**\n * Perform a heuristic test to determine if an object is \"array-like\".\n *\n * A monk asked Joshu, a Zen master, \"Has a dog Buddha nature?\"\n * Joshu replied: \"Mu.\"\n *\n * This function determines if its argument has \"array nature\": it returns\n * true if the argument is an actual array, an `arguments' object, or an\n * HTMLCollection (e.g. node.childNodes or node.getElementsByTagName()).\n *\n * It will return false for other array-like objects like Filelist.\n *\n * @param {*} obj\n * @return {boolean}\n */\nfunction hasArrayNature(obj) {\n return(\n // not null/false\n !!obj && (\n // arrays are objects, NodeLists are functions in Safari\n typeof obj == 'object' || typeof obj == 'function') &&\n // quacks like an array\n 'length' in obj &&\n // not window\n !('setInterval' in obj) &&\n // no DOM node should be considered an array-like\n // a 'select' element has 'length' and 'item' properties on IE8\n typeof obj.nodeType != 'number' && (\n // a real array\n Array.isArray(obj) ||\n // arguments\n 'callee' in obj ||\n // HTMLCollection/NodeList\n 'item' in obj)\n );\n}\n\n/**\n * Ensure that the argument is an array by wrapping it in an array if it is not.\n * Creates a copy of the argument if it is already an array.\n *\n * This is mostly useful idiomatically:\n *\n * var createArrayFromMixed = require('createArrayFromMixed');\n *\n * function takesOneOrMoreThings(things) {\n * things = createArrayFromMixed(things);\n * ...\n * }\n *\n * This allows you to treat `things' as an array, but accept scalars in the API.\n *\n * If you need to convert an array-like object, like `arguments`, into an array\n * use toArray instead.\n *\n * @param {*} obj\n * @return {array}\n */\nfunction createArrayFromMixed(obj) {\n if (!hasArrayNature(obj)) {\n return [obj];\n } else if (Array.isArray(obj)) {\n return obj.slice();\n } else {\n return toArray(obj);\n }\n}\n\nmodule.exports = createArrayFromMixed;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fbjs/lib/createArrayFromMixed.js\n ** module id = 614\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/unsafe-html*/\n\nvar ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar createArrayFromMixed = require('./createArrayFromMixed');\nvar getMarkupWrap = require('./getMarkupWrap');\nvar invariant = require('./invariant');\n\n/**\n * Dummy container used to render all markup.\n */\nvar dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;\n\n/**\n * Pattern used by `getNodeName`.\n */\nvar nodeNamePattern = /^\\s*<(\\w+)/;\n\n/**\n * Extracts the `nodeName` of the first element in a string of markup.\n *\n * @param {string} markup String of markup.\n * @return {?string} Node name of the supplied markup.\n */\nfunction getNodeName(markup) {\n var nodeNameMatch = markup.match(nodeNamePattern);\n return nodeNameMatch && nodeNameMatch[1].toLowerCase();\n}\n\n/**\n * Creates an array containing the nodes rendered from the supplied markup. The\n * optionally supplied `handleScript` function will be invoked once for each\n *