diff options
Diffstat (limited to 'node_modules/lodash')
1054 files changed, 44265 insertions, 0 deletions
diff --git a/node_modules/lodash/LICENSE b/node_modules/lodash/LICENSE new file mode 100644 index 0000000..77c42f1 --- /dev/null +++ b/node_modules/lodash/LICENSE @@ -0,0 +1,47 @@ +Copyright OpenJS Foundation and other contributors <https://openjsf.org/> + +Based on Underscore.js, copyright Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/> + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/lodash/lodash + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code displayed within the prose of the +documentation. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +Files located in the node_modules and vendor directories are externally +maintained libraries used by this software which have their own +licenses; we recommend you read them, as their terms may differ from the +terms above. diff --git a/node_modules/lodash/README.md b/node_modules/lodash/README.md new file mode 100644 index 0000000..3ab1a05 --- /dev/null +++ b/node_modules/lodash/README.md @@ -0,0 +1,39 @@ +# lodash v4.17.21 + +The [Lodash](https://lodash.com/) library exported as [Node.js](https://nodejs.org/) modules. + +## Installation + +Using npm: +```shell +$ npm i -g npm +$ npm i --save lodash +``` + +In Node.js: +```js +// Load the full build. +var _ = require('lodash'); +// Load the core build. +var _ = require('lodash/core'); +// Load the FP build for immutable auto-curried iteratee-first data-last methods. +var fp = require('lodash/fp'); + +// Load method categories. +var array = require('lodash/array'); +var object = require('lodash/fp/object'); + +// Cherry-pick methods for smaller browserify/rollup/webpack bundles. +var at = require('lodash/at'); +var curryN = require('lodash/fp/curryN'); +``` + +See the [package source](https://github.com/lodash/lodash/tree/4.17.21-npm) for more details. + +**Note:**<br> +Install [n_](https://www.npmjs.com/package/n_) for Lodash use in the Node.js < 6 REPL. + +## Support + +Tested in Chrome 74-75, Firefox 66-67, IE 11, Edge 18, Safari 11-12, & Node.js 8-12.<br> +Automated [browser](https://saucelabs.com/u/lodash) & [CI](https://travis-ci.org/lodash/lodash/) test runs are available. diff --git a/node_modules/lodash/_DataView.js b/node_modules/lodash/_DataView.js new file mode 100644 index 0000000..ac2d57c --- /dev/null +++ b/node_modules/lodash/_DataView.js @@ -0,0 +1,7 @@ +var getNative = require('./_getNative'), +    root = require('./_root'); + +/* Built-in method references that are verified to be native. */ +var DataView = getNative(root, 'DataView'); + +module.exports = DataView; diff --git a/node_modules/lodash/_Hash.js b/node_modules/lodash/_Hash.js new file mode 100644 index 0000000..b504fe3 --- /dev/null +++ b/node_modules/lodash/_Hash.js @@ -0,0 +1,32 @@ +var hashClear = require('./_hashClear'), +    hashDelete = require('./_hashDelete'), +    hashGet = require('./_hashGet'), +    hashHas = require('./_hashHas'), +    hashSet = require('./_hashSet'); + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { +  var index = -1, +      length = entries == null ? 0 : entries.length; + +  this.clear(); +  while (++index < length) { +    var entry = entries[index]; +    this.set(entry[0], entry[1]); +  } +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +module.exports = Hash; diff --git a/node_modules/lodash/_LazyWrapper.js b/node_modules/lodash/_LazyWrapper.js new file mode 100644 index 0000000..81786c7 --- /dev/null +++ b/node_modules/lodash/_LazyWrapper.js @@ -0,0 +1,28 @@ +var baseCreate = require('./_baseCreate'), +    baseLodash = require('./_baseLodash'); + +/** Used as references for the maximum length and index of an array. */ +var MAX_ARRAY_LENGTH = 4294967295; + +/** + * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. + * + * @private + * @constructor + * @param {*} value The value to wrap. + */ +function LazyWrapper(value) { +  this.__wrapped__ = value; +  this.__actions__ = []; +  this.__dir__ = 1; +  this.__filtered__ = false; +  this.__iteratees__ = []; +  this.__takeCount__ = MAX_ARRAY_LENGTH; +  this.__views__ = []; +} + +// Ensure `LazyWrapper` is an instance of `baseLodash`. +LazyWrapper.prototype = baseCreate(baseLodash.prototype); +LazyWrapper.prototype.constructor = LazyWrapper; + +module.exports = LazyWrapper; diff --git a/node_modules/lodash/_ListCache.js b/node_modules/lodash/_ListCache.js new file mode 100644 index 0000000..26895c3 --- /dev/null +++ b/node_modules/lodash/_ListCache.js @@ -0,0 +1,32 @@ +var listCacheClear = require('./_listCacheClear'), +    listCacheDelete = require('./_listCacheDelete'), +    listCacheGet = require('./_listCacheGet'), +    listCacheHas = require('./_listCacheHas'), +    listCacheSet = require('./_listCacheSet'); + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { +  var index = -1, +      length = entries == null ? 0 : entries.length; + +  this.clear(); +  while (++index < length) { +    var entry = entries[index]; +    this.set(entry[0], entry[1]); +  } +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +module.exports = ListCache; diff --git a/node_modules/lodash/_LodashWrapper.js b/node_modules/lodash/_LodashWrapper.js new file mode 100644 index 0000000..c1e4d9d --- /dev/null +++ b/node_modules/lodash/_LodashWrapper.js @@ -0,0 +1,22 @@ +var baseCreate = require('./_baseCreate'), +    baseLodash = require('./_baseLodash'); + +/** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable explicit method chain sequences. + */ +function LodashWrapper(value, chainAll) { +  this.__wrapped__ = value; +  this.__actions__ = []; +  this.__chain__ = !!chainAll; +  this.__index__ = 0; +  this.__values__ = undefined; +} + +LodashWrapper.prototype = baseCreate(baseLodash.prototype); +LodashWrapper.prototype.constructor = LodashWrapper; + +module.exports = LodashWrapper; diff --git a/node_modules/lodash/_Map.js b/node_modules/lodash/_Map.js new file mode 100644 index 0000000..b73f29a --- /dev/null +++ b/node_modules/lodash/_Map.js @@ -0,0 +1,7 @@ +var getNative = require('./_getNative'), +    root = require('./_root'); + +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'); + +module.exports = Map; diff --git a/node_modules/lodash/_MapCache.js b/node_modules/lodash/_MapCache.js new file mode 100644 index 0000000..4a4eea7 --- /dev/null +++ b/node_modules/lodash/_MapCache.js @@ -0,0 +1,32 @@ +var mapCacheClear = require('./_mapCacheClear'), +    mapCacheDelete = require('./_mapCacheDelete'), +    mapCacheGet = require('./_mapCacheGet'), +    mapCacheHas = require('./_mapCacheHas'), +    mapCacheSet = require('./_mapCacheSet'); + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { +  var index = -1, +      length = entries == null ? 0 : entries.length; + +  this.clear(); +  while (++index < length) { +    var entry = entries[index]; +    this.set(entry[0], entry[1]); +  } +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +module.exports = MapCache; diff --git a/node_modules/lodash/_Promise.js b/node_modules/lodash/_Promise.js new file mode 100644 index 0000000..247b9e1 --- /dev/null +++ b/node_modules/lodash/_Promise.js @@ -0,0 +1,7 @@ +var getNative = require('./_getNative'), +    root = require('./_root'); + +/* Built-in method references that are verified to be native. */ +var Promise = getNative(root, 'Promise'); + +module.exports = Promise; diff --git a/node_modules/lodash/_Set.js b/node_modules/lodash/_Set.js new file mode 100644 index 0000000..b3c8dcb --- /dev/null +++ b/node_modules/lodash/_Set.js @@ -0,0 +1,7 @@ +var getNative = require('./_getNative'), +    root = require('./_root'); + +/* Built-in method references that are verified to be native. */ +var Set = getNative(root, 'Set'); + +module.exports = Set; diff --git a/node_modules/lodash/_SetCache.js b/node_modules/lodash/_SetCache.js new file mode 100644 index 0000000..6468b06 --- /dev/null +++ b/node_modules/lodash/_SetCache.js @@ -0,0 +1,27 @@ +var MapCache = require('./_MapCache'), +    setCacheAdd = require('./_setCacheAdd'), +    setCacheHas = require('./_setCacheHas'); + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { +  var index = -1, +      length = values == null ? 0 : values.length; + +  this.__data__ = new MapCache; +  while (++index < length) { +    this.add(values[index]); +  } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; +SetCache.prototype.has = setCacheHas; + +module.exports = SetCache; diff --git a/node_modules/lodash/_Stack.js b/node_modules/lodash/_Stack.js new file mode 100644 index 0000000..80b2cf1 --- /dev/null +++ b/node_modules/lodash/_Stack.js @@ -0,0 +1,27 @@ +var ListCache = require('./_ListCache'), +    stackClear = require('./_stackClear'), +    stackDelete = require('./_stackDelete'), +    stackGet = require('./_stackGet'), +    stackHas = require('./_stackHas'), +    stackSet = require('./_stackSet'); + +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Stack(entries) { +  var data = this.__data__ = new ListCache(entries); +  this.size = data.size; +} + +// Add methods to `Stack`. +Stack.prototype.clear = stackClear; +Stack.prototype['delete'] = stackDelete; +Stack.prototype.get = stackGet; +Stack.prototype.has = stackHas; +Stack.prototype.set = stackSet; + +module.exports = Stack; diff --git a/node_modules/lodash/_Symbol.js b/node_modules/lodash/_Symbol.js new file mode 100644 index 0000000..a013f7c --- /dev/null +++ b/node_modules/lodash/_Symbol.js @@ -0,0 +1,6 @@ +var root = require('./_root'); + +/** Built-in value references. */ +var Symbol = root.Symbol; + +module.exports = Symbol; diff --git a/node_modules/lodash/_Uint8Array.js b/node_modules/lodash/_Uint8Array.js new file mode 100644 index 0000000..2fb30e1 --- /dev/null +++ b/node_modules/lodash/_Uint8Array.js @@ -0,0 +1,6 @@ +var root = require('./_root'); + +/** Built-in value references. */ +var Uint8Array = root.Uint8Array; + +module.exports = Uint8Array; diff --git a/node_modules/lodash/_WeakMap.js b/node_modules/lodash/_WeakMap.js new file mode 100644 index 0000000..567f86c --- /dev/null +++ b/node_modules/lodash/_WeakMap.js @@ -0,0 +1,7 @@ +var getNative = require('./_getNative'), +    root = require('./_root'); + +/* Built-in method references that are verified to be native. */ +var WeakMap = getNative(root, 'WeakMap'); + +module.exports = WeakMap; diff --git a/node_modules/lodash/_apply.js b/node_modules/lodash/_apply.js new file mode 100644 index 0000000..36436dd --- /dev/null +++ b/node_modules/lodash/_apply.js @@ -0,0 +1,21 @@ +/** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ +function apply(func, thisArg, args) { +  switch (args.length) { +    case 0: return func.call(thisArg); +    case 1: return func.call(thisArg, args[0]); +    case 2: return func.call(thisArg, args[0], args[1]); +    case 3: return func.call(thisArg, args[0], args[1], args[2]); +  } +  return func.apply(thisArg, args); +} + +module.exports = apply; diff --git a/node_modules/lodash/_arrayAggregator.js b/node_modules/lodash/_arrayAggregator.js new file mode 100644 index 0000000..d96c3ca --- /dev/null +++ b/node_modules/lodash/_arrayAggregator.js @@ -0,0 +1,22 @@ +/** + * A specialized version of `baseAggregator` for arrays. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ +function arrayAggregator(array, setter, iteratee, accumulator) { +  var index = -1, +      length = array == null ? 0 : array.length; + +  while (++index < length) { +    var value = array[index]; +    setter(accumulator, value, iteratee(value), array); +  } +  return accumulator; +} + +module.exports = arrayAggregator; diff --git a/node_modules/lodash/_arrayEach.js b/node_modules/lodash/_arrayEach.js new file mode 100644 index 0000000..2c5f579 --- /dev/null +++ b/node_modules/lodash/_arrayEach.js @@ -0,0 +1,22 @@ +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { +  var index = -1, +      length = array == null ? 0 : array.length; + +  while (++index < length) { +    if (iteratee(array[index], index, array) === false) { +      break; +    } +  } +  return array; +} + +module.exports = arrayEach; diff --git a/node_modules/lodash/_arrayEachRight.js b/node_modules/lodash/_arrayEachRight.js new file mode 100644 index 0000000..976ca5c --- /dev/null +++ b/node_modules/lodash/_arrayEachRight.js @@ -0,0 +1,21 @@ +/** + * A specialized version of `_.forEachRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEachRight(array, iteratee) { +  var length = array == null ? 0 : array.length; + +  while (length--) { +    if (iteratee(array[length], length, array) === false) { +      break; +    } +  } +  return array; +} + +module.exports = arrayEachRight; diff --git a/node_modules/lodash/_arrayEvery.js b/node_modules/lodash/_arrayEvery.js new file mode 100644 index 0000000..e26a918 --- /dev/null +++ b/node_modules/lodash/_arrayEvery.js @@ -0,0 +1,23 @@ +/** + * A specialized version of `_.every` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + *  else `false`. + */ +function arrayEvery(array, predicate) { +  var index = -1, +      length = array == null ? 0 : array.length; + +  while (++index < length) { +    if (!predicate(array[index], index, array)) { +      return false; +    } +  } +  return true; +} + +module.exports = arrayEvery; diff --git a/node_modules/lodash/_arrayFilter.js b/node_modules/lodash/_arrayFilter.js new file mode 100644 index 0000000..75ea254 --- /dev/null +++ b/node_modules/lodash/_arrayFilter.js @@ -0,0 +1,25 @@ +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { +  var index = -1, +      length = array == null ? 0 : array.length, +      resIndex = 0, +      result = []; + +  while (++index < length) { +    var value = array[index]; +    if (predicate(value, index, array)) { +      result[resIndex++] = value; +    } +  } +  return result; +} + +module.exports = arrayFilter; diff --git a/node_modules/lodash/_arrayIncludes.js b/node_modules/lodash/_arrayIncludes.js new file mode 100644 index 0000000..3737a6d --- /dev/null +++ b/node_modules/lodash/_arrayIncludes.js @@ -0,0 +1,17 @@ +var baseIndexOf = require('./_baseIndexOf'); + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { +  var length = array == null ? 0 : array.length; +  return !!length && baseIndexOf(array, value, 0) > -1; +} + +module.exports = arrayIncludes; diff --git a/node_modules/lodash/_arrayIncludesWith.js b/node_modules/lodash/_arrayIncludesWith.js new file mode 100644 index 0000000..235fd97 --- /dev/null +++ b/node_modules/lodash/_arrayIncludesWith.js @@ -0,0 +1,22 @@ +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { +  var index = -1, +      length = array == null ? 0 : array.length; + +  while (++index < length) { +    if (comparator(value, array[index])) { +      return true; +    } +  } +  return false; +} + +module.exports = arrayIncludesWith; diff --git a/node_modules/lodash/_arrayLikeKeys.js b/node_modules/lodash/_arrayLikeKeys.js new file mode 100644 index 0000000..b2ec9ce --- /dev/null +++ b/node_modules/lodash/_arrayLikeKeys.js @@ -0,0 +1,49 @@ +var baseTimes = require('./_baseTimes'), +    isArguments = require('./isArguments'), +    isArray = require('./isArray'), +    isBuffer = require('./isBuffer'), +    isIndex = require('./_isIndex'), +    isTypedArray = require('./isTypedArray'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { +  var isArr = isArray(value), +      isArg = !isArr && isArguments(value), +      isBuff = !isArr && !isArg && isBuffer(value), +      isType = !isArr && !isArg && !isBuff && isTypedArray(value), +      skipIndexes = isArr || isArg || isBuff || isType, +      result = skipIndexes ? baseTimes(value.length, String) : [], +      length = result.length; + +  for (var key in value) { +    if ((inherited || hasOwnProperty.call(value, key)) && +        !(skipIndexes && ( +           // Safari 9 has enumerable `arguments.length` in strict mode. +           key == 'length' || +           // Node.js 0.10 has enumerable non-index properties on buffers. +           (isBuff && (key == 'offset' || key == 'parent')) || +           // PhantomJS 2 has enumerable non-index properties on typed arrays. +           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || +           // Skip index properties. +           isIndex(key, length) +        ))) { +      result.push(key); +    } +  } +  return result; +} + +module.exports = arrayLikeKeys; diff --git a/node_modules/lodash/_arrayMap.js b/node_modules/lodash/_arrayMap.js new file mode 100644 index 0000000..22b2246 --- /dev/null +++ b/node_modules/lodash/_arrayMap.js @@ -0,0 +1,21 @@ +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { +  var index = -1, +      length = array == null ? 0 : array.length, +      result = Array(length); + +  while (++index < length) { +    result[index] = iteratee(array[index], index, array); +  } +  return result; +} + +module.exports = arrayMap; diff --git a/node_modules/lodash/_arrayPush.js b/node_modules/lodash/_arrayPush.js new file mode 100644 index 0000000..7d742b3 --- /dev/null +++ b/node_modules/lodash/_arrayPush.js @@ -0,0 +1,20 @@ +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { +  var index = -1, +      length = values.length, +      offset = array.length; + +  while (++index < length) { +    array[offset + index] = values[index]; +  } +  return array; +} + +module.exports = arrayPush; diff --git a/node_modules/lodash/_arrayReduce.js b/node_modules/lodash/_arrayReduce.js new file mode 100644 index 0000000..de8b79b --- /dev/null +++ b/node_modules/lodash/_arrayReduce.js @@ -0,0 +1,26 @@ +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + *  the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { +  var index = -1, +      length = array == null ? 0 : array.length; + +  if (initAccum && length) { +    accumulator = array[++index]; +  } +  while (++index < length) { +    accumulator = iteratee(accumulator, array[index], index, array); +  } +  return accumulator; +} + +module.exports = arrayReduce; diff --git a/node_modules/lodash/_arrayReduceRight.js b/node_modules/lodash/_arrayReduceRight.js new file mode 100644 index 0000000..22d8976 --- /dev/null +++ b/node_modules/lodash/_arrayReduceRight.js @@ -0,0 +1,24 @@ +/** + * A specialized version of `_.reduceRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the last element of `array` as + *  the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduceRight(array, iteratee, accumulator, initAccum) { +  var length = array == null ? 0 : array.length; +  if (initAccum && length) { +    accumulator = array[--length]; +  } +  while (length--) { +    accumulator = iteratee(accumulator, array[length], length, array); +  } +  return accumulator; +} + +module.exports = arrayReduceRight; diff --git a/node_modules/lodash/_arraySample.js b/node_modules/lodash/_arraySample.js new file mode 100644 index 0000000..fcab010 --- /dev/null +++ b/node_modules/lodash/_arraySample.js @@ -0,0 +1,15 @@ +var baseRandom = require('./_baseRandom'); + +/** + * A specialized version of `_.sample` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @returns {*} Returns the random element. + */ +function arraySample(array) { +  var length = array.length; +  return length ? array[baseRandom(0, length - 1)] : undefined; +} + +module.exports = arraySample; diff --git a/node_modules/lodash/_arraySampleSize.js b/node_modules/lodash/_arraySampleSize.js new file mode 100644 index 0000000..8c7e364 --- /dev/null +++ b/node_modules/lodash/_arraySampleSize.js @@ -0,0 +1,17 @@ +var baseClamp = require('./_baseClamp'), +    copyArray = require('./_copyArray'), +    shuffleSelf = require('./_shuffleSelf'); + +/** + * A specialized version of `_.sampleSize` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ +function arraySampleSize(array, n) { +  return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); +} + +module.exports = arraySampleSize; diff --git a/node_modules/lodash/_arrayShuffle.js b/node_modules/lodash/_arrayShuffle.js new file mode 100644 index 0000000..46313a3 --- /dev/null +++ b/node_modules/lodash/_arrayShuffle.js @@ -0,0 +1,15 @@ +var copyArray = require('./_copyArray'), +    shuffleSelf = require('./_shuffleSelf'); + +/** + * A specialized version of `_.shuffle` for arrays. + * + * @private + * @param {Array} array The array to shuffle. + * @returns {Array} Returns the new shuffled array. + */ +function arrayShuffle(array) { +  return shuffleSelf(copyArray(array)); +} + +module.exports = arrayShuffle; diff --git a/node_modules/lodash/_arraySome.js b/node_modules/lodash/_arraySome.js new file mode 100644 index 0000000..6fd02fd --- /dev/null +++ b/node_modules/lodash/_arraySome.js @@ -0,0 +1,23 @@ +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + *  else `false`. + */ +function arraySome(array, predicate) { +  var index = -1, +      length = array == null ? 0 : array.length; + +  while (++index < length) { +    if (predicate(array[index], index, array)) { +      return true; +    } +  } +  return false; +} + +module.exports = arraySome; diff --git a/node_modules/lodash/_asciiSize.js b/node_modules/lodash/_asciiSize.js new file mode 100644 index 0000000..11d29c3 --- /dev/null +++ b/node_modules/lodash/_asciiSize.js @@ -0,0 +1,12 @@ +var baseProperty = require('./_baseProperty'); + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = baseProperty('length'); + +module.exports = asciiSize; diff --git a/node_modules/lodash/_asciiToArray.js b/node_modules/lodash/_asciiToArray.js new file mode 100644 index 0000000..8e3dd5b --- /dev/null +++ b/node_modules/lodash/_asciiToArray.js @@ -0,0 +1,12 @@ +/** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function asciiToArray(string) { +  return string.split(''); +} + +module.exports = asciiToArray; diff --git a/node_modules/lodash/_asciiWords.js b/node_modules/lodash/_asciiWords.js new file mode 100644 index 0000000..d765f0f --- /dev/null +++ b/node_modules/lodash/_asciiWords.js @@ -0,0 +1,15 @@ +/** Used to match words composed of alphanumeric characters. */ +var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; + +/** + * Splits an ASCII `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ +function asciiWords(string) { +  return string.match(reAsciiWord) || []; +} + +module.exports = asciiWords; diff --git a/node_modules/lodash/_assignMergeValue.js b/node_modules/lodash/_assignMergeValue.js new file mode 100644 index 0000000..cb1185e --- /dev/null +++ b/node_modules/lodash/_assignMergeValue.js @@ -0,0 +1,20 @@ +var baseAssignValue = require('./_baseAssignValue'), +    eq = require('./eq'); + +/** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignMergeValue(object, key, value) { +  if ((value !== undefined && !eq(object[key], value)) || +      (value === undefined && !(key in object))) { +    baseAssignValue(object, key, value); +  } +} + +module.exports = assignMergeValue; diff --git a/node_modules/lodash/_assignValue.js b/node_modules/lodash/_assignValue.js new file mode 100644 index 0000000..4083957 --- /dev/null +++ b/node_modules/lodash/_assignValue.js @@ -0,0 +1,28 @@ +var baseAssignValue = require('./_baseAssignValue'), +    eq = require('./eq'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { +  var objValue = object[key]; +  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || +      (value === undefined && !(key in object))) { +    baseAssignValue(object, key, value); +  } +} + +module.exports = assignValue; diff --git a/node_modules/lodash/_assocIndexOf.js b/node_modules/lodash/_assocIndexOf.js new file mode 100644 index 0000000..5b77a2b --- /dev/null +++ b/node_modules/lodash/_assocIndexOf.js @@ -0,0 +1,21 @@ +var eq = require('./eq'); + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { +  var length = array.length; +  while (length--) { +    if (eq(array[length][0], key)) { +      return length; +    } +  } +  return -1; +} + +module.exports = assocIndexOf; diff --git a/node_modules/lodash/_baseAggregator.js b/node_modules/lodash/_baseAggregator.js new file mode 100644 index 0000000..4bc9e91 --- /dev/null +++ b/node_modules/lodash/_baseAggregator.js @@ -0,0 +1,21 @@ +var baseEach = require('./_baseEach'); + +/** + * Aggregates elements of `collection` on `accumulator` with keys transformed + * by `iteratee` and values set by `setter`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ +function baseAggregator(collection, setter, iteratee, accumulator) { +  baseEach(collection, function(value, key, collection) { +    setter(accumulator, value, iteratee(value), collection); +  }); +  return accumulator; +} + +module.exports = baseAggregator; diff --git a/node_modules/lodash/_baseAssign.js b/node_modules/lodash/_baseAssign.js new file mode 100644 index 0000000..e5c4a1a --- /dev/null +++ b/node_modules/lodash/_baseAssign.js @@ -0,0 +1,17 @@ +var copyObject = require('./_copyObject'), +    keys = require('./keys'); + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { +  return object && copyObject(source, keys(source), object); +} + +module.exports = baseAssign; diff --git a/node_modules/lodash/_baseAssignIn.js b/node_modules/lodash/_baseAssignIn.js new file mode 100644 index 0000000..6624f90 --- /dev/null +++ b/node_modules/lodash/_baseAssignIn.js @@ -0,0 +1,17 @@ +var copyObject = require('./_copyObject'), +    keysIn = require('./keysIn'); + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { +  return object && copyObject(source, keysIn(source), object); +} + +module.exports = baseAssignIn; diff --git a/node_modules/lodash/_baseAssignValue.js b/node_modules/lodash/_baseAssignValue.js new file mode 100644 index 0000000..d6f66ef --- /dev/null +++ b/node_modules/lodash/_baseAssignValue.js @@ -0,0 +1,25 @@ +var defineProperty = require('./_defineProperty'); + +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { +  if (key == '__proto__' && defineProperty) { +    defineProperty(object, key, { +      'configurable': true, +      'enumerable': true, +      'value': value, +      'writable': true +    }); +  } else { +    object[key] = value; +  } +} + +module.exports = baseAssignValue; diff --git a/node_modules/lodash/_baseAt.js b/node_modules/lodash/_baseAt.js new file mode 100644 index 0000000..90e4237 --- /dev/null +++ b/node_modules/lodash/_baseAt.js @@ -0,0 +1,23 @@ +var get = require('./get'); + +/** + * The base implementation of `_.at` without support for individual paths. + * + * @private + * @param {Object} object The object to iterate over. + * @param {string[]} paths The property paths to pick. + * @returns {Array} Returns the picked elements. + */ +function baseAt(object, paths) { +  var index = -1, +      length = paths.length, +      result = Array(length), +      skip = object == null; + +  while (++index < length) { +    result[index] = skip ? undefined : get(object, paths[index]); +  } +  return result; +} + +module.exports = baseAt; diff --git a/node_modules/lodash/_baseClamp.js b/node_modules/lodash/_baseClamp.js new file mode 100644 index 0000000..a1c5692 --- /dev/null +++ b/node_modules/lodash/_baseClamp.js @@ -0,0 +1,22 @@ +/** + * The base implementation of `_.clamp` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + */ +function baseClamp(number, lower, upper) { +  if (number === number) { +    if (upper !== undefined) { +      number = number <= upper ? number : upper; +    } +    if (lower !== undefined) { +      number = number >= lower ? number : lower; +    } +  } +  return number; +} + +module.exports = baseClamp; diff --git a/node_modules/lodash/_baseClone.js b/node_modules/lodash/_baseClone.js new file mode 100644 index 0000000..69f8705 --- /dev/null +++ b/node_modules/lodash/_baseClone.js @@ -0,0 +1,166 @@ +var Stack = require('./_Stack'), +    arrayEach = require('./_arrayEach'), +    assignValue = require('./_assignValue'), +    baseAssign = require('./_baseAssign'), +    baseAssignIn = require('./_baseAssignIn'), +    cloneBuffer = require('./_cloneBuffer'), +    copyArray = require('./_copyArray'), +    copySymbols = require('./_copySymbols'), +    copySymbolsIn = require('./_copySymbolsIn'), +    getAllKeys = require('./_getAllKeys'), +    getAllKeysIn = require('./_getAllKeysIn'), +    getTag = require('./_getTag'), +    initCloneArray = require('./_initCloneArray'), +    initCloneByTag = require('./_initCloneByTag'), +    initCloneObject = require('./_initCloneObject'), +    isArray = require('./isArray'), +    isBuffer = require('./isBuffer'), +    isMap = require('./isMap'), +    isObject = require('./isObject'), +    isSet = require('./isSet'), +    keys = require('./keys'), +    keysIn = require('./keysIn'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, +    CLONE_FLAT_FLAG = 2, +    CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', +    arrayTag = '[object Array]', +    boolTag = '[object Boolean]', +    dateTag = '[object Date]', +    errorTag = '[object Error]', +    funcTag = '[object Function]', +    genTag = '[object GeneratorFunction]', +    mapTag = '[object Map]', +    numberTag = '[object Number]', +    objectTag = '[object Object]', +    regexpTag = '[object RegExp]', +    setTag = '[object Set]', +    stringTag = '[object String]', +    symbolTag = '[object Symbol]', +    weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', +    dataViewTag = '[object DataView]', +    float32Tag = '[object Float32Array]', +    float64Tag = '[object Float64Array]', +    int8Tag = '[object Int8Array]', +    int16Tag = '[object Int16Array]', +    int32Tag = '[object Int32Array]', +    uint8Tag = '[object Uint8Array]', +    uint8ClampedTag = '[object Uint8ClampedArray]', +    uint16Tag = '[object Uint16Array]', +    uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = +cloneableTags[boolTag] = cloneableTags[dateTag] = +cloneableTags[float32Tag] = cloneableTags[float64Tag] = +cloneableTags[int8Tag] = cloneableTags[int16Tag] = +cloneableTags[int32Tag] = cloneableTags[mapTag] = +cloneableTags[numberTag] = cloneableTags[objectTag] = +cloneableTags[regexpTag] = cloneableTags[setTag] = +cloneableTags[stringTag] = cloneableTags[symbolTag] = +cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = +cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + *  1 - Deep clone + *  2 - Flatten inherited properties + *  4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { +  var result, +      isDeep = bitmask & CLONE_DEEP_FLAG, +      isFlat = bitmask & CLONE_FLAT_FLAG, +      isFull = bitmask & CLONE_SYMBOLS_FLAG; + +  if (customizer) { +    result = object ? customizer(value, key, object, stack) : customizer(value); +  } +  if (result !== undefined) { +    return result; +  } +  if (!isObject(value)) { +    return value; +  } +  var isArr = isArray(value); +  if (isArr) { +    result = initCloneArray(value); +    if (!isDeep) { +      return copyArray(value, result); +    } +  } else { +    var tag = getTag(value), +        isFunc = tag == funcTag || tag == genTag; + +    if (isBuffer(value)) { +      return cloneBuffer(value, isDeep); +    } +    if (tag == objectTag || tag == argsTag || (isFunc && !object)) { +      result = (isFlat || isFunc) ? {} : initCloneObject(value); +      if (!isDeep) { +        return isFlat +          ? copySymbolsIn(value, baseAssignIn(result, value)) +          : copySymbols(value, baseAssign(result, value)); +      } +    } else { +      if (!cloneableTags[tag]) { +        return object ? value : {}; +      } +      result = initCloneByTag(value, tag, isDeep); +    } +  } +  // Check for circular references and return its corresponding clone. +  stack || (stack = new Stack); +  var stacked = stack.get(value); +  if (stacked) { +    return stacked; +  } +  stack.set(value, result); + +  if (isSet(value)) { +    value.forEach(function(subValue) { +      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); +    }); +  } else if (isMap(value)) { +    value.forEach(function(subValue, key) { +      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); +    }); +  } + +  var keysFunc = isFull +    ? (isFlat ? getAllKeysIn : getAllKeys) +    : (isFlat ? keysIn : keys); + +  var props = isArr ? undefined : keysFunc(value); +  arrayEach(props || value, function(subValue, key) { +    if (props) { +      key = subValue; +      subValue = value[key]; +    } +    // Recursively populate clone (susceptible to call stack limits). +    assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); +  }); +  return result; +} + +module.exports = baseClone; diff --git a/node_modules/lodash/_baseConforms.js b/node_modules/lodash/_baseConforms.js new file mode 100644 index 0000000..947e20d --- /dev/null +++ b/node_modules/lodash/_baseConforms.js @@ -0,0 +1,18 @@ +var baseConformsTo = require('./_baseConformsTo'), +    keys = require('./keys'); + +/** + * The base implementation of `_.conforms` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property predicates to conform to. + * @returns {Function} Returns the new spec function. + */ +function baseConforms(source) { +  var props = keys(source); +  return function(object) { +    return baseConformsTo(object, source, props); +  }; +} + +module.exports = baseConforms; diff --git a/node_modules/lodash/_baseConformsTo.js b/node_modules/lodash/_baseConformsTo.js new file mode 100644 index 0000000..e449cb8 --- /dev/null +++ b/node_modules/lodash/_baseConformsTo.js @@ -0,0 +1,27 @@ +/** + * The base implementation of `_.conformsTo` which accepts `props` to check. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + */ +function baseConformsTo(object, source, props) { +  var length = props.length; +  if (object == null) { +    return !length; +  } +  object = Object(object); +  while (length--) { +    var key = props[length], +        predicate = source[key], +        value = object[key]; + +    if ((value === undefined && !(key in object)) || !predicate(value)) { +      return false; +    } +  } +  return true; +} + +module.exports = baseConformsTo; diff --git a/node_modules/lodash/_baseCreate.js b/node_modules/lodash/_baseCreate.js new file mode 100644 index 0000000..ffa6a52 --- /dev/null +++ b/node_modules/lodash/_baseCreate.js @@ -0,0 +1,30 @@ +var isObject = require('./isObject'); + +/** Built-in value references. */ +var objectCreate = Object.create; + +/** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ +var baseCreate = (function() { +  function object() {} +  return function(proto) { +    if (!isObject(proto)) { +      return {}; +    } +    if (objectCreate) { +      return objectCreate(proto); +    } +    object.prototype = proto; +    var result = new object; +    object.prototype = undefined; +    return result; +  }; +}()); + +module.exports = baseCreate; diff --git a/node_modules/lodash/_baseDelay.js b/node_modules/lodash/_baseDelay.js new file mode 100644 index 0000000..1486d69 --- /dev/null +++ b/node_modules/lodash/_baseDelay.js @@ -0,0 +1,21 @@ +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * The base implementation of `_.delay` and `_.defer` which accepts `args` + * to provide to `func`. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Array} args The arguments to provide to `func`. + * @returns {number|Object} Returns the timer id or timeout object. + */ +function baseDelay(func, wait, args) { +  if (typeof func != 'function') { +    throw new TypeError(FUNC_ERROR_TEXT); +  } +  return setTimeout(function() { func.apply(undefined, args); }, wait); +} + +module.exports = baseDelay; diff --git a/node_modules/lodash/_baseDifference.js b/node_modules/lodash/_baseDifference.js new file mode 100644 index 0000000..343ac19 --- /dev/null +++ b/node_modules/lodash/_baseDifference.js @@ -0,0 +1,67 @@ +var SetCache = require('./_SetCache'), +    arrayIncludes = require('./_arrayIncludes'), +    arrayIncludesWith = require('./_arrayIncludesWith'), +    arrayMap = require('./_arrayMap'), +    baseUnary = require('./_baseUnary'), +    cacheHas = require('./_cacheHas'); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of methods like `_.difference` without support + * for excluding multiple arrays or iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + */ +function baseDifference(array, values, iteratee, comparator) { +  var index = -1, +      includes = arrayIncludes, +      isCommon = true, +      length = array.length, +      result = [], +      valuesLength = values.length; + +  if (!length) { +    return result; +  } +  if (iteratee) { +    values = arrayMap(values, baseUnary(iteratee)); +  } +  if (comparator) { +    includes = arrayIncludesWith; +    isCommon = false; +  } +  else if (values.length >= LARGE_ARRAY_SIZE) { +    includes = cacheHas; +    isCommon = false; +    values = new SetCache(values); +  } +  outer: +  while (++index < length) { +    var value = array[index], +        computed = iteratee == null ? value : iteratee(value); + +    value = (comparator || value !== 0) ? value : 0; +    if (isCommon && computed === computed) { +      var valuesIndex = valuesLength; +      while (valuesIndex--) { +        if (values[valuesIndex] === computed) { +          continue outer; +        } +      } +      result.push(value); +    } +    else if (!includes(values, computed, comparator)) { +      result.push(value); +    } +  } +  return result; +} + +module.exports = baseDifference; diff --git a/node_modules/lodash/_baseEach.js b/node_modules/lodash/_baseEach.js new file mode 100644 index 0000000..512c067 --- /dev/null +++ b/node_modules/lodash/_baseEach.js @@ -0,0 +1,14 @@ +var baseForOwn = require('./_baseForOwn'), +    createBaseEach = require('./_createBaseEach'); + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = createBaseEach(baseForOwn); + +module.exports = baseEach; diff --git a/node_modules/lodash/_baseEachRight.js b/node_modules/lodash/_baseEachRight.js new file mode 100644 index 0000000..0a8feec --- /dev/null +++ b/node_modules/lodash/_baseEachRight.js @@ -0,0 +1,14 @@ +var baseForOwnRight = require('./_baseForOwnRight'), +    createBaseEach = require('./_createBaseEach'); + +/** + * The base implementation of `_.forEachRight` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEachRight = createBaseEach(baseForOwnRight, true); + +module.exports = baseEachRight; diff --git a/node_modules/lodash/_baseEvery.js b/node_modules/lodash/_baseEvery.js new file mode 100644 index 0000000..fa52f7b --- /dev/null +++ b/node_modules/lodash/_baseEvery.js @@ -0,0 +1,21 @@ +var baseEach = require('./_baseEach'); + +/** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + *  else `false` + */ +function baseEvery(collection, predicate) { +  var result = true; +  baseEach(collection, function(value, index, collection) { +    result = !!predicate(value, index, collection); +    return result; +  }); +  return result; +} + +module.exports = baseEvery; diff --git a/node_modules/lodash/_baseExtremum.js b/node_modules/lodash/_baseExtremum.js new file mode 100644 index 0000000..9d6aa77 --- /dev/null +++ b/node_modules/lodash/_baseExtremum.js @@ -0,0 +1,32 @@ +var isSymbol = require('./isSymbol'); + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { +  var index = -1, +      length = array.length; + +  while (++index < length) { +    var value = array[index], +        current = iteratee(value); + +    if (current != null && (computed === undefined +          ? (current === current && !isSymbol(current)) +          : comparator(current, computed) +        )) { +      var computed = current, +          result = value; +    } +  } +  return result; +} + +module.exports = baseExtremum; diff --git a/node_modules/lodash/_baseFill.js b/node_modules/lodash/_baseFill.js new file mode 100644 index 0000000..46ef9c7 --- /dev/null +++ b/node_modules/lodash/_baseFill.js @@ -0,0 +1,32 @@ +var toInteger = require('./toInteger'), +    toLength = require('./toLength'); + +/** + * The base implementation of `_.fill` without an iteratee call guard. + * + * @private + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + */ +function baseFill(array, value, start, end) { +  var length = array.length; + +  start = toInteger(start); +  if (start < 0) { +    start = -start > length ? 0 : (length + start); +  } +  end = (end === undefined || end > length) ? length : toInteger(end); +  if (end < 0) { +    end += length; +  } +  end = start > end ? 0 : toLength(end); +  while (start < end) { +    array[start++] = value; +  } +  return array; +} + +module.exports = baseFill; diff --git a/node_modules/lodash/_baseFilter.js b/node_modules/lodash/_baseFilter.js new file mode 100644 index 0000000..4678477 --- /dev/null +++ b/node_modules/lodash/_baseFilter.js @@ -0,0 +1,21 @@ +var baseEach = require('./_baseEach'); + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { +  var result = []; +  baseEach(collection, function(value, index, collection) { +    if (predicate(value, index, collection)) { +      result.push(value); +    } +  }); +  return result; +} + +module.exports = baseFilter; diff --git a/node_modules/lodash/_baseFindIndex.js b/node_modules/lodash/_baseFindIndex.js new file mode 100644 index 0000000..e3f5d8a --- /dev/null +++ b/node_modules/lodash/_baseFindIndex.js @@ -0,0 +1,24 @@ +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { +  var length = array.length, +      index = fromIndex + (fromRight ? 1 : -1); + +  while ((fromRight ? index-- : ++index < length)) { +    if (predicate(array[index], index, array)) { +      return index; +    } +  } +  return -1; +} + +module.exports = baseFindIndex; diff --git a/node_modules/lodash/_baseFindKey.js b/node_modules/lodash/_baseFindKey.js new file mode 100644 index 0000000..2e430f3 --- /dev/null +++ b/node_modules/lodash/_baseFindKey.js @@ -0,0 +1,23 @@ +/** + * The base implementation of methods like `_.findKey` and `_.findLastKey`, + * without support for iteratee shorthands, which iterates over `collection` + * using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the found element or its key, else `undefined`. + */ +function baseFindKey(collection, predicate, eachFunc) { +  var result; +  eachFunc(collection, function(value, key, collection) { +    if (predicate(value, key, collection)) { +      result = key; +      return false; +    } +  }); +  return result; +} + +module.exports = baseFindKey; diff --git a/node_modules/lodash/_baseFlatten.js b/node_modules/lodash/_baseFlatten.js new file mode 100644 index 0000000..4b1e009 --- /dev/null +++ b/node_modules/lodash/_baseFlatten.js @@ -0,0 +1,38 @@ +var arrayPush = require('./_arrayPush'), +    isFlattenable = require('./_isFlattenable'); + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { +  var index = -1, +      length = array.length; + +  predicate || (predicate = isFlattenable); +  result || (result = []); + +  while (++index < length) { +    var value = array[index]; +    if (depth > 0 && predicate(value)) { +      if (depth > 1) { +        // Recursively flatten arrays (susceptible to call stack limits). +        baseFlatten(value, depth - 1, predicate, isStrict, result); +      } else { +        arrayPush(result, value); +      } +    } else if (!isStrict) { +      result[result.length] = value; +    } +  } +  return result; +} + +module.exports = baseFlatten; diff --git a/node_modules/lodash/_baseFor.js b/node_modules/lodash/_baseFor.js new file mode 100644 index 0000000..d946590 --- /dev/null +++ b/node_modules/lodash/_baseFor.js @@ -0,0 +1,16 @@ +var createBaseFor = require('./_createBaseFor'); + +/** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = createBaseFor(); + +module.exports = baseFor; diff --git a/node_modules/lodash/_baseForOwn.js b/node_modules/lodash/_baseForOwn.js new file mode 100644 index 0000000..503d523 --- /dev/null +++ b/node_modules/lodash/_baseForOwn.js @@ -0,0 +1,16 @@ +var baseFor = require('./_baseFor'), +    keys = require('./keys'); + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { +  return object && baseFor(object, iteratee, keys); +} + +module.exports = baseForOwn; diff --git a/node_modules/lodash/_baseForOwnRight.js b/node_modules/lodash/_baseForOwnRight.js new file mode 100644 index 0000000..a4b10e6 --- /dev/null +++ b/node_modules/lodash/_baseForOwnRight.js @@ -0,0 +1,16 @@ +var baseForRight = require('./_baseForRight'), +    keys = require('./keys'); + +/** + * The base implementation of `_.forOwnRight` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwnRight(object, iteratee) { +  return object && baseForRight(object, iteratee, keys); +} + +module.exports = baseForOwnRight; diff --git a/node_modules/lodash/_baseForRight.js b/node_modules/lodash/_baseForRight.js new file mode 100644 index 0000000..32842cd --- /dev/null +++ b/node_modules/lodash/_baseForRight.js @@ -0,0 +1,15 @@ +var createBaseFor = require('./_createBaseFor'); + +/** + * This function is like `baseFor` except that it iterates over properties + * in the opposite order. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseForRight = createBaseFor(true); + +module.exports = baseForRight; diff --git a/node_modules/lodash/_baseFunctions.js b/node_modules/lodash/_baseFunctions.js new file mode 100644 index 0000000..d23bc9b --- /dev/null +++ b/node_modules/lodash/_baseFunctions.js @@ -0,0 +1,19 @@ +var arrayFilter = require('./_arrayFilter'), +    isFunction = require('./isFunction'); + +/** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the function names. + */ +function baseFunctions(object, props) { +  return arrayFilter(props, function(key) { +    return isFunction(object[key]); +  }); +} + +module.exports = baseFunctions; diff --git a/node_modules/lodash/_baseGet.js b/node_modules/lodash/_baseGet.js new file mode 100644 index 0000000..a194913 --- /dev/null +++ b/node_modules/lodash/_baseGet.js @@ -0,0 +1,24 @@ +var castPath = require('./_castPath'), +    toKey = require('./_toKey'); + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { +  path = castPath(path, object); + +  var index = 0, +      length = path.length; + +  while (object != null && index < length) { +    object = object[toKey(path[index++])]; +  } +  return (index && index == length) ? object : undefined; +} + +module.exports = baseGet; diff --git a/node_modules/lodash/_baseGetAllKeys.js b/node_modules/lodash/_baseGetAllKeys.js new file mode 100644 index 0000000..8ad204e --- /dev/null +++ b/node_modules/lodash/_baseGetAllKeys.js @@ -0,0 +1,20 @@ +var arrayPush = require('./_arrayPush'), +    isArray = require('./isArray'); + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { +  var result = keysFunc(object); +  return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); +} + +module.exports = baseGetAllKeys; diff --git a/node_modules/lodash/_baseGetTag.js b/node_modules/lodash/_baseGetTag.js new file mode 100644 index 0000000..b927ccc --- /dev/null +++ b/node_modules/lodash/_baseGetTag.js @@ -0,0 +1,28 @@ +var Symbol = require('./_Symbol'), +    getRawTag = require('./_getRawTag'), +    objectToString = require('./_objectToString'); + +/** `Object#toString` result references. */ +var nullTag = '[object Null]', +    undefinedTag = '[object Undefined]'; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { +  if (value == null) { +    return value === undefined ? undefinedTag : nullTag; +  } +  return (symToStringTag && symToStringTag in Object(value)) +    ? getRawTag(value) +    : objectToString(value); +} + +module.exports = baseGetTag; diff --git a/node_modules/lodash/_baseGt.js b/node_modules/lodash/_baseGt.js new file mode 100644 index 0000000..502d273 --- /dev/null +++ b/node_modules/lodash/_baseGt.js @@ -0,0 +1,14 @@ +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + *  else `false`. + */ +function baseGt(value, other) { +  return value > other; +} + +module.exports = baseGt; diff --git a/node_modules/lodash/_baseHas.js b/node_modules/lodash/_baseHas.js new file mode 100644 index 0000000..1b73032 --- /dev/null +++ b/node_modules/lodash/_baseHas.js @@ -0,0 +1,19 @@ +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { +  return object != null && hasOwnProperty.call(object, key); +} + +module.exports = baseHas; diff --git a/node_modules/lodash/_baseHasIn.js b/node_modules/lodash/_baseHasIn.js new file mode 100644 index 0000000..2e0d042 --- /dev/null +++ b/node_modules/lodash/_baseHasIn.js @@ -0,0 +1,13 @@ +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { +  return object != null && key in Object(object); +} + +module.exports = baseHasIn; diff --git a/node_modules/lodash/_baseInRange.js b/node_modules/lodash/_baseInRange.js new file mode 100644 index 0000000..ec95666 --- /dev/null +++ b/node_modules/lodash/_baseInRange.js @@ -0,0 +1,18 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, +    nativeMin = Math.min; + +/** + * The base implementation of `_.inRange` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to check. + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + */ +function baseInRange(number, start, end) { +  return number >= nativeMin(start, end) && number < nativeMax(start, end); +} + +module.exports = baseInRange; diff --git a/node_modules/lodash/_baseIndexOf.js b/node_modules/lodash/_baseIndexOf.js new file mode 100644 index 0000000..167e706 --- /dev/null +++ b/node_modules/lodash/_baseIndexOf.js @@ -0,0 +1,20 @@ +var baseFindIndex = require('./_baseFindIndex'), +    baseIsNaN = require('./_baseIsNaN'), +    strictIndexOf = require('./_strictIndexOf'); + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { +  return value === value +    ? strictIndexOf(array, value, fromIndex) +    : baseFindIndex(array, baseIsNaN, fromIndex); +} + +module.exports = baseIndexOf; diff --git a/node_modules/lodash/_baseIndexOfWith.js b/node_modules/lodash/_baseIndexOfWith.js new file mode 100644 index 0000000..f815fe0 --- /dev/null +++ b/node_modules/lodash/_baseIndexOfWith.js @@ -0,0 +1,23 @@ +/** + * This function is like `baseIndexOf` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @param {Function} comparator The comparator invoked per element. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOfWith(array, value, fromIndex, comparator) { +  var index = fromIndex - 1, +      length = array.length; + +  while (++index < length) { +    if (comparator(array[index], value)) { +      return index; +    } +  } +  return -1; +} + +module.exports = baseIndexOfWith; diff --git a/node_modules/lodash/_baseIntersection.js b/node_modules/lodash/_baseIntersection.js new file mode 100644 index 0000000..c1d250c --- /dev/null +++ b/node_modules/lodash/_baseIntersection.js @@ -0,0 +1,74 @@ +var SetCache = require('./_SetCache'), +    arrayIncludes = require('./_arrayIncludes'), +    arrayIncludesWith = require('./_arrayIncludesWith'), +    arrayMap = require('./_arrayMap'), +    baseUnary = require('./_baseUnary'), +    cacheHas = require('./_cacheHas'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * The base implementation of methods like `_.intersection`, without support + * for iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of shared values. + */ +function baseIntersection(arrays, iteratee, comparator) { +  var includes = comparator ? arrayIncludesWith : arrayIncludes, +      length = arrays[0].length, +      othLength = arrays.length, +      othIndex = othLength, +      caches = Array(othLength), +      maxLength = Infinity, +      result = []; + +  while (othIndex--) { +    var array = arrays[othIndex]; +    if (othIndex && iteratee) { +      array = arrayMap(array, baseUnary(iteratee)); +    } +    maxLength = nativeMin(array.length, maxLength); +    caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) +      ? new SetCache(othIndex && array) +      : undefined; +  } +  array = arrays[0]; + +  var index = -1, +      seen = caches[0]; + +  outer: +  while (++index < length && result.length < maxLength) { +    var value = array[index], +        computed = iteratee ? iteratee(value) : value; + +    value = (comparator || value !== 0) ? value : 0; +    if (!(seen +          ? cacheHas(seen, computed) +          : includes(result, computed, comparator) +        )) { +      othIndex = othLength; +      while (--othIndex) { +        var cache = caches[othIndex]; +        if (!(cache +              ? cacheHas(cache, computed) +              : includes(arrays[othIndex], computed, comparator)) +            ) { +          continue outer; +        } +      } +      if (seen) { +        seen.push(computed); +      } +      result.push(value); +    } +  } +  return result; +} + +module.exports = baseIntersection; diff --git a/node_modules/lodash/_baseInverter.js b/node_modules/lodash/_baseInverter.js new file mode 100644 index 0000000..fbc337f --- /dev/null +++ b/node_modules/lodash/_baseInverter.js @@ -0,0 +1,21 @@ +var baseForOwn = require('./_baseForOwn'); + +/** + * The base implementation of `_.invert` and `_.invertBy` which inverts + * `object` with values transformed by `iteratee` and set by `setter`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform values. + * @param {Object} accumulator The initial inverted object. + * @returns {Function} Returns `accumulator`. + */ +function baseInverter(object, setter, iteratee, accumulator) { +  baseForOwn(object, function(value, key, object) { +    setter(accumulator, iteratee(value), key, object); +  }); +  return accumulator; +} + +module.exports = baseInverter; diff --git a/node_modules/lodash/_baseInvoke.js b/node_modules/lodash/_baseInvoke.js new file mode 100644 index 0000000..49bcf3c --- /dev/null +++ b/node_modules/lodash/_baseInvoke.js @@ -0,0 +1,24 @@ +var apply = require('./_apply'), +    castPath = require('./_castPath'), +    last = require('./last'), +    parent = require('./_parent'), +    toKey = require('./_toKey'); + +/** + * The base implementation of `_.invoke` without support for individual + * method arguments. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {Array} args The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + */ +function baseInvoke(object, path, args) { +  path = castPath(path, object); +  object = parent(object, path); +  var func = object == null ? object : object[toKey(last(path))]; +  return func == null ? undefined : apply(func, object, args); +} + +module.exports = baseInvoke; diff --git a/node_modules/lodash/_baseIsArguments.js b/node_modules/lodash/_baseIsArguments.js new file mode 100644 index 0000000..b3562cc --- /dev/null +++ b/node_modules/lodash/_baseIsArguments.js @@ -0,0 +1,18 @@ +var baseGetTag = require('./_baseGetTag'), +    isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]'; + +/** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ +function baseIsArguments(value) { +  return isObjectLike(value) && baseGetTag(value) == argsTag; +} + +module.exports = baseIsArguments; diff --git a/node_modules/lodash/_baseIsArrayBuffer.js b/node_modules/lodash/_baseIsArrayBuffer.js new file mode 100644 index 0000000..a2c4f30 --- /dev/null +++ b/node_modules/lodash/_baseIsArrayBuffer.js @@ -0,0 +1,17 @@ +var baseGetTag = require('./_baseGetTag'), +    isObjectLike = require('./isObjectLike'); + +var arrayBufferTag = '[object ArrayBuffer]'; + +/** + * The base implementation of `_.isArrayBuffer` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + */ +function baseIsArrayBuffer(value) { +  return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; +} + +module.exports = baseIsArrayBuffer; diff --git a/node_modules/lodash/_baseIsDate.js b/node_modules/lodash/_baseIsDate.js new file mode 100644 index 0000000..ba67c78 --- /dev/null +++ b/node_modules/lodash/_baseIsDate.js @@ -0,0 +1,18 @@ +var baseGetTag = require('./_baseGetTag'), +    isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var dateTag = '[object Date]'; + +/** + * The base implementation of `_.isDate` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + */ +function baseIsDate(value) { +  return isObjectLike(value) && baseGetTag(value) == dateTag; +} + +module.exports = baseIsDate; diff --git a/node_modules/lodash/_baseIsEqual.js b/node_modules/lodash/_baseIsEqual.js new file mode 100644 index 0000000..00a68a4 --- /dev/null +++ b/node_modules/lodash/_baseIsEqual.js @@ -0,0 +1,28 @@ +var baseIsEqualDeep = require('./_baseIsEqualDeep'), +    isObjectLike = require('./isObjectLike'); + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + *  1 - Unordered comparison + *  2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { +  if (value === other) { +    return true; +  } +  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { +    return value !== value && other !== other; +  } +  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +module.exports = baseIsEqual; diff --git a/node_modules/lodash/_baseIsEqualDeep.js b/node_modules/lodash/_baseIsEqualDeep.js new file mode 100644 index 0000000..e3cfd6a --- /dev/null +++ b/node_modules/lodash/_baseIsEqualDeep.js @@ -0,0 +1,83 @@ +var Stack = require('./_Stack'), +    equalArrays = require('./_equalArrays'), +    equalByTag = require('./_equalByTag'), +    equalObjects = require('./_equalObjects'), +    getTag = require('./_getTag'), +    isArray = require('./isArray'), +    isBuffer = require('./isBuffer'), +    isTypedArray = require('./isTypedArray'); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', +    arrayTag = '[object Array]', +    objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { +  var objIsArr = isArray(object), +      othIsArr = isArray(other), +      objTag = objIsArr ? arrayTag : getTag(object), +      othTag = othIsArr ? arrayTag : getTag(other); + +  objTag = objTag == argsTag ? objectTag : objTag; +  othTag = othTag == argsTag ? objectTag : othTag; + +  var objIsObj = objTag == objectTag, +      othIsObj = othTag == objectTag, +      isSameTag = objTag == othTag; + +  if (isSameTag && isBuffer(object)) { +    if (!isBuffer(other)) { +      return false; +    } +    objIsArr = true; +    objIsObj = false; +  } +  if (isSameTag && !objIsObj) { +    stack || (stack = new Stack); +    return (objIsArr || isTypedArray(object)) +      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) +      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); +  } +  if (!(bitmask & COMPARE_PARTIAL_FLAG)) { +    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), +        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + +    if (objIsWrapped || othIsWrapped) { +      var objUnwrapped = objIsWrapped ? object.value() : object, +          othUnwrapped = othIsWrapped ? other.value() : other; + +      stack || (stack = new Stack); +      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); +    } +  } +  if (!isSameTag) { +    return false; +  } +  stack || (stack = new Stack); +  return equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +module.exports = baseIsEqualDeep; diff --git a/node_modules/lodash/_baseIsMap.js b/node_modules/lodash/_baseIsMap.js new file mode 100644 index 0000000..02a4021 --- /dev/null +++ b/node_modules/lodash/_baseIsMap.js @@ -0,0 +1,18 @@ +var getTag = require('./_getTag'), +    isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { +  return isObjectLike(value) && getTag(value) == mapTag; +} + +module.exports = baseIsMap; diff --git a/node_modules/lodash/_baseIsMatch.js b/node_modules/lodash/_baseIsMatch.js new file mode 100644 index 0000000..72494be --- /dev/null +++ b/node_modules/lodash/_baseIsMatch.js @@ -0,0 +1,62 @@ +var Stack = require('./_Stack'), +    baseIsEqual = require('./_baseIsEqual'); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, +    COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { +  var index = matchData.length, +      length = index, +      noCustomizer = !customizer; + +  if (object == null) { +    return !length; +  } +  object = Object(object); +  while (index--) { +    var data = matchData[index]; +    if ((noCustomizer && data[2]) +          ? data[1] !== object[data[0]] +          : !(data[0] in object) +        ) { +      return false; +    } +  } +  while (++index < length) { +    data = matchData[index]; +    var key = data[0], +        objValue = object[key], +        srcValue = data[1]; + +    if (noCustomizer && data[2]) { +      if (objValue === undefined && !(key in object)) { +        return false; +      } +    } else { +      var stack = new Stack; +      if (customizer) { +        var result = customizer(objValue, srcValue, key, object, source, stack); +      } +      if (!(result === undefined +            ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) +            : result +          )) { +        return false; +      } +    } +  } +  return true; +} + +module.exports = baseIsMatch; diff --git a/node_modules/lodash/_baseIsNaN.js b/node_modules/lodash/_baseIsNaN.js new file mode 100644 index 0000000..316f1eb --- /dev/null +++ b/node_modules/lodash/_baseIsNaN.js @@ -0,0 +1,12 @@ +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { +  return value !== value; +} + +module.exports = baseIsNaN; diff --git a/node_modules/lodash/_baseIsNative.js b/node_modules/lodash/_baseIsNative.js new file mode 100644 index 0000000..8702330 --- /dev/null +++ b/node_modules/lodash/_baseIsNative.js @@ -0,0 +1,47 @@ +var isFunction = require('./isFunction'), +    isMasked = require('./_isMasked'), +    isObject = require('./isObject'), +    toSource = require('./_toSource'); + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, +    objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + +  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') +  .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + *  else `false`. + */ +function baseIsNative(value) { +  if (!isObject(value) || isMasked(value)) { +    return false; +  } +  var pattern = isFunction(value) ? reIsNative : reIsHostCtor; +  return pattern.test(toSource(value)); +} + +module.exports = baseIsNative; diff --git a/node_modules/lodash/_baseIsRegExp.js b/node_modules/lodash/_baseIsRegExp.js new file mode 100644 index 0000000..6cd7c1a --- /dev/null +++ b/node_modules/lodash/_baseIsRegExp.js @@ -0,0 +1,18 @@ +var baseGetTag = require('./_baseGetTag'), +    isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var regexpTag = '[object RegExp]'; + +/** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ +function baseIsRegExp(value) { +  return isObjectLike(value) && baseGetTag(value) == regexpTag; +} + +module.exports = baseIsRegExp; diff --git a/node_modules/lodash/_baseIsSet.js b/node_modules/lodash/_baseIsSet.js new file mode 100644 index 0000000..6dee367 --- /dev/null +++ b/node_modules/lodash/_baseIsSet.js @@ -0,0 +1,18 @@ +var getTag = require('./_getTag'), +    isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { +  return isObjectLike(value) && getTag(value) == setTag; +} + +module.exports = baseIsSet; diff --git a/node_modules/lodash/_baseIsTypedArray.js b/node_modules/lodash/_baseIsTypedArray.js new file mode 100644 index 0000000..1edb32f --- /dev/null +++ b/node_modules/lodash/_baseIsTypedArray.js @@ -0,0 +1,60 @@ +var baseGetTag = require('./_baseGetTag'), +    isLength = require('./isLength'), +    isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', +    arrayTag = '[object Array]', +    boolTag = '[object Boolean]', +    dateTag = '[object Date]', +    errorTag = '[object Error]', +    funcTag = '[object Function]', +    mapTag = '[object Map]', +    numberTag = '[object Number]', +    objectTag = '[object Object]', +    regexpTag = '[object RegExp]', +    setTag = '[object Set]', +    stringTag = '[object String]', +    weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', +    dataViewTag = '[object DataView]', +    float32Tag = '[object Float32Array]', +    float64Tag = '[object Float64Array]', +    int8Tag = '[object Int8Array]', +    int16Tag = '[object Int16Array]', +    int32Tag = '[object Int32Array]', +    uint8Tag = '[object Uint8Array]', +    uint8ClampedTag = '[object Uint8ClampedArray]', +    uint16Tag = '[object Uint16Array]', +    uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = +typedArrayTags[errorTag] = typedArrayTags[funcTag] = +typedArrayTags[mapTag] = typedArrayTags[numberTag] = +typedArrayTags[objectTag] = typedArrayTags[regexpTag] = +typedArrayTags[setTag] = typedArrayTags[stringTag] = +typedArrayTags[weakMapTag] = false; + +/** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ +function baseIsTypedArray(value) { +  return isObjectLike(value) && +    isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +} + +module.exports = baseIsTypedArray; diff --git a/node_modules/lodash/_baseIteratee.js b/node_modules/lodash/_baseIteratee.js new file mode 100644 index 0000000..995c257 --- /dev/null +++ b/node_modules/lodash/_baseIteratee.js @@ -0,0 +1,31 @@ +var baseMatches = require('./_baseMatches'), +    baseMatchesProperty = require('./_baseMatchesProperty'), +    identity = require('./identity'), +    isArray = require('./isArray'), +    property = require('./property'); + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { +  // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. +  // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. +  if (typeof value == 'function') { +    return value; +  } +  if (value == null) { +    return identity; +  } +  if (typeof value == 'object') { +    return isArray(value) +      ? baseMatchesProperty(value[0], value[1]) +      : baseMatches(value); +  } +  return property(value); +} + +module.exports = baseIteratee; diff --git a/node_modules/lodash/_baseKeys.js b/node_modules/lodash/_baseKeys.js new file mode 100644 index 0000000..45e9e6f --- /dev/null +++ b/node_modules/lodash/_baseKeys.js @@ -0,0 +1,30 @@ +var isPrototype = require('./_isPrototype'), +    nativeKeys = require('./_nativeKeys'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeys(object) { +  if (!isPrototype(object)) { +    return nativeKeys(object); +  } +  var result = []; +  for (var key in Object(object)) { +    if (hasOwnProperty.call(object, key) && key != 'constructor') { +      result.push(key); +    } +  } +  return result; +} + +module.exports = baseKeys; diff --git a/node_modules/lodash/_baseKeysIn.js b/node_modules/lodash/_baseKeysIn.js new file mode 100644 index 0000000..ea8a0a1 --- /dev/null +++ b/node_modules/lodash/_baseKeysIn.js @@ -0,0 +1,33 @@ +var isObject = require('./isObject'), +    isPrototype = require('./_isPrototype'), +    nativeKeysIn = require('./_nativeKeysIn'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeysIn(object) { +  if (!isObject(object)) { +    return nativeKeysIn(object); +  } +  var isProto = isPrototype(object), +      result = []; + +  for (var key in object) { +    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { +      result.push(key); +    } +  } +  return result; +} + +module.exports = baseKeysIn; diff --git a/node_modules/lodash/_baseLodash.js b/node_modules/lodash/_baseLodash.js new file mode 100644 index 0000000..f76c790 --- /dev/null +++ b/node_modules/lodash/_baseLodash.js @@ -0,0 +1,10 @@ +/** + * The function whose prototype chain sequence wrappers inherit from. + * + * @private + */ +function baseLodash() { +  // No operation performed. +} + +module.exports = baseLodash; diff --git a/node_modules/lodash/_baseLt.js b/node_modules/lodash/_baseLt.js new file mode 100644 index 0000000..8674d29 --- /dev/null +++ b/node_modules/lodash/_baseLt.js @@ -0,0 +1,14 @@ +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + *  else `false`. + */ +function baseLt(value, other) { +  return value < other; +} + +module.exports = baseLt; diff --git a/node_modules/lodash/_baseMap.js b/node_modules/lodash/_baseMap.js new file mode 100644 index 0000000..0bf5cea --- /dev/null +++ b/node_modules/lodash/_baseMap.js @@ -0,0 +1,22 @@ +var baseEach = require('./_baseEach'), +    isArrayLike = require('./isArrayLike'); + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { +  var index = -1, +      result = isArrayLike(collection) ? Array(collection.length) : []; + +  baseEach(collection, function(value, key, collection) { +    result[++index] = iteratee(value, key, collection); +  }); +  return result; +} + +module.exports = baseMap; diff --git a/node_modules/lodash/_baseMatches.js b/node_modules/lodash/_baseMatches.js new file mode 100644 index 0000000..e56582a --- /dev/null +++ b/node_modules/lodash/_baseMatches.js @@ -0,0 +1,22 @@ +var baseIsMatch = require('./_baseIsMatch'), +    getMatchData = require('./_getMatchData'), +    matchesStrictComparable = require('./_matchesStrictComparable'); + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { +  var matchData = getMatchData(source); +  if (matchData.length == 1 && matchData[0][2]) { +    return matchesStrictComparable(matchData[0][0], matchData[0][1]); +  } +  return function(object) { +    return object === source || baseIsMatch(object, source, matchData); +  }; +} + +module.exports = baseMatches; diff --git a/node_modules/lodash/_baseMatchesProperty.js b/node_modules/lodash/_baseMatchesProperty.js new file mode 100644 index 0000000..24afd89 --- /dev/null +++ b/node_modules/lodash/_baseMatchesProperty.js @@ -0,0 +1,33 @@ +var baseIsEqual = require('./_baseIsEqual'), +    get = require('./get'), +    hasIn = require('./hasIn'), +    isKey = require('./_isKey'), +    isStrictComparable = require('./_isStrictComparable'), +    matchesStrictComparable = require('./_matchesStrictComparable'), +    toKey = require('./_toKey'); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, +    COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { +  if (isKey(path) && isStrictComparable(srcValue)) { +    return matchesStrictComparable(toKey(path), srcValue); +  } +  return function(object) { +    var objValue = get(object, path); +    return (objValue === undefined && objValue === srcValue) +      ? hasIn(object, path) +      : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); +  }; +} + +module.exports = baseMatchesProperty; diff --git a/node_modules/lodash/_baseMean.js b/node_modules/lodash/_baseMean.js new file mode 100644 index 0000000..fa9e00a --- /dev/null +++ b/node_modules/lodash/_baseMean.js @@ -0,0 +1,20 @@ +var baseSum = require('./_baseSum'); + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** + * The base implementation of `_.mean` and `_.meanBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the mean. + */ +function baseMean(array, iteratee) { +  var length = array == null ? 0 : array.length; +  return length ? (baseSum(array, iteratee) / length) : NAN; +} + +module.exports = baseMean; diff --git a/node_modules/lodash/_baseMerge.js b/node_modules/lodash/_baseMerge.js new file mode 100644 index 0000000..c98b5eb --- /dev/null +++ b/node_modules/lodash/_baseMerge.js @@ -0,0 +1,42 @@ +var Stack = require('./_Stack'), +    assignMergeValue = require('./_assignMergeValue'), +    baseFor = require('./_baseFor'), +    baseMergeDeep = require('./_baseMergeDeep'), +    isObject = require('./isObject'), +    keysIn = require('./keysIn'), +    safeGet = require('./_safeGet'); + +/** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged + *  counterparts. + */ +function baseMerge(object, source, srcIndex, customizer, stack) { +  if (object === source) { +    return; +  } +  baseFor(source, function(srcValue, key) { +    stack || (stack = new Stack); +    if (isObject(srcValue)) { +      baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); +    } +    else { +      var newValue = customizer +        ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) +        : undefined; + +      if (newValue === undefined) { +        newValue = srcValue; +      } +      assignMergeValue(object, key, newValue); +    } +  }, keysIn); +} + +module.exports = baseMerge; diff --git a/node_modules/lodash/_baseMergeDeep.js b/node_modules/lodash/_baseMergeDeep.js new file mode 100644 index 0000000..4679e8d --- /dev/null +++ b/node_modules/lodash/_baseMergeDeep.js @@ -0,0 +1,94 @@ +var assignMergeValue = require('./_assignMergeValue'), +    cloneBuffer = require('./_cloneBuffer'), +    cloneTypedArray = require('./_cloneTypedArray'), +    copyArray = require('./_copyArray'), +    initCloneObject = require('./_initCloneObject'), +    isArguments = require('./isArguments'), +    isArray = require('./isArray'), +    isArrayLikeObject = require('./isArrayLikeObject'), +    isBuffer = require('./isBuffer'), +    isFunction = require('./isFunction'), +    isObject = require('./isObject'), +    isPlainObject = require('./isPlainObject'), +    isTypedArray = require('./isTypedArray'), +    safeGet = require('./_safeGet'), +    toPlainObject = require('./toPlainObject'); + +/** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged + *  counterparts. + */ +function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { +  var objValue = safeGet(object, key), +      srcValue = safeGet(source, key), +      stacked = stack.get(srcValue); + +  if (stacked) { +    assignMergeValue(object, key, stacked); +    return; +  } +  var newValue = customizer +    ? customizer(objValue, srcValue, (key + ''), object, source, stack) +    : undefined; + +  var isCommon = newValue === undefined; + +  if (isCommon) { +    var isArr = isArray(srcValue), +        isBuff = !isArr && isBuffer(srcValue), +        isTyped = !isArr && !isBuff && isTypedArray(srcValue); + +    newValue = srcValue; +    if (isArr || isBuff || isTyped) { +      if (isArray(objValue)) { +        newValue = objValue; +      } +      else if (isArrayLikeObject(objValue)) { +        newValue = copyArray(objValue); +      } +      else if (isBuff) { +        isCommon = false; +        newValue = cloneBuffer(srcValue, true); +      } +      else if (isTyped) { +        isCommon = false; +        newValue = cloneTypedArray(srcValue, true); +      } +      else { +        newValue = []; +      } +    } +    else if (isPlainObject(srcValue) || isArguments(srcValue)) { +      newValue = objValue; +      if (isArguments(objValue)) { +        newValue = toPlainObject(objValue); +      } +      else if (!isObject(objValue) || isFunction(objValue)) { +        newValue = initCloneObject(srcValue); +      } +    } +    else { +      isCommon = false; +    } +  } +  if (isCommon) { +    // Recursively merge objects and arrays (susceptible to call stack limits). +    stack.set(srcValue, newValue); +    mergeFunc(newValue, srcValue, srcIndex, customizer, stack); +    stack['delete'](srcValue); +  } +  assignMergeValue(object, key, newValue); +} + +module.exports = baseMergeDeep; diff --git a/node_modules/lodash/_baseNth.js b/node_modules/lodash/_baseNth.js new file mode 100644 index 0000000..0403c2a --- /dev/null +++ b/node_modules/lodash/_baseNth.js @@ -0,0 +1,20 @@ +var isIndex = require('./_isIndex'); + +/** + * The base implementation of `_.nth` which doesn't coerce arguments. + * + * @private + * @param {Array} array The array to query. + * @param {number} n The index of the element to return. + * @returns {*} Returns the nth element of `array`. + */ +function baseNth(array, n) { +  var length = array.length; +  if (!length) { +    return; +  } +  n += n < 0 ? length : 0; +  return isIndex(n, length) ? array[n] : undefined; +} + +module.exports = baseNth; diff --git a/node_modules/lodash/_baseOrderBy.js b/node_modules/lodash/_baseOrderBy.js new file mode 100644 index 0000000..775a017 --- /dev/null +++ b/node_modules/lodash/_baseOrderBy.js @@ -0,0 +1,49 @@ +var arrayMap = require('./_arrayMap'), +    baseGet = require('./_baseGet'), +    baseIteratee = require('./_baseIteratee'), +    baseMap = require('./_baseMap'), +    baseSortBy = require('./_baseSortBy'), +    baseUnary = require('./_baseUnary'), +    compareMultiple = require('./_compareMultiple'), +    identity = require('./identity'), +    isArray = require('./isArray'); + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { +  if (iteratees.length) { +    iteratees = arrayMap(iteratees, function(iteratee) { +      if (isArray(iteratee)) { +        return function(value) { +          return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee); +        } +      } +      return iteratee; +    }); +  } else { +    iteratees = [identity]; +  } + +  var index = -1; +  iteratees = arrayMap(iteratees, baseUnary(baseIteratee)); + +  var result = baseMap(collection, function(value, key, collection) { +    var criteria = arrayMap(iteratees, function(iteratee) { +      return iteratee(value); +    }); +    return { 'criteria': criteria, 'index': ++index, 'value': value }; +  }); + +  return baseSortBy(result, function(object, other) { +    return compareMultiple(object, other, orders); +  }); +} + +module.exports = baseOrderBy; diff --git a/node_modules/lodash/_basePick.js b/node_modules/lodash/_basePick.js new file mode 100644 index 0000000..09b458a --- /dev/null +++ b/node_modules/lodash/_basePick.js @@ -0,0 +1,19 @@ +var basePickBy = require('./_basePickBy'), +    hasIn = require('./hasIn'); + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { +  return basePickBy(object, paths, function(value, path) { +    return hasIn(object, path); +  }); +} + +module.exports = basePick; diff --git a/node_modules/lodash/_basePickBy.js b/node_modules/lodash/_basePickBy.js new file mode 100644 index 0000000..85be68c --- /dev/null +++ b/node_modules/lodash/_basePickBy.js @@ -0,0 +1,30 @@ +var baseGet = require('./_baseGet'), +    baseSet = require('./_baseSet'), +    castPath = require('./_castPath'); + +/** + * The base implementation of  `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { +  var index = -1, +      length = paths.length, +      result = {}; + +  while (++index < length) { +    var path = paths[index], +        value = baseGet(object, path); + +    if (predicate(value, path)) { +      baseSet(result, castPath(path, object), value); +    } +  } +  return result; +} + +module.exports = basePickBy; diff --git a/node_modules/lodash/_baseProperty.js b/node_modules/lodash/_baseProperty.js new file mode 100644 index 0000000..496281e --- /dev/null +++ b/node_modules/lodash/_baseProperty.js @@ -0,0 +1,14 @@ +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { +  return function(object) { +    return object == null ? undefined : object[key]; +  }; +} + +module.exports = baseProperty; diff --git a/node_modules/lodash/_basePropertyDeep.js b/node_modules/lodash/_basePropertyDeep.js new file mode 100644 index 0000000..1e5aae5 --- /dev/null +++ b/node_modules/lodash/_basePropertyDeep.js @@ -0,0 +1,16 @@ +var baseGet = require('./_baseGet'); + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { +  return function(object) { +    return baseGet(object, path); +  }; +} + +module.exports = basePropertyDeep; diff --git a/node_modules/lodash/_basePropertyOf.js b/node_modules/lodash/_basePropertyOf.js new file mode 100644 index 0000000..4617399 --- /dev/null +++ b/node_modules/lodash/_basePropertyOf.js @@ -0,0 +1,14 @@ +/** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyOf(object) { +  return function(key) { +    return object == null ? undefined : object[key]; +  }; +} + +module.exports = basePropertyOf; diff --git a/node_modules/lodash/_basePullAll.js b/node_modules/lodash/_basePullAll.js new file mode 100644 index 0000000..305720e --- /dev/null +++ b/node_modules/lodash/_basePullAll.js @@ -0,0 +1,51 @@ +var arrayMap = require('./_arrayMap'), +    baseIndexOf = require('./_baseIndexOf'), +    baseIndexOfWith = require('./_baseIndexOfWith'), +    baseUnary = require('./_baseUnary'), +    copyArray = require('./_copyArray'); + +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/** + * The base implementation of `_.pullAllBy` without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + */ +function basePullAll(array, values, iteratee, comparator) { +  var indexOf = comparator ? baseIndexOfWith : baseIndexOf, +      index = -1, +      length = values.length, +      seen = array; + +  if (array === values) { +    values = copyArray(values); +  } +  if (iteratee) { +    seen = arrayMap(array, baseUnary(iteratee)); +  } +  while (++index < length) { +    var fromIndex = 0, +        value = values[index], +        computed = iteratee ? iteratee(value) : value; + +    while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { +      if (seen !== array) { +        splice.call(seen, fromIndex, 1); +      } +      splice.call(array, fromIndex, 1); +    } +  } +  return array; +} + +module.exports = basePullAll; diff --git a/node_modules/lodash/_basePullAt.js b/node_modules/lodash/_basePullAt.js new file mode 100644 index 0000000..c3e9e71 --- /dev/null +++ b/node_modules/lodash/_basePullAt.js @@ -0,0 +1,37 @@ +var baseUnset = require('./_baseUnset'), +    isIndex = require('./_isIndex'); + +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/** + * The base implementation of `_.pullAt` without support for individual + * indexes or capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */ +function basePullAt(array, indexes) { +  var length = array ? indexes.length : 0, +      lastIndex = length - 1; + +  while (length--) { +    var index = indexes[length]; +    if (length == lastIndex || index !== previous) { +      var previous = index; +      if (isIndex(index)) { +        splice.call(array, index, 1); +      } else { +        baseUnset(array, index); +      } +    } +  } +  return array; +} + +module.exports = basePullAt; diff --git a/node_modules/lodash/_baseRandom.js b/node_modules/lodash/_baseRandom.js new file mode 100644 index 0000000..94f76a7 --- /dev/null +++ b/node_modules/lodash/_baseRandom.js @@ -0,0 +1,18 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeFloor = Math.floor, +    nativeRandom = Math.random; + +/** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */ +function baseRandom(lower, upper) { +  return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); +} + +module.exports = baseRandom; diff --git a/node_modules/lodash/_baseRange.js b/node_modules/lodash/_baseRange.js new file mode 100644 index 0000000..0fb8e41 --- /dev/null +++ b/node_modules/lodash/_baseRange.js @@ -0,0 +1,28 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, +    nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { +  var index = -1, +      length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), +      result = Array(length); + +  while (length--) { +    result[fromRight ? length : ++index] = start; +    start += step; +  } +  return result; +} + +module.exports = baseRange; diff --git a/node_modules/lodash/_baseReduce.js b/node_modules/lodash/_baseReduce.js new file mode 100644 index 0000000..5a1f8b5 --- /dev/null +++ b/node_modules/lodash/_baseReduce.js @@ -0,0 +1,23 @@ +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + *  `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { +  eachFunc(collection, function(value, index, collection) { +    accumulator = initAccum +      ? (initAccum = false, value) +      : iteratee(accumulator, value, index, collection); +  }); +  return accumulator; +} + +module.exports = baseReduce; diff --git a/node_modules/lodash/_baseRepeat.js b/node_modules/lodash/_baseRepeat.js new file mode 100644 index 0000000..ee44c31 --- /dev/null +++ b/node_modules/lodash/_baseRepeat.js @@ -0,0 +1,35 @@ +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeFloor = Math.floor; + +/** + * The base implementation of `_.repeat` which doesn't coerce arguments. + * + * @private + * @param {string} string The string to repeat. + * @param {number} n The number of times to repeat the string. + * @returns {string} Returns the repeated string. + */ +function baseRepeat(string, n) { +  var result = ''; +  if (!string || n < 1 || n > MAX_SAFE_INTEGER) { +    return result; +  } +  // Leverage the exponentiation by squaring algorithm for a faster repeat. +  // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. +  do { +    if (n % 2) { +      result += string; +    } +    n = nativeFloor(n / 2); +    if (n) { +      string += string; +    } +  } while (n); + +  return result; +} + +module.exports = baseRepeat; diff --git a/node_modules/lodash/_baseRest.js b/node_modules/lodash/_baseRest.js new file mode 100644 index 0000000..d0dc4bd --- /dev/null +++ b/node_modules/lodash/_baseRest.js @@ -0,0 +1,17 @@ +var identity = require('./identity'), +    overRest = require('./_overRest'), +    setToString = require('./_setToString'); + +/** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ +function baseRest(func, start) { +  return setToString(overRest(func, start, identity), func + ''); +} + +module.exports = baseRest; diff --git a/node_modules/lodash/_baseSample.js b/node_modules/lodash/_baseSample.js new file mode 100644 index 0000000..58582b9 --- /dev/null +++ b/node_modules/lodash/_baseSample.js @@ -0,0 +1,15 @@ +var arraySample = require('./_arraySample'), +    values = require('./values'); + +/** + * The base implementation of `_.sample`. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + */ +function baseSample(collection) { +  return arraySample(values(collection)); +} + +module.exports = baseSample; diff --git a/node_modules/lodash/_baseSampleSize.js b/node_modules/lodash/_baseSampleSize.js new file mode 100644 index 0000000..5c90ec5 --- /dev/null +++ b/node_modules/lodash/_baseSampleSize.js @@ -0,0 +1,18 @@ +var baseClamp = require('./_baseClamp'), +    shuffleSelf = require('./_shuffleSelf'), +    values = require('./values'); + +/** + * The base implementation of `_.sampleSize` without param guards. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ +function baseSampleSize(collection, n) { +  var array = values(collection); +  return shuffleSelf(array, baseClamp(n, 0, array.length)); +} + +module.exports = baseSampleSize; diff --git a/node_modules/lodash/_baseSet.js b/node_modules/lodash/_baseSet.js new file mode 100644 index 0000000..99f4fbf --- /dev/null +++ b/node_modules/lodash/_baseSet.js @@ -0,0 +1,51 @@ +var assignValue = require('./_assignValue'), +    castPath = require('./_castPath'), +    isIndex = require('./_isIndex'), +    isObject = require('./isObject'), +    toKey = require('./_toKey'); + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { +  if (!isObject(object)) { +    return object; +  } +  path = castPath(path, object); + +  var index = -1, +      length = path.length, +      lastIndex = length - 1, +      nested = object; + +  while (nested != null && ++index < length) { +    var key = toKey(path[index]), +        newValue = value; + +    if (key === '__proto__' || key === 'constructor' || key === 'prototype') { +      return object; +    } + +    if (index != lastIndex) { +      var objValue = nested[key]; +      newValue = customizer ? customizer(objValue, key, nested) : undefined; +      if (newValue === undefined) { +        newValue = isObject(objValue) +          ? objValue +          : (isIndex(path[index + 1]) ? [] : {}); +      } +    } +    assignValue(nested, key, newValue); +    nested = nested[key]; +  } +  return object; +} + +module.exports = baseSet; diff --git a/node_modules/lodash/_baseSetData.js b/node_modules/lodash/_baseSetData.js new file mode 100644 index 0000000..c409947 --- /dev/null +++ b/node_modules/lodash/_baseSetData.js @@ -0,0 +1,17 @@ +var identity = require('./identity'), +    metaMap = require('./_metaMap'); + +/** + * The base implementation of `setData` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ +var baseSetData = !metaMap ? identity : function(func, data) { +  metaMap.set(func, data); +  return func; +}; + +module.exports = baseSetData; diff --git a/node_modules/lodash/_baseSetToString.js b/node_modules/lodash/_baseSetToString.js new file mode 100644 index 0000000..89eaca3 --- /dev/null +++ b/node_modules/lodash/_baseSetToString.js @@ -0,0 +1,22 @@ +var constant = require('./constant'), +    defineProperty = require('./_defineProperty'), +    identity = require('./identity'); + +/** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var baseSetToString = !defineProperty ? identity : function(func, string) { +  return defineProperty(func, 'toString', { +    'configurable': true, +    'enumerable': false, +    'value': constant(string), +    'writable': true +  }); +}; + +module.exports = baseSetToString; diff --git a/node_modules/lodash/_baseShuffle.js b/node_modules/lodash/_baseShuffle.js new file mode 100644 index 0000000..023077a --- /dev/null +++ b/node_modules/lodash/_baseShuffle.js @@ -0,0 +1,15 @@ +var shuffleSelf = require('./_shuffleSelf'), +    values = require('./values'); + +/** + * The base implementation of `_.shuffle`. + * + * @private + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + */ +function baseShuffle(collection) { +  return shuffleSelf(values(collection)); +} + +module.exports = baseShuffle; diff --git a/node_modules/lodash/_baseSlice.js b/node_modules/lodash/_baseSlice.js new file mode 100644 index 0000000..786f6c9 --- /dev/null +++ b/node_modules/lodash/_baseSlice.js @@ -0,0 +1,31 @@ +/** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ +function baseSlice(array, start, end) { +  var index = -1, +      length = array.length; + +  if (start < 0) { +    start = -start > length ? 0 : (length + start); +  } +  end = end > length ? length : end; +  if (end < 0) { +    end += length; +  } +  length = start > end ? 0 : ((end - start) >>> 0); +  start >>>= 0; + +  var result = Array(length); +  while (++index < length) { +    result[index] = array[index + start]; +  } +  return result; +} + +module.exports = baseSlice; diff --git a/node_modules/lodash/_baseSome.js b/node_modules/lodash/_baseSome.js new file mode 100644 index 0000000..58f3f44 --- /dev/null +++ b/node_modules/lodash/_baseSome.js @@ -0,0 +1,22 @@ +var baseEach = require('./_baseEach'); + +/** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + *  else `false`. + */ +function baseSome(collection, predicate) { +  var result; + +  baseEach(collection, function(value, index, collection) { +    result = predicate(value, index, collection); +    return !result; +  }); +  return !!result; +} + +module.exports = baseSome; diff --git a/node_modules/lodash/_baseSortBy.js b/node_modules/lodash/_baseSortBy.js new file mode 100644 index 0000000..a25c92e --- /dev/null +++ b/node_modules/lodash/_baseSortBy.js @@ -0,0 +1,21 @@ +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { +  var length = array.length; + +  array.sort(comparer); +  while (length--) { +    array[length] = array[length].value; +  } +  return array; +} + +module.exports = baseSortBy; diff --git a/node_modules/lodash/_baseSortedIndex.js b/node_modules/lodash/_baseSortedIndex.js new file mode 100644 index 0000000..638c366 --- /dev/null +++ b/node_modules/lodash/_baseSortedIndex.js @@ -0,0 +1,42 @@ +var baseSortedIndexBy = require('./_baseSortedIndexBy'), +    identity = require('./identity'), +    isSymbol = require('./isSymbol'); + +/** Used as references for the maximum length and index of an array. */ +var MAX_ARRAY_LENGTH = 4294967295, +    HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + +/** + * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which + * performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + *  into `array`. + */ +function baseSortedIndex(array, value, retHighest) { +  var low = 0, +      high = array == null ? low : array.length; + +  if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { +    while (low < high) { +      var mid = (low + high) >>> 1, +          computed = array[mid]; + +      if (computed !== null && !isSymbol(computed) && +          (retHighest ? (computed <= value) : (computed < value))) { +        low = mid + 1; +      } else { +        high = mid; +      } +    } +    return high; +  } +  return baseSortedIndexBy(array, value, identity, retHighest); +} + +module.exports = baseSortedIndex; diff --git a/node_modules/lodash/_baseSortedIndexBy.js b/node_modules/lodash/_baseSortedIndexBy.js new file mode 100644 index 0000000..c247b37 --- /dev/null +++ b/node_modules/lodash/_baseSortedIndexBy.js @@ -0,0 +1,67 @@ +var isSymbol = require('./isSymbol'); + +/** Used as references for the maximum length and index of an array. */ +var MAX_ARRAY_LENGTH = 4294967295, +    MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeFloor = Math.floor, +    nativeMin = Math.min; + +/** + * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` + * which invokes `iteratee` for `value` and each element of `array` to compute + * their sort ranking. The iteratee is invoked with one argument; (value). + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The iteratee invoked per element. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + *  into `array`. + */ +function baseSortedIndexBy(array, value, iteratee, retHighest) { +  var low = 0, +      high = array == null ? 0 : array.length; +  if (high === 0) { +    return 0; +  } + +  value = iteratee(value); +  var valIsNaN = value !== value, +      valIsNull = value === null, +      valIsSymbol = isSymbol(value), +      valIsUndefined = value === undefined; + +  while (low < high) { +    var mid = nativeFloor((low + high) / 2), +        computed = iteratee(array[mid]), +        othIsDefined = computed !== undefined, +        othIsNull = computed === null, +        othIsReflexive = computed === computed, +        othIsSymbol = isSymbol(computed); + +    if (valIsNaN) { +      var setLow = retHighest || othIsReflexive; +    } else if (valIsUndefined) { +      setLow = othIsReflexive && (retHighest || othIsDefined); +    } else if (valIsNull) { +      setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); +    } else if (valIsSymbol) { +      setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); +    } else if (othIsNull || othIsSymbol) { +      setLow = false; +    } else { +      setLow = retHighest ? (computed <= value) : (computed < value); +    } +    if (setLow) { +      low = mid + 1; +    } else { +      high = mid; +    } +  } +  return nativeMin(high, MAX_ARRAY_INDEX); +} + +module.exports = baseSortedIndexBy; diff --git a/node_modules/lodash/_baseSortedUniq.js b/node_modules/lodash/_baseSortedUniq.js new file mode 100644 index 0000000..802159a --- /dev/null +++ b/node_modules/lodash/_baseSortedUniq.js @@ -0,0 +1,30 @@ +var eq = require('./eq'); + +/** + * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseSortedUniq(array, iteratee) { +  var index = -1, +      length = array.length, +      resIndex = 0, +      result = []; + +  while (++index < length) { +    var value = array[index], +        computed = iteratee ? iteratee(value) : value; + +    if (!index || !eq(computed, seen)) { +      var seen = computed; +      result[resIndex++] = value === 0 ? 0 : value; +    } +  } +  return result; +} + +module.exports = baseSortedUniq; diff --git a/node_modules/lodash/_baseSum.js b/node_modules/lodash/_baseSum.js new file mode 100644 index 0000000..a9e84c1 --- /dev/null +++ b/node_modules/lodash/_baseSum.js @@ -0,0 +1,24 @@ +/** + * The base implementation of `_.sum` and `_.sumBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the sum. + */ +function baseSum(array, iteratee) { +  var result, +      index = -1, +      length = array.length; + +  while (++index < length) { +    var current = iteratee(array[index]); +    if (current !== undefined) { +      result = result === undefined ? current : (result + current); +    } +  } +  return result; +} + +module.exports = baseSum; diff --git a/node_modules/lodash/_baseTimes.js b/node_modules/lodash/_baseTimes.js new file mode 100644 index 0000000..0603fc3 --- /dev/null +++ b/node_modules/lodash/_baseTimes.js @@ -0,0 +1,20 @@ +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { +  var index = -1, +      result = Array(n); + +  while (++index < n) { +    result[index] = iteratee(index); +  } +  return result; +} + +module.exports = baseTimes; diff --git a/node_modules/lodash/_baseToNumber.js b/node_modules/lodash/_baseToNumber.js new file mode 100644 index 0000000..04859f3 --- /dev/null +++ b/node_modules/lodash/_baseToNumber.js @@ -0,0 +1,24 @@ +var isSymbol = require('./isSymbol'); + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** + * The base implementation of `_.toNumber` which doesn't ensure correct + * conversions of binary, hexadecimal, or octal string values. + * + * @private + * @param {*} value The value to process. + * @returns {number} Returns the number. + */ +function baseToNumber(value) { +  if (typeof value == 'number') { +    return value; +  } +  if (isSymbol(value)) { +    return NAN; +  } +  return +value; +} + +module.exports = baseToNumber; diff --git a/node_modules/lodash/_baseToPairs.js b/node_modules/lodash/_baseToPairs.js new file mode 100644 index 0000000..bff1991 --- /dev/null +++ b/node_modules/lodash/_baseToPairs.js @@ -0,0 +1,18 @@ +var arrayMap = require('./_arrayMap'); + +/** + * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array + * of key-value pairs for `object` corresponding to the property names of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the key-value pairs. + */ +function baseToPairs(object, props) { +  return arrayMap(props, function(key) { +    return [key, object[key]]; +  }); +} + +module.exports = baseToPairs; diff --git a/node_modules/lodash/_baseToString.js b/node_modules/lodash/_baseToString.js new file mode 100644 index 0000000..ada6ad2 --- /dev/null +++ b/node_modules/lodash/_baseToString.js @@ -0,0 +1,37 @@ +var Symbol = require('./_Symbol'), +    arrayMap = require('./_arrayMap'), +    isArray = require('./isArray'), +    isSymbol = require('./isSymbol'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, +    symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { +  // Exit early for strings to avoid a performance hit in some environments. +  if (typeof value == 'string') { +    return value; +  } +  if (isArray(value)) { +    // Recursively convert values (susceptible to call stack limits). +    return arrayMap(value, baseToString) + ''; +  } +  if (isSymbol(value)) { +    return symbolToString ? symbolToString.call(value) : ''; +  } +  var result = (value + ''); +  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +module.exports = baseToString; diff --git a/node_modules/lodash/_baseTrim.js b/node_modules/lodash/_baseTrim.js new file mode 100644 index 0000000..3e2797d --- /dev/null +++ b/node_modules/lodash/_baseTrim.js @@ -0,0 +1,19 @@ +var trimmedEndIndex = require('./_trimmedEndIndex'); + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { +  return string +    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') +    : string; +} + +module.exports = baseTrim; diff --git a/node_modules/lodash/_baseUnary.js b/node_modules/lodash/_baseUnary.js new file mode 100644 index 0000000..98639e9 --- /dev/null +++ b/node_modules/lodash/_baseUnary.js @@ -0,0 +1,14 @@ +/** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ +function baseUnary(func) { +  return function(value) { +    return func(value); +  }; +} + +module.exports = baseUnary; diff --git a/node_modules/lodash/_baseUniq.js b/node_modules/lodash/_baseUniq.js new file mode 100644 index 0000000..aea459d --- /dev/null +++ b/node_modules/lodash/_baseUniq.js @@ -0,0 +1,72 @@ +var SetCache = require('./_SetCache'), +    arrayIncludes = require('./_arrayIncludes'), +    arrayIncludesWith = require('./_arrayIncludesWith'), +    cacheHas = require('./_cacheHas'), +    createSet = require('./_createSet'), +    setToArray = require('./_setToArray'); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { +  var index = -1, +      includes = arrayIncludes, +      length = array.length, +      isCommon = true, +      result = [], +      seen = result; + +  if (comparator) { +    isCommon = false; +    includes = arrayIncludesWith; +  } +  else if (length >= LARGE_ARRAY_SIZE) { +    var set = iteratee ? null : createSet(array); +    if (set) { +      return setToArray(set); +    } +    isCommon = false; +    includes = cacheHas; +    seen = new SetCache; +  } +  else { +    seen = iteratee ? [] : result; +  } +  outer: +  while (++index < length) { +    var value = array[index], +        computed = iteratee ? iteratee(value) : value; + +    value = (comparator || value !== 0) ? value : 0; +    if (isCommon && computed === computed) { +      var seenIndex = seen.length; +      while (seenIndex--) { +        if (seen[seenIndex] === computed) { +          continue outer; +        } +      } +      if (iteratee) { +        seen.push(computed); +      } +      result.push(value); +    } +    else if (!includes(seen, computed, comparator)) { +      if (seen !== result) { +        seen.push(computed); +      } +      result.push(value); +    } +  } +  return result; +} + +module.exports = baseUniq; diff --git a/node_modules/lodash/_baseUnset.js b/node_modules/lodash/_baseUnset.js new file mode 100644 index 0000000..eefc6e3 --- /dev/null +++ b/node_modules/lodash/_baseUnset.js @@ -0,0 +1,20 @@ +var castPath = require('./_castPath'), +    last = require('./last'), +    parent = require('./_parent'), +    toKey = require('./_toKey'); + +/** + * The base implementation of `_.unset`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The property path to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + */ +function baseUnset(object, path) { +  path = castPath(path, object); +  object = parent(object, path); +  return object == null || delete object[toKey(last(path))]; +} + +module.exports = baseUnset; diff --git a/node_modules/lodash/_baseUpdate.js b/node_modules/lodash/_baseUpdate.js new file mode 100644 index 0000000..92a6237 --- /dev/null +++ b/node_modules/lodash/_baseUpdate.js @@ -0,0 +1,18 @@ +var baseGet = require('./_baseGet'), +    baseSet = require('./_baseSet'); + +/** + * The base implementation of `_.update`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to update. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseUpdate(object, path, updater, customizer) { +  return baseSet(object, path, updater(baseGet(object, path)), customizer); +} + +module.exports = baseUpdate; diff --git a/node_modules/lodash/_baseValues.js b/node_modules/lodash/_baseValues.js new file mode 100644 index 0000000..b95faad --- /dev/null +++ b/node_modules/lodash/_baseValues.js @@ -0,0 +1,19 @@ +var arrayMap = require('./_arrayMap'); + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { +  return arrayMap(props, function(key) { +    return object[key]; +  }); +} + +module.exports = baseValues; diff --git a/node_modules/lodash/_baseWhile.js b/node_modules/lodash/_baseWhile.js new file mode 100644 index 0000000..07eac61 --- /dev/null +++ b/node_modules/lodash/_baseWhile.js @@ -0,0 +1,26 @@ +var baseSlice = require('./_baseSlice'); + +/** + * The base implementation of methods like `_.dropWhile` and `_.takeWhile` + * without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to query. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [isDrop] Specify dropping elements instead of taking them. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the slice of `array`. + */ +function baseWhile(array, predicate, isDrop, fromRight) { +  var length = array.length, +      index = fromRight ? length : -1; + +  while ((fromRight ? index-- : ++index < length) && +    predicate(array[index], index, array)) {} + +  return isDrop +    ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) +    : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); +} + +module.exports = baseWhile; diff --git a/node_modules/lodash/_baseWrapperValue.js b/node_modules/lodash/_baseWrapperValue.js new file mode 100644 index 0000000..443e0df --- /dev/null +++ b/node_modules/lodash/_baseWrapperValue.js @@ -0,0 +1,25 @@ +var LazyWrapper = require('./_LazyWrapper'), +    arrayPush = require('./_arrayPush'), +    arrayReduce = require('./_arrayReduce'); + +/** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ +function baseWrapperValue(value, actions) { +  var result = value; +  if (result instanceof LazyWrapper) { +    result = result.value(); +  } +  return arrayReduce(actions, function(result, action) { +    return action.func.apply(action.thisArg, arrayPush([result], action.args)); +  }, result); +} + +module.exports = baseWrapperValue; diff --git a/node_modules/lodash/_baseXor.js b/node_modules/lodash/_baseXor.js new file mode 100644 index 0000000..8e69338 --- /dev/null +++ b/node_modules/lodash/_baseXor.js @@ -0,0 +1,36 @@ +var baseDifference = require('./_baseDifference'), +    baseFlatten = require('./_baseFlatten'), +    baseUniq = require('./_baseUniq'); + +/** + * The base implementation of methods like `_.xor`, without support for + * iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of values. + */ +function baseXor(arrays, iteratee, comparator) { +  var length = arrays.length; +  if (length < 2) { +    return length ? baseUniq(arrays[0]) : []; +  } +  var index = -1, +      result = Array(length); + +  while (++index < length) { +    var array = arrays[index], +        othIndex = -1; + +    while (++othIndex < length) { +      if (othIndex != index) { +        result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); +      } +    } +  } +  return baseUniq(baseFlatten(result, 1), iteratee, comparator); +} + +module.exports = baseXor; diff --git a/node_modules/lodash/_baseZipObject.js b/node_modules/lodash/_baseZipObject.js new file mode 100644 index 0000000..401f85b --- /dev/null +++ b/node_modules/lodash/_baseZipObject.js @@ -0,0 +1,23 @@ +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { +  var index = -1, +      length = props.length, +      valsLength = values.length, +      result = {}; + +  while (++index < length) { +    var value = index < valsLength ? values[index] : undefined; +    assignFunc(result, props[index], value); +  } +  return result; +} + +module.exports = baseZipObject; diff --git a/node_modules/lodash/_cacheHas.js b/node_modules/lodash/_cacheHas.js new file mode 100644 index 0000000..2dec892 --- /dev/null +++ b/node_modules/lodash/_cacheHas.js @@ -0,0 +1,13 @@ +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { +  return cache.has(key); +} + +module.exports = cacheHas; diff --git a/node_modules/lodash/_castArrayLikeObject.js b/node_modules/lodash/_castArrayLikeObject.js new file mode 100644 index 0000000..92c75fa --- /dev/null +++ b/node_modules/lodash/_castArrayLikeObject.js @@ -0,0 +1,14 @@ +var isArrayLikeObject = require('./isArrayLikeObject'); + +/** + * Casts `value` to an empty array if it's not an array like object. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array|Object} Returns the cast array-like object. + */ +function castArrayLikeObject(value) { +  return isArrayLikeObject(value) ? value : []; +} + +module.exports = castArrayLikeObject; diff --git a/node_modules/lodash/_castFunction.js b/node_modules/lodash/_castFunction.js new file mode 100644 index 0000000..98c91ae --- /dev/null +++ b/node_modules/lodash/_castFunction.js @@ -0,0 +1,14 @@ +var identity = require('./identity'); + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { +  return typeof value == 'function' ? value : identity; +} + +module.exports = castFunction; diff --git a/node_modules/lodash/_castPath.js b/node_modules/lodash/_castPath.js new file mode 100644 index 0000000..017e4c1 --- /dev/null +++ b/node_modules/lodash/_castPath.js @@ -0,0 +1,21 @@ +var isArray = require('./isArray'), +    isKey = require('./_isKey'), +    stringToPath = require('./_stringToPath'), +    toString = require('./toString'); + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { +  if (isArray(value)) { +    return value; +  } +  return isKey(value, object) ? [value] : stringToPath(toString(value)); +} + +module.exports = castPath; diff --git a/node_modules/lodash/_castRest.js b/node_modules/lodash/_castRest.js new file mode 100644 index 0000000..213c66f --- /dev/null +++ b/node_modules/lodash/_castRest.js @@ -0,0 +1,14 @@ +var baseRest = require('./_baseRest'); + +/** + * A `baseRest` alias which can be replaced with `identity` by module + * replacement plugins. + * + * @private + * @type {Function} + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +var castRest = baseRest; + +module.exports = castRest; diff --git a/node_modules/lodash/_castSlice.js b/node_modules/lodash/_castSlice.js new file mode 100644 index 0000000..071faeb --- /dev/null +++ b/node_modules/lodash/_castSlice.js @@ -0,0 +1,18 @@ +var baseSlice = require('./_baseSlice'); + +/** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ +function castSlice(array, start, end) { +  var length = array.length; +  end = end === undefined ? length : end; +  return (!start && end >= length) ? array : baseSlice(array, start, end); +} + +module.exports = castSlice; diff --git a/node_modules/lodash/_charsEndIndex.js b/node_modules/lodash/_charsEndIndex.js new file mode 100644 index 0000000..07908ff --- /dev/null +++ b/node_modules/lodash/_charsEndIndex.js @@ -0,0 +1,19 @@ +var baseIndexOf = require('./_baseIndexOf'); + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the last unmatched string symbol. + */ +function charsEndIndex(strSymbols, chrSymbols) { +  var index = strSymbols.length; + +  while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} +  return index; +} + +module.exports = charsEndIndex; diff --git a/node_modules/lodash/_charsStartIndex.js b/node_modules/lodash/_charsStartIndex.js new file mode 100644 index 0000000..b17afd2 --- /dev/null +++ b/node_modules/lodash/_charsStartIndex.js @@ -0,0 +1,20 @@ +var baseIndexOf = require('./_baseIndexOf'); + +/** + * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the first unmatched string symbol. + */ +function charsStartIndex(strSymbols, chrSymbols) { +  var index = -1, +      length = strSymbols.length; + +  while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} +  return index; +} + +module.exports = charsStartIndex; diff --git a/node_modules/lodash/_cloneArrayBuffer.js b/node_modules/lodash/_cloneArrayBuffer.js new file mode 100644 index 0000000..c3d8f6e --- /dev/null +++ b/node_modules/lodash/_cloneArrayBuffer.js @@ -0,0 +1,16 @@ +var Uint8Array = require('./_Uint8Array'); + +/** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ +function cloneArrayBuffer(arrayBuffer) { +  var result = new arrayBuffer.constructor(arrayBuffer.byteLength); +  new Uint8Array(result).set(new Uint8Array(arrayBuffer)); +  return result; +} + +module.exports = cloneArrayBuffer; diff --git a/node_modules/lodash/_cloneBuffer.js b/node_modules/lodash/_cloneBuffer.js new file mode 100644 index 0000000..27c4810 --- /dev/null +++ b/node_modules/lodash/_cloneBuffer.js @@ -0,0 +1,35 @@ +var root = require('./_root'); + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Built-in value references. */ +var Buffer = moduleExports ? root.Buffer : undefined, +    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined; + +/** + * Creates a clone of  `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ +function cloneBuffer(buffer, isDeep) { +  if (isDeep) { +    return buffer.slice(); +  } +  var length = buffer.length, +      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + +  buffer.copy(result); +  return result; +} + +module.exports = cloneBuffer; diff --git a/node_modules/lodash/_cloneDataView.js b/node_modules/lodash/_cloneDataView.js new file mode 100644 index 0000000..9c9b7b0 --- /dev/null +++ b/node_modules/lodash/_cloneDataView.js @@ -0,0 +1,16 @@ +var cloneArrayBuffer = require('./_cloneArrayBuffer'); + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { +  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; +  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +module.exports = cloneDataView; diff --git a/node_modules/lodash/_cloneRegExp.js b/node_modules/lodash/_cloneRegExp.js new file mode 100644 index 0000000..64a30df --- /dev/null +++ b/node_modules/lodash/_cloneRegExp.js @@ -0,0 +1,17 @@ +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { +  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); +  result.lastIndex = regexp.lastIndex; +  return result; +} + +module.exports = cloneRegExp; diff --git a/node_modules/lodash/_cloneSymbol.js b/node_modules/lodash/_cloneSymbol.js new file mode 100644 index 0000000..bede39f --- /dev/null +++ b/node_modules/lodash/_cloneSymbol.js @@ -0,0 +1,18 @@ +var Symbol = require('./_Symbol'); + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, +    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { +  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +module.exports = cloneSymbol; diff --git a/node_modules/lodash/_cloneTypedArray.js b/node_modules/lodash/_cloneTypedArray.js new file mode 100644 index 0000000..7aad84d --- /dev/null +++ b/node_modules/lodash/_cloneTypedArray.js @@ -0,0 +1,16 @@ +var cloneArrayBuffer = require('./_cloneArrayBuffer'); + +/** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ +function cloneTypedArray(typedArray, isDeep) { +  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; +  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); +} + +module.exports = cloneTypedArray; diff --git a/node_modules/lodash/_compareAscending.js b/node_modules/lodash/_compareAscending.js new file mode 100644 index 0000000..8dc2791 --- /dev/null +++ b/node_modules/lodash/_compareAscending.js @@ -0,0 +1,41 @@ +var isSymbol = require('./isSymbol'); + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { +  if (value !== other) { +    var valIsDefined = value !== undefined, +        valIsNull = value === null, +        valIsReflexive = value === value, +        valIsSymbol = isSymbol(value); + +    var othIsDefined = other !== undefined, +        othIsNull = other === null, +        othIsReflexive = other === other, +        othIsSymbol = isSymbol(other); + +    if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || +        (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || +        (valIsNull && othIsDefined && othIsReflexive) || +        (!valIsDefined && othIsReflexive) || +        !valIsReflexive) { +      return 1; +    } +    if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || +        (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || +        (othIsNull && valIsDefined && valIsReflexive) || +        (!othIsDefined && valIsReflexive) || +        !othIsReflexive) { +      return -1; +    } +  } +  return 0; +} + +module.exports = compareAscending; diff --git a/node_modules/lodash/_compareMultiple.js b/node_modules/lodash/_compareMultiple.js new file mode 100644 index 0000000..ad61f0f --- /dev/null +++ b/node_modules/lodash/_compareMultiple.js @@ -0,0 +1,44 @@ +var compareAscending = require('./_compareAscending'); + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { +  var index = -1, +      objCriteria = object.criteria, +      othCriteria = other.criteria, +      length = objCriteria.length, +      ordersLength = orders.length; + +  while (++index < length) { +    var result = compareAscending(objCriteria[index], othCriteria[index]); +    if (result) { +      if (index >= ordersLength) { +        return result; +      } +      var order = orders[index]; +      return result * (order == 'desc' ? -1 : 1); +    } +  } +  // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications +  // that causes it, under certain circumstances, to provide the same value for +  // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 +  // for more details. +  // +  // This also ensures a stable sort in V8 and other engines. +  // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. +  return object.index - other.index; +} + +module.exports = compareMultiple; diff --git a/node_modules/lodash/_composeArgs.js b/node_modules/lodash/_composeArgs.js new file mode 100644 index 0000000..1ce40f4 --- /dev/null +++ b/node_modules/lodash/_composeArgs.js @@ -0,0 +1,39 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates an array that is the composition of partially applied arguments, + * placeholders, and provided arguments into a single array of arguments. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to prepend to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ +function composeArgs(args, partials, holders, isCurried) { +  var argsIndex = -1, +      argsLength = args.length, +      holdersLength = holders.length, +      leftIndex = -1, +      leftLength = partials.length, +      rangeLength = nativeMax(argsLength - holdersLength, 0), +      result = Array(leftLength + rangeLength), +      isUncurried = !isCurried; + +  while (++leftIndex < leftLength) { +    result[leftIndex] = partials[leftIndex]; +  } +  while (++argsIndex < holdersLength) { +    if (isUncurried || argsIndex < argsLength) { +      result[holders[argsIndex]] = args[argsIndex]; +    } +  } +  while (rangeLength--) { +    result[leftIndex++] = args[argsIndex++]; +  } +  return result; +} + +module.exports = composeArgs; diff --git a/node_modules/lodash/_composeArgsRight.js b/node_modules/lodash/_composeArgsRight.js new file mode 100644 index 0000000..8dc588d --- /dev/null +++ b/node_modules/lodash/_composeArgsRight.js @@ -0,0 +1,41 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This function is like `composeArgs` except that the arguments composition + * is tailored for `_.partialRight`. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to append to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ +function composeArgsRight(args, partials, holders, isCurried) { +  var argsIndex = -1, +      argsLength = args.length, +      holdersIndex = -1, +      holdersLength = holders.length, +      rightIndex = -1, +      rightLength = partials.length, +      rangeLength = nativeMax(argsLength - holdersLength, 0), +      result = Array(rangeLength + rightLength), +      isUncurried = !isCurried; + +  while (++argsIndex < rangeLength) { +    result[argsIndex] = args[argsIndex]; +  } +  var offset = argsIndex; +  while (++rightIndex < rightLength) { +    result[offset + rightIndex] = partials[rightIndex]; +  } +  while (++holdersIndex < holdersLength) { +    if (isUncurried || argsIndex < argsLength) { +      result[offset + holders[holdersIndex]] = args[argsIndex++]; +    } +  } +  return result; +} + +module.exports = composeArgsRight; diff --git a/node_modules/lodash/_copyArray.js b/node_modules/lodash/_copyArray.js new file mode 100644 index 0000000..cd94d5d --- /dev/null +++ b/node_modules/lodash/_copyArray.js @@ -0,0 +1,20 @@ +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { +  var index = -1, +      length = source.length; + +  array || (array = Array(length)); +  while (++index < length) { +    array[index] = source[index]; +  } +  return array; +} + +module.exports = copyArray; diff --git a/node_modules/lodash/_copyObject.js b/node_modules/lodash/_copyObject.js new file mode 100644 index 0000000..2f2a5c2 --- /dev/null +++ b/node_modules/lodash/_copyObject.js @@ -0,0 +1,40 @@ +var assignValue = require('./_assignValue'), +    baseAssignValue = require('./_baseAssignValue'); + +/** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ +function copyObject(source, props, object, customizer) { +  var isNew = !object; +  object || (object = {}); + +  var index = -1, +      length = props.length; + +  while (++index < length) { +    var key = props[index]; + +    var newValue = customizer +      ? customizer(object[key], source[key], key, object, source) +      : undefined; + +    if (newValue === undefined) { +      newValue = source[key]; +    } +    if (isNew) { +      baseAssignValue(object, key, newValue); +    } else { +      assignValue(object, key, newValue); +    } +  } +  return object; +} + +module.exports = copyObject; diff --git a/node_modules/lodash/_copySymbols.js b/node_modules/lodash/_copySymbols.js new file mode 100644 index 0000000..c35944a --- /dev/null +++ b/node_modules/lodash/_copySymbols.js @@ -0,0 +1,16 @@ +var copyObject = require('./_copyObject'), +    getSymbols = require('./_getSymbols'); + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { +  return copyObject(source, getSymbols(source), object); +} + +module.exports = copySymbols; diff --git a/node_modules/lodash/_copySymbolsIn.js b/node_modules/lodash/_copySymbolsIn.js new file mode 100644 index 0000000..fdf20a7 --- /dev/null +++ b/node_modules/lodash/_copySymbolsIn.js @@ -0,0 +1,16 @@ +var copyObject = require('./_copyObject'), +    getSymbolsIn = require('./_getSymbolsIn'); + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { +  return copyObject(source, getSymbolsIn(source), object); +} + +module.exports = copySymbolsIn; diff --git a/node_modules/lodash/_coreJsData.js b/node_modules/lodash/_coreJsData.js new file mode 100644 index 0000000..f8e5b4e --- /dev/null +++ b/node_modules/lodash/_coreJsData.js @@ -0,0 +1,6 @@ +var root = require('./_root'); + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +module.exports = coreJsData; diff --git a/node_modules/lodash/_countHolders.js b/node_modules/lodash/_countHolders.js new file mode 100644 index 0000000..718fcda --- /dev/null +++ b/node_modules/lodash/_countHolders.js @@ -0,0 +1,21 @@ +/** + * Gets the number of `placeholder` occurrences in `array`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} placeholder The placeholder to search for. + * @returns {number} Returns the placeholder count. + */ +function countHolders(array, placeholder) { +  var length = array.length, +      result = 0; + +  while (length--) { +    if (array[length] === placeholder) { +      ++result; +    } +  } +  return result; +} + +module.exports = countHolders; diff --git a/node_modules/lodash/_createAggregator.js b/node_modules/lodash/_createAggregator.js new file mode 100644 index 0000000..0be42c4 --- /dev/null +++ b/node_modules/lodash/_createAggregator.js @@ -0,0 +1,23 @@ +var arrayAggregator = require('./_arrayAggregator'), +    baseAggregator = require('./_baseAggregator'), +    baseIteratee = require('./_baseIteratee'), +    isArray = require('./isArray'); + +/** + * Creates a function like `_.groupBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} [initializer] The accumulator object initializer. + * @returns {Function} Returns the new aggregator function. + */ +function createAggregator(setter, initializer) { +  return function(collection, iteratee) { +    var func = isArray(collection) ? arrayAggregator : baseAggregator, +        accumulator = initializer ? initializer() : {}; + +    return func(collection, setter, baseIteratee(iteratee, 2), accumulator); +  }; +} + +module.exports = createAggregator; diff --git a/node_modules/lodash/_createAssigner.js b/node_modules/lodash/_createAssigner.js new file mode 100644 index 0000000..1f904c5 --- /dev/null +++ b/node_modules/lodash/_createAssigner.js @@ -0,0 +1,37 @@ +var baseRest = require('./_baseRest'), +    isIterateeCall = require('./_isIterateeCall'); + +/** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { +  return baseRest(function(object, sources) { +    var index = -1, +        length = sources.length, +        customizer = length > 1 ? sources[length - 1] : undefined, +        guard = length > 2 ? sources[2] : undefined; + +    customizer = (assigner.length > 3 && typeof customizer == 'function') +      ? (length--, customizer) +      : undefined; + +    if (guard && isIterateeCall(sources[0], sources[1], guard)) { +      customizer = length < 3 ? undefined : customizer; +      length = 1; +    } +    object = Object(object); +    while (++index < length) { +      var source = sources[index]; +      if (source) { +        assigner(object, source, index, customizer); +      } +    } +    return object; +  }); +} + +module.exports = createAssigner; diff --git a/node_modules/lodash/_createBaseEach.js b/node_modules/lodash/_createBaseEach.js new file mode 100644 index 0000000..d24fdd1 --- /dev/null +++ b/node_modules/lodash/_createBaseEach.js @@ -0,0 +1,32 @@ +var isArrayLike = require('./isArrayLike'); + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { +  return function(collection, iteratee) { +    if (collection == null) { +      return collection; +    } +    if (!isArrayLike(collection)) { +      return eachFunc(collection, iteratee); +    } +    var length = collection.length, +        index = fromRight ? length : -1, +        iterable = Object(collection); + +    while ((fromRight ? index-- : ++index < length)) { +      if (iteratee(iterable[index], index, iterable) === false) { +        break; +      } +    } +    return collection; +  }; +} + +module.exports = createBaseEach; diff --git a/node_modules/lodash/_createBaseFor.js b/node_modules/lodash/_createBaseFor.js new file mode 100644 index 0000000..94cbf29 --- /dev/null +++ b/node_modules/lodash/_createBaseFor.js @@ -0,0 +1,25 @@ +/** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { +  return function(object, iteratee, keysFunc) { +    var index = -1, +        iterable = Object(object), +        props = keysFunc(object), +        length = props.length; + +    while (length--) { +      var key = props[fromRight ? length : ++index]; +      if (iteratee(iterable[key], key, iterable) === false) { +        break; +      } +    } +    return object; +  }; +} + +module.exports = createBaseFor; diff --git a/node_modules/lodash/_createBind.js b/node_modules/lodash/_createBind.js new file mode 100644 index 0000000..07cb99f --- /dev/null +++ b/node_modules/lodash/_createBind.js @@ -0,0 +1,28 @@ +var createCtor = require('./_createCtor'), +    root = require('./_root'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1; + +/** + * Creates a function that wraps `func` to invoke it with the optional `this` + * binding of `thisArg`. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @returns {Function} Returns the new wrapped function. + */ +function createBind(func, bitmask, thisArg) { +  var isBind = bitmask & WRAP_BIND_FLAG, +      Ctor = createCtor(func); + +  function wrapper() { +    var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; +    return fn.apply(isBind ? thisArg : this, arguments); +  } +  return wrapper; +} + +module.exports = createBind; diff --git a/node_modules/lodash/_createCaseFirst.js b/node_modules/lodash/_createCaseFirst.js new file mode 100644 index 0000000..fe8ea48 --- /dev/null +++ b/node_modules/lodash/_createCaseFirst.js @@ -0,0 +1,33 @@ +var castSlice = require('./_castSlice'), +    hasUnicode = require('./_hasUnicode'), +    stringToArray = require('./_stringToArray'), +    toString = require('./toString'); + +/** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new case function. + */ +function createCaseFirst(methodName) { +  return function(string) { +    string = toString(string); + +    var strSymbols = hasUnicode(string) +      ? stringToArray(string) +      : undefined; + +    var chr = strSymbols +      ? strSymbols[0] +      : string.charAt(0); + +    var trailing = strSymbols +      ? castSlice(strSymbols, 1).join('') +      : string.slice(1); + +    return chr[methodName]() + trailing; +  }; +} + +module.exports = createCaseFirst; diff --git a/node_modules/lodash/_createCompounder.js b/node_modules/lodash/_createCompounder.js new file mode 100644 index 0000000..8d4cee2 --- /dev/null +++ b/node_modules/lodash/_createCompounder.js @@ -0,0 +1,24 @@ +var arrayReduce = require('./_arrayReduce'), +    deburr = require('./deburr'), +    words = require('./words'); + +/** Used to compose unicode capture groups. */ +var rsApos = "['\u2019]"; + +/** Used to match apostrophes. */ +var reApos = RegExp(rsApos, 'g'); + +/** + * Creates a function like `_.camelCase`. + * + * @private + * @param {Function} callback The function to combine each word. + * @returns {Function} Returns the new compounder function. + */ +function createCompounder(callback) { +  return function(string) { +    return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); +  }; +} + +module.exports = createCompounder; diff --git a/node_modules/lodash/_createCtor.js b/node_modules/lodash/_createCtor.js new file mode 100644 index 0000000..9047aa5 --- /dev/null +++ b/node_modules/lodash/_createCtor.js @@ -0,0 +1,37 @@ +var baseCreate = require('./_baseCreate'), +    isObject = require('./isObject'); + +/** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ +function createCtor(Ctor) { +  return function() { +    // Use a `switch` statement to work with class constructors. See +    // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist +    // for more details. +    var args = arguments; +    switch (args.length) { +      case 0: return new Ctor; +      case 1: return new Ctor(args[0]); +      case 2: return new Ctor(args[0], args[1]); +      case 3: return new Ctor(args[0], args[1], args[2]); +      case 4: return new Ctor(args[0], args[1], args[2], args[3]); +      case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); +      case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); +      case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); +    } +    var thisBinding = baseCreate(Ctor.prototype), +        result = Ctor.apply(thisBinding, args); + +    // Mimic the constructor's `return` behavior. +    // See https://es5.github.io/#x13.2.2 for more details. +    return isObject(result) ? result : thisBinding; +  }; +} + +module.exports = createCtor; diff --git a/node_modules/lodash/_createCurry.js b/node_modules/lodash/_createCurry.js new file mode 100644 index 0000000..f06c2cd --- /dev/null +++ b/node_modules/lodash/_createCurry.js @@ -0,0 +1,46 @@ +var apply = require('./_apply'), +    createCtor = require('./_createCtor'), +    createHybrid = require('./_createHybrid'), +    createRecurry = require('./_createRecurry'), +    getHolder = require('./_getHolder'), +    replaceHolders = require('./_replaceHolders'), +    root = require('./_root'); + +/** + * Creates a function that wraps `func` to enable currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {number} arity The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ +function createCurry(func, bitmask, arity) { +  var Ctor = createCtor(func); + +  function wrapper() { +    var length = arguments.length, +        args = Array(length), +        index = length, +        placeholder = getHolder(wrapper); + +    while (index--) { +      args[index] = arguments[index]; +    } +    var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) +      ? [] +      : replaceHolders(args, placeholder); + +    length -= holders.length; +    if (length < arity) { +      return createRecurry( +        func, bitmask, createHybrid, wrapper.placeholder, undefined, +        args, holders, undefined, undefined, arity - length); +    } +    var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; +    return apply(fn, this, args); +  } +  return wrapper; +} + +module.exports = createCurry; diff --git a/node_modules/lodash/_createFind.js b/node_modules/lodash/_createFind.js new file mode 100644 index 0000000..8859ff8 --- /dev/null +++ b/node_modules/lodash/_createFind.js @@ -0,0 +1,25 @@ +var baseIteratee = require('./_baseIteratee'), +    isArrayLike = require('./isArrayLike'), +    keys = require('./keys'); + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { +  return function(collection, predicate, fromIndex) { +    var iterable = Object(collection); +    if (!isArrayLike(collection)) { +      var iteratee = baseIteratee(predicate, 3); +      collection = keys(collection); +      predicate = function(key) { return iteratee(iterable[key], key, iterable); }; +    } +    var index = findIndexFunc(collection, predicate, fromIndex); +    return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; +  }; +} + +module.exports = createFind; diff --git a/node_modules/lodash/_createFlow.js b/node_modules/lodash/_createFlow.js new file mode 100644 index 0000000..baaddbf --- /dev/null +++ b/node_modules/lodash/_createFlow.js @@ -0,0 +1,78 @@ +var LodashWrapper = require('./_LodashWrapper'), +    flatRest = require('./_flatRest'), +    getData = require('./_getData'), +    getFuncName = require('./_getFuncName'), +    isArray = require('./isArray'), +    isLaziable = require('./_isLaziable'); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** Used to compose bitmasks for function metadata. */ +var WRAP_CURRY_FLAG = 8, +    WRAP_PARTIAL_FLAG = 32, +    WRAP_ARY_FLAG = 128, +    WRAP_REARG_FLAG = 256; + +/** + * Creates a `_.flow` or `_.flowRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new flow function. + */ +function createFlow(fromRight) { +  return flatRest(function(funcs) { +    var length = funcs.length, +        index = length, +        prereq = LodashWrapper.prototype.thru; + +    if (fromRight) { +      funcs.reverse(); +    } +    while (index--) { +      var func = funcs[index]; +      if (typeof func != 'function') { +        throw new TypeError(FUNC_ERROR_TEXT); +      } +      if (prereq && !wrapper && getFuncName(func) == 'wrapper') { +        var wrapper = new LodashWrapper([], true); +      } +    } +    index = wrapper ? index : length; +    while (++index < length) { +      func = funcs[index]; + +      var funcName = getFuncName(func), +          data = funcName == 'wrapper' ? getData(func) : undefined; + +      if (data && isLaziable(data[0]) && +            data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && +            !data[4].length && data[9] == 1 +          ) { +        wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); +      } else { +        wrapper = (func.length == 1 && isLaziable(func)) +          ? wrapper[funcName]() +          : wrapper.thru(func); +      } +    } +    return function() { +      var args = arguments, +          value = args[0]; + +      if (wrapper && args.length == 1 && isArray(value)) { +        return wrapper.plant(value).value(); +      } +      var index = 0, +          result = length ? funcs[index].apply(this, args) : value; + +      while (++index < length) { +        result = funcs[index].call(this, result); +      } +      return result; +    }; +  }); +} + +module.exports = createFlow; diff --git a/node_modules/lodash/_createHybrid.js b/node_modules/lodash/_createHybrid.js new file mode 100644 index 0000000..b671bd1 --- /dev/null +++ b/node_modules/lodash/_createHybrid.js @@ -0,0 +1,92 @@ +var composeArgs = require('./_composeArgs'), +    composeArgsRight = require('./_composeArgsRight'), +    countHolders = require('./_countHolders'), +    createCtor = require('./_createCtor'), +    createRecurry = require('./_createRecurry'), +    getHolder = require('./_getHolder'), +    reorder = require('./_reorder'), +    replaceHolders = require('./_replaceHolders'), +    root = require('./_root'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1, +    WRAP_BIND_KEY_FLAG = 2, +    WRAP_CURRY_FLAG = 8, +    WRAP_CURRY_RIGHT_FLAG = 16, +    WRAP_ARY_FLAG = 128, +    WRAP_FLIP_FLAG = 512; + +/** + * Creates a function that wraps `func` to invoke it with optional `this` + * binding of `thisArg`, partial application, and currying. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + *  the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [partialsRight] The arguments to append to those provided + *  to the new function. + * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ +function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { +  var isAry = bitmask & WRAP_ARY_FLAG, +      isBind = bitmask & WRAP_BIND_FLAG, +      isBindKey = bitmask & WRAP_BIND_KEY_FLAG, +      isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), +      isFlip = bitmask & WRAP_FLIP_FLAG, +      Ctor = isBindKey ? undefined : createCtor(func); + +  function wrapper() { +    var length = arguments.length, +        args = Array(length), +        index = length; + +    while (index--) { +      args[index] = arguments[index]; +    } +    if (isCurried) { +      var placeholder = getHolder(wrapper), +          holdersCount = countHolders(args, placeholder); +    } +    if (partials) { +      args = composeArgs(args, partials, holders, isCurried); +    } +    if (partialsRight) { +      args = composeArgsRight(args, partialsRight, holdersRight, isCurried); +    } +    length -= holdersCount; +    if (isCurried && length < arity) { +      var newHolders = replaceHolders(args, placeholder); +      return createRecurry( +        func, bitmask, createHybrid, wrapper.placeholder, thisArg, +        args, newHolders, argPos, ary, arity - length +      ); +    } +    var thisBinding = isBind ? thisArg : this, +        fn = isBindKey ? thisBinding[func] : func; + +    length = args.length; +    if (argPos) { +      args = reorder(args, argPos); +    } else if (isFlip && length > 1) { +      args.reverse(); +    } +    if (isAry && ary < length) { +      args.length = ary; +    } +    if (this && this !== root && this instanceof wrapper) { +      fn = Ctor || createCtor(fn); +    } +    return fn.apply(thisBinding, args); +  } +  return wrapper; +} + +module.exports = createHybrid; diff --git a/node_modules/lodash/_createInverter.js b/node_modules/lodash/_createInverter.js new file mode 100644 index 0000000..6c0c562 --- /dev/null +++ b/node_modules/lodash/_createInverter.js @@ -0,0 +1,17 @@ +var baseInverter = require('./_baseInverter'); + +/** + * Creates a function like `_.invertBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} toIteratee The function to resolve iteratees. + * @returns {Function} Returns the new inverter function. + */ +function createInverter(setter, toIteratee) { +  return function(object, iteratee) { +    return baseInverter(object, setter, toIteratee(iteratee), {}); +  }; +} + +module.exports = createInverter; diff --git a/node_modules/lodash/_createMathOperation.js b/node_modules/lodash/_createMathOperation.js new file mode 100644 index 0000000..f1e238a --- /dev/null +++ b/node_modules/lodash/_createMathOperation.js @@ -0,0 +1,38 @@ +var baseToNumber = require('./_baseToNumber'), +    baseToString = require('./_baseToString'); + +/** + * Creates a function that performs a mathematical operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @param {number} [defaultValue] The value used for `undefined` arguments. + * @returns {Function} Returns the new mathematical operation function. + */ +function createMathOperation(operator, defaultValue) { +  return function(value, other) { +    var result; +    if (value === undefined && other === undefined) { +      return defaultValue; +    } +    if (value !== undefined) { +      result = value; +    } +    if (other !== undefined) { +      if (result === undefined) { +        return other; +      } +      if (typeof value == 'string' || typeof other == 'string') { +        value = baseToString(value); +        other = baseToString(other); +      } else { +        value = baseToNumber(value); +        other = baseToNumber(other); +      } +      result = operator(value, other); +    } +    return result; +  }; +} + +module.exports = createMathOperation; diff --git a/node_modules/lodash/_createOver.js b/node_modules/lodash/_createOver.js new file mode 100644 index 0000000..3b94551 --- /dev/null +++ b/node_modules/lodash/_createOver.js @@ -0,0 +1,27 @@ +var apply = require('./_apply'), +    arrayMap = require('./_arrayMap'), +    baseIteratee = require('./_baseIteratee'), +    baseRest = require('./_baseRest'), +    baseUnary = require('./_baseUnary'), +    flatRest = require('./_flatRest'); + +/** + * Creates a function like `_.over`. + * + * @private + * @param {Function} arrayFunc The function to iterate over iteratees. + * @returns {Function} Returns the new over function. + */ +function createOver(arrayFunc) { +  return flatRest(function(iteratees) { +    iteratees = arrayMap(iteratees, baseUnary(baseIteratee)); +    return baseRest(function(args) { +      var thisArg = this; +      return arrayFunc(iteratees, function(iteratee) { +        return apply(iteratee, thisArg, args); +      }); +    }); +  }); +} + +module.exports = createOver; diff --git a/node_modules/lodash/_createPadding.js b/node_modules/lodash/_createPadding.js new file mode 100644 index 0000000..2124612 --- /dev/null +++ b/node_modules/lodash/_createPadding.js @@ -0,0 +1,33 @@ +var baseRepeat = require('./_baseRepeat'), +    baseToString = require('./_baseToString'), +    castSlice = require('./_castSlice'), +    hasUnicode = require('./_hasUnicode'), +    stringSize = require('./_stringSize'), +    stringToArray = require('./_stringToArray'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil; + +/** + * Creates the padding for `string` based on `length`. The `chars` string + * is truncated if the number of characters exceeds `length`. + * + * @private + * @param {number} length The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padding for `string`. + */ +function createPadding(length, chars) { +  chars = chars === undefined ? ' ' : baseToString(chars); + +  var charsLength = chars.length; +  if (charsLength < 2) { +    return charsLength ? baseRepeat(chars, length) : chars; +  } +  var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); +  return hasUnicode(chars) +    ? castSlice(stringToArray(result), 0, length).join('') +    : result.slice(0, length); +} + +module.exports = createPadding; diff --git a/node_modules/lodash/_createPartial.js b/node_modules/lodash/_createPartial.js new file mode 100644 index 0000000..e16c248 --- /dev/null +++ b/node_modules/lodash/_createPartial.js @@ -0,0 +1,43 @@ +var apply = require('./_apply'), +    createCtor = require('./_createCtor'), +    root = require('./_root'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1; + +/** + * Creates a function that wraps `func` to invoke it with the `this` binding + * of `thisArg` and `partials` prepended to the arguments it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to + *  the new function. + * @returns {Function} Returns the new wrapped function. + */ +function createPartial(func, bitmask, thisArg, partials) { +  var isBind = bitmask & WRAP_BIND_FLAG, +      Ctor = createCtor(func); + +  function wrapper() { +    var argsIndex = -1, +        argsLength = arguments.length, +        leftIndex = -1, +        leftLength = partials.length, +        args = Array(leftLength + argsLength), +        fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + +    while (++leftIndex < leftLength) { +      args[leftIndex] = partials[leftIndex]; +    } +    while (argsLength--) { +      args[leftIndex++] = arguments[++argsIndex]; +    } +    return apply(fn, isBind ? thisArg : this, args); +  } +  return wrapper; +} + +module.exports = createPartial; diff --git a/node_modules/lodash/_createRange.js b/node_modules/lodash/_createRange.js new file mode 100644 index 0000000..9f52c77 --- /dev/null +++ b/node_modules/lodash/_createRange.js @@ -0,0 +1,30 @@ +var baseRange = require('./_baseRange'), +    isIterateeCall = require('./_isIterateeCall'), +    toFinite = require('./toFinite'); + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { +  return function(start, end, step) { +    if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { +      end = step = undefined; +    } +    // Ensure the sign of `-0` is preserved. +    start = toFinite(start); +    if (end === undefined) { +      end = start; +      start = 0; +    } else { +      end = toFinite(end); +    } +    step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); +    return baseRange(start, end, step, fromRight); +  }; +} + +module.exports = createRange; diff --git a/node_modules/lodash/_createRecurry.js b/node_modules/lodash/_createRecurry.js new file mode 100644 index 0000000..eb29fb2 --- /dev/null +++ b/node_modules/lodash/_createRecurry.js @@ -0,0 +1,56 @@ +var isLaziable = require('./_isLaziable'), +    setData = require('./_setData'), +    setWrapToString = require('./_setWrapToString'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1, +    WRAP_BIND_KEY_FLAG = 2, +    WRAP_CURRY_BOUND_FLAG = 4, +    WRAP_CURRY_FLAG = 8, +    WRAP_PARTIAL_FLAG = 32, +    WRAP_PARTIAL_RIGHT_FLAG = 64; + +/** + * Creates a function that wraps `func` to continue currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {Function} wrapFunc The function to create the `func` wrapper. + * @param {*} placeholder The placeholder value. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + *  the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ +function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { +  var isCurry = bitmask & WRAP_CURRY_FLAG, +      newHolders = isCurry ? holders : undefined, +      newHoldersRight = isCurry ? undefined : holders, +      newPartials = isCurry ? partials : undefined, +      newPartialsRight = isCurry ? undefined : partials; + +  bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); +  bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); + +  if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { +    bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); +  } +  var newData = [ +    func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, +    newHoldersRight, argPos, ary, arity +  ]; + +  var result = wrapFunc.apply(undefined, newData); +  if (isLaziable(func)) { +    setData(result, newData); +  } +  result.placeholder = placeholder; +  return setWrapToString(result, func, bitmask); +} + +module.exports = createRecurry; diff --git a/node_modules/lodash/_createRelationalOperation.js b/node_modules/lodash/_createRelationalOperation.js new file mode 100644 index 0000000..a17c6b5 --- /dev/null +++ b/node_modules/lodash/_createRelationalOperation.js @@ -0,0 +1,20 @@ +var toNumber = require('./toNumber'); + +/** + * Creates a function that performs a relational operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @returns {Function} Returns the new relational operation function. + */ +function createRelationalOperation(operator) { +  return function(value, other) { +    if (!(typeof value == 'string' && typeof other == 'string')) { +      value = toNumber(value); +      other = toNumber(other); +    } +    return operator(value, other); +  }; +} + +module.exports = createRelationalOperation; diff --git a/node_modules/lodash/_createRound.js b/node_modules/lodash/_createRound.js new file mode 100644 index 0000000..88be5df --- /dev/null +++ b/node_modules/lodash/_createRound.js @@ -0,0 +1,35 @@ +var root = require('./_root'), +    toInteger = require('./toInteger'), +    toNumber = require('./toNumber'), +    toString = require('./toString'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsFinite = root.isFinite, +    nativeMin = Math.min; + +/** + * Creates a function like `_.round`. + * + * @private + * @param {string} methodName The name of the `Math` method to use when rounding. + * @returns {Function} Returns the new round function. + */ +function createRound(methodName) { +  var func = Math[methodName]; +  return function(number, precision) { +    number = toNumber(number); +    precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); +    if (precision && nativeIsFinite(number)) { +      // Shift with exponential notation to avoid floating-point issues. +      // See [MDN](https://mdn.io/round#Examples) for more details. +      var pair = (toString(number) + 'e').split('e'), +          value = func(pair[0] + 'e' + (+pair[1] + precision)); + +      pair = (toString(value) + 'e').split('e'); +      return +(pair[0] + 'e' + (+pair[1] - precision)); +    } +    return func(number); +  }; +} + +module.exports = createRound; diff --git a/node_modules/lodash/_createSet.js b/node_modules/lodash/_createSet.js new file mode 100644 index 0000000..0f644ee --- /dev/null +++ b/node_modules/lodash/_createSet.js @@ -0,0 +1,19 @@ +var Set = require('./_Set'), +    noop = require('./noop'), +    setToArray = require('./_setToArray'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { +  return new Set(values); +}; + +module.exports = createSet; diff --git a/node_modules/lodash/_createToPairs.js b/node_modules/lodash/_createToPairs.js new file mode 100644 index 0000000..568417a --- /dev/null +++ b/node_modules/lodash/_createToPairs.js @@ -0,0 +1,30 @@ +var baseToPairs = require('./_baseToPairs'), +    getTag = require('./_getTag'), +    mapToArray = require('./_mapToArray'), +    setToPairs = require('./_setToPairs'); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', +    setTag = '[object Set]'; + +/** + * Creates a `_.toPairs` or `_.toPairsIn` function. + * + * @private + * @param {Function} keysFunc The function to get the keys of a given object. + * @returns {Function} Returns the new pairs function. + */ +function createToPairs(keysFunc) { +  return function(object) { +    var tag = getTag(object); +    if (tag == mapTag) { +      return mapToArray(object); +    } +    if (tag == setTag) { +      return setToPairs(object); +    } +    return baseToPairs(object, keysFunc(object)); +  }; +} + +module.exports = createToPairs; diff --git a/node_modules/lodash/_createWrap.js b/node_modules/lodash/_createWrap.js new file mode 100644 index 0000000..33f0633 --- /dev/null +++ b/node_modules/lodash/_createWrap.js @@ -0,0 +1,106 @@ +var baseSetData = require('./_baseSetData'), +    createBind = require('./_createBind'), +    createCurry = require('./_createCurry'), +    createHybrid = require('./_createHybrid'), +    createPartial = require('./_createPartial'), +    getData = require('./_getData'), +    mergeData = require('./_mergeData'), +    setData = require('./_setData'), +    setWrapToString = require('./_setWrapToString'), +    toInteger = require('./toInteger'); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1, +    WRAP_BIND_KEY_FLAG = 2, +    WRAP_CURRY_FLAG = 8, +    WRAP_CURRY_RIGHT_FLAG = 16, +    WRAP_PARTIAL_FLAG = 32, +    WRAP_PARTIAL_RIGHT_FLAG = 64; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates a function that either curries or invokes `func` with optional + * `this` binding and partially applied arguments. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. + *    1 - `_.bind` + *    2 - `_.bindKey` + *    4 - `_.curry` or `_.curryRight` of a bound function + *    8 - `_.curry` + *   16 - `_.curryRight` + *   32 - `_.partial` + *   64 - `_.partialRight` + *  128 - `_.rearg` + *  256 - `_.ary` + *  512 - `_.flip` + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to be partially applied. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ +function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { +  var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; +  if (!isBindKey && typeof func != 'function') { +    throw new TypeError(FUNC_ERROR_TEXT); +  } +  var length = partials ? partials.length : 0; +  if (!length) { +    bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); +    partials = holders = undefined; +  } +  ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); +  arity = arity === undefined ? arity : toInteger(arity); +  length -= holders ? holders.length : 0; + +  if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { +    var partialsRight = partials, +        holdersRight = holders; + +    partials = holders = undefined; +  } +  var data = isBindKey ? undefined : getData(func); + +  var newData = [ +    func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, +    argPos, ary, arity +  ]; + +  if (data) { +    mergeData(newData, data); +  } +  func = newData[0]; +  bitmask = newData[1]; +  thisArg = newData[2]; +  partials = newData[3]; +  holders = newData[4]; +  arity = newData[9] = newData[9] === undefined +    ? (isBindKey ? 0 : func.length) +    : nativeMax(newData[9] - length, 0); + +  if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { +    bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); +  } +  if (!bitmask || bitmask == WRAP_BIND_FLAG) { +    var result = createBind(func, bitmask, thisArg); +  } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { +    result = createCurry(func, bitmask, arity); +  } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { +    result = createPartial(func, bitmask, thisArg, partials); +  } else { +    result = createHybrid.apply(undefined, newData); +  } +  var setter = data ? baseSetData : setData; +  return setWrapToString(setter(result, newData), func, bitmask); +} + +module.exports = createWrap; diff --git a/node_modules/lodash/_customDefaultsAssignIn.js b/node_modules/lodash/_customDefaultsAssignIn.js new file mode 100644 index 0000000..1f49e6f --- /dev/null +++ b/node_modules/lodash/_customDefaultsAssignIn.js @@ -0,0 +1,29 @@ +var eq = require('./eq'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used by `_.defaults` to customize its `_.assignIn` use to assign properties + * of source objects to the destination object for all destination properties + * that resolve to `undefined`. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to assign. + * @param {Object} object The parent object of `objValue`. + * @returns {*} Returns the value to assign. + */ +function customDefaultsAssignIn(objValue, srcValue, key, object) { +  if (objValue === undefined || +      (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { +    return srcValue; +  } +  return objValue; +} + +module.exports = customDefaultsAssignIn; diff --git a/node_modules/lodash/_customDefaultsMerge.js b/node_modules/lodash/_customDefaultsMerge.js new file mode 100644 index 0000000..4cab317 --- /dev/null +++ b/node_modules/lodash/_customDefaultsMerge.js @@ -0,0 +1,28 @@ +var baseMerge = require('./_baseMerge'), +    isObject = require('./isObject'); + +/** + * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source + * objects into destination objects that are passed thru. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to merge. + * @param {Object} object The parent object of `objValue`. + * @param {Object} source The parent object of `srcValue`. + * @param {Object} [stack] Tracks traversed source values and their merged + *  counterparts. + * @returns {*} Returns the value to assign. + */ +function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { +  if (isObject(objValue) && isObject(srcValue)) { +    // Recursively merge objects and arrays (susceptible to call stack limits). +    stack.set(srcValue, objValue); +    baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack); +    stack['delete'](srcValue); +  } +  return objValue; +} + +module.exports = customDefaultsMerge; diff --git a/node_modules/lodash/_customOmitClone.js b/node_modules/lodash/_customOmitClone.js new file mode 100644 index 0000000..968db2e --- /dev/null +++ b/node_modules/lodash/_customOmitClone.js @@ -0,0 +1,16 @@ +var isPlainObject = require('./isPlainObject'); + +/** + * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain + * objects. + * + * @private + * @param {*} value The value to inspect. + * @param {string} key The key of the property to inspect. + * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. + */ +function customOmitClone(value) { +  return isPlainObject(value) ? undefined : value; +} + +module.exports = customOmitClone; diff --git a/node_modules/lodash/_deburrLetter.js b/node_modules/lodash/_deburrLetter.js new file mode 100644 index 0000000..3e531ed --- /dev/null +++ b/node_modules/lodash/_deburrLetter.js @@ -0,0 +1,71 @@ +var basePropertyOf = require('./_basePropertyOf'); + +/** Used to map Latin Unicode letters to basic Latin letters. */ +var deburredLetters = { +  // Latin-1 Supplement block. +  '\xc0': 'A',  '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', +  '\xe0': 'a',  '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', +  '\xc7': 'C',  '\xe7': 'c', +  '\xd0': 'D',  '\xf0': 'd', +  '\xc8': 'E',  '\xc9': 'E', '\xca': 'E', '\xcb': 'E', +  '\xe8': 'e',  '\xe9': 'e', '\xea': 'e', '\xeb': 'e', +  '\xcc': 'I',  '\xcd': 'I', '\xce': 'I', '\xcf': 'I', +  '\xec': 'i',  '\xed': 'i', '\xee': 'i', '\xef': 'i', +  '\xd1': 'N',  '\xf1': 'n', +  '\xd2': 'O',  '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', +  '\xf2': 'o',  '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', +  '\xd9': 'U',  '\xda': 'U', '\xdb': 'U', '\xdc': 'U', +  '\xf9': 'u',  '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', +  '\xdd': 'Y',  '\xfd': 'y', '\xff': 'y', +  '\xc6': 'Ae', '\xe6': 'ae', +  '\xde': 'Th', '\xfe': 'th', +  '\xdf': 'ss', +  // Latin Extended-A block. +  '\u0100': 'A',  '\u0102': 'A', '\u0104': 'A', +  '\u0101': 'a',  '\u0103': 'a', '\u0105': 'a', +  '\u0106': 'C',  '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', +  '\u0107': 'c',  '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', +  '\u010e': 'D',  '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', +  '\u0112': 'E',  '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', +  '\u0113': 'e',  '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', +  '\u011c': 'G',  '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', +  '\u011d': 'g',  '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', +  '\u0124': 'H',  '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', +  '\u0128': 'I',  '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', +  '\u0129': 'i',  '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', +  '\u0134': 'J',  '\u0135': 'j', +  '\u0136': 'K',  '\u0137': 'k', '\u0138': 'k', +  '\u0139': 'L',  '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', +  '\u013a': 'l',  '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', +  '\u0143': 'N',  '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', +  '\u0144': 'n',  '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', +  '\u014c': 'O',  '\u014e': 'O', '\u0150': 'O', +  '\u014d': 'o',  '\u014f': 'o', '\u0151': 'o', +  '\u0154': 'R',  '\u0156': 'R', '\u0158': 'R', +  '\u0155': 'r',  '\u0157': 'r', '\u0159': 'r', +  '\u015a': 'S',  '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', +  '\u015b': 's',  '\u015d': 's', '\u015f': 's', '\u0161': 's', +  '\u0162': 'T',  '\u0164': 'T', '\u0166': 'T', +  '\u0163': 't',  '\u0165': 't', '\u0167': 't', +  '\u0168': 'U',  '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', +  '\u0169': 'u',  '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', +  '\u0174': 'W',  '\u0175': 'w', +  '\u0176': 'Y',  '\u0177': 'y', '\u0178': 'Y', +  '\u0179': 'Z',  '\u017b': 'Z', '\u017d': 'Z', +  '\u017a': 'z',  '\u017c': 'z', '\u017e': 'z', +  '\u0132': 'IJ', '\u0133': 'ij', +  '\u0152': 'Oe', '\u0153': 'oe', +  '\u0149': "'n", '\u017f': 's' +}; + +/** + * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A + * letters to basic Latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */ +var deburrLetter = basePropertyOf(deburredLetters); + +module.exports = deburrLetter; diff --git a/node_modules/lodash/_defineProperty.js b/node_modules/lodash/_defineProperty.js new file mode 100644 index 0000000..b6116d9 --- /dev/null +++ b/node_modules/lodash/_defineProperty.js @@ -0,0 +1,11 @@ +var getNative = require('./_getNative'); + +var defineProperty = (function() { +  try { +    var func = getNative(Object, 'defineProperty'); +    func({}, '', {}); +    return func; +  } catch (e) {} +}()); + +module.exports = defineProperty; diff --git a/node_modules/lodash/_equalArrays.js b/node_modules/lodash/_equalArrays.js new file mode 100644 index 0000000..824228c --- /dev/null +++ b/node_modules/lodash/_equalArrays.js @@ -0,0 +1,84 @@ +var SetCache = require('./_SetCache'), +    arraySome = require('./_arraySome'), +    cacheHas = require('./_cacheHas'); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, +    COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { +  var isPartial = bitmask & COMPARE_PARTIAL_FLAG, +      arrLength = array.length, +      othLength = other.length; + +  if (arrLength != othLength && !(isPartial && othLength > arrLength)) { +    return false; +  } +  // Check that cyclic values are equal. +  var arrStacked = stack.get(array); +  var othStacked = stack.get(other); +  if (arrStacked && othStacked) { +    return arrStacked == other && othStacked == array; +  } +  var index = -1, +      result = true, +      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; + +  stack.set(array, other); +  stack.set(other, array); + +  // Ignore non-index properties. +  while (++index < arrLength) { +    var arrValue = array[index], +        othValue = other[index]; + +    if (customizer) { +      var compared = isPartial +        ? customizer(othValue, arrValue, index, other, array, stack) +        : customizer(arrValue, othValue, index, array, other, stack); +    } +    if (compared !== undefined) { +      if (compared) { +        continue; +      } +      result = false; +      break; +    } +    // Recursively compare arrays (susceptible to call stack limits). +    if (seen) { +      if (!arraySome(other, function(othValue, othIndex) { +            if (!cacheHas(seen, othIndex) && +                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { +              return seen.push(othIndex); +            } +          })) { +        result = false; +        break; +      } +    } else if (!( +          arrValue === othValue || +            equalFunc(arrValue, othValue, bitmask, customizer, stack) +        )) { +      result = false; +      break; +    } +  } +  stack['delete'](array); +  stack['delete'](other); +  return result; +} + +module.exports = equalArrays; diff --git a/node_modules/lodash/_equalByTag.js b/node_modules/lodash/_equalByTag.js new file mode 100644 index 0000000..71919e8 --- /dev/null +++ b/node_modules/lodash/_equalByTag.js @@ -0,0 +1,112 @@ +var Symbol = require('./_Symbol'), +    Uint8Array = require('./_Uint8Array'), +    eq = require('./eq'), +    equalArrays = require('./_equalArrays'), +    mapToArray = require('./_mapToArray'), +    setToArray = require('./_setToArray'); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, +    COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', +    dateTag = '[object Date]', +    errorTag = '[object Error]', +    mapTag = '[object Map]', +    numberTag = '[object Number]', +    regexpTag = '[object RegExp]', +    setTag = '[object Set]', +    stringTag = '[object String]', +    symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', +    dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, +    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { +  switch (tag) { +    case dataViewTag: +      if ((object.byteLength != other.byteLength) || +          (object.byteOffset != other.byteOffset)) { +        return false; +      } +      object = object.buffer; +      other = other.buffer; + +    case arrayBufferTag: +      if ((object.byteLength != other.byteLength) || +          !equalFunc(new Uint8Array(object), new Uint8Array(other))) { +        return false; +      } +      return true; + +    case boolTag: +    case dateTag: +    case numberTag: +      // Coerce booleans to `1` or `0` and dates to milliseconds. +      // Invalid dates are coerced to `NaN`. +      return eq(+object, +other); + +    case errorTag: +      return object.name == other.name && object.message == other.message; + +    case regexpTag: +    case stringTag: +      // Coerce regexes to strings and treat strings, primitives and objects, +      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring +      // for more details. +      return object == (other + ''); + +    case mapTag: +      var convert = mapToArray; + +    case setTag: +      var isPartial = bitmask & COMPARE_PARTIAL_FLAG; +      convert || (convert = setToArray); + +      if (object.size != other.size && !isPartial) { +        return false; +      } +      // Assume cyclic values are equal. +      var stacked = stack.get(object); +      if (stacked) { +        return stacked == other; +      } +      bitmask |= COMPARE_UNORDERED_FLAG; + +      // Recursively compare objects (susceptible to call stack limits). +      stack.set(object, other); +      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); +      stack['delete'](object); +      return result; + +    case symbolTag: +      if (symbolValueOf) { +        return symbolValueOf.call(object) == symbolValueOf.call(other); +      } +  } +  return false; +} + +module.exports = equalByTag; diff --git a/node_modules/lodash/_equalObjects.js b/node_modules/lodash/_equalObjects.js new file mode 100644 index 0000000..cdaacd2 --- /dev/null +++ b/node_modules/lodash/_equalObjects.js @@ -0,0 +1,90 @@ +var getAllKeys = require('./_getAllKeys'); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { +  var isPartial = bitmask & COMPARE_PARTIAL_FLAG, +      objProps = getAllKeys(object), +      objLength = objProps.length, +      othProps = getAllKeys(other), +      othLength = othProps.length; + +  if (objLength != othLength && !isPartial) { +    return false; +  } +  var index = objLength; +  while (index--) { +    var key = objProps[index]; +    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { +      return false; +    } +  } +  // Check that cyclic values are equal. +  var objStacked = stack.get(object); +  var othStacked = stack.get(other); +  if (objStacked && othStacked) { +    return objStacked == other && othStacked == object; +  } +  var result = true; +  stack.set(object, other); +  stack.set(other, object); + +  var skipCtor = isPartial; +  while (++index < objLength) { +    key = objProps[index]; +    var objValue = object[key], +        othValue = other[key]; + +    if (customizer) { +      var compared = isPartial +        ? customizer(othValue, objValue, key, other, object, stack) +        : customizer(objValue, othValue, key, object, other, stack); +    } +    // Recursively compare objects (susceptible to call stack limits). +    if (!(compared === undefined +          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) +          : compared +        )) { +      result = false; +      break; +    } +    skipCtor || (skipCtor = key == 'constructor'); +  } +  if (result && !skipCtor) { +    var objCtor = object.constructor, +        othCtor = other.constructor; + +    // Non `Object` object instances with different constructors are not equal. +    if (objCtor != othCtor && +        ('constructor' in object && 'constructor' in other) && +        !(typeof objCtor == 'function' && objCtor instanceof objCtor && +          typeof othCtor == 'function' && othCtor instanceof othCtor)) { +      result = false; +    } +  } +  stack['delete'](object); +  stack['delete'](other); +  return result; +} + +module.exports = equalObjects; diff --git a/node_modules/lodash/_escapeHtmlChar.js b/node_modules/lodash/_escapeHtmlChar.js new file mode 100644 index 0000000..7ca68ee --- /dev/null +++ b/node_modules/lodash/_escapeHtmlChar.js @@ -0,0 +1,21 @@ +var basePropertyOf = require('./_basePropertyOf'); + +/** Used to map characters to HTML entities. */ +var htmlEscapes = { +  '&': '&', +  '<': '<', +  '>': '>', +  '"': '"', +  "'": ''' +}; + +/** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ +var escapeHtmlChar = basePropertyOf(htmlEscapes); + +module.exports = escapeHtmlChar; diff --git a/node_modules/lodash/_escapeStringChar.js b/node_modules/lodash/_escapeStringChar.js new file mode 100644 index 0000000..44eca96 --- /dev/null +++ b/node_modules/lodash/_escapeStringChar.js @@ -0,0 +1,22 @@ +/** Used to escape characters for inclusion in compiled string literals. */ +var stringEscapes = { +  '\\': '\\', +  "'": "'", +  '\n': 'n', +  '\r': 'r', +  '\u2028': 'u2028', +  '\u2029': 'u2029' +}; + +/** + * Used by `_.template` to escape characters for inclusion in compiled string literals. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ +function escapeStringChar(chr) { +  return '\\' + stringEscapes[chr]; +} + +module.exports = escapeStringChar; diff --git a/node_modules/lodash/_flatRest.js b/node_modules/lodash/_flatRest.js new file mode 100644 index 0000000..94ab6cc --- /dev/null +++ b/node_modules/lodash/_flatRest.js @@ -0,0 +1,16 @@ +var flatten = require('./flatten'), +    overRest = require('./_overRest'), +    setToString = require('./_setToString'); + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { +  return setToString(overRest(func, undefined, flatten), func + ''); +} + +module.exports = flatRest; diff --git a/node_modules/lodash/_freeGlobal.js b/node_modules/lodash/_freeGlobal.js new file mode 100644 index 0000000..bbec998 --- /dev/null +++ b/node_modules/lodash/_freeGlobal.js @@ -0,0 +1,4 @@ +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +module.exports = freeGlobal; diff --git a/node_modules/lodash/_getAllKeys.js b/node_modules/lodash/_getAllKeys.js new file mode 100644 index 0000000..a9ce699 --- /dev/null +++ b/node_modules/lodash/_getAllKeys.js @@ -0,0 +1,16 @@ +var baseGetAllKeys = require('./_baseGetAllKeys'), +    getSymbols = require('./_getSymbols'), +    keys = require('./keys'); + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { +  return baseGetAllKeys(object, keys, getSymbols); +} + +module.exports = getAllKeys; diff --git a/node_modules/lodash/_getAllKeysIn.js b/node_modules/lodash/_getAllKeysIn.js new file mode 100644 index 0000000..1b46678 --- /dev/null +++ b/node_modules/lodash/_getAllKeysIn.js @@ -0,0 +1,17 @@ +var baseGetAllKeys = require('./_baseGetAllKeys'), +    getSymbolsIn = require('./_getSymbolsIn'), +    keysIn = require('./keysIn'); + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { +  return baseGetAllKeys(object, keysIn, getSymbolsIn); +} + +module.exports = getAllKeysIn; diff --git a/node_modules/lodash/_getData.js b/node_modules/lodash/_getData.js new file mode 100644 index 0000000..a1fe7b7 --- /dev/null +++ b/node_modules/lodash/_getData.js @@ -0,0 +1,15 @@ +var metaMap = require('./_metaMap'), +    noop = require('./noop'); + +/** + * Gets metadata for `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {*} Returns the metadata for `func`. + */ +var getData = !metaMap ? noop : function(func) { +  return metaMap.get(func); +}; + +module.exports = getData; diff --git a/node_modules/lodash/_getFuncName.js b/node_modules/lodash/_getFuncName.js new file mode 100644 index 0000000..21e15b3 --- /dev/null +++ b/node_modules/lodash/_getFuncName.js @@ -0,0 +1,31 @@ +var realNames = require('./_realNames'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Gets the name of `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {string} Returns the function name. + */ +function getFuncName(func) { +  var result = (func.name + ''), +      array = realNames[result], +      length = hasOwnProperty.call(realNames, result) ? array.length : 0; + +  while (length--) { +    var data = array[length], +        otherFunc = data.func; +    if (otherFunc == null || otherFunc == func) { +      return data.name; +    } +  } +  return result; +} + +module.exports = getFuncName; diff --git a/node_modules/lodash/_getHolder.js b/node_modules/lodash/_getHolder.js new file mode 100644 index 0000000..65e94b5 --- /dev/null +++ b/node_modules/lodash/_getHolder.js @@ -0,0 +1,13 @@ +/** + * Gets the argument placeholder value for `func`. + * + * @private + * @param {Function} func The function to inspect. + * @returns {*} Returns the placeholder value. + */ +function getHolder(func) { +  var object = func; +  return object.placeholder; +} + +module.exports = getHolder; diff --git a/node_modules/lodash/_getMapData.js b/node_modules/lodash/_getMapData.js new file mode 100644 index 0000000..17f6303 --- /dev/null +++ b/node_modules/lodash/_getMapData.js @@ -0,0 +1,18 @@ +var isKeyable = require('./_isKeyable'); + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { +  var data = map.__data__; +  return isKeyable(key) +    ? data[typeof key == 'string' ? 'string' : 'hash'] +    : data.map; +} + +module.exports = getMapData; diff --git a/node_modules/lodash/_getMatchData.js b/node_modules/lodash/_getMatchData.js new file mode 100644 index 0000000..2cc70f9 --- /dev/null +++ b/node_modules/lodash/_getMatchData.js @@ -0,0 +1,24 @@ +var isStrictComparable = require('./_isStrictComparable'), +    keys = require('./keys'); + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { +  var result = keys(object), +      length = result.length; + +  while (length--) { +    var key = result[length], +        value = object[key]; + +    result[length] = [key, value, isStrictComparable(value)]; +  } +  return result; +} + +module.exports = getMatchData; diff --git a/node_modules/lodash/_getNative.js b/node_modules/lodash/_getNative.js new file mode 100644 index 0000000..97a622b --- /dev/null +++ b/node_modules/lodash/_getNative.js @@ -0,0 +1,17 @@ +var baseIsNative = require('./_baseIsNative'), +    getValue = require('./_getValue'); + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { +  var value = getValue(object, key); +  return baseIsNative(value) ? value : undefined; +} + +module.exports = getNative; diff --git a/node_modules/lodash/_getPrototype.js b/node_modules/lodash/_getPrototype.js new file mode 100644 index 0000000..e808612 --- /dev/null +++ b/node_modules/lodash/_getPrototype.js @@ -0,0 +1,6 @@ +var overArg = require('./_overArg'); + +/** Built-in value references. */ +var getPrototype = overArg(Object.getPrototypeOf, Object); + +module.exports = getPrototype; diff --git a/node_modules/lodash/_getRawTag.js b/node_modules/lodash/_getRawTag.js new file mode 100644 index 0000000..49a95c9 --- /dev/null +++ b/node_modules/lodash/_getRawTag.js @@ -0,0 +1,46 @@ +var Symbol = require('./_Symbol'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { +  var isOwn = hasOwnProperty.call(value, symToStringTag), +      tag = value[symToStringTag]; + +  try { +    value[symToStringTag] = undefined; +    var unmasked = true; +  } catch (e) {} + +  var result = nativeObjectToString.call(value); +  if (unmasked) { +    if (isOwn) { +      value[symToStringTag] = tag; +    } else { +      delete value[symToStringTag]; +    } +  } +  return result; +} + +module.exports = getRawTag; diff --git a/node_modules/lodash/_getSymbols.js b/node_modules/lodash/_getSymbols.js new file mode 100644 index 0000000..7d6eafe --- /dev/null +++ b/node_modules/lodash/_getSymbols.js @@ -0,0 +1,30 @@ +var arrayFilter = require('./_arrayFilter'), +    stubArray = require('./stubArray'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? stubArray : function(object) { +  if (object == null) { +    return []; +  } +  object = Object(object); +  return arrayFilter(nativeGetSymbols(object), function(symbol) { +    return propertyIsEnumerable.call(object, symbol); +  }); +}; + +module.exports = getSymbols; diff --git a/node_modules/lodash/_getSymbolsIn.js b/node_modules/lodash/_getSymbolsIn.js new file mode 100644 index 0000000..cec0855 --- /dev/null +++ b/node_modules/lodash/_getSymbolsIn.js @@ -0,0 +1,25 @@ +var arrayPush = require('./_arrayPush'), +    getPrototype = require('./_getPrototype'), +    getSymbols = require('./_getSymbols'), +    stubArray = require('./stubArray'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { +  var result = []; +  while (object) { +    arrayPush(result, getSymbols(object)); +    object = getPrototype(object); +  } +  return result; +}; + +module.exports = getSymbolsIn; diff --git a/node_modules/lodash/_getTag.js b/node_modules/lodash/_getTag.js new file mode 100644 index 0000000..deaf89d --- /dev/null +++ b/node_modules/lodash/_getTag.js @@ -0,0 +1,58 @@ +var DataView = require('./_DataView'), +    Map = require('./_Map'), +    Promise = require('./_Promise'), +    Set = require('./_Set'), +    WeakMap = require('./_WeakMap'), +    baseGetTag = require('./_baseGetTag'), +    toSource = require('./_toSource'); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', +    objectTag = '[object Object]', +    promiseTag = '[object Promise]', +    setTag = '[object Set]', +    weakMapTag = '[object WeakMap]'; + +var dataViewTag = '[object DataView]'; + +/** Used to detect maps, sets, and weakmaps. */ +var dataViewCtorString = toSource(DataView), +    mapCtorString = toSource(Map), +    promiseCtorString = toSource(Promise), +    setCtorString = toSource(Set), +    weakMapCtorString = toSource(WeakMap); + +/** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +var getTag = baseGetTag; + +// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. +if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || +    (Map && getTag(new Map) != mapTag) || +    (Promise && getTag(Promise.resolve()) != promiseTag) || +    (Set && getTag(new Set) != setTag) || +    (WeakMap && getTag(new WeakMap) != weakMapTag)) { +  getTag = function(value) { +    var result = baseGetTag(value), +        Ctor = result == objectTag ? value.constructor : undefined, +        ctorString = Ctor ? toSource(Ctor) : ''; + +    if (ctorString) { +      switch (ctorString) { +        case dataViewCtorString: return dataViewTag; +        case mapCtorString: return mapTag; +        case promiseCtorString: return promiseTag; +        case setCtorString: return setTag; +        case weakMapCtorString: return weakMapTag; +      } +    } +    return result; +  }; +} + +module.exports = getTag; diff --git a/node_modules/lodash/_getValue.js b/node_modules/lodash/_getValue.js new file mode 100644 index 0000000..5f7d773 --- /dev/null +++ b/node_modules/lodash/_getValue.js @@ -0,0 +1,13 @@ +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { +  return object == null ? undefined : object[key]; +} + +module.exports = getValue; diff --git a/node_modules/lodash/_getView.js b/node_modules/lodash/_getView.js new file mode 100644 index 0000000..df1e5d4 --- /dev/null +++ b/node_modules/lodash/_getView.js @@ -0,0 +1,33 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, +    nativeMin = Math.min; + +/** + * Gets the view, applying any `transforms` to the `start` and `end` positions. + * + * @private + * @param {number} start The start of the view. + * @param {number} end The end of the view. + * @param {Array} transforms The transformations to apply to the view. + * @returns {Object} Returns an object containing the `start` and `end` + *  positions of the view. + */ +function getView(start, end, transforms) { +  var index = -1, +      length = transforms.length; + +  while (++index < length) { +    var data = transforms[index], +        size = data.size; + +    switch (data.type) { +      case 'drop':      start += size; break; +      case 'dropRight': end -= size; break; +      case 'take':      end = nativeMin(end, start + size); break; +      case 'takeRight': start = nativeMax(start, end - size); break; +    } +  } +  return { 'start': start, 'end': end }; +} + +module.exports = getView; diff --git a/node_modules/lodash/_getWrapDetails.js b/node_modules/lodash/_getWrapDetails.js new file mode 100644 index 0000000..3bcc6e4 --- /dev/null +++ b/node_modules/lodash/_getWrapDetails.js @@ -0,0 +1,17 @@ +/** Used to match wrap detail comments. */ +var reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, +    reSplitDetails = /,? & /; + +/** + * Extracts wrapper details from the `source` body comment. + * + * @private + * @param {string} source The source to inspect. + * @returns {Array} Returns the wrapper details. + */ +function getWrapDetails(source) { +  var match = source.match(reWrapDetails); +  return match ? match[1].split(reSplitDetails) : []; +} + +module.exports = getWrapDetails; diff --git a/node_modules/lodash/_hasPath.js b/node_modules/lodash/_hasPath.js new file mode 100644 index 0000000..93dbde1 --- /dev/null +++ b/node_modules/lodash/_hasPath.js @@ -0,0 +1,39 @@ +var castPath = require('./_castPath'), +    isArguments = require('./isArguments'), +    isArray = require('./isArray'), +    isIndex = require('./_isIndex'), +    isLength = require('./isLength'), +    toKey = require('./_toKey'); + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { +  path = castPath(path, object); + +  var index = -1, +      length = path.length, +      result = false; + +  while (++index < length) { +    var key = toKey(path[index]); +    if (!(result = object != null && hasFunc(object, key))) { +      break; +    } +    object = object[key]; +  } +  if (result || ++index != length) { +    return result; +  } +  length = object == null ? 0 : object.length; +  return !!length && isLength(length) && isIndex(key, length) && +    (isArray(object) || isArguments(object)); +} + +module.exports = hasPath; diff --git a/node_modules/lodash/_hasUnicode.js b/node_modules/lodash/_hasUnicode.js new file mode 100644 index 0000000..cb6ca15 --- /dev/null +++ b/node_modules/lodash/_hasUnicode.js @@ -0,0 +1,26 @@ +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', +    rsComboMarksRange = '\\u0300-\\u036f', +    reComboHalfMarksRange = '\\ufe20-\\ufe2f', +    rsComboSymbolsRange = '\\u20d0-\\u20ff', +    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, +    rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { +  return reHasUnicode.test(string); +} + +module.exports = hasUnicode; diff --git a/node_modules/lodash/_hasUnicodeWord.js b/node_modules/lodash/_hasUnicodeWord.js new file mode 100644 index 0000000..95d52c4 --- /dev/null +++ b/node_modules/lodash/_hasUnicodeWord.js @@ -0,0 +1,15 @@ +/** Used to detect strings that need a more robust regexp to match words. */ +var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; + +/** + * Checks if `string` contains a word composed of Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a word is found, else `false`. + */ +function hasUnicodeWord(string) { +  return reHasUnicodeWord.test(string); +} + +module.exports = hasUnicodeWord; diff --git a/node_modules/lodash/_hashClear.js b/node_modules/lodash/_hashClear.js new file mode 100644 index 0000000..5d4b70c --- /dev/null +++ b/node_modules/lodash/_hashClear.js @@ -0,0 +1,15 @@ +var nativeCreate = require('./_nativeCreate'); + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { +  this.__data__ = nativeCreate ? nativeCreate(null) : {}; +  this.size = 0; +} + +module.exports = hashClear; diff --git a/node_modules/lodash/_hashDelete.js b/node_modules/lodash/_hashDelete.js new file mode 100644 index 0000000..ea9dabf --- /dev/null +++ b/node_modules/lodash/_hashDelete.js @@ -0,0 +1,17 @@ +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { +  var result = this.has(key) && delete this.__data__[key]; +  this.size -= result ? 1 : 0; +  return result; +} + +module.exports = hashDelete; diff --git a/node_modules/lodash/_hashGet.js b/node_modules/lodash/_hashGet.js new file mode 100644 index 0000000..1fc2f34 --- /dev/null +++ b/node_modules/lodash/_hashGet.js @@ -0,0 +1,30 @@ +var nativeCreate = require('./_nativeCreate'); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { +  var data = this.__data__; +  if (nativeCreate) { +    var result = data[key]; +    return result === HASH_UNDEFINED ? undefined : result; +  } +  return hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +module.exports = hashGet; diff --git a/node_modules/lodash/_hashHas.js b/node_modules/lodash/_hashHas.js new file mode 100644 index 0000000..281a551 --- /dev/null +++ b/node_modules/lodash/_hashHas.js @@ -0,0 +1,23 @@ +var nativeCreate = require('./_nativeCreate'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { +  var data = this.__data__; +  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); +} + +module.exports = hashHas; diff --git a/node_modules/lodash/_hashSet.js b/node_modules/lodash/_hashSet.js new file mode 100644 index 0000000..e105528 --- /dev/null +++ b/node_modules/lodash/_hashSet.js @@ -0,0 +1,23 @@ +var nativeCreate = require('./_nativeCreate'); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { +  var data = this.__data__; +  this.size += this.has(key) ? 0 : 1; +  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; +  return this; +} + +module.exports = hashSet; diff --git a/node_modules/lodash/_initCloneArray.js b/node_modules/lodash/_initCloneArray.js new file mode 100644 index 0000000..078c15a --- /dev/null +++ b/node_modules/lodash/_initCloneArray.js @@ -0,0 +1,26 @@ +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { +  var length = array.length, +      result = new array.constructor(length); + +  // Add properties assigned by `RegExp#exec`. +  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { +    result.index = array.index; +    result.input = array.input; +  } +  return result; +} + +module.exports = initCloneArray; diff --git a/node_modules/lodash/_initCloneByTag.js b/node_modules/lodash/_initCloneByTag.js new file mode 100644 index 0000000..f69a008 --- /dev/null +++ b/node_modules/lodash/_initCloneByTag.js @@ -0,0 +1,77 @@ +var cloneArrayBuffer = require('./_cloneArrayBuffer'), +    cloneDataView = require('./_cloneDataView'), +    cloneRegExp = require('./_cloneRegExp'), +    cloneSymbol = require('./_cloneSymbol'), +    cloneTypedArray = require('./_cloneTypedArray'); + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', +    dateTag = '[object Date]', +    mapTag = '[object Map]', +    numberTag = '[object Number]', +    regexpTag = '[object RegExp]', +    setTag = '[object Set]', +    stringTag = '[object String]', +    symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', +    dataViewTag = '[object DataView]', +    float32Tag = '[object Float32Array]', +    float64Tag = '[object Float64Array]', +    int8Tag = '[object Int8Array]', +    int16Tag = '[object Int16Array]', +    int32Tag = '[object Int32Array]', +    uint8Tag = '[object Uint8Array]', +    uint8ClampedTag = '[object Uint8ClampedArray]', +    uint16Tag = '[object Uint16Array]', +    uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { +  var Ctor = object.constructor; +  switch (tag) { +    case arrayBufferTag: +      return cloneArrayBuffer(object); + +    case boolTag: +    case dateTag: +      return new Ctor(+object); + +    case dataViewTag: +      return cloneDataView(object, isDeep); + +    case float32Tag: case float64Tag: +    case int8Tag: case int16Tag: case int32Tag: +    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: +      return cloneTypedArray(object, isDeep); + +    case mapTag: +      return new Ctor; + +    case numberTag: +    case stringTag: +      return new Ctor(object); + +    case regexpTag: +      return cloneRegExp(object); + +    case setTag: +      return new Ctor; + +    case symbolTag: +      return cloneSymbol(object); +  } +} + +module.exports = initCloneByTag; diff --git a/node_modules/lodash/_initCloneObject.js b/node_modules/lodash/_initCloneObject.js new file mode 100644 index 0000000..5a13e64 --- /dev/null +++ b/node_modules/lodash/_initCloneObject.js @@ -0,0 +1,18 @@ +var baseCreate = require('./_baseCreate'), +    getPrototype = require('./_getPrototype'), +    isPrototype = require('./_isPrototype'); + +/** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneObject(object) { +  return (typeof object.constructor == 'function' && !isPrototype(object)) +    ? baseCreate(getPrototype(object)) +    : {}; +} + +module.exports = initCloneObject; diff --git a/node_modules/lodash/_insertWrapDetails.js b/node_modules/lodash/_insertWrapDetails.js new file mode 100644 index 0000000..e790808 --- /dev/null +++ b/node_modules/lodash/_insertWrapDetails.js @@ -0,0 +1,23 @@ +/** Used to match wrap detail comments. */ +var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/; + +/** + * Inserts wrapper `details` in a comment at the top of the `source` body. + * + * @private + * @param {string} source The source to modify. + * @returns {Array} details The details to insert. + * @returns {string} Returns the modified source. + */ +function insertWrapDetails(source, details) { +  var length = details.length; +  if (!length) { +    return source; +  } +  var lastIndex = length - 1; +  details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; +  details = details.join(length > 2 ? ', ' : ' '); +  return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); +} + +module.exports = insertWrapDetails; diff --git a/node_modules/lodash/_isFlattenable.js b/node_modules/lodash/_isFlattenable.js new file mode 100644 index 0000000..4cc2c24 --- /dev/null +++ b/node_modules/lodash/_isFlattenable.js @@ -0,0 +1,20 @@ +var Symbol = require('./_Symbol'), +    isArguments = require('./isArguments'), +    isArray = require('./isArray'); + +/** Built-in value references. */ +var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { +  return isArray(value) || isArguments(value) || +    !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +module.exports = isFlattenable; diff --git a/node_modules/lodash/_isIndex.js b/node_modules/lodash/_isIndex.js new file mode 100644 index 0000000..061cd39 --- /dev/null +++ b/node_modules/lodash/_isIndex.js @@ -0,0 +1,25 @@ +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { +  var type = typeof value; +  length = length == null ? MAX_SAFE_INTEGER : length; + +  return !!length && +    (type == 'number' || +      (type != 'symbol' && reIsUint.test(value))) && +        (value > -1 && value % 1 == 0 && value < length); +} + +module.exports = isIndex; diff --git a/node_modules/lodash/_isIterateeCall.js b/node_modules/lodash/_isIterateeCall.js new file mode 100644 index 0000000..a0bb5a9 --- /dev/null +++ b/node_modules/lodash/_isIterateeCall.js @@ -0,0 +1,30 @@ +var eq = require('./eq'), +    isArrayLike = require('./isArrayLike'), +    isIndex = require('./_isIndex'), +    isObject = require('./isObject'); + +/** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + *  else `false`. + */ +function isIterateeCall(value, index, object) { +  if (!isObject(object)) { +    return false; +  } +  var type = typeof index; +  if (type == 'number' +        ? (isArrayLike(object) && isIndex(index, object.length)) +        : (type == 'string' && index in object) +      ) { +    return eq(object[index], value); +  } +  return false; +} + +module.exports = isIterateeCall; diff --git a/node_modules/lodash/_isKey.js b/node_modules/lodash/_isKey.js new file mode 100644 index 0000000..ff08b06 --- /dev/null +++ b/node_modules/lodash/_isKey.js @@ -0,0 +1,29 @@ +var isArray = require('./isArray'), +    isSymbol = require('./isSymbol'); + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, +    reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { +  if (isArray(value)) { +    return false; +  } +  var type = typeof value; +  if (type == 'number' || type == 'symbol' || type == 'boolean' || +      value == null || isSymbol(value)) { +    return true; +  } +  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || +    (object != null && value in Object(object)); +} + +module.exports = isKey; diff --git a/node_modules/lodash/_isKeyable.js b/node_modules/lodash/_isKeyable.js new file mode 100644 index 0000000..39f1828 --- /dev/null +++ b/node_modules/lodash/_isKeyable.js @@ -0,0 +1,15 @@ +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { +  var type = typeof value; +  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') +    ? (value !== '__proto__') +    : (value === null); +} + +module.exports = isKeyable; diff --git a/node_modules/lodash/_isLaziable.js b/node_modules/lodash/_isLaziable.js new file mode 100644 index 0000000..a57c4f2 --- /dev/null +++ b/node_modules/lodash/_isLaziable.js @@ -0,0 +1,28 @@ +var LazyWrapper = require('./_LazyWrapper'), +    getData = require('./_getData'), +    getFuncName = require('./_getFuncName'), +    lodash = require('./wrapperLodash'); + +/** + * Checks if `func` has a lazy counterpart. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` has a lazy counterpart, + *  else `false`. + */ +function isLaziable(func) { +  var funcName = getFuncName(func), +      other = lodash[funcName]; + +  if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { +    return false; +  } +  if (func === other) { +    return true; +  } +  var data = getData(other); +  return !!data && func === data[0]; +} + +module.exports = isLaziable; diff --git a/node_modules/lodash/_isMaskable.js b/node_modules/lodash/_isMaskable.js new file mode 100644 index 0000000..eb98d09 --- /dev/null +++ b/node_modules/lodash/_isMaskable.js @@ -0,0 +1,14 @@ +var coreJsData = require('./_coreJsData'), +    isFunction = require('./isFunction'), +    stubFalse = require('./stubFalse'); + +/** + * Checks if `func` is capable of being masked. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `func` is maskable, else `false`. + */ +var isMaskable = coreJsData ? isFunction : stubFalse; + +module.exports = isMaskable; diff --git a/node_modules/lodash/_isMasked.js b/node_modules/lodash/_isMasked.js new file mode 100644 index 0000000..4b0f21b --- /dev/null +++ b/node_modules/lodash/_isMasked.js @@ -0,0 +1,20 @@ +var coreJsData = require('./_coreJsData'); + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { +  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); +  return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { +  return !!maskSrcKey && (maskSrcKey in func); +} + +module.exports = isMasked; diff --git a/node_modules/lodash/_isPrototype.js b/node_modules/lodash/_isPrototype.js new file mode 100644 index 0000000..0f29498 --- /dev/null +++ b/node_modules/lodash/_isPrototype.js @@ -0,0 +1,18 @@ +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { +  var Ctor = value && value.constructor, +      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + +  return value === proto; +} + +module.exports = isPrototype; diff --git a/node_modules/lodash/_isStrictComparable.js b/node_modules/lodash/_isStrictComparable.js new file mode 100644 index 0000000..b59f40b --- /dev/null +++ b/node_modules/lodash/_isStrictComparable.js @@ -0,0 +1,15 @@ +var isObject = require('./isObject'); + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + *  equality comparisons, else `false`. + */ +function isStrictComparable(value) { +  return value === value && !isObject(value); +} + +module.exports = isStrictComparable; diff --git a/node_modules/lodash/_iteratorToArray.js b/node_modules/lodash/_iteratorToArray.js new file mode 100644 index 0000000..4768566 --- /dev/null +++ b/node_modules/lodash/_iteratorToArray.js @@ -0,0 +1,18 @@ +/** + * Converts `iterator` to an array. + * + * @private + * @param {Object} iterator The iterator to convert. + * @returns {Array} Returns the converted array. + */ +function iteratorToArray(iterator) { +  var data, +      result = []; + +  while (!(data = iterator.next()).done) { +    result.push(data.value); +  } +  return result; +} + +module.exports = iteratorToArray; diff --git a/node_modules/lodash/_lazyClone.js b/node_modules/lodash/_lazyClone.js new file mode 100644 index 0000000..d8a51f8 --- /dev/null +++ b/node_modules/lodash/_lazyClone.js @@ -0,0 +1,23 @@ +var LazyWrapper = require('./_LazyWrapper'), +    copyArray = require('./_copyArray'); + +/** + * Creates a clone of the lazy wrapper object. + * + * @private + * @name clone + * @memberOf LazyWrapper + * @returns {Object} Returns the cloned `LazyWrapper` object. + */ +function lazyClone() { +  var result = new LazyWrapper(this.__wrapped__); +  result.__actions__ = copyArray(this.__actions__); +  result.__dir__ = this.__dir__; +  result.__filtered__ = this.__filtered__; +  result.__iteratees__ = copyArray(this.__iteratees__); +  result.__takeCount__ = this.__takeCount__; +  result.__views__ = copyArray(this.__views__); +  return result; +} + +module.exports = lazyClone; diff --git a/node_modules/lodash/_lazyReverse.js b/node_modules/lodash/_lazyReverse.js new file mode 100644 index 0000000..c5b5219 --- /dev/null +++ b/node_modules/lodash/_lazyReverse.js @@ -0,0 +1,23 @@ +var LazyWrapper = require('./_LazyWrapper'); + +/** + * Reverses the direction of lazy iteration. + * + * @private + * @name reverse + * @memberOf LazyWrapper + * @returns {Object} Returns the new reversed `LazyWrapper` object. + */ +function lazyReverse() { +  if (this.__filtered__) { +    var result = new LazyWrapper(this); +    result.__dir__ = -1; +    result.__filtered__ = true; +  } else { +    result = this.clone(); +    result.__dir__ *= -1; +  } +  return result; +} + +module.exports = lazyReverse; diff --git a/node_modules/lodash/_lazyValue.js b/node_modules/lodash/_lazyValue.js new file mode 100644 index 0000000..371ca8d --- /dev/null +++ b/node_modules/lodash/_lazyValue.js @@ -0,0 +1,69 @@ +var baseWrapperValue = require('./_baseWrapperValue'), +    getView = require('./_getView'), +    isArray = require('./isArray'); + +/** Used to indicate the type of lazy iteratees. */ +var LAZY_FILTER_FLAG = 1, +    LAZY_MAP_FLAG = 2; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Extracts the unwrapped value from its lazy wrapper. + * + * @private + * @name value + * @memberOf LazyWrapper + * @returns {*} Returns the unwrapped value. + */ +function lazyValue() { +  var array = this.__wrapped__.value(), +      dir = this.__dir__, +      isArr = isArray(array), +      isRight = dir < 0, +      arrLength = isArr ? array.length : 0, +      view = getView(0, arrLength, this.__views__), +      start = view.start, +      end = view.end, +      length = end - start, +      index = isRight ? end : (start - 1), +      iteratees = this.__iteratees__, +      iterLength = iteratees.length, +      resIndex = 0, +      takeCount = nativeMin(length, this.__takeCount__); + +  if (!isArr || (!isRight && arrLength == length && takeCount == length)) { +    return baseWrapperValue(array, this.__actions__); +  } +  var result = []; + +  outer: +  while (length-- && resIndex < takeCount) { +    index += dir; + +    var iterIndex = -1, +        value = array[index]; + +    while (++iterIndex < iterLength) { +      var data = iteratees[iterIndex], +          iteratee = data.iteratee, +          type = data.type, +          computed = iteratee(value); + +      if (type == LAZY_MAP_FLAG) { +        value = computed; +      } else if (!computed) { +        if (type == LAZY_FILTER_FLAG) { +          continue outer; +        } else { +          break outer; +        } +      } +    } +    result[resIndex++] = value; +  } +  return result; +} + +module.exports = lazyValue; diff --git a/node_modules/lodash/_listCacheClear.js b/node_modules/lodash/_listCacheClear.js new file mode 100644 index 0000000..acbe39a --- /dev/null +++ b/node_modules/lodash/_listCacheClear.js @@ -0,0 +1,13 @@ +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { +  this.__data__ = []; +  this.size = 0; +} + +module.exports = listCacheClear; diff --git a/node_modules/lodash/_listCacheDelete.js b/node_modules/lodash/_listCacheDelete.js new file mode 100644 index 0000000..b1384ad --- /dev/null +++ b/node_modules/lodash/_listCacheDelete.js @@ -0,0 +1,35 @@ +var assocIndexOf = require('./_assocIndexOf'); + +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { +  var data = this.__data__, +      index = assocIndexOf(data, key); + +  if (index < 0) { +    return false; +  } +  var lastIndex = data.length - 1; +  if (index == lastIndex) { +    data.pop(); +  } else { +    splice.call(data, index, 1); +  } +  --this.size; +  return true; +} + +module.exports = listCacheDelete; diff --git a/node_modules/lodash/_listCacheGet.js b/node_modules/lodash/_listCacheGet.js new file mode 100644 index 0000000..f8192fc --- /dev/null +++ b/node_modules/lodash/_listCacheGet.js @@ -0,0 +1,19 @@ +var assocIndexOf = require('./_assocIndexOf'); + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { +  var data = this.__data__, +      index = assocIndexOf(data, key); + +  return index < 0 ? undefined : data[index][1]; +} + +module.exports = listCacheGet; diff --git a/node_modules/lodash/_listCacheHas.js b/node_modules/lodash/_listCacheHas.js new file mode 100644 index 0000000..2adf671 --- /dev/null +++ b/node_modules/lodash/_listCacheHas.js @@ -0,0 +1,16 @@ +var assocIndexOf = require('./_assocIndexOf'); + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { +  return assocIndexOf(this.__data__, key) > -1; +} + +module.exports = listCacheHas; diff --git a/node_modules/lodash/_listCacheSet.js b/node_modules/lodash/_listCacheSet.js new file mode 100644 index 0000000..5855c95 --- /dev/null +++ b/node_modules/lodash/_listCacheSet.js @@ -0,0 +1,26 @@ +var assocIndexOf = require('./_assocIndexOf'); + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { +  var data = this.__data__, +      index = assocIndexOf(data, key); + +  if (index < 0) { +    ++this.size; +    data.push([key, value]); +  } else { +    data[index][1] = value; +  } +  return this; +} + +module.exports = listCacheSet; diff --git a/node_modules/lodash/_mapCacheClear.js b/node_modules/lodash/_mapCacheClear.js new file mode 100644 index 0000000..bc9ca20 --- /dev/null +++ b/node_modules/lodash/_mapCacheClear.js @@ -0,0 +1,21 @@ +var Hash = require('./_Hash'), +    ListCache = require('./_ListCache'), +    Map = require('./_Map'); + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { +  this.size = 0; +  this.__data__ = { +    'hash': new Hash, +    'map': new (Map || ListCache), +    'string': new Hash +  }; +} + +module.exports = mapCacheClear; diff --git a/node_modules/lodash/_mapCacheDelete.js b/node_modules/lodash/_mapCacheDelete.js new file mode 100644 index 0000000..946ca3c --- /dev/null +++ b/node_modules/lodash/_mapCacheDelete.js @@ -0,0 +1,18 @@ +var getMapData = require('./_getMapData'); + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { +  var result = getMapData(this, key)['delete'](key); +  this.size -= result ? 1 : 0; +  return result; +} + +module.exports = mapCacheDelete; diff --git a/node_modules/lodash/_mapCacheGet.js b/node_modules/lodash/_mapCacheGet.js new file mode 100644 index 0000000..f29f55c --- /dev/null +++ b/node_modules/lodash/_mapCacheGet.js @@ -0,0 +1,16 @@ +var getMapData = require('./_getMapData'); + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { +  return getMapData(this, key).get(key); +} + +module.exports = mapCacheGet; diff --git a/node_modules/lodash/_mapCacheHas.js b/node_modules/lodash/_mapCacheHas.js new file mode 100644 index 0000000..a1214c0 --- /dev/null +++ b/node_modules/lodash/_mapCacheHas.js @@ -0,0 +1,16 @@ +var getMapData = require('./_getMapData'); + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { +  return getMapData(this, key).has(key); +} + +module.exports = mapCacheHas; diff --git a/node_modules/lodash/_mapCacheSet.js b/node_modules/lodash/_mapCacheSet.js new file mode 100644 index 0000000..7346849 --- /dev/null +++ b/node_modules/lodash/_mapCacheSet.js @@ -0,0 +1,22 @@ +var getMapData = require('./_getMapData'); + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { +  var data = getMapData(this, key), +      size = data.size; + +  data.set(key, value); +  this.size += data.size == size ? 0 : 1; +  return this; +} + +module.exports = mapCacheSet; diff --git a/node_modules/lodash/_mapToArray.js b/node_modules/lodash/_mapToArray.js new file mode 100644 index 0000000..fe3dd53 --- /dev/null +++ b/node_modules/lodash/_mapToArray.js @@ -0,0 +1,18 @@ +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { +  var index = -1, +      result = Array(map.size); + +  map.forEach(function(value, key) { +    result[++index] = [key, value]; +  }); +  return result; +} + +module.exports = mapToArray; diff --git a/node_modules/lodash/_matchesStrictComparable.js b/node_modules/lodash/_matchesStrictComparable.js new file mode 100644 index 0000000..f608af9 --- /dev/null +++ b/node_modules/lodash/_matchesStrictComparable.js @@ -0,0 +1,20 @@ +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { +  return function(object) { +    if (object == null) { +      return false; +    } +    return object[key] === srcValue && +      (srcValue !== undefined || (key in Object(object))); +  }; +} + +module.exports = matchesStrictComparable; diff --git a/node_modules/lodash/_memoizeCapped.js b/node_modules/lodash/_memoizeCapped.js new file mode 100644 index 0000000..7f71c8f --- /dev/null +++ b/node_modules/lodash/_memoizeCapped.js @@ -0,0 +1,26 @@ +var memoize = require('./memoize'); + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { +  var result = memoize(func, function(key) { +    if (cache.size === MAX_MEMOIZE_SIZE) { +      cache.clear(); +    } +    return key; +  }); + +  var cache = result.cache; +  return result; +} + +module.exports = memoizeCapped; diff --git a/node_modules/lodash/_mergeData.js b/node_modules/lodash/_mergeData.js new file mode 100644 index 0000000..cb570f9 --- /dev/null +++ b/node_modules/lodash/_mergeData.js @@ -0,0 +1,90 @@ +var composeArgs = require('./_composeArgs'), +    composeArgsRight = require('./_composeArgsRight'), +    replaceHolders = require('./_replaceHolders'); + +/** Used as the internal argument placeholder. */ +var PLACEHOLDER = '__lodash_placeholder__'; + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1, +    WRAP_BIND_KEY_FLAG = 2, +    WRAP_CURRY_BOUND_FLAG = 4, +    WRAP_CURRY_FLAG = 8, +    WRAP_ARY_FLAG = 128, +    WRAP_REARG_FLAG = 256; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Merges the function metadata of `source` into `data`. + * + * Merging metadata reduces the number of wrappers used to invoke a function. + * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` + * may be applied regardless of execution order. Methods like `_.ary` and + * `_.rearg` modify function arguments, making the order in which they are + * executed important, preventing the merging of metadata. However, we make + * an exception for a safe combined case where curried functions have `_.ary` + * and or `_.rearg` applied. + * + * @private + * @param {Array} data The destination metadata. + * @param {Array} source The source metadata. + * @returns {Array} Returns `data`. + */ +function mergeData(data, source) { +  var bitmask = data[1], +      srcBitmask = source[1], +      newBitmask = bitmask | srcBitmask, +      isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); + +  var isCombo = +    ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || +    ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || +    ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); + +  // Exit early if metadata can't be merged. +  if (!(isCommon || isCombo)) { +    return data; +  } +  // Use source `thisArg` if available. +  if (srcBitmask & WRAP_BIND_FLAG) { +    data[2] = source[2]; +    // Set when currying a bound function. +    newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; +  } +  // Compose partial arguments. +  var value = source[3]; +  if (value) { +    var partials = data[3]; +    data[3] = partials ? composeArgs(partials, value, source[4]) : value; +    data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; +  } +  // Compose partial right arguments. +  value = source[5]; +  if (value) { +    partials = data[5]; +    data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; +    data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; +  } +  // Use source `argPos` if available. +  value = source[7]; +  if (value) { +    data[7] = value; +  } +  // Use source `ary` if it's smaller. +  if (srcBitmask & WRAP_ARY_FLAG) { +    data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); +  } +  // Use source `arity` if one is not provided. +  if (data[9] == null) { +    data[9] = source[9]; +  } +  // Use source `func` and merge bitmasks. +  data[0] = source[0]; +  data[1] = newBitmask; + +  return data; +} + +module.exports = mergeData; diff --git a/node_modules/lodash/_metaMap.js b/node_modules/lodash/_metaMap.js new file mode 100644 index 0000000..0157a0b --- /dev/null +++ b/node_modules/lodash/_metaMap.js @@ -0,0 +1,6 @@ +var WeakMap = require('./_WeakMap'); + +/** Used to store function metadata. */ +var metaMap = WeakMap && new WeakMap; + +module.exports = metaMap; diff --git a/node_modules/lodash/_nativeCreate.js b/node_modules/lodash/_nativeCreate.js new file mode 100644 index 0000000..c7aede8 --- /dev/null +++ b/node_modules/lodash/_nativeCreate.js @@ -0,0 +1,6 @@ +var getNative = require('./_getNative'); + +/* Built-in method references that are verified to be native. */ +var nativeCreate = getNative(Object, 'create'); + +module.exports = nativeCreate; diff --git a/node_modules/lodash/_nativeKeys.js b/node_modules/lodash/_nativeKeys.js new file mode 100644 index 0000000..479a104 --- /dev/null +++ b/node_modules/lodash/_nativeKeys.js @@ -0,0 +1,6 @@ +var overArg = require('./_overArg'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeKeys = overArg(Object.keys, Object); + +module.exports = nativeKeys; diff --git a/node_modules/lodash/_nativeKeysIn.js b/node_modules/lodash/_nativeKeysIn.js new file mode 100644 index 0000000..00ee505 --- /dev/null +++ b/node_modules/lodash/_nativeKeysIn.js @@ -0,0 +1,20 @@ +/** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function nativeKeysIn(object) { +  var result = []; +  if (object != null) { +    for (var key in Object(object)) { +      result.push(key); +    } +  } +  return result; +} + +module.exports = nativeKeysIn; diff --git a/node_modules/lodash/_nodeUtil.js b/node_modules/lodash/_nodeUtil.js new file mode 100644 index 0000000..983d78f --- /dev/null +++ b/node_modules/lodash/_nodeUtil.js @@ -0,0 +1,30 @@ +var freeGlobal = require('./_freeGlobal'); + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Detect free variable `process` from Node.js. */ +var freeProcess = moduleExports && freeGlobal.process; + +/** Used to access faster Node.js helpers. */ +var nodeUtil = (function() { +  try { +    // Use `util.types` for Node.js 10+. +    var types = freeModule && freeModule.require && freeModule.require('util').types; + +    if (types) { +      return types; +    } + +    // Legacy `process.binding('util')` for Node.js < 10. +    return freeProcess && freeProcess.binding && freeProcess.binding('util'); +  } catch (e) {} +}()); + +module.exports = nodeUtil; diff --git a/node_modules/lodash/_objectToString.js b/node_modules/lodash/_objectToString.js new file mode 100644 index 0000000..c614ec0 --- /dev/null +++ b/node_modules/lodash/_objectToString.js @@ -0,0 +1,22 @@ +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { +  return nativeObjectToString.call(value); +} + +module.exports = objectToString; diff --git a/node_modules/lodash/_overArg.js b/node_modules/lodash/_overArg.js new file mode 100644 index 0000000..651c5c5 --- /dev/null +++ b/node_modules/lodash/_overArg.js @@ -0,0 +1,15 @@ +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { +  return function(arg) { +    return func(transform(arg)); +  }; +} + +module.exports = overArg; diff --git a/node_modules/lodash/_overRest.js b/node_modules/lodash/_overRest.js new file mode 100644 index 0000000..c7cdef3 --- /dev/null +++ b/node_modules/lodash/_overRest.js @@ -0,0 +1,36 @@ +var apply = require('./_apply'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ +function overRest(func, start, transform) { +  start = nativeMax(start === undefined ? (func.length - 1) : start, 0); +  return function() { +    var args = arguments, +        index = -1, +        length = nativeMax(args.length - start, 0), +        array = Array(length); + +    while (++index < length) { +      array[index] = args[start + index]; +    } +    index = -1; +    var otherArgs = Array(start + 1); +    while (++index < start) { +      otherArgs[index] = args[index]; +    } +    otherArgs[start] = transform(array); +    return apply(func, this, otherArgs); +  }; +} + +module.exports = overRest; diff --git a/node_modules/lodash/_parent.js b/node_modules/lodash/_parent.js new file mode 100644 index 0000000..f174328 --- /dev/null +++ b/node_modules/lodash/_parent.js @@ -0,0 +1,16 @@ +var baseGet = require('./_baseGet'), +    baseSlice = require('./_baseSlice'); + +/** + * Gets the parent value at `path` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path to get the parent value of. + * @returns {*} Returns the parent value. + */ +function parent(object, path) { +  return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); +} + +module.exports = parent; diff --git a/node_modules/lodash/_reEscape.js b/node_modules/lodash/_reEscape.js new file mode 100644 index 0000000..7f47eda --- /dev/null +++ b/node_modules/lodash/_reEscape.js @@ -0,0 +1,4 @@ +/** Used to match template delimiters. */ +var reEscape = /<%-([\s\S]+?)%>/g; + +module.exports = reEscape; diff --git a/node_modules/lodash/_reEvaluate.js b/node_modules/lodash/_reEvaluate.js new file mode 100644 index 0000000..6adfc31 --- /dev/null +++ b/node_modules/lodash/_reEvaluate.js @@ -0,0 +1,4 @@ +/** Used to match template delimiters. */ +var reEvaluate = /<%([\s\S]+?)%>/g; + +module.exports = reEvaluate; diff --git a/node_modules/lodash/_reInterpolate.js b/node_modules/lodash/_reInterpolate.js new file mode 100644 index 0000000..d02ff0b --- /dev/null +++ b/node_modules/lodash/_reInterpolate.js @@ -0,0 +1,4 @@ +/** Used to match template delimiters. */ +var reInterpolate = /<%=([\s\S]+?)%>/g; + +module.exports = reInterpolate; diff --git a/node_modules/lodash/_realNames.js b/node_modules/lodash/_realNames.js new file mode 100644 index 0000000..aa0d529 --- /dev/null +++ b/node_modules/lodash/_realNames.js @@ -0,0 +1,4 @@ +/** Used to lookup unminified function names. */ +var realNames = {}; + +module.exports = realNames; diff --git a/node_modules/lodash/_reorder.js b/node_modules/lodash/_reorder.js new file mode 100644 index 0000000..a3502b0 --- /dev/null +++ b/node_modules/lodash/_reorder.js @@ -0,0 +1,29 @@ +var copyArray = require('./_copyArray'), +    isIndex = require('./_isIndex'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Reorder `array` according to the specified indexes where the element at + * the first index is assigned as the first element, the element at + * the second index is assigned as the second element, and so on. + * + * @private + * @param {Array} array The array to reorder. + * @param {Array} indexes The arranged array indexes. + * @returns {Array} Returns `array`. + */ +function reorder(array, indexes) { +  var arrLength = array.length, +      length = nativeMin(indexes.length, arrLength), +      oldArray = copyArray(array); + +  while (length--) { +    var index = indexes[length]; +    array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; +  } +  return array; +} + +module.exports = reorder; diff --git a/node_modules/lodash/_replaceHolders.js b/node_modules/lodash/_replaceHolders.js new file mode 100644 index 0000000..74360ec --- /dev/null +++ b/node_modules/lodash/_replaceHolders.js @@ -0,0 +1,29 @@ +/** Used as the internal argument placeholder. */ +var PLACEHOLDER = '__lodash_placeholder__'; + +/** + * Replaces all `placeholder` elements in `array` with an internal placeholder + * and returns an array of their indexes. + * + * @private + * @param {Array} array The array to modify. + * @param {*} placeholder The placeholder to replace. + * @returns {Array} Returns the new array of placeholder indexes. + */ +function replaceHolders(array, placeholder) { +  var index = -1, +      length = array.length, +      resIndex = 0, +      result = []; + +  while (++index < length) { +    var value = array[index]; +    if (value === placeholder || value === PLACEHOLDER) { +      array[index] = PLACEHOLDER; +      result[resIndex++] = index; +    } +  } +  return result; +} + +module.exports = replaceHolders; diff --git a/node_modules/lodash/_root.js b/node_modules/lodash/_root.js new file mode 100644 index 0000000..d2852be --- /dev/null +++ b/node_modules/lodash/_root.js @@ -0,0 +1,9 @@ +var freeGlobal = require('./_freeGlobal'); + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +module.exports = root; diff --git a/node_modules/lodash/_safeGet.js b/node_modules/lodash/_safeGet.js new file mode 100644 index 0000000..b070897 --- /dev/null +++ b/node_modules/lodash/_safeGet.js @@ -0,0 +1,21 @@ +/** + * Gets the value at `key`, unless `key` is "__proto__" or "constructor". + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function safeGet(object, key) { +  if (key === 'constructor' && typeof object[key] === 'function') { +    return; +  } + +  if (key == '__proto__') { +    return; +  } + +  return object[key]; +} + +module.exports = safeGet; diff --git a/node_modules/lodash/_setCacheAdd.js b/node_modules/lodash/_setCacheAdd.js new file mode 100644 index 0000000..1081a74 --- /dev/null +++ b/node_modules/lodash/_setCacheAdd.js @@ -0,0 +1,19 @@ +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { +  this.__data__.set(value, HASH_UNDEFINED); +  return this; +} + +module.exports = setCacheAdd; diff --git a/node_modules/lodash/_setCacheHas.js b/node_modules/lodash/_setCacheHas.js new file mode 100644 index 0000000..9a49255 --- /dev/null +++ b/node_modules/lodash/_setCacheHas.js @@ -0,0 +1,14 @@ +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { +  return this.__data__.has(value); +} + +module.exports = setCacheHas; diff --git a/node_modules/lodash/_setData.js b/node_modules/lodash/_setData.js new file mode 100644 index 0000000..e5cf3eb --- /dev/null +++ b/node_modules/lodash/_setData.js @@ -0,0 +1,20 @@ +var baseSetData = require('./_baseSetData'), +    shortOut = require('./_shortOut'); + +/** + * Sets metadata for `func`. + * + * **Note:** If this function becomes hot, i.e. is invoked a lot in a short + * period of time, it will trip its breaker and transition to an identity + * function to avoid garbage collection pauses in V8. See + * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) + * for more details. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ +var setData = shortOut(baseSetData); + +module.exports = setData; diff --git a/node_modules/lodash/_setToArray.js b/node_modules/lodash/_setToArray.js new file mode 100644 index 0000000..b87f074 --- /dev/null +++ b/node_modules/lodash/_setToArray.js @@ -0,0 +1,18 @@ +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { +  var index = -1, +      result = Array(set.size); + +  set.forEach(function(value) { +    result[++index] = value; +  }); +  return result; +} + +module.exports = setToArray; diff --git a/node_modules/lodash/_setToPairs.js b/node_modules/lodash/_setToPairs.js new file mode 100644 index 0000000..36ad37a --- /dev/null +++ b/node_modules/lodash/_setToPairs.js @@ -0,0 +1,18 @@ +/** + * Converts `set` to its value-value pairs. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the value-value pairs. + */ +function setToPairs(set) { +  var index = -1, +      result = Array(set.size); + +  set.forEach(function(value) { +    result[++index] = [value, value]; +  }); +  return result; +} + +module.exports = setToPairs; diff --git a/node_modules/lodash/_setToString.js b/node_modules/lodash/_setToString.js new file mode 100644 index 0000000..6ca8419 --- /dev/null +++ b/node_modules/lodash/_setToString.js @@ -0,0 +1,14 @@ +var baseSetToString = require('./_baseSetToString'), +    shortOut = require('./_shortOut'); + +/** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var setToString = shortOut(baseSetToString); + +module.exports = setToString; diff --git a/node_modules/lodash/_setWrapToString.js b/node_modules/lodash/_setWrapToString.js new file mode 100644 index 0000000..decdc44 --- /dev/null +++ b/node_modules/lodash/_setWrapToString.js @@ -0,0 +1,21 @@ +var getWrapDetails = require('./_getWrapDetails'), +    insertWrapDetails = require('./_insertWrapDetails'), +    setToString = require('./_setToString'), +    updateWrapDetails = require('./_updateWrapDetails'); + +/** + * Sets the `toString` method of `wrapper` to mimic the source of `reference` + * with wrapper details in a comment at the top of the source body. + * + * @private + * @param {Function} wrapper The function to modify. + * @param {Function} reference The reference function. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Function} Returns `wrapper`. + */ +function setWrapToString(wrapper, reference, bitmask) { +  var source = (reference + ''); +  return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); +} + +module.exports = setWrapToString; diff --git a/node_modules/lodash/_shortOut.js b/node_modules/lodash/_shortOut.js new file mode 100644 index 0000000..3300a07 --- /dev/null +++ b/node_modules/lodash/_shortOut.js @@ -0,0 +1,37 @@ +/** Used to detect hot functions by number of calls within a span of milliseconds. */ +var HOT_COUNT = 800, +    HOT_SPAN = 16; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeNow = Date.now; + +/** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ +function shortOut(func) { +  var count = 0, +      lastCalled = 0; + +  return function() { +    var stamp = nativeNow(), +        remaining = HOT_SPAN - (stamp - lastCalled); + +    lastCalled = stamp; +    if (remaining > 0) { +      if (++count >= HOT_COUNT) { +        return arguments[0]; +      } +    } else { +      count = 0; +    } +    return func.apply(undefined, arguments); +  }; +} + +module.exports = shortOut; diff --git a/node_modules/lodash/_shuffleSelf.js b/node_modules/lodash/_shuffleSelf.js new file mode 100644 index 0000000..8bcc4f5 --- /dev/null +++ b/node_modules/lodash/_shuffleSelf.js @@ -0,0 +1,28 @@ +var baseRandom = require('./_baseRandom'); + +/** + * A specialized version of `_.shuffle` which mutates and sets the size of `array`. + * + * @private + * @param {Array} array The array to shuffle. + * @param {number} [size=array.length] The size of `array`. + * @returns {Array} Returns `array`. + */ +function shuffleSelf(array, size) { +  var index = -1, +      length = array.length, +      lastIndex = length - 1; + +  size = size === undefined ? length : size; +  while (++index < size) { +    var rand = baseRandom(index, lastIndex), +        value = array[rand]; + +    array[rand] = array[index]; +    array[index] = value; +  } +  array.length = size; +  return array; +} + +module.exports = shuffleSelf; diff --git a/node_modules/lodash/_stackClear.js b/node_modules/lodash/_stackClear.js new file mode 100644 index 0000000..ce8e5a9 --- /dev/null +++ b/node_modules/lodash/_stackClear.js @@ -0,0 +1,15 @@ +var ListCache = require('./_ListCache'); + +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { +  this.__data__ = new ListCache; +  this.size = 0; +} + +module.exports = stackClear; diff --git a/node_modules/lodash/_stackDelete.js b/node_modules/lodash/_stackDelete.js new file mode 100644 index 0000000..ff9887a --- /dev/null +++ b/node_modules/lodash/_stackDelete.js @@ -0,0 +1,18 @@ +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { +  var data = this.__data__, +      result = data['delete'](key); + +  this.size = data.size; +  return result; +} + +module.exports = stackDelete; diff --git a/node_modules/lodash/_stackGet.js b/node_modules/lodash/_stackGet.js new file mode 100644 index 0000000..1cdf004 --- /dev/null +++ b/node_modules/lodash/_stackGet.js @@ -0,0 +1,14 @@ +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { +  return this.__data__.get(key); +} + +module.exports = stackGet; diff --git a/node_modules/lodash/_stackHas.js b/node_modules/lodash/_stackHas.js new file mode 100644 index 0000000..16a3ad1 --- /dev/null +++ b/node_modules/lodash/_stackHas.js @@ -0,0 +1,14 @@ +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { +  return this.__data__.has(key); +} + +module.exports = stackHas; diff --git a/node_modules/lodash/_stackSet.js b/node_modules/lodash/_stackSet.js new file mode 100644 index 0000000..b790ac5 --- /dev/null +++ b/node_modules/lodash/_stackSet.js @@ -0,0 +1,34 @@ +var ListCache = require('./_ListCache'), +    Map = require('./_Map'), +    MapCache = require('./_MapCache'); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ +function stackSet(key, value) { +  var data = this.__data__; +  if (data instanceof ListCache) { +    var pairs = data.__data__; +    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { +      pairs.push([key, value]); +      this.size = ++data.size; +      return this; +    } +    data = this.__data__ = new MapCache(pairs); +  } +  data.set(key, value); +  this.size = data.size; +  return this; +} + +module.exports = stackSet; diff --git a/node_modules/lodash/_strictIndexOf.js b/node_modules/lodash/_strictIndexOf.js new file mode 100644 index 0000000..0486a49 --- /dev/null +++ b/node_modules/lodash/_strictIndexOf.js @@ -0,0 +1,23 @@ +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { +  var index = fromIndex - 1, +      length = array.length; + +  while (++index < length) { +    if (array[index] === value) { +      return index; +    } +  } +  return -1; +} + +module.exports = strictIndexOf; diff --git a/node_modules/lodash/_strictLastIndexOf.js b/node_modules/lodash/_strictLastIndexOf.js new file mode 100644 index 0000000..d7310dc --- /dev/null +++ b/node_modules/lodash/_strictLastIndexOf.js @@ -0,0 +1,21 @@ +/** + * A specialized version of `_.lastIndexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictLastIndexOf(array, value, fromIndex) { +  var index = fromIndex + 1; +  while (index--) { +    if (array[index] === value) { +      return index; +    } +  } +  return index; +} + +module.exports = strictLastIndexOf; diff --git a/node_modules/lodash/_stringSize.js b/node_modules/lodash/_stringSize.js new file mode 100644 index 0000000..17ef462 --- /dev/null +++ b/node_modules/lodash/_stringSize.js @@ -0,0 +1,18 @@ +var asciiSize = require('./_asciiSize'), +    hasUnicode = require('./_hasUnicode'), +    unicodeSize = require('./_unicodeSize'); + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { +  return hasUnicode(string) +    ? unicodeSize(string) +    : asciiSize(string); +} + +module.exports = stringSize; diff --git a/node_modules/lodash/_stringToArray.js b/node_modules/lodash/_stringToArray.js new file mode 100644 index 0000000..d161158 --- /dev/null +++ b/node_modules/lodash/_stringToArray.js @@ -0,0 +1,18 @@ +var asciiToArray = require('./_asciiToArray'), +    hasUnicode = require('./_hasUnicode'), +    unicodeToArray = require('./_unicodeToArray'); + +/** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function stringToArray(string) { +  return hasUnicode(string) +    ? unicodeToArray(string) +    : asciiToArray(string); +} + +module.exports = stringToArray; diff --git a/node_modules/lodash/_stringToPath.js b/node_modules/lodash/_stringToPath.js new file mode 100644 index 0000000..8f39f8a --- /dev/null +++ b/node_modules/lodash/_stringToPath.js @@ -0,0 +1,27 @@ +var memoizeCapped = require('./_memoizeCapped'); + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = memoizeCapped(function(string) { +  var result = []; +  if (string.charCodeAt(0) === 46 /* . */) { +    result.push(''); +  } +  string.replace(rePropName, function(match, number, quote, subString) { +    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); +  }); +  return result; +}); + +module.exports = stringToPath; diff --git a/node_modules/lodash/_toKey.js b/node_modules/lodash/_toKey.js new file mode 100644 index 0000000..c6d645c --- /dev/null +++ b/node_modules/lodash/_toKey.js @@ -0,0 +1,21 @@ +var isSymbol = require('./isSymbol'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { +  if (typeof value == 'string' || isSymbol(value)) { +    return value; +  } +  var result = (value + ''); +  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +module.exports = toKey; diff --git a/node_modules/lodash/_toSource.js b/node_modules/lodash/_toSource.js new file mode 100644 index 0000000..a020b38 --- /dev/null +++ b/node_modules/lodash/_toSource.js @@ -0,0 +1,26 @@ +/** Used for built-in method references. */ +var funcProto = Function.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ +function toSource(func) { +  if (func != null) { +    try { +      return funcToString.call(func); +    } catch (e) {} +    try { +      return (func + ''); +    } catch (e) {} +  } +  return ''; +} + +module.exports = toSource; diff --git a/node_modules/lodash/_trimmedEndIndex.js b/node_modules/lodash/_trimmedEndIndex.js new file mode 100644 index 0000000..139439a --- /dev/null +++ b/node_modules/lodash/_trimmedEndIndex.js @@ -0,0 +1,19 @@ +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { +  var index = string.length; + +  while (index-- && reWhitespace.test(string.charAt(index))) {} +  return index; +} + +module.exports = trimmedEndIndex; diff --git a/node_modules/lodash/_unescapeHtmlChar.js b/node_modules/lodash/_unescapeHtmlChar.js new file mode 100644 index 0000000..a71fecb --- /dev/null +++ b/node_modules/lodash/_unescapeHtmlChar.js @@ -0,0 +1,21 @@ +var basePropertyOf = require('./_basePropertyOf'); + +/** Used to map HTML entities to characters. */ +var htmlUnescapes = { +  '&': '&', +  '<': '<', +  '>': '>', +  '"': '"', +  ''': "'" +}; + +/** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ +var unescapeHtmlChar = basePropertyOf(htmlUnescapes); + +module.exports = unescapeHtmlChar; diff --git a/node_modules/lodash/_unicodeSize.js b/node_modules/lodash/_unicodeSize.js new file mode 100644 index 0000000..68137ec --- /dev/null +++ b/node_modules/lodash/_unicodeSize.js @@ -0,0 +1,44 @@ +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', +    rsComboMarksRange = '\\u0300-\\u036f', +    reComboHalfMarksRange = '\\ufe20-\\ufe2f', +    rsComboSymbolsRange = '\\u20d0-\\u20ff', +    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, +    rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + rsAstralRange + ']', +    rsCombo = '[' + rsComboRange + ']', +    rsFitz = '\\ud83c[\\udffb-\\udfff]', +    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', +    rsNonAstral = '[^' + rsAstralRange + ']', +    rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', +    rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', +    rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', +    rsOptVar = '[' + rsVarRange + ']?', +    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', +    rsSeq = rsOptVar + reOptMod + rsOptJoin, +    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { +  var result = reUnicode.lastIndex = 0; +  while (reUnicode.test(string)) { +    ++result; +  } +  return result; +} + +module.exports = unicodeSize; diff --git a/node_modules/lodash/_unicodeToArray.js b/node_modules/lodash/_unicodeToArray.js new file mode 100644 index 0000000..2a725c0 --- /dev/null +++ b/node_modules/lodash/_unicodeToArray.js @@ -0,0 +1,40 @@ +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', +    rsComboMarksRange = '\\u0300-\\u036f', +    reComboHalfMarksRange = '\\ufe20-\\ufe2f', +    rsComboSymbolsRange = '\\u20d0-\\u20ff', +    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, +    rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + rsAstralRange + ']', +    rsCombo = '[' + rsComboRange + ']', +    rsFitz = '\\ud83c[\\udffb-\\udfff]', +    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', +    rsNonAstral = '[^' + rsAstralRange + ']', +    rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', +    rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', +    rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', +    rsOptVar = '[' + rsVarRange + ']?', +    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', +    rsSeq = rsOptVar + reOptMod + rsOptJoin, +    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function unicodeToArray(string) { +  return string.match(reUnicode) || []; +} + +module.exports = unicodeToArray; diff --git a/node_modules/lodash/_unicodeWords.js b/node_modules/lodash/_unicodeWords.js new file mode 100644 index 0000000..e72e6e0 --- /dev/null +++ b/node_modules/lodash/_unicodeWords.js @@ -0,0 +1,69 @@ +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', +    rsComboMarksRange = '\\u0300-\\u036f', +    reComboHalfMarksRange = '\\ufe20-\\ufe2f', +    rsComboSymbolsRange = '\\u20d0-\\u20ff', +    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, +    rsDingbatRange = '\\u2700-\\u27bf', +    rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', +    rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', +    rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', +    rsPunctuationRange = '\\u2000-\\u206f', +    rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', +    rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', +    rsVarRange = '\\ufe0e\\ufe0f', +    rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; + +/** Used to compose unicode capture groups. */ +var rsApos = "['\u2019]", +    rsBreak = '[' + rsBreakRange + ']', +    rsCombo = '[' + rsComboRange + ']', +    rsDigits = '\\d+', +    rsDingbat = '[' + rsDingbatRange + ']', +    rsLower = '[' + rsLowerRange + ']', +    rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', +    rsFitz = '\\ud83c[\\udffb-\\udfff]', +    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', +    rsNonAstral = '[^' + rsAstralRange + ']', +    rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', +    rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', +    rsUpper = '[' + rsUpperRange + ']', +    rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', +    rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', +    rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', +    rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', +    reOptMod = rsModifier + '?', +    rsOptVar = '[' + rsVarRange + ']?', +    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', +    rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', +    rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', +    rsSeq = rsOptVar + reOptMod + rsOptJoin, +    rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq; + +/** Used to match complex or compound words. */ +var reUnicodeWord = RegExp([ +  rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', +  rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', +  rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, +  rsUpper + '+' + rsOptContrUpper, +  rsOrdUpper, +  rsOrdLower, +  rsDigits, +  rsEmoji +].join('|'), 'g'); + +/** + * Splits a Unicode `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ +function unicodeWords(string) { +  return string.match(reUnicodeWord) || []; +} + +module.exports = unicodeWords; diff --git a/node_modules/lodash/_updateWrapDetails.js b/node_modules/lodash/_updateWrapDetails.js new file mode 100644 index 0000000..8759fbd --- /dev/null +++ b/node_modules/lodash/_updateWrapDetails.js @@ -0,0 +1,46 @@ +var arrayEach = require('./_arrayEach'), +    arrayIncludes = require('./_arrayIncludes'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1, +    WRAP_BIND_KEY_FLAG = 2, +    WRAP_CURRY_FLAG = 8, +    WRAP_CURRY_RIGHT_FLAG = 16, +    WRAP_PARTIAL_FLAG = 32, +    WRAP_PARTIAL_RIGHT_FLAG = 64, +    WRAP_ARY_FLAG = 128, +    WRAP_REARG_FLAG = 256, +    WRAP_FLIP_FLAG = 512; + +/** Used to associate wrap methods with their bit flags. */ +var wrapFlags = [ +  ['ary', WRAP_ARY_FLAG], +  ['bind', WRAP_BIND_FLAG], +  ['bindKey', WRAP_BIND_KEY_FLAG], +  ['curry', WRAP_CURRY_FLAG], +  ['curryRight', WRAP_CURRY_RIGHT_FLAG], +  ['flip', WRAP_FLIP_FLAG], +  ['partial', WRAP_PARTIAL_FLAG], +  ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], +  ['rearg', WRAP_REARG_FLAG] +]; + +/** + * Updates wrapper `details` based on `bitmask` flags. + * + * @private + * @returns {Array} details The details to modify. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Array} Returns `details`. + */ +function updateWrapDetails(details, bitmask) { +  arrayEach(wrapFlags, function(pair) { +    var value = '_.' + pair[0]; +    if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { +      details.push(value); +    } +  }); +  return details.sort(); +} + +module.exports = updateWrapDetails; diff --git a/node_modules/lodash/_wrapperClone.js b/node_modules/lodash/_wrapperClone.js new file mode 100644 index 0000000..7bb58a2 --- /dev/null +++ b/node_modules/lodash/_wrapperClone.js @@ -0,0 +1,23 @@ +var LazyWrapper = require('./_LazyWrapper'), +    LodashWrapper = require('./_LodashWrapper'), +    copyArray = require('./_copyArray'); + +/** + * Creates a clone of `wrapper`. + * + * @private + * @param {Object} wrapper The wrapper to clone. + * @returns {Object} Returns the cloned wrapper. + */ +function wrapperClone(wrapper) { +  if (wrapper instanceof LazyWrapper) { +    return wrapper.clone(); +  } +  var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); +  result.__actions__ = copyArray(wrapper.__actions__); +  result.__index__  = wrapper.__index__; +  result.__values__ = wrapper.__values__; +  return result; +} + +module.exports = wrapperClone; diff --git a/node_modules/lodash/add.js b/node_modules/lodash/add.js new file mode 100644 index 0000000..f069515 --- /dev/null +++ b/node_modules/lodash/add.js @@ -0,0 +1,22 @@ +var createMathOperation = require('./_createMathOperation'); + +/** + * Adds two numbers. + * + * @static + * @memberOf _ + * @since 3.4.0 + * @category Math + * @param {number} augend The first number in an addition. + * @param {number} addend The second number in an addition. + * @returns {number} Returns the total. + * @example + * + * _.add(6, 4); + * // => 10 + */ +var add = createMathOperation(function(augend, addend) { +  return augend + addend; +}, 0); + +module.exports = add; diff --git a/node_modules/lodash/after.js b/node_modules/lodash/after.js new file mode 100644 index 0000000..3900c97 --- /dev/null +++ b/node_modules/lodash/after.js @@ -0,0 +1,42 @@ +var toInteger = require('./toInteger'); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * The opposite of `_.before`; this method creates a function that invokes + * `func` once it's called `n` or more times. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {number} n The number of calls before `func` is invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + *   console.log('done saving!'); + * }); + * + * _.forEach(saves, function(type) { + *   asyncSave({ 'type': type, 'complete': done }); + * }); + * // => Logs 'done saving!' after the two async saves have completed. + */ +function after(n, func) { +  if (typeof func != 'function') { +    throw new TypeError(FUNC_ERROR_TEXT); +  } +  n = toInteger(n); +  return function() { +    if (--n < 1) { +      return func.apply(this, arguments); +    } +  }; +} + +module.exports = after; diff --git a/node_modules/lodash/array.js b/node_modules/lodash/array.js new file mode 100644 index 0000000..af688d3 --- /dev/null +++ b/node_modules/lodash/array.js @@ -0,0 +1,67 @@ +module.exports = { +  'chunk': require('./chunk'), +  'compact': require('./compact'), +  'concat': require('./concat'), +  'difference': require('./difference'), +  'differenceBy': require('./differenceBy'), +  'differenceWith': require('./differenceWith'), +  'drop': require('./drop'), +  'dropRight': require('./dropRight'), +  'dropRightWhile': require('./dropRightWhile'), +  'dropWhile': require('./dropWhile'), +  'fill': require('./fill'), +  'findIndex': require('./findIndex'), +  'findLastIndex': require('./findLastIndex'), +  'first': require('./first'), +  'flatten': require('./flatten'), +  'flattenDeep': require('./flattenDeep'), +  'flattenDepth': require('./flattenDepth'), +  'fromPairs': require('./fromPairs'), +  'head': require('./head'), +  'indexOf': require('./indexOf'), +  'initial': require('./initial'), +  'intersection': require('./intersection'), +  'intersectionBy': require('./intersectionBy'), +  'intersectionWith': require('./intersectionWith'), +  'join': require('./join'), +  'last': require('./last'), +  'lastIndexOf': require('./lastIndexOf'), +  'nth': require('./nth'), +  'pull': require('./pull'), +  'pullAll': require('./pullAll'), +  'pullAllBy': require('./pullAllBy'), +  'pullAllWith': require('./pullAllWith'), +  'pullAt': require('./pullAt'), +  'remove': require('./remove'), +  'reverse': require('./reverse'), +  'slice': require('./slice'), +  'sortedIndex': require('./sortedIndex'), +  'sortedIndexBy': require('./sortedIndexBy'), +  'sortedIndexOf': require('./sortedIndexOf'), +  'sortedLastIndex': require('./sortedLastIndex'), +  'sortedLastIndexBy': require('./sortedLastIndexBy'), +  'sortedLastIndexOf': require('./sortedLastIndexOf'), +  'sortedUniq': require('./sortedUniq'), +  'sortedUniqBy': require('./sortedUniqBy'), +  'tail': require('./tail'), +  'take': require('./take'), +  'takeRight': require('./takeRight'), +  'takeRightWhile': require('./takeRightWhile'), +  'takeWhile': require('./takeWhile'), +  'union': require('./union'), +  'unionBy': require('./unionBy'), +  'unionWith': require('./unionWith'), +  'uniq': require('./uniq'), +  'uniqBy': require('./uniqBy'), +  'uniqWith': require('./uniqWith'), +  'unzip': require('./unzip'), +  'unzipWith': require('./unzipWith'), +  'without': require('./without'), +  'xor': require('./xor'), +  'xorBy': require('./xorBy'), +  'xorWith': require('./xorWith'), +  'zip': require('./zip'), +  'zipObject': require('./zipObject'), +  'zipObjectDeep': require('./zipObjectDeep'), +  'zipWith': require('./zipWith') +}; diff --git a/node_modules/lodash/ary.js b/node_modules/lodash/ary.js new file mode 100644 index 0000000..70c87d0 --- /dev/null +++ b/node_modules/lodash/ary.js @@ -0,0 +1,29 @@ +var createWrap = require('./_createWrap'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_ARY_FLAG = 128; + +/** + * Creates a function that invokes `func`, with up to `n` arguments, + * ignoring any additional arguments. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @param {number} [n=func.length] The arity cap. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.ary(parseInt, 1)); + * // => [6, 8, 10] + */ +function ary(func, n, guard) { +  n = guard ? undefined : n; +  n = (func && n == null) ? func.length : n; +  return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n); +} + +module.exports = ary; diff --git a/node_modules/lodash/assign.js b/node_modules/lodash/assign.js new file mode 100644 index 0000000..909db26 --- /dev/null +++ b/node_modules/lodash/assign.js @@ -0,0 +1,58 @@ +var assignValue = require('./_assignValue'), +    copyObject = require('./_copyObject'), +    createAssigner = require('./_createAssigner'), +    isArrayLike = require('./isArrayLike'), +    isPrototype = require('./_isPrototype'), +    keys = require('./keys'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own enumerable string keyed properties of source objects to the + * destination object. Source objects are applied from left to right. + * Subsequent sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assignIn + * @example + * + * function Foo() { + *   this.a = 1; + * } + * + * function Bar() { + *   this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assign({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3 } + */ +var assign = createAssigner(function(object, source) { +  if (isPrototype(source) || isArrayLike(source)) { +    copyObject(source, keys(source), object); +    return; +  } +  for (var key in source) { +    if (hasOwnProperty.call(source, key)) { +      assignValue(object, key, source[key]); +    } +  } +}); + +module.exports = assign; diff --git a/node_modules/lodash/assignIn.js b/node_modules/lodash/assignIn.js new file mode 100644 index 0000000..e663473 --- /dev/null +++ b/node_modules/lodash/assignIn.js @@ -0,0 +1,40 @@ +var copyObject = require('./_copyObject'), +    createAssigner = require('./_createAssigner'), +    keysIn = require('./keysIn'); + +/** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + *   this.a = 1; + * } + * + * function Bar() { + *   this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ +var assignIn = createAssigner(function(object, source) { +  copyObject(source, keysIn(source), object); +}); + +module.exports = assignIn; diff --git a/node_modules/lodash/assignInWith.js b/node_modules/lodash/assignInWith.js new file mode 100644 index 0000000..68fcc0b --- /dev/null +++ b/node_modules/lodash/assignInWith.js @@ -0,0 +1,38 @@ +var copyObject = require('./_copyObject'), +    createAssigner = require('./_createAssigner'), +    keysIn = require('./keysIn'); + +/** + * This method is like `_.assignIn` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extendWith + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignWith + * @example + * + * function customizer(objValue, srcValue) { + *   return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignInWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { +  copyObject(source, keysIn(source), object, customizer); +}); + +module.exports = assignInWith; diff --git a/node_modules/lodash/assignWith.js b/node_modules/lodash/assignWith.js new file mode 100644 index 0000000..7dc6c76 --- /dev/null +++ b/node_modules/lodash/assignWith.js @@ -0,0 +1,37 @@ +var copyObject = require('./_copyObject'), +    createAssigner = require('./_createAssigner'), +    keys = require('./keys'); + +/** + * This method is like `_.assign` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignInWith + * @example + * + * function customizer(objValue, srcValue) { + *   return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var assignWith = createAssigner(function(object, source, srcIndex, customizer) { +  copyObject(source, keys(source), object, customizer); +}); + +module.exports = assignWith; diff --git a/node_modules/lodash/at.js b/node_modules/lodash/at.js new file mode 100644 index 0000000..781ee9e --- /dev/null +++ b/node_modules/lodash/at.js @@ -0,0 +1,23 @@ +var baseAt = require('./_baseAt'), +    flatRest = require('./_flatRest'); + +/** + * Creates an array of values corresponding to `paths` of `object`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Array} Returns the picked values. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _.at(object, ['a[0].b.c', 'a[1]']); + * // => [3, 4] + */ +var at = flatRest(baseAt); + +module.exports = at; diff --git a/node_modules/lodash/attempt.js b/node_modules/lodash/attempt.js new file mode 100644 index 0000000..624d015 --- /dev/null +++ b/node_modules/lodash/attempt.js @@ -0,0 +1,35 @@ +var apply = require('./_apply'), +    baseRest = require('./_baseRest'), +    isError = require('./isError'); + +/** + * Attempts to invoke `func`, returning either the result or the caught error + * object. Any additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Util + * @param {Function} func The function to attempt. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {*} Returns the `func` result or error object. + * @example + * + * // Avoid throwing errors for invalid selectors. + * var elements = _.attempt(function(selector) { + *   return document.querySelectorAll(selector); + * }, '>_>'); + * + * if (_.isError(elements)) { + *   elements = []; + * } + */ +var attempt = baseRest(function(func, args) { +  try { +    return apply(func, undefined, args); +  } catch (e) { +    return isError(e) ? e : new Error(e); +  } +}); + +module.exports = attempt; diff --git a/node_modules/lodash/before.js b/node_modules/lodash/before.js new file mode 100644 index 0000000..a3e0a16 --- /dev/null +++ b/node_modules/lodash/before.js @@ -0,0 +1,40 @@ +var toInteger = require('./toInteger'); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => Allows adding up to 4 contacts to the list. + */ +function before(n, func) { +  var result; +  if (typeof func != 'function') { +    throw new TypeError(FUNC_ERROR_TEXT); +  } +  n = toInteger(n); +  return function() { +    if (--n > 0) { +      result = func.apply(this, arguments); +    } +    if (n <= 1) { +      func = undefined; +    } +    return result; +  }; +} + +module.exports = before; diff --git a/node_modules/lodash/bind.js b/node_modules/lodash/bind.js new file mode 100644 index 0000000..b1076e9 --- /dev/null +++ b/node_modules/lodash/bind.js @@ -0,0 +1,57 @@ +var baseRest = require('./_baseRest'), +    createWrap = require('./_createWrap'), +    getHolder = require('./_getHolder'), +    replaceHolders = require('./_replaceHolders'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1, +    WRAP_PARTIAL_FLAG = 32; + +/** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and `partials` prepended to the arguments it receives. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * function greet(greeting, punctuation) { + *   return greeting + ' ' + this.user + punctuation; + * } + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ +var bind = baseRest(function(func, thisArg, partials) { +  var bitmask = WRAP_BIND_FLAG; +  if (partials.length) { +    var holders = replaceHolders(partials, getHolder(bind)); +    bitmask |= WRAP_PARTIAL_FLAG; +  } +  return createWrap(func, bitmask, thisArg, partials, holders); +}); + +// Assign default placeholders. +bind.placeholder = {}; + +module.exports = bind; diff --git a/node_modules/lodash/bindAll.js b/node_modules/lodash/bindAll.js new file mode 100644 index 0000000..a35706d --- /dev/null +++ b/node_modules/lodash/bindAll.js @@ -0,0 +1,41 @@ +var arrayEach = require('./_arrayEach'), +    baseAssignValue = require('./_baseAssignValue'), +    bind = require('./bind'), +    flatRest = require('./_flatRest'), +    toKey = require('./_toKey'); + +/** + * Binds methods of an object to the object itself, overwriting the existing + * method. + * + * **Note:** This method doesn't set the "length" property of bound functions. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {Object} object The object to bind and assign the bound methods to. + * @param {...(string|string[])} methodNames The object method names to bind. + * @returns {Object} Returns `object`. + * @example + * + * var view = { + *   'label': 'docs', + *   'click': function() { + *     console.log('clicked ' + this.label); + *   } + * }; + * + * _.bindAll(view, ['click']); + * jQuery(element).on('click', view.click); + * // => Logs 'clicked docs' when clicked. + */ +var bindAll = flatRest(function(object, methodNames) { +  arrayEach(methodNames, function(key) { +    key = toKey(key); +    baseAssignValue(object, key, bind(object[key], object)); +  }); +  return object; +}); + +module.exports = bindAll; diff --git a/node_modules/lodash/bindKey.js b/node_modules/lodash/bindKey.js new file mode 100644 index 0000000..f7fd64c --- /dev/null +++ b/node_modules/lodash/bindKey.js @@ -0,0 +1,68 @@ +var baseRest = require('./_baseRest'), +    createWrap = require('./_createWrap'), +    getHolder = require('./_getHolder'), +    replaceHolders = require('./_replaceHolders'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1, +    WRAP_BIND_KEY_FLAG = 2, +    WRAP_PARTIAL_FLAG = 32; + +/** + * Creates a function that invokes the method at `object[key]` with `partials` + * prepended to the arguments it receives. + * + * This method differs from `_.bind` by allowing bound functions to reference + * methods that may be redefined or don't yet exist. See + * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) + * for more details. + * + * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Function + * @param {Object} object The object to invoke the method on. + * @param {string} key The key of the method. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var object = { + *   'user': 'fred', + *   'greet': function(greeting, punctuation) { + *     return greeting + ' ' + this.user + punctuation; + *   } + * }; + * + * var bound = _.bindKey(object, 'greet', 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * object.greet = function(greeting, punctuation) { + *   return greeting + 'ya ' + this.user + punctuation; + * }; + * + * bound('!'); + * // => 'hiya fred!' + * + * // Bound with placeholders. + * var bound = _.bindKey(object, 'greet', _, '!'); + * bound('hi'); + * // => 'hiya fred!' + */ +var bindKey = baseRest(function(object, key, partials) { +  var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; +  if (partials.length) { +    var holders = replaceHolders(partials, getHolder(bindKey)); +    bitmask |= WRAP_PARTIAL_FLAG; +  } +  return createWrap(key, bitmask, object, partials, holders); +}); + +// Assign default placeholders. +bindKey.placeholder = {}; + +module.exports = bindKey; diff --git a/node_modules/lodash/camelCase.js b/node_modules/lodash/camelCase.js new file mode 100644 index 0000000..d7390de --- /dev/null +++ b/node_modules/lodash/camelCase.js @@ -0,0 +1,29 @@ +var capitalize = require('./capitalize'), +    createCompounder = require('./_createCompounder'); + +/** + * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the camel cased string. + * @example + * + * _.camelCase('Foo Bar'); + * // => 'fooBar' + * + * _.camelCase('--foo-bar--'); + * // => 'fooBar' + * + * _.camelCase('__FOO_BAR__'); + * // => 'fooBar' + */ +var camelCase = createCompounder(function(result, word, index) { +  word = word.toLowerCase(); +  return result + (index ? capitalize(word) : word); +}); + +module.exports = camelCase; diff --git a/node_modules/lodash/capitalize.js b/node_modules/lodash/capitalize.js new file mode 100644 index 0000000..3e1600e --- /dev/null +++ b/node_modules/lodash/capitalize.js @@ -0,0 +1,23 @@ +var toString = require('./toString'), +    upperFirst = require('./upperFirst'); + +/** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */ +function capitalize(string) { +  return upperFirst(toString(string).toLowerCase()); +} + +module.exports = capitalize; diff --git a/node_modules/lodash/castArray.js b/node_modules/lodash/castArray.js new file mode 100644 index 0000000..e470bdb --- /dev/null +++ b/node_modules/lodash/castArray.js @@ -0,0 +1,44 @@ +var isArray = require('./isArray'); + +/** + * Casts `value` as an array if it's not one. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Lang + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast array. + * @example + * + * _.castArray(1); + * // => [1] + * + * _.castArray({ 'a': 1 }); + * // => [{ 'a': 1 }] + * + * _.castArray('abc'); + * // => ['abc'] + * + * _.castArray(null); + * // => [null] + * + * _.castArray(undefined); + * // => [undefined] + * + * _.castArray(); + * // => [] + * + * var array = [1, 2, 3]; + * console.log(_.castArray(array) === array); + * // => true + */ +function castArray() { +  if (!arguments.length) { +    return []; +  } +  var value = arguments[0]; +  return isArray(value) ? value : [value]; +} + +module.exports = castArray; diff --git a/node_modules/lodash/ceil.js b/node_modules/lodash/ceil.js new file mode 100644 index 0000000..56c8722 --- /dev/null +++ b/node_modules/lodash/ceil.js @@ -0,0 +1,26 @@ +var createRound = require('./_createRound'); + +/** + * Computes `number` rounded up to `precision`. + * + * @static + * @memberOf _ + * @since 3.10.0 + * @category Math + * @param {number} number The number to round up. + * @param {number} [precision=0] The precision to round up to. + * @returns {number} Returns the rounded up number. + * @example + * + * _.ceil(4.006); + * // => 5 + * + * _.ceil(6.004, 2); + * // => 6.01 + * + * _.ceil(6040, -2); + * // => 6100 + */ +var ceil = createRound('ceil'); + +module.exports = ceil; diff --git a/node_modules/lodash/chain.js b/node_modules/lodash/chain.js new file mode 100644 index 0000000..f6cd647 --- /dev/null +++ b/node_modules/lodash/chain.js @@ -0,0 +1,38 @@ +var lodash = require('./wrapperLodash'); + +/** + * Creates a `lodash` wrapper instance that wraps `value` with explicit method + * chain sequences enabled. The result of such sequences must be unwrapped + * with `_#value`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + *   { 'user': 'barney',  'age': 36 }, + *   { 'user': 'fred',    'age': 40 }, + *   { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + *   .chain(users) + *   .sortBy('age') + *   .map(function(o) { + *     return o.user + ' is ' + o.age; + *   }) + *   .head() + *   .value(); + * // => 'pebbles is 1' + */ +function chain(value) { +  var result = lodash(value); +  result.__chain__ = true; +  return result; +} + +module.exports = chain; diff --git a/node_modules/lodash/chunk.js b/node_modules/lodash/chunk.js new file mode 100644 index 0000000..5b562fe --- /dev/null +++ b/node_modules/lodash/chunk.js @@ -0,0 +1,50 @@ +var baseSlice = require('./_baseSlice'), +    isIterateeCall = require('./_isIterateeCall'), +    toInteger = require('./toInteger'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, +    nativeMax = Math.max; + +/** + * Creates an array of elements split into groups the length of `size`. + * If `array` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the new array of chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ +function chunk(array, size, guard) { +  if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { +    size = 1; +  } else { +    size = nativeMax(toInteger(size), 0); +  } +  var length = array == null ? 0 : array.length; +  if (!length || size < 1) { +    return []; +  } +  var index = 0, +      resIndex = 0, +      result = Array(nativeCeil(length / size)); + +  while (index < length) { +    result[resIndex++] = baseSlice(array, index, (index += size)); +  } +  return result; +} + +module.exports = chunk; diff --git a/node_modules/lodash/clamp.js b/node_modules/lodash/clamp.js new file mode 100644 index 0000000..91a72c9 --- /dev/null +++ b/node_modules/lodash/clamp.js @@ -0,0 +1,39 @@ +var baseClamp = require('./_baseClamp'), +    toNumber = require('./toNumber'); + +/** + * Clamps `number` within the inclusive `lower` and `upper` bounds. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Number + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + * @example + * + * _.clamp(-10, -5, 5); + * // => -5 + * + * _.clamp(10, -5, 5); + * // => 5 + */ +function clamp(number, lower, upper) { +  if (upper === undefined) { +    upper = lower; +    lower = undefined; +  } +  if (upper !== undefined) { +    upper = toNumber(upper); +    upper = upper === upper ? upper : 0; +  } +  if (lower !== undefined) { +    lower = toNumber(lower); +    lower = lower === lower ? lower : 0; +  } +  return baseClamp(toNumber(number), lower, upper); +} + +module.exports = clamp; diff --git a/node_modules/lodash/clone.js b/node_modules/lodash/clone.js new file mode 100644 index 0000000..dd439d6 --- /dev/null +++ b/node_modules/lodash/clone.js @@ -0,0 +1,36 @@ +var baseClone = require('./_baseClone'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_SYMBOLS_FLAG = 4; + +/** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ +function clone(value) { +  return baseClone(value, CLONE_SYMBOLS_FLAG); +} + +module.exports = clone; diff --git a/node_modules/lodash/cloneDeep.js b/node_modules/lodash/cloneDeep.js new file mode 100644 index 0000000..4425fbe --- /dev/null +++ b/node_modules/lodash/cloneDeep.js @@ -0,0 +1,29 @@ +var baseClone = require('./_baseClone'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, +    CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { +  return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +module.exports = cloneDeep; diff --git a/node_modules/lodash/cloneDeepWith.js b/node_modules/lodash/cloneDeepWith.js new file mode 100644 index 0000000..fd9c6c0 --- /dev/null +++ b/node_modules/lodash/cloneDeepWith.js @@ -0,0 +1,40 @@ +var baseClone = require('./_baseClone'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, +    CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.cloneWith` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the deep cloned value. + * @see _.cloneWith + * @example + * + * function customizer(value) { + *   if (_.isElement(value)) { + *     return value.cloneNode(true); + *   } + * } + * + * var el = _.cloneDeepWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 20 + */ +function cloneDeepWith(value, customizer) { +  customizer = typeof customizer == 'function' ? customizer : undefined; +  return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); +} + +module.exports = cloneDeepWith; diff --git a/node_modules/lodash/cloneWith.js b/node_modules/lodash/cloneWith.js new file mode 100644 index 0000000..d2f4e75 --- /dev/null +++ b/node_modules/lodash/cloneWith.js @@ -0,0 +1,42 @@ +var baseClone = require('./_baseClone'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it accepts `customizer` which + * is invoked to produce the cloned value. If `customizer` returns `undefined`, + * cloning is handled by the method instead. The `customizer` is invoked with + * up to four arguments; (value [, index|key, object, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the cloned value. + * @see _.cloneDeepWith + * @example + * + * function customizer(value) { + *   if (_.isElement(value)) { + *     return value.cloneNode(false); + *   } + * } + * + * var el = _.cloneWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 0 + */ +function cloneWith(value, customizer) { +  customizer = typeof customizer == 'function' ? customizer : undefined; +  return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); +} + +module.exports = cloneWith; diff --git a/node_modules/lodash/collection.js b/node_modules/lodash/collection.js new file mode 100644 index 0000000..77fe837 --- /dev/null +++ b/node_modules/lodash/collection.js @@ -0,0 +1,30 @@ +module.exports = { +  'countBy': require('./countBy'), +  'each': require('./each'), +  'eachRight': require('./eachRight'), +  'every': require('./every'), +  'filter': require('./filter'), +  'find': require('./find'), +  'findLast': require('./findLast'), +  'flatMap': require('./flatMap'), +  'flatMapDeep': require('./flatMapDeep'), +  'flatMapDepth': require('./flatMapDepth'), +  'forEach': require('./forEach'), +  'forEachRight': require('./forEachRight'), +  'groupBy': require('./groupBy'), +  'includes': require('./includes'), +  'invokeMap': require('./invokeMap'), +  'keyBy': require('./keyBy'), +  'map': require('./map'), +  'orderBy': require('./orderBy'), +  'partition': require('./partition'), +  'reduce': require('./reduce'), +  'reduceRight': require('./reduceRight'), +  'reject': require('./reject'), +  'sample': require('./sample'), +  'sampleSize': require('./sampleSize'), +  'shuffle': require('./shuffle'), +  'size': require('./size'), +  'some': require('./some'), +  'sortBy': require('./sortBy') +}; diff --git a/node_modules/lodash/commit.js b/node_modules/lodash/commit.js new file mode 100644 index 0000000..fe4db71 --- /dev/null +++ b/node_modules/lodash/commit.js @@ -0,0 +1,33 @@ +var LodashWrapper = require('./_LodashWrapper'); + +/** + * Executes the chain sequence and returns the wrapped result. + * + * @name commit + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapped = wrapped.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapped.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] + */ +function wrapperCommit() { +  return new LodashWrapper(this.value(), this.__chain__); +} + +module.exports = wrapperCommit; diff --git a/node_modules/lodash/compact.js b/node_modules/lodash/compact.js new file mode 100644 index 0000000..031fab4 --- /dev/null +++ b/node_modules/lodash/compact.js @@ -0,0 +1,31 @@ +/** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ +function compact(array) { +  var index = -1, +      length = array == null ? 0 : array.length, +      resIndex = 0, +      result = []; + +  while (++index < length) { +    var value = array[index]; +    if (value) { +      result[resIndex++] = value; +    } +  } +  return result; +} + +module.exports = compact; diff --git a/node_modules/lodash/concat.js b/node_modules/lodash/concat.js new file mode 100644 index 0000000..1da48a4 --- /dev/null +++ b/node_modules/lodash/concat.js @@ -0,0 +1,43 @@ +var arrayPush = require('./_arrayPush'), +    baseFlatten = require('./_baseFlatten'), +    copyArray = require('./_copyArray'), +    isArray = require('./isArray'); + +/** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ +function concat() { +  var length = arguments.length; +  if (!length) { +    return []; +  } +  var args = Array(length - 1), +      array = arguments[0], +      index = length; + +  while (index--) { +    args[index - 1] = arguments[index]; +  } +  return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); +} + +module.exports = concat; diff --git a/node_modules/lodash/cond.js b/node_modules/lodash/cond.js new file mode 100644 index 0000000..6455598 --- /dev/null +++ b/node_modules/lodash/cond.js @@ -0,0 +1,60 @@ +var apply = require('./_apply'), +    arrayMap = require('./_arrayMap'), +    baseIteratee = require('./_baseIteratee'), +    baseRest = require('./_baseRest'); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that iterates over `pairs` and invokes the corresponding + * function of the first predicate to return truthy. The predicate-function + * pairs are invoked with the `this` binding and arguments of the created + * function. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Util + * @param {Array} pairs The predicate-function pairs. + * @returns {Function} Returns the new composite function. + * @example + * + * var func = _.cond([ + *   [_.matches({ 'a': 1 }),           _.constant('matches A')], + *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')], + *   [_.stubTrue,                      _.constant('no match')] + * ]); + * + * func({ 'a': 1, 'b': 2 }); + * // => 'matches A' + * + * func({ 'a': 0, 'b': 1 }); + * // => 'matches B' + * + * func({ 'a': '1', 'b': '2' }); + * // => 'no match' + */ +function cond(pairs) { +  var length = pairs == null ? 0 : pairs.length, +      toIteratee = baseIteratee; + +  pairs = !length ? [] : arrayMap(pairs, function(pair) { +    if (typeof pair[1] != 'function') { +      throw new TypeError(FUNC_ERROR_TEXT); +    } +    return [toIteratee(pair[0]), pair[1]]; +  }); + +  return baseRest(function(args) { +    var index = -1; +    while (++index < length) { +      var pair = pairs[index]; +      if (apply(pair[0], this, args)) { +        return apply(pair[1], this, args); +      } +    } +  }); +} + +module.exports = cond; diff --git a/node_modules/lodash/conforms.js b/node_modules/lodash/conforms.js new file mode 100644 index 0000000..5501a94 --- /dev/null +++ b/node_modules/lodash/conforms.js @@ -0,0 +1,35 @@ +var baseClone = require('./_baseClone'), +    baseConforms = require('./_baseConforms'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1; + +/** + * Creates a function that invokes the predicate properties of `source` with + * the corresponding property values of a given object, returning `true` if + * all predicates return truthy, else `false`. + * + * **Note:** The created function is equivalent to `_.conformsTo` with + * `source` partially applied. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Util + * @param {Object} source The object of property predicates to conform to. + * @returns {Function} Returns the new spec function. + * @example + * + * var objects = [ + *   { 'a': 2, 'b': 1 }, + *   { 'a': 1, 'b': 2 } + * ]; + * + * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } })); + * // => [{ 'a': 1, 'b': 2 }] + */ +function conforms(source) { +  return baseConforms(baseClone(source, CLONE_DEEP_FLAG)); +} + +module.exports = conforms; diff --git a/node_modules/lodash/conformsTo.js b/node_modules/lodash/conformsTo.js new file mode 100644 index 0000000..b8a93eb --- /dev/null +++ b/node_modules/lodash/conformsTo.js @@ -0,0 +1,32 @@ +var baseConformsTo = require('./_baseConformsTo'), +    keys = require('./keys'); + +/** + * Checks if `object` conforms to `source` by invoking the predicate + * properties of `source` with the corresponding property values of `object`. + * + * **Note:** This method is equivalent to `_.conforms` when `source` is + * partially applied. + * + * @static + * @memberOf _ + * @since 4.14.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); + * // => true + * + * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); + * // => false + */ +function conformsTo(object, source) { +  return source == null || baseConformsTo(object, source, keys(source)); +} + +module.exports = conformsTo; diff --git a/node_modules/lodash/constant.js b/node_modules/lodash/constant.js new file mode 100644 index 0000000..655ece3 --- /dev/null +++ b/node_modules/lodash/constant.js @@ -0,0 +1,26 @@ +/** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ +function constant(value) { +  return function() { +    return value; +  }; +} + +module.exports = constant; diff --git a/node_modules/lodash/core.js b/node_modules/lodash/core.js new file mode 100644 index 0000000..be1d567 --- /dev/null +++ b/node_modules/lodash/core.js @@ -0,0 +1,3877 @@ +/** + * @license + * Lodash (Custom Build) <https://lodash.com/> + * Build: `lodash core -o ./dist/lodash.core.js` + * Copyright OpenJS Foundation and other contributors <https://openjsf.org/> + * Released under MIT license <https://lodash.com/license> + * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ +;(function() { + +  /** Used as a safe reference for `undefined` in pre-ES5 environments. */ +  var undefined; + +  /** Used as the semantic version number. */ +  var VERSION = '4.17.21'; + +  /** Error message constants. */ +  var FUNC_ERROR_TEXT = 'Expected a function'; + +  /** Used to compose bitmasks for value comparisons. */ +  var COMPARE_PARTIAL_FLAG = 1, +      COMPARE_UNORDERED_FLAG = 2; + +  /** Used to compose bitmasks for function metadata. */ +  var WRAP_BIND_FLAG = 1, +      WRAP_PARTIAL_FLAG = 32; + +  /** Used as references for various `Number` constants. */ +  var INFINITY = 1 / 0, +      MAX_SAFE_INTEGER = 9007199254740991; + +  /** `Object#toString` result references. */ +  var argsTag = '[object Arguments]', +      arrayTag = '[object Array]', +      asyncTag = '[object AsyncFunction]', +      boolTag = '[object Boolean]', +      dateTag = '[object Date]', +      errorTag = '[object Error]', +      funcTag = '[object Function]', +      genTag = '[object GeneratorFunction]', +      numberTag = '[object Number]', +      objectTag = '[object Object]', +      proxyTag = '[object Proxy]', +      regexpTag = '[object RegExp]', +      stringTag = '[object String]'; + +  /** Used to match HTML entities and HTML characters. */ +  var reUnescapedHtml = /[&<>"']/g, +      reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + +  /** Used to detect unsigned integer values. */ +  var reIsUint = /^(?:0|[1-9]\d*)$/; + +  /** Used to map characters to HTML entities. */ +  var htmlEscapes = { +    '&': '&', +    '<': '<', +    '>': '>', +    '"': '"', +    "'": ''' +  }; + +  /** Detect free variable `global` from Node.js. */ +  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +  /** Detect free variable `self`. */ +  var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +  /** Used as a reference to the global object. */ +  var root = freeGlobal || freeSelf || Function('return this')(); + +  /** Detect free variable `exports`. */ +  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +  /** Detect free variable `module`. */ +  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +  /*--------------------------------------------------------------------------*/ + +  /** +   * Appends the elements of `values` to `array`. +   * +   * @private +   * @param {Array} array The array to modify. +   * @param {Array} values The values to append. +   * @returns {Array} Returns `array`. +   */ +  function arrayPush(array, values) { +    array.push.apply(array, values); +    return array; +  } + +  /** +   * The base implementation of `_.findIndex` and `_.findLastIndex` without +   * support for iteratee shorthands. +   * +   * @private +   * @param {Array} array The array to inspect. +   * @param {Function} predicate The function invoked per iteration. +   * @param {number} fromIndex The index to search from. +   * @param {boolean} [fromRight] Specify iterating from right to left. +   * @returns {number} Returns the index of the matched value, else `-1`. +   */ +  function baseFindIndex(array, predicate, fromIndex, fromRight) { +    var length = array.length, +        index = fromIndex + (fromRight ? 1 : -1); + +    while ((fromRight ? index-- : ++index < length)) { +      if (predicate(array[index], index, array)) { +        return index; +      } +    } +    return -1; +  } + +  /** +   * The base implementation of `_.property` without support for deep paths. +   * +   * @private +   * @param {string} key The key of the property to get. +   * @returns {Function} Returns the new accessor function. +   */ +  function baseProperty(key) { +    return function(object) { +      return object == null ? undefined : object[key]; +    }; +  } + +  /** +   * The base implementation of `_.propertyOf` without support for deep paths. +   * +   * @private +   * @param {Object} object The object to query. +   * @returns {Function} Returns the new accessor function. +   */ +  function basePropertyOf(object) { +    return function(key) { +      return object == null ? undefined : object[key]; +    }; +  } + +  /** +   * The base implementation of `_.reduce` and `_.reduceRight`, without support +   * for iteratee shorthands, which iterates over `collection` using `eachFunc`. +   * +   * @private +   * @param {Array|Object} collection The collection to iterate over. +   * @param {Function} iteratee The function invoked per iteration. +   * @param {*} accumulator The initial value. +   * @param {boolean} initAccum Specify using the first or last element of +   *  `collection` as the initial value. +   * @param {Function} eachFunc The function to iterate over `collection`. +   * @returns {*} Returns the accumulated value. +   */ +  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { +    eachFunc(collection, function(value, index, collection) { +      accumulator = initAccum +        ? (initAccum = false, value) +        : iteratee(accumulator, value, index, collection); +    }); +    return accumulator; +  } + +  /** +   * The base implementation of `_.values` and `_.valuesIn` which creates an +   * array of `object` property values corresponding to the property names +   * of `props`. +   * +   * @private +   * @param {Object} object The object to query. +   * @param {Array} props The property names to get values for. +   * @returns {Object} Returns the array of property values. +   */ +  function baseValues(object, props) { +    return baseMap(props, function(key) { +      return object[key]; +    }); +  } + +  /** +   * Used by `_.escape` to convert characters to HTML entities. +   * +   * @private +   * @param {string} chr The matched character to escape. +   * @returns {string} Returns the escaped character. +   */ +  var escapeHtmlChar = basePropertyOf(htmlEscapes); + +  /** +   * Creates a unary function that invokes `func` with its argument transformed. +   * +   * @private +   * @param {Function} func The function to wrap. +   * @param {Function} transform The argument transform. +   * @returns {Function} Returns the new function. +   */ +  function overArg(func, transform) { +    return function(arg) { +      return func(transform(arg)); +    }; +  } + +  /*--------------------------------------------------------------------------*/ + +  /** Used for built-in method references. */ +  var arrayProto = Array.prototype, +      objectProto = Object.prototype; + +  /** Used to check objects for own properties. */ +  var hasOwnProperty = objectProto.hasOwnProperty; + +  /** Used to generate unique IDs. */ +  var idCounter = 0; + +  /** +   * Used to resolve the +   * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) +   * of values. +   */ +  var nativeObjectToString = objectProto.toString; + +  /** Used to restore the original `_` reference in `_.noConflict`. */ +  var oldDash = root._; + +  /** Built-in value references. */ +  var objectCreate = Object.create, +      propertyIsEnumerable = objectProto.propertyIsEnumerable; + +  /* Built-in method references for those with the same name as other `lodash` methods. */ +  var nativeIsFinite = root.isFinite, +      nativeKeys = overArg(Object.keys, Object), +      nativeMax = Math.max; + +  /*------------------------------------------------------------------------*/ + +  /** +   * Creates a `lodash` object which wraps `value` to enable implicit method +   * chain sequences. Methods that operate on and return arrays, collections, +   * and functions can be chained together. Methods that retrieve a single value +   * or may return a primitive value will automatically end the chain sequence +   * and return the unwrapped value. Otherwise, the value must be unwrapped +   * with `_#value`. +   * +   * Explicit chain sequences, which must be unwrapped with `_#value`, may be +   * enabled using `_.chain`. +   * +   * The execution of chained methods is lazy, that is, it's deferred until +   * `_#value` is implicitly or explicitly called. +   * +   * Lazy evaluation allows several methods to support shortcut fusion. +   * Shortcut fusion is an optimization to merge iteratee calls; this avoids +   * the creation of intermediate arrays and can greatly reduce the number of +   * iteratee executions. Sections of a chain sequence qualify for shortcut +   * fusion if the section is applied to an array and iteratees accept only +   * one argument. The heuristic for whether a section qualifies for shortcut +   * fusion is subject to change. +   * +   * Chaining is supported in custom builds as long as the `_#value` method is +   * directly or indirectly included in the build. +   * +   * In addition to lodash methods, wrappers have `Array` and `String` methods. +   * +   * The wrapper `Array` methods are: +   * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` +   * +   * The wrapper `String` methods are: +   * `replace` and `split` +   * +   * The wrapper methods that support shortcut fusion are: +   * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, +   * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, +   * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` +   * +   * The chainable wrapper methods are: +   * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, +   * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, +   * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, +   * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, +   * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, +   * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, +   * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, +   * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, +   * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, +   * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, +   * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, +   * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, +   * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, +   * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, +   * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, +   * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, +   * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, +   * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, +   * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, +   * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, +   * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, +   * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, +   * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, +   * `zipObject`, `zipObjectDeep`, and `zipWith` +   * +   * The wrapper methods that are **not** chainable by default are: +   * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, +   * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, +   * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, +   * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, +   * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, +   * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, +   * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, +   * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, +   * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, +   * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, +   * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, +   * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, +   * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, +   * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, +   * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, +   * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, +   * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, +   * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, +   * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, +   * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, +   * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, +   * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, +   * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, +   * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, +   * `upperFirst`, `value`, and `words` +   * +   * @name _ +   * @constructor +   * @category Seq +   * @param {*} value The value to wrap in a `lodash` instance. +   * @returns {Object} Returns the new `lodash` wrapper instance. +   * @example +   * +   * function square(n) { +   *   return n * n; +   * } +   * +   * var wrapped = _([1, 2, 3]); +   * +   * // Returns an unwrapped value. +   * wrapped.reduce(_.add); +   * // => 6 +   * +   * // Returns a wrapped value. +   * var squares = wrapped.map(square); +   * +   * _.isArray(squares); +   * // => false +   * +   * _.isArray(squares.value()); +   * // => true +   */ +  function lodash(value) { +    return value instanceof LodashWrapper +      ? value +      : new LodashWrapper(value); +  } + +  /** +   * The base implementation of `_.create` without support for assigning +   * properties to the created object. +   * +   * @private +   * @param {Object} proto The object to inherit from. +   * @returns {Object} Returns the new object. +   */ +  var baseCreate = (function() { +    function object() {} +    return function(proto) { +      if (!isObject(proto)) { +        return {}; +      } +      if (objectCreate) { +        return objectCreate(proto); +      } +      object.prototype = proto; +      var result = new object; +      object.prototype = undefined; +      return result; +    }; +  }()); + +  /** +   * The base constructor for creating `lodash` wrapper objects. +   * +   * @private +   * @param {*} value The value to wrap. +   * @param {boolean} [chainAll] Enable explicit method chain sequences. +   */ +  function LodashWrapper(value, chainAll) { +    this.__wrapped__ = value; +    this.__actions__ = []; +    this.__chain__ = !!chainAll; +  } + +  LodashWrapper.prototype = baseCreate(lodash.prototype); +  LodashWrapper.prototype.constructor = LodashWrapper; + +  /*------------------------------------------------------------------------*/ + +  /** +   * Assigns `value` to `key` of `object` if the existing value is not equivalent +   * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +   * for equality comparisons. +   * +   * @private +   * @param {Object} object The object to modify. +   * @param {string} key The key of the property to assign. +   * @param {*} value The value to assign. +   */ +  function assignValue(object, key, value) { +    var objValue = object[key]; +    if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || +        (value === undefined && !(key in object))) { +      baseAssignValue(object, key, value); +    } +  } + +  /** +   * The base implementation of `assignValue` and `assignMergeValue` without +   * value checks. +   * +   * @private +   * @param {Object} object The object to modify. +   * @param {string} key The key of the property to assign. +   * @param {*} value The value to assign. +   */ +  function baseAssignValue(object, key, value) { +    object[key] = value; +  } + +  /** +   * The base implementation of `_.delay` and `_.defer` which accepts `args` +   * to provide to `func`. +   * +   * @private +   * @param {Function} func The function to delay. +   * @param {number} wait The number of milliseconds to delay invocation. +   * @param {Array} args The arguments to provide to `func`. +   * @returns {number|Object} Returns the timer id or timeout object. +   */ +  function baseDelay(func, wait, args) { +    if (typeof func != 'function') { +      throw new TypeError(FUNC_ERROR_TEXT); +    } +    return setTimeout(function() { func.apply(undefined, args); }, wait); +  } + +  /** +   * The base implementation of `_.forEach` without support for iteratee shorthands. +   * +   * @private +   * @param {Array|Object} collection The collection to iterate over. +   * @param {Function} iteratee The function invoked per iteration. +   * @returns {Array|Object} Returns `collection`. +   */ +  var baseEach = createBaseEach(baseForOwn); + +  /** +   * The base implementation of `_.every` without support for iteratee shorthands. +   * +   * @private +   * @param {Array|Object} collection The collection to iterate over. +   * @param {Function} predicate The function invoked per iteration. +   * @returns {boolean} Returns `true` if all elements pass the predicate check, +   *  else `false` +   */ +  function baseEvery(collection, predicate) { +    var result = true; +    baseEach(collection, function(value, index, collection) { +      result = !!predicate(value, index, collection); +      return result; +    }); +    return result; +  } + +  /** +   * The base implementation of methods like `_.max` and `_.min` which accepts a +   * `comparator` to determine the extremum value. +   * +   * @private +   * @param {Array} array The array to iterate over. +   * @param {Function} iteratee The iteratee invoked per iteration. +   * @param {Function} comparator The comparator used to compare values. +   * @returns {*} Returns the extremum value. +   */ +  function baseExtremum(array, iteratee, comparator) { +    var index = -1, +        length = array.length; + +    while (++index < length) { +      var value = array[index], +          current = iteratee(value); + +      if (current != null && (computed === undefined +            ? (current === current && !false) +            : comparator(current, computed) +          )) { +        var computed = current, +            result = value; +      } +    } +    return result; +  } + +  /** +   * The base implementation of `_.filter` without support for iteratee shorthands. +   * +   * @private +   * @param {Array|Object} collection The collection to iterate over. +   * @param {Function} predicate The function invoked per iteration. +   * @returns {Array} Returns the new filtered array. +   */ +  function baseFilter(collection, predicate) { +    var result = []; +    baseEach(collection, function(value, index, collection) { +      if (predicate(value, index, collection)) { +        result.push(value); +      } +    }); +    return result; +  } + +  /** +   * The base implementation of `_.flatten` with support for restricting flattening. +   * +   * @private +   * @param {Array} array The array to flatten. +   * @param {number} depth The maximum recursion depth. +   * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. +   * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. +   * @param {Array} [result=[]] The initial result value. +   * @returns {Array} Returns the new flattened array. +   */ +  function baseFlatten(array, depth, predicate, isStrict, result) { +    var index = -1, +        length = array.length; + +    predicate || (predicate = isFlattenable); +    result || (result = []); + +    while (++index < length) { +      var value = array[index]; +      if (depth > 0 && predicate(value)) { +        if (depth > 1) { +          // Recursively flatten arrays (susceptible to call stack limits). +          baseFlatten(value, depth - 1, predicate, isStrict, result); +        } else { +          arrayPush(result, value); +        } +      } else if (!isStrict) { +        result[result.length] = value; +      } +    } +    return result; +  } + +  /** +   * The base implementation of `baseForOwn` which iterates over `object` +   * properties returned by `keysFunc` and invokes `iteratee` for each property. +   * Iteratee functions may exit iteration early by explicitly returning `false`. +   * +   * @private +   * @param {Object} object The object to iterate over. +   * @param {Function} iteratee The function invoked per iteration. +   * @param {Function} keysFunc The function to get the keys of `object`. +   * @returns {Object} Returns `object`. +   */ +  var baseFor = createBaseFor(); + +  /** +   * The base implementation of `_.forOwn` without support for iteratee shorthands. +   * +   * @private +   * @param {Object} object The object to iterate over. +   * @param {Function} iteratee The function invoked per iteration. +   * @returns {Object} Returns `object`. +   */ +  function baseForOwn(object, iteratee) { +    return object && baseFor(object, iteratee, keys); +  } + +  /** +   * The base implementation of `_.functions` which creates an array of +   * `object` function property names filtered from `props`. +   * +   * @private +   * @param {Object} object The object to inspect. +   * @param {Array} props The property names to filter. +   * @returns {Array} Returns the function names. +   */ +  function baseFunctions(object, props) { +    return baseFilter(props, function(key) { +      return isFunction(object[key]); +    }); +  } + +  /** +   * The base implementation of `getTag` without fallbacks for buggy environments. +   * +   * @private +   * @param {*} value The value to query. +   * @returns {string} Returns the `toStringTag`. +   */ +  function baseGetTag(value) { +    return objectToString(value); +  } + +  /** +   * The base implementation of `_.gt` which doesn't coerce arguments. +   * +   * @private +   * @param {*} value The value to compare. +   * @param {*} other The other value to compare. +   * @returns {boolean} Returns `true` if `value` is greater than `other`, +   *  else `false`. +   */ +  function baseGt(value, other) { +    return value > other; +  } + +  /** +   * The base implementation of `_.isArguments`. +   * +   * @private +   * @param {*} value The value to check. +   * @returns {boolean} Returns `true` if `value` is an `arguments` object, +   */ +  var baseIsArguments = noop; + +  /** +   * The base implementation of `_.isDate` without Node.js optimizations. +   * +   * @private +   * @param {*} value The value to check. +   * @returns {boolean} Returns `true` if `value` is a date object, else `false`. +   */ +  function baseIsDate(value) { +    return isObjectLike(value) && baseGetTag(value) == dateTag; +  } + +  /** +   * The base implementation of `_.isEqual` which supports partial comparisons +   * and tracks traversed objects. +   * +   * @private +   * @param {*} value The value to compare. +   * @param {*} other The other value to compare. +   * @param {boolean} bitmask The bitmask flags. +   *  1 - Unordered comparison +   *  2 - Partial comparison +   * @param {Function} [customizer] The function to customize comparisons. +   * @param {Object} [stack] Tracks traversed `value` and `other` objects. +   * @returns {boolean} Returns `true` if the values are equivalent, else `false`. +   */ +  function baseIsEqual(value, other, bitmask, customizer, stack) { +    if (value === other) { +      return true; +    } +    if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { +      return value !== value && other !== other; +    } +    return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +  } + +  /** +   * A specialized version of `baseIsEqual` for arrays and objects which performs +   * deep comparisons and tracks traversed objects enabling objects with circular +   * references to be compared. +   * +   * @private +   * @param {Object} object The object to compare. +   * @param {Object} other The other object to compare. +   * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. +   * @param {Function} customizer The function to customize comparisons. +   * @param {Function} equalFunc The function to determine equivalents of values. +   * @param {Object} [stack] Tracks traversed `object` and `other` objects. +   * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. +   */ +  function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { +    var objIsArr = isArray(object), +        othIsArr = isArray(other), +        objTag = objIsArr ? arrayTag : baseGetTag(object), +        othTag = othIsArr ? arrayTag : baseGetTag(other); + +    objTag = objTag == argsTag ? objectTag : objTag; +    othTag = othTag == argsTag ? objectTag : othTag; + +    var objIsObj = objTag == objectTag, +        othIsObj = othTag == objectTag, +        isSameTag = objTag == othTag; + +    stack || (stack = []); +    var objStack = find(stack, function(entry) { +      return entry[0] == object; +    }); +    var othStack = find(stack, function(entry) { +      return entry[0] == other; +    }); +    if (objStack && othStack) { +      return objStack[1] == other; +    } +    stack.push([object, other]); +    stack.push([other, object]); +    if (isSameTag && !objIsObj) { +      var result = (objIsArr) +        ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) +        : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); +      stack.pop(); +      return result; +    } +    if (!(bitmask & COMPARE_PARTIAL_FLAG)) { +      var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), +          othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + +      if (objIsWrapped || othIsWrapped) { +        var objUnwrapped = objIsWrapped ? object.value() : object, +            othUnwrapped = othIsWrapped ? other.value() : other; + +        var result = equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); +        stack.pop(); +        return result; +      } +    } +    if (!isSameTag) { +      return false; +    } +    var result = equalObjects(object, other, bitmask, customizer, equalFunc, stack); +    stack.pop(); +    return result; +  } + +  /** +   * The base implementation of `_.isRegExp` without Node.js optimizations. +   * +   * @private +   * @param {*} value The value to check. +   * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. +   */ +  function baseIsRegExp(value) { +    return isObjectLike(value) && baseGetTag(value) == regexpTag; +  } + +  /** +   * The base implementation of `_.iteratee`. +   * +   * @private +   * @param {*} [value=_.identity] The value to convert to an iteratee. +   * @returns {Function} Returns the iteratee. +   */ +  function baseIteratee(func) { +    if (typeof func == 'function') { +      return func; +    } +    if (func == null) { +      return identity; +    } +    return (typeof func == 'object' ? baseMatches : baseProperty)(func); +  } + +  /** +   * The base implementation of `_.lt` which doesn't coerce arguments. +   * +   * @private +   * @param {*} value The value to compare. +   * @param {*} other The other value to compare. +   * @returns {boolean} Returns `true` if `value` is less than `other`, +   *  else `false`. +   */ +  function baseLt(value, other) { +    return value < other; +  } + +  /** +   * The base implementation of `_.map` without support for iteratee shorthands. +   * +   * @private +   * @param {Array|Object} collection The collection to iterate over. +   * @param {Function} iteratee The function invoked per iteration. +   * @returns {Array} Returns the new mapped array. +   */ +  function baseMap(collection, iteratee) { +    var index = -1, +        result = isArrayLike(collection) ? Array(collection.length) : []; + +    baseEach(collection, function(value, key, collection) { +      result[++index] = iteratee(value, key, collection); +    }); +    return result; +  } + +  /** +   * The base implementation of `_.matches` which doesn't clone `source`. +   * +   * @private +   * @param {Object} source The object of property values to match. +   * @returns {Function} Returns the new spec function. +   */ +  function baseMatches(source) { +    var props = nativeKeys(source); +    return function(object) { +      var length = props.length; +      if (object == null) { +        return !length; +      } +      object = Object(object); +      while (length--) { +        var key = props[length]; +        if (!(key in object && +              baseIsEqual(source[key], object[key], COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG) +            )) { +          return false; +        } +      } +      return true; +    }; +  } + +  /** +   * The base implementation of `_.pick` without support for individual +   * property identifiers. +   * +   * @private +   * @param {Object} object The source object. +   * @param {string[]} paths The property paths to pick. +   * @returns {Object} Returns the new object. +   */ +  function basePick(object, props) { +    object = Object(object); +    return reduce(props, function(result, key) { +      if (key in object) { +        result[key] = object[key]; +      } +      return result; +    }, {}); +  } + +  /** +   * The base implementation of `_.rest` which doesn't validate or coerce arguments. +   * +   * @private +   * @param {Function} func The function to apply a rest parameter to. +   * @param {number} [start=func.length-1] The start position of the rest parameter. +   * @returns {Function} Returns the new function. +   */ +  function baseRest(func, start) { +    return setToString(overRest(func, start, identity), func + ''); +  } + +  /** +   * The base implementation of `_.slice` without an iteratee call guard. +   * +   * @private +   * @param {Array} array The array to slice. +   * @param {number} [start=0] The start position. +   * @param {number} [end=array.length] The end position. +   * @returns {Array} Returns the slice of `array`. +   */ +  function baseSlice(array, start, end) { +    var index = -1, +        length = array.length; + +    if (start < 0) { +      start = -start > length ? 0 : (length + start); +    } +    end = end > length ? length : end; +    if (end < 0) { +      end += length; +    } +    length = start > end ? 0 : ((end - start) >>> 0); +    start >>>= 0; + +    var result = Array(length); +    while (++index < length) { +      result[index] = array[index + start]; +    } +    return result; +  } + +  /** +   * Copies the values of `source` to `array`. +   * +   * @private +   * @param {Array} source The array to copy values from. +   * @param {Array} [array=[]] The array to copy values to. +   * @returns {Array} Returns `array`. +   */ +  function copyArray(source) { +    return baseSlice(source, 0, source.length); +  } + +  /** +   * The base implementation of `_.some` without support for iteratee shorthands. +   * +   * @private +   * @param {Array|Object} collection The collection to iterate over. +   * @param {Function} predicate The function invoked per iteration. +   * @returns {boolean} Returns `true` if any element passes the predicate check, +   *  else `false`. +   */ +  function baseSome(collection, predicate) { +    var result; + +    baseEach(collection, function(value, index, collection) { +      result = predicate(value, index, collection); +      return !result; +    }); +    return !!result; +  } + +  /** +   * The base implementation of `wrapperValue` which returns the result of +   * performing a sequence of actions on the unwrapped `value`, where each +   * successive action is supplied the return value of the previous. +   * +   * @private +   * @param {*} value The unwrapped value. +   * @param {Array} actions Actions to perform to resolve the unwrapped value. +   * @returns {*} Returns the resolved value. +   */ +  function baseWrapperValue(value, actions) { +    var result = value; +    return reduce(actions, function(result, action) { +      return action.func.apply(action.thisArg, arrayPush([result], action.args)); +    }, result); +  } + +  /** +   * Compares values to sort them in ascending order. +   * +   * @private +   * @param {*} value The value to compare. +   * @param {*} other The other value to compare. +   * @returns {number} Returns the sort order indicator for `value`. +   */ +  function compareAscending(value, other) { +    if (value !== other) { +      var valIsDefined = value !== undefined, +          valIsNull = value === null, +          valIsReflexive = value === value, +          valIsSymbol = false; + +      var othIsDefined = other !== undefined, +          othIsNull = other === null, +          othIsReflexive = other === other, +          othIsSymbol = false; + +      if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || +          (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || +          (valIsNull && othIsDefined && othIsReflexive) || +          (!valIsDefined && othIsReflexive) || +          !valIsReflexive) { +        return 1; +      } +      if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || +          (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || +          (othIsNull && valIsDefined && valIsReflexive) || +          (!othIsDefined && valIsReflexive) || +          !othIsReflexive) { +        return -1; +      } +    } +    return 0; +  } + +  /** +   * Copies properties of `source` to `object`. +   * +   * @private +   * @param {Object} source The object to copy properties from. +   * @param {Array} props The property identifiers to copy. +   * @param {Object} [object={}] The object to copy properties to. +   * @param {Function} [customizer] The function to customize copied values. +   * @returns {Object} Returns `object`. +   */ +  function copyObject(source, props, object, customizer) { +    var isNew = !object; +    object || (object = {}); + +    var index = -1, +        length = props.length; + +    while (++index < length) { +      var key = props[index]; + +      var newValue = customizer +        ? customizer(object[key], source[key], key, object, source) +        : undefined; + +      if (newValue === undefined) { +        newValue = source[key]; +      } +      if (isNew) { +        baseAssignValue(object, key, newValue); +      } else { +        assignValue(object, key, newValue); +      } +    } +    return object; +  } + +  /** +   * Creates a function like `_.assign`. +   * +   * @private +   * @param {Function} assigner The function to assign values. +   * @returns {Function} Returns the new assigner function. +   */ +  function createAssigner(assigner) { +    return baseRest(function(object, sources) { +      var index = -1, +          length = sources.length, +          customizer = length > 1 ? sources[length - 1] : undefined; + +      customizer = (assigner.length > 3 && typeof customizer == 'function') +        ? (length--, customizer) +        : undefined; + +      object = Object(object); +      while (++index < length) { +        var source = sources[index]; +        if (source) { +          assigner(object, source, index, customizer); +        } +      } +      return object; +    }); +  } + +  /** +   * Creates a `baseEach` or `baseEachRight` function. +   * +   * @private +   * @param {Function} eachFunc The function to iterate over a collection. +   * @param {boolean} [fromRight] Specify iterating from right to left. +   * @returns {Function} Returns the new base function. +   */ +  function createBaseEach(eachFunc, fromRight) { +    return function(collection, iteratee) { +      if (collection == null) { +        return collection; +      } +      if (!isArrayLike(collection)) { +        return eachFunc(collection, iteratee); +      } +      var length = collection.length, +          index = fromRight ? length : -1, +          iterable = Object(collection); + +      while ((fromRight ? index-- : ++index < length)) { +        if (iteratee(iterable[index], index, iterable) === false) { +          break; +        } +      } +      return collection; +    }; +  } + +  /** +   * Creates a base function for methods like `_.forIn` and `_.forOwn`. +   * +   * @private +   * @param {boolean} [fromRight] Specify iterating from right to left. +   * @returns {Function} Returns the new base function. +   */ +  function createBaseFor(fromRight) { +    return function(object, iteratee, keysFunc) { +      var index = -1, +          iterable = Object(object), +          props = keysFunc(object), +          length = props.length; + +      while (length--) { +        var key = props[fromRight ? length : ++index]; +        if (iteratee(iterable[key], key, iterable) === false) { +          break; +        } +      } +      return object; +    }; +  } + +  /** +   * Creates a function that produces an instance of `Ctor` regardless of +   * whether it was invoked as part of a `new` expression or by `call` or `apply`. +   * +   * @private +   * @param {Function} Ctor The constructor to wrap. +   * @returns {Function} Returns the new wrapped function. +   */ +  function createCtor(Ctor) { +    return function() { +      // Use a `switch` statement to work with class constructors. See +      // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist +      // for more details. +      var args = arguments; +      var thisBinding = baseCreate(Ctor.prototype), +          result = Ctor.apply(thisBinding, args); + +      // Mimic the constructor's `return` behavior. +      // See https://es5.github.io/#x13.2.2 for more details. +      return isObject(result) ? result : thisBinding; +    }; +  } + +  /** +   * Creates a `_.find` or `_.findLast` function. +   * +   * @private +   * @param {Function} findIndexFunc The function to find the collection index. +   * @returns {Function} Returns the new find function. +   */ +  function createFind(findIndexFunc) { +    return function(collection, predicate, fromIndex) { +      var iterable = Object(collection); +      if (!isArrayLike(collection)) { +        var iteratee = baseIteratee(predicate, 3); +        collection = keys(collection); +        predicate = function(key) { return iteratee(iterable[key], key, iterable); }; +      } +      var index = findIndexFunc(collection, predicate, fromIndex); +      return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; +    }; +  } + +  /** +   * Creates a function that wraps `func` to invoke it with the `this` binding +   * of `thisArg` and `partials` prepended to the arguments it receives. +   * +   * @private +   * @param {Function} func The function to wrap. +   * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +   * @param {*} thisArg The `this` binding of `func`. +   * @param {Array} partials The arguments to prepend to those provided to +   *  the new function. +   * @returns {Function} Returns the new wrapped function. +   */ +  function createPartial(func, bitmask, thisArg, partials) { +    if (typeof func != 'function') { +      throw new TypeError(FUNC_ERROR_TEXT); +    } +    var isBind = bitmask & WRAP_BIND_FLAG, +        Ctor = createCtor(func); + +    function wrapper() { +      var argsIndex = -1, +          argsLength = arguments.length, +          leftIndex = -1, +          leftLength = partials.length, +          args = Array(leftLength + argsLength), +          fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + +      while (++leftIndex < leftLength) { +        args[leftIndex] = partials[leftIndex]; +      } +      while (argsLength--) { +        args[leftIndex++] = arguments[++argsIndex]; +      } +      return fn.apply(isBind ? thisArg : this, args); +    } +    return wrapper; +  } + +  /** +   * A specialized version of `baseIsEqualDeep` for arrays with support for +   * partial deep comparisons. +   * +   * @private +   * @param {Array} array The array to compare. +   * @param {Array} other The other array to compare. +   * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. +   * @param {Function} customizer The function to customize comparisons. +   * @param {Function} equalFunc The function to determine equivalents of values. +   * @param {Object} stack Tracks traversed `array` and `other` objects. +   * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. +   */ +  function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { +    var isPartial = bitmask & COMPARE_PARTIAL_FLAG, +        arrLength = array.length, +        othLength = other.length; + +    if (arrLength != othLength && !(isPartial && othLength > arrLength)) { +      return false; +    } +    // Check that cyclic values are equal. +    var arrStacked = stack.get(array); +    var othStacked = stack.get(other); +    if (arrStacked && othStacked) { +      return arrStacked == other && othStacked == array; +    } +    var index = -1, +        result = true, +        seen = (bitmask & COMPARE_UNORDERED_FLAG) ? [] : undefined; + +    // Ignore non-index properties. +    while (++index < arrLength) { +      var arrValue = array[index], +          othValue = other[index]; + +      var compared; +      if (compared !== undefined) { +        if (compared) { +          continue; +        } +        result = false; +        break; +      } +      // Recursively compare arrays (susceptible to call stack limits). +      if (seen) { +        if (!baseSome(other, function(othValue, othIndex) { +              if (!indexOf(seen, othIndex) && +                  (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { +                return seen.push(othIndex); +              } +            })) { +          result = false; +          break; +        } +      } else if (!( +            arrValue === othValue || +              equalFunc(arrValue, othValue, bitmask, customizer, stack) +          )) { +        result = false; +        break; +      } +    } +    return result; +  } + +  /** +   * A specialized version of `baseIsEqualDeep` for comparing objects of +   * the same `toStringTag`. +   * +   * **Note:** This function only supports comparing values with tags of +   * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. +   * +   * @private +   * @param {Object} object The object to compare. +   * @param {Object} other The other object to compare. +   * @param {string} tag The `toStringTag` of the objects to compare. +   * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. +   * @param {Function} customizer The function to customize comparisons. +   * @param {Function} equalFunc The function to determine equivalents of values. +   * @param {Object} stack Tracks traversed `object` and `other` objects. +   * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. +   */ +  function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { +    switch (tag) { + +      case boolTag: +      case dateTag: +      case numberTag: +        // Coerce booleans to `1` or `0` and dates to milliseconds. +        // Invalid dates are coerced to `NaN`. +        return eq(+object, +other); + +      case errorTag: +        return object.name == other.name && object.message == other.message; + +      case regexpTag: +      case stringTag: +        // Coerce regexes to strings and treat strings, primitives and objects, +        // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring +        // for more details. +        return object == (other + ''); + +    } +    return false; +  } + +  /** +   * A specialized version of `baseIsEqualDeep` for objects with support for +   * partial deep comparisons. +   * +   * @private +   * @param {Object} object The object to compare. +   * @param {Object} other The other object to compare. +   * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. +   * @param {Function} customizer The function to customize comparisons. +   * @param {Function} equalFunc The function to determine equivalents of values. +   * @param {Object} stack Tracks traversed `object` and `other` objects. +   * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. +   */ +  function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { +    var isPartial = bitmask & COMPARE_PARTIAL_FLAG, +        objProps = keys(object), +        objLength = objProps.length, +        othProps = keys(other), +        othLength = othProps.length; + +    if (objLength != othLength && !isPartial) { +      return false; +    } +    var index = objLength; +    while (index--) { +      var key = objProps[index]; +      if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { +        return false; +      } +    } +    // Check that cyclic values are equal. +    var objStacked = stack.get(object); +    var othStacked = stack.get(other); +    if (objStacked && othStacked) { +      return objStacked == other && othStacked == object; +    } +    var result = true; + +    var skipCtor = isPartial; +    while (++index < objLength) { +      key = objProps[index]; +      var objValue = object[key], +          othValue = other[key]; + +      var compared; +      // Recursively compare objects (susceptible to call stack limits). +      if (!(compared === undefined +            ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) +            : compared +          )) { +        result = false; +        break; +      } +      skipCtor || (skipCtor = key == 'constructor'); +    } +    if (result && !skipCtor) { +      var objCtor = object.constructor, +          othCtor = other.constructor; + +      // Non `Object` object instances with different constructors are not equal. +      if (objCtor != othCtor && +          ('constructor' in object && 'constructor' in other) && +          !(typeof objCtor == 'function' && objCtor instanceof objCtor && +            typeof othCtor == 'function' && othCtor instanceof othCtor)) { +        result = false; +      } +    } +    return result; +  } + +  /** +   * A specialized version of `baseRest` which flattens the rest array. +   * +   * @private +   * @param {Function} func The function to apply a rest parameter to. +   * @returns {Function} Returns the new function. +   */ +  function flatRest(func) { +    return setToString(overRest(func, undefined, flatten), func + ''); +  } + +  /** +   * Checks if `value` is a flattenable `arguments` object or array. +   * +   * @private +   * @param {*} value The value to check. +   * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. +   */ +  function isFlattenable(value) { +    return isArray(value) || isArguments(value); +  } + +  /** +   * Checks if `value` is a valid array-like index. +   * +   * @private +   * @param {*} value The value to check. +   * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. +   * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. +   */ +  function isIndex(value, length) { +    var type = typeof value; +    length = length == null ? MAX_SAFE_INTEGER : length; + +    return !!length && +      (type == 'number' || +        (type != 'symbol' && reIsUint.test(value))) && +          (value > -1 && value % 1 == 0 && value < length); +  } + +  /** +   * Checks if the given arguments are from an iteratee call. +   * +   * @private +   * @param {*} value The potential iteratee value argument. +   * @param {*} index The potential iteratee index or key argument. +   * @param {*} object The potential iteratee object argument. +   * @returns {boolean} Returns `true` if the arguments are from an iteratee call, +   *  else `false`. +   */ +  function isIterateeCall(value, index, object) { +    if (!isObject(object)) { +      return false; +    } +    var type = typeof index; +    if (type == 'number' +          ? (isArrayLike(object) && isIndex(index, object.length)) +          : (type == 'string' && index in object) +        ) { +      return eq(object[index], value); +    } +    return false; +  } + +  /** +   * This function is like +   * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) +   * except that it includes inherited enumerable properties. +   * +   * @private +   * @param {Object} object The object to query. +   * @returns {Array} Returns the array of property names. +   */ +  function nativeKeysIn(object) { +    var result = []; +    if (object != null) { +      for (var key in Object(object)) { +        result.push(key); +      } +    } +    return result; +  } + +  /** +   * Converts `value` to a string using `Object.prototype.toString`. +   * +   * @private +   * @param {*} value The value to convert. +   * @returns {string} Returns the converted string. +   */ +  function objectToString(value) { +    return nativeObjectToString.call(value); +  } + +  /** +   * A specialized version of `baseRest` which transforms the rest array. +   * +   * @private +   * @param {Function} func The function to apply a rest parameter to. +   * @param {number} [start=func.length-1] The start position of the rest parameter. +   * @param {Function} transform The rest array transform. +   * @returns {Function} Returns the new function. +   */ +  function overRest(func, start, transform) { +    start = nativeMax(start === undefined ? (func.length - 1) : start, 0); +    return function() { +      var args = arguments, +          index = -1, +          length = nativeMax(args.length - start, 0), +          array = Array(length); + +      while (++index < length) { +        array[index] = args[start + index]; +      } +      index = -1; +      var otherArgs = Array(start + 1); +      while (++index < start) { +        otherArgs[index] = args[index]; +      } +      otherArgs[start] = transform(array); +      return func.apply(this, otherArgs); +    }; +  } + +  /** +   * Sets the `toString` method of `func` to return `string`. +   * +   * @private +   * @param {Function} func The function to modify. +   * @param {Function} string The `toString` result. +   * @returns {Function} Returns `func`. +   */ +  var setToString = identity; + +  /*------------------------------------------------------------------------*/ + +  /** +   * Creates an array with all falsey values removed. The values `false`, `null`, +   * `0`, `""`, `undefined`, and `NaN` are falsey. +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Array +   * @param {Array} array The array to compact. +   * @returns {Array} Returns the new array of filtered values. +   * @example +   * +   * _.compact([0, 1, false, 2, '', 3]); +   * // => [1, 2, 3] +   */ +  function compact(array) { +    return baseFilter(array, Boolean); +  } + +  /** +   * Creates a new array concatenating `array` with any additional arrays +   * and/or values. +   * +   * @static +   * @memberOf _ +   * @since 4.0.0 +   * @category Array +   * @param {Array} array The array to concatenate. +   * @param {...*} [values] The values to concatenate. +   * @returns {Array} Returns the new concatenated array. +   * @example +   * +   * var array = [1]; +   * var other = _.concat(array, 2, [3], [[4]]); +   * +   * console.log(other); +   * // => [1, 2, 3, [4]] +   * +   * console.log(array); +   * // => [1] +   */ +  function concat() { +    var length = arguments.length; +    if (!length) { +      return []; +    } +    var args = Array(length - 1), +        array = arguments[0], +        index = length; + +    while (index--) { +      args[index - 1] = arguments[index]; +    } +    return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); +  } + +  /** +   * This method is like `_.find` except that it returns the index of the first +   * element `predicate` returns truthy for instead of the element itself. +   * +   * @static +   * @memberOf _ +   * @since 1.1.0 +   * @category Array +   * @param {Array} array The array to inspect. +   * @param {Function} [predicate=_.identity] The function invoked per iteration. +   * @param {number} [fromIndex=0] The index to search from. +   * @returns {number} Returns the index of the found element, else `-1`. +   * @example +   * +   * var users = [ +   *   { 'user': 'barney',  'active': false }, +   *   { 'user': 'fred',    'active': false }, +   *   { 'user': 'pebbles', 'active': true } +   * ]; +   * +   * _.findIndex(users, function(o) { return o.user == 'barney'; }); +   * // => 0 +   * +   * // The `_.matches` iteratee shorthand. +   * _.findIndex(users, { 'user': 'fred', 'active': false }); +   * // => 1 +   * +   * // The `_.matchesProperty` iteratee shorthand. +   * _.findIndex(users, ['active', false]); +   * // => 0 +   * +   * // The `_.property` iteratee shorthand. +   * _.findIndex(users, 'active'); +   * // => 2 +   */ +  function findIndex(array, predicate, fromIndex) { +    var length = array == null ? 0 : array.length; +    if (!length) { +      return -1; +    } +    var index = fromIndex == null ? 0 : toInteger(fromIndex); +    if (index < 0) { +      index = nativeMax(length + index, 0); +    } +    return baseFindIndex(array, baseIteratee(predicate, 3), index); +  } + +  /** +   * Flattens `array` a single level deep. +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Array +   * @param {Array} array The array to flatten. +   * @returns {Array} Returns the new flattened array. +   * @example +   * +   * _.flatten([1, [2, [3, [4]], 5]]); +   * // => [1, 2, [3, [4]], 5] +   */ +  function flatten(array) { +    var length = array == null ? 0 : array.length; +    return length ? baseFlatten(array, 1) : []; +  } + +  /** +   * Recursively flattens `array`. +   * +   * @static +   * @memberOf _ +   * @since 3.0.0 +   * @category Array +   * @param {Array} array The array to flatten. +   * @returns {Array} Returns the new flattened array. +   * @example +   * +   * _.flattenDeep([1, [2, [3, [4]], 5]]); +   * // => [1, 2, 3, 4, 5] +   */ +  function flattenDeep(array) { +    var length = array == null ? 0 : array.length; +    return length ? baseFlatten(array, INFINITY) : []; +  } + +  /** +   * Gets the first element of `array`. +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @alias first +   * @category Array +   * @param {Array} array The array to query. +   * @returns {*} Returns the first element of `array`. +   * @example +   * +   * _.head([1, 2, 3]); +   * // => 1 +   * +   * _.head([]); +   * // => undefined +   */ +  function head(array) { +    return (array && array.length) ? array[0] : undefined; +  } + +  /** +   * Gets the index at which the first occurrence of `value` is found in `array` +   * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +   * for equality comparisons. If `fromIndex` is negative, it's used as the +   * offset from the end of `array`. +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Array +   * @param {Array} array The array to inspect. +   * @param {*} value The value to search for. +   * @param {number} [fromIndex=0] The index to search from. +   * @returns {number} Returns the index of the matched value, else `-1`. +   * @example +   * +   * _.indexOf([1, 2, 1, 2], 2); +   * // => 1 +   * +   * // Search from the `fromIndex`. +   * _.indexOf([1, 2, 1, 2], 2, 2); +   * // => 3 +   */ +  function indexOf(array, value, fromIndex) { +    var length = array == null ? 0 : array.length; +    if (typeof fromIndex == 'number') { +      fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex; +    } else { +      fromIndex = 0; +    } +    var index = (fromIndex || 0) - 1, +        isReflexive = value === value; + +    while (++index < length) { +      var other = array[index]; +      if ((isReflexive ? other === value : other !== other)) { +        return index; +      } +    } +    return -1; +  } + +  /** +   * Gets the last element of `array`. +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Array +   * @param {Array} array The array to query. +   * @returns {*} Returns the last element of `array`. +   * @example +   * +   * _.last([1, 2, 3]); +   * // => 3 +   */ +  function last(array) { +    var length = array == null ? 0 : array.length; +    return length ? array[length - 1] : undefined; +  } + +  /** +   * Creates a slice of `array` from `start` up to, but not including, `end`. +   * +   * **Note:** This method is used instead of +   * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are +   * returned. +   * +   * @static +   * @memberOf _ +   * @since 3.0.0 +   * @category Array +   * @param {Array} array The array to slice. +   * @param {number} [start=0] The start position. +   * @param {number} [end=array.length] The end position. +   * @returns {Array} Returns the slice of `array`. +   */ +  function slice(array, start, end) { +    var length = array == null ? 0 : array.length; +    start = start == null ? 0 : +start; +    end = end === undefined ? length : +end; +    return length ? baseSlice(array, start, end) : []; +  } + +  /*------------------------------------------------------------------------*/ + +  /** +   * Creates a `lodash` wrapper instance that wraps `value` with explicit method +   * chain sequences enabled. The result of such sequences must be unwrapped +   * with `_#value`. +   * +   * @static +   * @memberOf _ +   * @since 1.3.0 +   * @category Seq +   * @param {*} value The value to wrap. +   * @returns {Object} Returns the new `lodash` wrapper instance. +   * @example +   * +   * var users = [ +   *   { 'user': 'barney',  'age': 36 }, +   *   { 'user': 'fred',    'age': 40 }, +   *   { 'user': 'pebbles', 'age': 1 } +   * ]; +   * +   * var youngest = _ +   *   .chain(users) +   *   .sortBy('age') +   *   .map(function(o) { +   *     return o.user + ' is ' + o.age; +   *   }) +   *   .head() +   *   .value(); +   * // => 'pebbles is 1' +   */ +  function chain(value) { +    var result = lodash(value); +    result.__chain__ = true; +    return result; +  } + +  /** +   * This method invokes `interceptor` and returns `value`. The interceptor +   * is invoked with one argument; (value). The purpose of this method is to +   * "tap into" a method chain sequence in order to modify intermediate results. +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Seq +   * @param {*} value The value to provide to `interceptor`. +   * @param {Function} interceptor The function to invoke. +   * @returns {*} Returns `value`. +   * @example +   * +   * _([1, 2, 3]) +   *  .tap(function(array) { +   *    // Mutate input array. +   *    array.pop(); +   *  }) +   *  .reverse() +   *  .value(); +   * // => [2, 1] +   */ +  function tap(value, interceptor) { +    interceptor(value); +    return value; +  } + +  /** +   * This method is like `_.tap` except that it returns the result of `interceptor`. +   * The purpose of this method is to "pass thru" values replacing intermediate +   * results in a method chain sequence. +   * +   * @static +   * @memberOf _ +   * @since 3.0.0 +   * @category Seq +   * @param {*} value The value to provide to `interceptor`. +   * @param {Function} interceptor The function to invoke. +   * @returns {*} Returns the result of `interceptor`. +   * @example +   * +   * _('  abc  ') +   *  .chain() +   *  .trim() +   *  .thru(function(value) { +   *    return [value]; +   *  }) +   *  .value(); +   * // => ['abc'] +   */ +  function thru(value, interceptor) { +    return interceptor(value); +  } + +  /** +   * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. +   * +   * @name chain +   * @memberOf _ +   * @since 0.1.0 +   * @category Seq +   * @returns {Object} Returns the new `lodash` wrapper instance. +   * @example +   * +   * var users = [ +   *   { 'user': 'barney', 'age': 36 }, +   *   { 'user': 'fred',   'age': 40 } +   * ]; +   * +   * // A sequence without explicit chaining. +   * _(users).head(); +   * // => { 'user': 'barney', 'age': 36 } +   * +   * // A sequence with explicit chaining. +   * _(users) +   *   .chain() +   *   .head() +   *   .pick('user') +   *   .value(); +   * // => { 'user': 'barney' } +   */ +  function wrapperChain() { +    return chain(this); +  } + +  /** +   * Executes the chain sequence to resolve the unwrapped value. +   * +   * @name value +   * @memberOf _ +   * @since 0.1.0 +   * @alias toJSON, valueOf +   * @category Seq +   * @returns {*} Returns the resolved unwrapped value. +   * @example +   * +   * _([1, 2, 3]).value(); +   * // => [1, 2, 3] +   */ +  function wrapperValue() { +    return baseWrapperValue(this.__wrapped__, this.__actions__); +  } + +  /*------------------------------------------------------------------------*/ + +  /** +   * Checks if `predicate` returns truthy for **all** elements of `collection`. +   * Iteration is stopped once `predicate` returns falsey. The predicate is +   * invoked with three arguments: (value, index|key, collection). +   * +   * **Note:** This method returns `true` for +   * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because +   * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of +   * elements of empty collections. +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Collection +   * @param {Array|Object} collection The collection to iterate over. +   * @param {Function} [predicate=_.identity] The function invoked per iteration. +   * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +   * @returns {boolean} Returns `true` if all elements pass the predicate check, +   *  else `false`. +   * @example +   * +   * _.every([true, 1, null, 'yes'], Boolean); +   * // => false +   * +   * var users = [ +   *   { 'user': 'barney', 'age': 36, 'active': false }, +   *   { 'user': 'fred',   'age': 40, 'active': false } +   * ]; +   * +   * // The `_.matches` iteratee shorthand. +   * _.every(users, { 'user': 'barney', 'active': false }); +   * // => false +   * +   * // The `_.matchesProperty` iteratee shorthand. +   * _.every(users, ['active', false]); +   * // => true +   * +   * // The `_.property` iteratee shorthand. +   * _.every(users, 'active'); +   * // => false +   */ +  function every(collection, predicate, guard) { +    predicate = guard ? undefined : predicate; +    return baseEvery(collection, baseIteratee(predicate)); +  } + +  /** +   * Iterates over elements of `collection`, returning an array of all elements +   * `predicate` returns truthy for. The predicate is invoked with three +   * arguments: (value, index|key, collection). +   * +   * **Note:** Unlike `_.remove`, this method returns a new array. +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Collection +   * @param {Array|Object} collection The collection to iterate over. +   * @param {Function} [predicate=_.identity] The function invoked per iteration. +   * @returns {Array} Returns the new filtered array. +   * @see _.reject +   * @example +   * +   * var users = [ +   *   { 'user': 'barney', 'age': 36, 'active': true }, +   *   { 'user': 'fred',   'age': 40, 'active': false } +   * ]; +   * +   * _.filter(users, function(o) { return !o.active; }); +   * // => objects for ['fred'] +   * +   * // The `_.matches` iteratee shorthand. +   * _.filter(users, { 'age': 36, 'active': true }); +   * // => objects for ['barney'] +   * +   * // The `_.matchesProperty` iteratee shorthand. +   * _.filter(users, ['active', false]); +   * // => objects for ['fred'] +   * +   * // The `_.property` iteratee shorthand. +   * _.filter(users, 'active'); +   * // => objects for ['barney'] +   * +   * // Combining several predicates using `_.overEvery` or `_.overSome`. +   * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); +   * // => objects for ['fred', 'barney'] +   */ +  function filter(collection, predicate) { +    return baseFilter(collection, baseIteratee(predicate)); +  } + +  /** +   * Iterates over elements of `collection`, returning the first element +   * `predicate` returns truthy for. The predicate is invoked with three +   * arguments: (value, index|key, collection). +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Collection +   * @param {Array|Object} collection The collection to inspect. +   * @param {Function} [predicate=_.identity] The function invoked per iteration. +   * @param {number} [fromIndex=0] The index to search from. +   * @returns {*} Returns the matched element, else `undefined`. +   * @example +   * +   * var users = [ +   *   { 'user': 'barney',  'age': 36, 'active': true }, +   *   { 'user': 'fred',    'age': 40, 'active': false }, +   *   { 'user': 'pebbles', 'age': 1,  'active': true } +   * ]; +   * +   * _.find(users, function(o) { return o.age < 40; }); +   * // => object for 'barney' +   * +   * // The `_.matches` iteratee shorthand. +   * _.find(users, { 'age': 1, 'active': true }); +   * // => object for 'pebbles' +   * +   * // The `_.matchesProperty` iteratee shorthand. +   * _.find(users, ['active', false]); +   * // => object for 'fred' +   * +   * // The `_.property` iteratee shorthand. +   * _.find(users, 'active'); +   * // => object for 'barney' +   */ +  var find = createFind(findIndex); + +  /** +   * Iterates over elements of `collection` and invokes `iteratee` for each element. +   * The iteratee is invoked with three arguments: (value, index|key, collection). +   * Iteratee functions may exit iteration early by explicitly returning `false`. +   * +   * **Note:** As with other "Collections" methods, objects with a "length" +   * property are iterated like arrays. To avoid this behavior use `_.forIn` +   * or `_.forOwn` for object iteration. +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @alias each +   * @category Collection +   * @param {Array|Object} collection The collection to iterate over. +   * @param {Function} [iteratee=_.identity] The function invoked per iteration. +   * @returns {Array|Object} Returns `collection`. +   * @see _.forEachRight +   * @example +   * +   * _.forEach([1, 2], function(value) { +   *   console.log(value); +   * }); +   * // => Logs `1` then `2`. +   * +   * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { +   *   console.log(key); +   * }); +   * // => Logs 'a' then 'b' (iteration order is not guaranteed). +   */ +  function forEach(collection, iteratee) { +    return baseEach(collection, baseIteratee(iteratee)); +  } + +  /** +   * Creates an array of values by running each element in `collection` thru +   * `iteratee`. The iteratee is invoked with three arguments: +   * (value, index|key, collection). +   * +   * Many lodash methods are guarded to work as iteratees for methods like +   * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. +   * +   * The guarded methods are: +   * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, +   * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, +   * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, +   * `template`, `trim`, `trimEnd`, `trimStart`, and `words` +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Collection +   * @param {Array|Object} collection The collection to iterate over. +   * @param {Function} [iteratee=_.identity] The function invoked per iteration. +   * @returns {Array} Returns the new mapped array. +   * @example +   * +   * function square(n) { +   *   return n * n; +   * } +   * +   * _.map([4, 8], square); +   * // => [16, 64] +   * +   * _.map({ 'a': 4, 'b': 8 }, square); +   * // => [16, 64] (iteration order is not guaranteed) +   * +   * var users = [ +   *   { 'user': 'barney' }, +   *   { 'user': 'fred' } +   * ]; +   * +   * // The `_.property` iteratee shorthand. +   * _.map(users, 'user'); +   * // => ['barney', 'fred'] +   */ +  function map(collection, iteratee) { +    return baseMap(collection, baseIteratee(iteratee)); +  } + +  /** +   * Reduces `collection` to a value which is the accumulated result of running +   * each element in `collection` thru `iteratee`, where each successive +   * invocation is supplied the return value of the previous. If `accumulator` +   * is not given, the first element of `collection` is used as the initial +   * value. The iteratee is invoked with four arguments: +   * (accumulator, value, index|key, collection). +   * +   * Many lodash methods are guarded to work as iteratees for methods like +   * `_.reduce`, `_.reduceRight`, and `_.transform`. +   * +   * The guarded methods are: +   * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, +   * and `sortBy` +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Collection +   * @param {Array|Object} collection The collection to iterate over. +   * @param {Function} [iteratee=_.identity] The function invoked per iteration. +   * @param {*} [accumulator] The initial value. +   * @returns {*} Returns the accumulated value. +   * @see _.reduceRight +   * @example +   * +   * _.reduce([1, 2], function(sum, n) { +   *   return sum + n; +   * }, 0); +   * // => 3 +   * +   * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { +   *   (result[value] || (result[value] = [])).push(key); +   *   return result; +   * }, {}); +   * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) +   */ +  function reduce(collection, iteratee, accumulator) { +    return baseReduce(collection, baseIteratee(iteratee), accumulator, arguments.length < 3, baseEach); +  } + +  /** +   * Gets the size of `collection` by returning its length for array-like +   * values or the number of own enumerable string keyed properties for objects. +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Collection +   * @param {Array|Object|string} collection The collection to inspect. +   * @returns {number} Returns the collection size. +   * @example +   * +   * _.size([1, 2, 3]); +   * // => 3 +   * +   * _.size({ 'a': 1, 'b': 2 }); +   * // => 2 +   * +   * _.size('pebbles'); +   * // => 7 +   */ +  function size(collection) { +    if (collection == null) { +      return 0; +    } +    collection = isArrayLike(collection) ? collection : nativeKeys(collection); +    return collection.length; +  } + +  /** +   * Checks if `predicate` returns truthy for **any** element of `collection`. +   * Iteration is stopped once `predicate` returns truthy. The predicate is +   * invoked with three arguments: (value, index|key, collection). +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Collection +   * @param {Array|Object} collection The collection to iterate over. +   * @param {Function} [predicate=_.identity] The function invoked per iteration. +   * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +   * @returns {boolean} Returns `true` if any element passes the predicate check, +   *  else `false`. +   * @example +   * +   * _.some([null, 0, 'yes', false], Boolean); +   * // => true +   * +   * var users = [ +   *   { 'user': 'barney', 'active': true }, +   *   { 'user': 'fred',   'active': false } +   * ]; +   * +   * // The `_.matches` iteratee shorthand. +   * _.some(users, { 'user': 'barney', 'active': false }); +   * // => false +   * +   * // The `_.matchesProperty` iteratee shorthand. +   * _.some(users, ['active', false]); +   * // => true +   * +   * // The `_.property` iteratee shorthand. +   * _.some(users, 'active'); +   * // => true +   */ +  function some(collection, predicate, guard) { +    predicate = guard ? undefined : predicate; +    return baseSome(collection, baseIteratee(predicate)); +  } + +  /** +   * Creates an array of elements, sorted in ascending order by the results of +   * running each element in a collection thru each iteratee. This method +   * performs a stable sort, that is, it preserves the original sort order of +   * equal elements. The iteratees are invoked with one argument: (value). +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Collection +   * @param {Array|Object} collection The collection to iterate over. +   * @param {...(Function|Function[])} [iteratees=[_.identity]] +   *  The iteratees to sort by. +   * @returns {Array} Returns the new sorted array. +   * @example +   * +   * var users = [ +   *   { 'user': 'fred',   'age': 48 }, +   *   { 'user': 'barney', 'age': 36 }, +   *   { 'user': 'fred',   'age': 30 }, +   *   { 'user': 'barney', 'age': 34 } +   * ]; +   * +   * _.sortBy(users, [function(o) { return o.user; }]); +   * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] +   * +   * _.sortBy(users, ['user', 'age']); +   * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] +   */ +  function sortBy(collection, iteratee) { +    var index = 0; +    iteratee = baseIteratee(iteratee); + +    return baseMap(baseMap(collection, function(value, key, collection) { +      return { 'value': value, 'index': index++, 'criteria': iteratee(value, key, collection) }; +    }).sort(function(object, other) { +      return compareAscending(object.criteria, other.criteria) || (object.index - other.index); +    }), baseProperty('value')); +  } + +  /*------------------------------------------------------------------------*/ + +  /** +   * Creates a function that invokes `func`, with the `this` binding and arguments +   * of the created function, while it's called less than `n` times. Subsequent +   * calls to the created function return the result of the last `func` invocation. +   * +   * @static +   * @memberOf _ +   * @since 3.0.0 +   * @category Function +   * @param {number} n The number of calls at which `func` is no longer invoked. +   * @param {Function} func The function to restrict. +   * @returns {Function} Returns the new restricted function. +   * @example +   * +   * jQuery(element).on('click', _.before(5, addContactToList)); +   * // => Allows adding up to 4 contacts to the list. +   */ +  function before(n, func) { +    var result; +    if (typeof func != 'function') { +      throw new TypeError(FUNC_ERROR_TEXT); +    } +    n = toInteger(n); +    return function() { +      if (--n > 0) { +        result = func.apply(this, arguments); +      } +      if (n <= 1) { +        func = undefined; +      } +      return result; +    }; +  } + +  /** +   * Creates a function that invokes `func` with the `this` binding of `thisArg` +   * and `partials` prepended to the arguments it receives. +   * +   * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, +   * may be used as a placeholder for partially applied arguments. +   * +   * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" +   * property of bound functions. +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Function +   * @param {Function} func The function to bind. +   * @param {*} thisArg The `this` binding of `func`. +   * @param {...*} [partials] The arguments to be partially applied. +   * @returns {Function} Returns the new bound function. +   * @example +   * +   * function greet(greeting, punctuation) { +   *   return greeting + ' ' + this.user + punctuation; +   * } +   * +   * var object = { 'user': 'fred' }; +   * +   * var bound = _.bind(greet, object, 'hi'); +   * bound('!'); +   * // => 'hi fred!' +   * +   * // Bound with placeholders. +   * var bound = _.bind(greet, object, _, '!'); +   * bound('hi'); +   * // => 'hi fred!' +   */ +  var bind = baseRest(function(func, thisArg, partials) { +    return createPartial(func, WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG, thisArg, partials); +  }); + +  /** +   * Defers invoking the `func` until the current call stack has cleared. Any +   * additional arguments are provided to `func` when it's invoked. +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Function +   * @param {Function} func The function to defer. +   * @param {...*} [args] The arguments to invoke `func` with. +   * @returns {number} Returns the timer id. +   * @example +   * +   * _.defer(function(text) { +   *   console.log(text); +   * }, 'deferred'); +   * // => Logs 'deferred' after one millisecond. +   */ +  var defer = baseRest(function(func, args) { +    return baseDelay(func, 1, args); +  }); + +  /** +   * Invokes `func` after `wait` milliseconds. Any additional arguments are +   * provided to `func` when it's invoked. +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Function +   * @param {Function} func The function to delay. +   * @param {number} wait The number of milliseconds to delay invocation. +   * @param {...*} [args] The arguments to invoke `func` with. +   * @returns {number} Returns the timer id. +   * @example +   * +   * _.delay(function(text) { +   *   console.log(text); +   * }, 1000, 'later'); +   * // => Logs 'later' after one second. +   */ +  var delay = baseRest(function(func, wait, args) { +    return baseDelay(func, toNumber(wait) || 0, args); +  }); + +  /** +   * Creates a function that negates the result of the predicate `func`. The +   * `func` predicate is invoked with the `this` binding and arguments of the +   * created function. +   * +   * @static +   * @memberOf _ +   * @since 3.0.0 +   * @category Function +   * @param {Function} predicate The predicate to negate. +   * @returns {Function} Returns the new negated function. +   * @example +   * +   * function isEven(n) { +   *   return n % 2 == 0; +   * } +   * +   * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); +   * // => [1, 3, 5] +   */ +  function negate(predicate) { +    if (typeof predicate != 'function') { +      throw new TypeError(FUNC_ERROR_TEXT); +    } +    return function() { +      var args = arguments; +      return !predicate.apply(this, args); +    }; +  } + +  /** +   * Creates a function that is restricted to invoking `func` once. Repeat calls +   * to the function return the value of the first invocation. The `func` is +   * invoked with the `this` binding and arguments of the created function. +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Function +   * @param {Function} func The function to restrict. +   * @returns {Function} Returns the new restricted function. +   * @example +   * +   * var initialize = _.once(createApplication); +   * initialize(); +   * initialize(); +   * // => `createApplication` is invoked once +   */ +  function once(func) { +    return before(2, func); +  } + +  /*------------------------------------------------------------------------*/ + +  /** +   * Creates a shallow clone of `value`. +   * +   * **Note:** This method is loosely based on the +   * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) +   * and supports cloning arrays, array buffers, booleans, date objects, maps, +   * numbers, `Object` objects, regexes, sets, strings, symbols, and typed +   * arrays. The own enumerable properties of `arguments` objects are cloned +   * as plain objects. An empty object is returned for uncloneable values such +   * as error objects, functions, DOM nodes, and WeakMaps. +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Lang +   * @param {*} value The value to clone. +   * @returns {*} Returns the cloned value. +   * @see _.cloneDeep +   * @example +   * +   * var objects = [{ 'a': 1 }, { 'b': 2 }]; +   * +   * var shallow = _.clone(objects); +   * console.log(shallow[0] === objects[0]); +   * // => true +   */ +  function clone(value) { +    if (!isObject(value)) { +      return value; +    } +    return isArray(value) ? copyArray(value) : copyObject(value, nativeKeys(value)); +  } + +  /** +   * Performs a +   * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +   * comparison between two values to determine if they are equivalent. +   * +   * @static +   * @memberOf _ +   * @since 4.0.0 +   * @category Lang +   * @param {*} value The value to compare. +   * @param {*} other The other value to compare. +   * @returns {boolean} Returns `true` if the values are equivalent, else `false`. +   * @example +   * +   * var object = { 'a': 1 }; +   * var other = { 'a': 1 }; +   * +   * _.eq(object, object); +   * // => true +   * +   * _.eq(object, other); +   * // => false +   * +   * _.eq('a', 'a'); +   * // => true +   * +   * _.eq('a', Object('a')); +   * // => false +   * +   * _.eq(NaN, NaN); +   * // => true +   */ +  function eq(value, other) { +    return value === other || (value !== value && other !== other); +  } + +  /** +   * Checks if `value` is likely an `arguments` object. +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Lang +   * @param {*} value The value to check. +   * @returns {boolean} Returns `true` if `value` is an `arguments` object, +   *  else `false`. +   * @example +   * +   * _.isArguments(function() { return arguments; }()); +   * // => true +   * +   * _.isArguments([1, 2, 3]); +   * // => false +   */ +  var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { +    return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && +      !propertyIsEnumerable.call(value, 'callee'); +  }; + +  /** +   * Checks if `value` is classified as an `Array` object. +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Lang +   * @param {*} value The value to check. +   * @returns {boolean} Returns `true` if `value` is an array, else `false`. +   * @example +   * +   * _.isArray([1, 2, 3]); +   * // => true +   * +   * _.isArray(document.body.children); +   * // => false +   * +   * _.isArray('abc'); +   * // => false +   * +   * _.isArray(_.noop); +   * // => false +   */ +  var isArray = Array.isArray; + +  /** +   * Checks if `value` is array-like. A value is considered array-like if it's +   * not a function and has a `value.length` that's an integer greater than or +   * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. +   * +   * @static +   * @memberOf _ +   * @since 4.0.0 +   * @category Lang +   * @param {*} value The value to check. +   * @returns {boolean} Returns `true` if `value` is array-like, else `false`. +   * @example +   * +   * _.isArrayLike([1, 2, 3]); +   * // => true +   * +   * _.isArrayLike(document.body.children); +   * // => true +   * +   * _.isArrayLike('abc'); +   * // => true +   * +   * _.isArrayLike(_.noop); +   * // => false +   */ +  function isArrayLike(value) { +    return value != null && isLength(value.length) && !isFunction(value); +  } + +  /** +   * Checks if `value` is classified as a boolean primitive or object. +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Lang +   * @param {*} value The value to check. +   * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. +   * @example +   * +   * _.isBoolean(false); +   * // => true +   * +   * _.isBoolean(null); +   * // => false +   */ +  function isBoolean(value) { +    return value === true || value === false || +      (isObjectLike(value) && baseGetTag(value) == boolTag); +  } + +  /** +   * Checks if `value` is classified as a `Date` object. +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Lang +   * @param {*} value The value to check. +   * @returns {boolean} Returns `true` if `value` is a date object, else `false`. +   * @example +   * +   * _.isDate(new Date); +   * // => true +   * +   * _.isDate('Mon April 23 2012'); +   * // => false +   */ +  var isDate = baseIsDate; + +  /** +   * Checks if `value` is an empty object, collection, map, or set. +   * +   * Objects are considered empty if they have no own enumerable string keyed +   * properties. +   * +   * Array-like values such as `arguments` objects, arrays, buffers, strings, or +   * jQuery-like collections are considered empty if they have a `length` of `0`. +   * Similarly, maps and sets are considered empty if they have a `size` of `0`. +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Lang +   * @param {*} value The value to check. +   * @returns {boolean} Returns `true` if `value` is empty, else `false`. +   * @example +   * +   * _.isEmpty(null); +   * // => true +   * +   * _.isEmpty(true); +   * // => true +   * +   * _.isEmpty(1); +   * // => true +   * +   * _.isEmpty([1, 2, 3]); +   * // => false +   * +   * _.isEmpty({ 'a': 1 }); +   * // => false +   */ +  function isEmpty(value) { +    if (isArrayLike(value) && +        (isArray(value) || isString(value) || +          isFunction(value.splice) || isArguments(value))) { +      return !value.length; +    } +    return !nativeKeys(value).length; +  } + +  /** +   * Performs a deep comparison between two values to determine if they are +   * equivalent. +   * +   * **Note:** This method supports comparing arrays, array buffers, booleans, +   * date objects, error objects, maps, numbers, `Object` objects, regexes, +   * sets, strings, symbols, and typed arrays. `Object` objects are compared +   * by their own, not inherited, enumerable properties. Functions and DOM +   * nodes are compared by strict equality, i.e. `===`. +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Lang +   * @param {*} value The value to compare. +   * @param {*} other The other value to compare. +   * @returns {boolean} Returns `true` if the values are equivalent, else `false`. +   * @example +   * +   * var object = { 'a': 1 }; +   * var other = { 'a': 1 }; +   * +   * _.isEqual(object, other); +   * // => true +   * +   * object === other; +   * // => false +   */ +  function isEqual(value, other) { +    return baseIsEqual(value, other); +  } + +  /** +   * Checks if `value` is a finite primitive number. +   * +   * **Note:** This method is based on +   * [`Number.isFinite`](https://mdn.io/Number/isFinite). +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Lang +   * @param {*} value The value to check. +   * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. +   * @example +   * +   * _.isFinite(3); +   * // => true +   * +   * _.isFinite(Number.MIN_VALUE); +   * // => true +   * +   * _.isFinite(Infinity); +   * // => false +   * +   * _.isFinite('3'); +   * // => false +   */ +  function isFinite(value) { +    return typeof value == 'number' && nativeIsFinite(value); +  } + +  /** +   * Checks if `value` is classified as a `Function` object. +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Lang +   * @param {*} value The value to check. +   * @returns {boolean} Returns `true` if `value` is a function, else `false`. +   * @example +   * +   * _.isFunction(_); +   * // => true +   * +   * _.isFunction(/abc/); +   * // => false +   */ +  function isFunction(value) { +    if (!isObject(value)) { +      return false; +    } +    // The use of `Object#toString` avoids issues with the `typeof` operator +    // in Safari 9 which returns 'object' for typed arrays and other constructors. +    var tag = baseGetTag(value); +    return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +  } + +  /** +   * Checks if `value` is a valid array-like length. +   * +   * **Note:** This method is loosely based on +   * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). +   * +   * @static +   * @memberOf _ +   * @since 4.0.0 +   * @category Lang +   * @param {*} value The value to check. +   * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. +   * @example +   * +   * _.isLength(3); +   * // => true +   * +   * _.isLength(Number.MIN_VALUE); +   * // => false +   * +   * _.isLength(Infinity); +   * // => false +   * +   * _.isLength('3'); +   * // => false +   */ +  function isLength(value) { +    return typeof value == 'number' && +      value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +  } + +  /** +   * Checks if `value` is the +   * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) +   * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Lang +   * @param {*} value The value to check. +   * @returns {boolean} Returns `true` if `value` is an object, else `false`. +   * @example +   * +   * _.isObject({}); +   * // => true +   * +   * _.isObject([1, 2, 3]); +   * // => true +   * +   * _.isObject(_.noop); +   * // => true +   * +   * _.isObject(null); +   * // => false +   */ +  function isObject(value) { +    var type = typeof value; +    return value != null && (type == 'object' || type == 'function'); +  } + +  /** +   * Checks if `value` is object-like. A value is object-like if it's not `null` +   * and has a `typeof` result of "object". +   * +   * @static +   * @memberOf _ +   * @since 4.0.0 +   * @category Lang +   * @param {*} value The value to check. +   * @returns {boolean} Returns `true` if `value` is object-like, else `false`. +   * @example +   * +   * _.isObjectLike({}); +   * // => true +   * +   * _.isObjectLike([1, 2, 3]); +   * // => true +   * +   * _.isObjectLike(_.noop); +   * // => false +   * +   * _.isObjectLike(null); +   * // => false +   */ +  function isObjectLike(value) { +    return value != null && typeof value == 'object'; +  } + +  /** +   * Checks if `value` is `NaN`. +   * +   * **Note:** This method is based on +   * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as +   * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for +   * `undefined` and other non-number values. +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Lang +   * @param {*} value The value to check. +   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. +   * @example +   * +   * _.isNaN(NaN); +   * // => true +   * +   * _.isNaN(new Number(NaN)); +   * // => true +   * +   * isNaN(undefined); +   * // => true +   * +   * _.isNaN(undefined); +   * // => false +   */ +  function isNaN(value) { +    // An `NaN` primitive is the only value that is not equal to itself. +    // Perform the `toStringTag` check first to avoid errors with some +    // ActiveX objects in IE. +    return isNumber(value) && value != +value; +  } + +  /** +   * Checks if `value` is `null`. +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Lang +   * @param {*} value The value to check. +   * @returns {boolean} Returns `true` if `value` is `null`, else `false`. +   * @example +   * +   * _.isNull(null); +   * // => true +   * +   * _.isNull(void 0); +   * // => false +   */ +  function isNull(value) { +    return value === null; +  } + +  /** +   * Checks if `value` is classified as a `Number` primitive or object. +   * +   * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are +   * classified as numbers, use the `_.isFinite` method. +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Lang +   * @param {*} value The value to check. +   * @returns {boolean} Returns `true` if `value` is a number, else `false`. +   * @example +   * +   * _.isNumber(3); +   * // => true +   * +   * _.isNumber(Number.MIN_VALUE); +   * // => true +   * +   * _.isNumber(Infinity); +   * // => true +   * +   * _.isNumber('3'); +   * // => false +   */ +  function isNumber(value) { +    return typeof value == 'number' || +      (isObjectLike(value) && baseGetTag(value) == numberTag); +  } + +  /** +   * Checks if `value` is classified as a `RegExp` object. +   * +   * @static +   * @memberOf _ +   * @since 0.1.0 +   * @category Lang +   * @param {*} value The value to check. +   * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. +   * @example +   * +   * _.isRegExp(/abc/); +   * // => true +   * +   * _.isRegExp('/abc/'); +   * // => false +   */ +  var isRegExp = baseIsRegExp; + +  /** +   * Checks if `value` is classified as a `String` primitive or object. +   * +   * @static +   * @since 0.1.0 +   * @memberOf _ +   * @category Lang +   * @param {*} value The value to check. +   * @returns {boolean} Returns `true` if `value` is a string, else `false`. +   * @example +   * +   * _.isString('abc'); +   * // => true +   * +   * _.isString(1); +   * // => false +   */ +  function isString(value) { +    return typeof value == 'string' || +      (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); +  } + +  /** +   * Checks if `value` is `undefined`. +   * +   * @static +   * @since 0.1.0 +   * @memberOf _ +   * @category Lang +   * @param {*} value The value to check. +   * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. +   * @example +   * +   * _.isUndefined(void 0); +   * // => true +   * +   * _.isUndefined(null); +   * // => false +   */ +  function isUndefined(value) { +    return value === undefined; +  } + +  /** +   * Converts `value` to an array. +   * +   * @static +   * @since 0.1.0 +   * @memberOf _ +   * @category Lang +   * @param {*} value The value to convert. +   * @returns {Array} Returns the converted array. +   * @example +   * +   * _.toArray({ 'a': 1, 'b': 2 }); +   * // => [1, 2] +   * +   * _.toArray('abc'); +   * // => ['a', 'b', 'c'] +   * +   * _.toArray(1); +   * // => [] +   * +   * _.toArray(null); +   * // => [] +   */ +  function toArray(value) { +    if (!isArrayLike(value)) { +      return values(value); +    } +    return value.length ? copyArray(value) : []; +  } + +  /** +   * Converts `value` to an integer. +   * +   * **Note:** This method is loosely based on +   * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). +   * +   * @static +   * @memberOf _ +   * @since 4.0.0 +   * @category Lang +   * @param {*} value The value to convert. +   * @returns {number} Returns the converted integer. +   * @example +   * +   * _.toInteger(3.2); +   * // => 3 +   * +   * _.toInteger(Number.MIN_VALUE); +   * // => 0 +   * +   * _.toInteger(Infinity); +   * // => 1.7976931348623157e+308 +   * +   * _.toInteger('3.2'); +   * // => 3 +   */ +  var toInteger = Number; + +  /** +   * Converts `value` to a number. +   * +   * @static +   * @memberOf _ +   * @since 4.0.0 +   * @category Lang +   * @param {*} value The value to process. +   * @returns {number} Returns the number. +   * @example +   * +   * _.toNumber(3.2); +   * // => 3.2 +   * +   * _.toNumber(Number.MIN_VALUE); +   * // => 5e-324 +   * +   * _.toNumber(Infinity); +   * // => Infinity +   * +   * _.toNumber('3.2'); +   * // => 3.2 +   */ +  var toNumber = Number; + +  /** +   * Converts `value` to a string. An empty string is returned for `null` +   * and `undefined` values. The sign of `-0` is preserved. +   * +   * @static +   * @memberOf _ +   * @since 4.0.0 +   * @category Lang +   * @param {*} value The value to convert. +   * @returns {string} Returns the converted string. +   * @example +   * +   * _.toString(null); +   * // => '' +   * +   * _.toString(-0); +   * // => '-0' +   * +   * _.toString([1, 2, 3]); +   * // => '1,2,3' +   */ +  function toString(value) { +    if (typeof value == 'string') { +      return value; +    } +    return value == null ? '' : (value + ''); +  } + +  /*------------------------------------------------------------------------*/ + +  /** +   * Assigns own enumerable string keyed properties of source objects to the +   * destination object. Source objects are applied from left to right. +   * Subsequent sources overwrite property assignments of previous sources. +   * +   * **Note:** This method mutates `object` and is loosely based on +   * [`Object.assign`](https://mdn.io/Object/assign). +   * +   * @static +   * @memberOf _ +   * @since 0.10.0 +   * @category Object +   * @param {Object} object The destination object. +   * @param {...Object} [sources] The source objects. +   * @returns {Object} Returns `object`. +   * @see _.assignIn +   * @example +   * +   * function Foo() { +   *   this.a = 1; +   * } +   * +   * function Bar() { +   *   this.c = 3; +   * } +   * +   * Foo.prototype.b = 2; +   * Bar.prototype.d = 4; +   * +   * _.assign({ 'a': 0 }, new Foo, new Bar); +   * // => { 'a': 1, 'c': 3 } +   */ +  var assign = createAssigner(function(object, source) { +    copyObject(source, nativeKeys(source), object); +  }); + +  /** +   * This method is like `_.assign` except that it iterates over own and +   * inherited source properties. +   * +   * **Note:** This method mutates `object`. +   * +   * @static +   * @memberOf _ +   * @since 4.0.0 +   * @alias extend +   * @category Object +   * @param {Object} object The destination object. +   * @param {...Object} [sources] The source objects. +   * @returns {Object} Returns `object`. +   * @see _.assign +   * @example +   * +   * function Foo() { +   *   this.a = 1; +   * } +   * +   * function Bar() { +   *   this.c = 3; +   * } +   * +   * Foo.prototype.b = 2; +   * Bar.prototype.d = 4; +   * +   * _.assignIn({ 'a': 0 }, new Foo, new Bar); +   * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } +   */ +  var assignIn = createAssigner(function(object, source) { +    copyObject(source, nativeKeysIn(source), object); +  }); + +  /** +   * Creates an object that inherits from the `prototype` object. If a +   * `properties` object is given, its own enumerable string keyed properties +   * are assigned to the created object. +   * +   * @static +   * @memberOf _ +   * @since 2.3.0 +   * @category Object +   * @param {Object} prototype The object to inherit from. +   * @param {Object} [properties] The properties to assign to the object. +   * @returns {Object} Returns the new object. +   * @example +   * +   * function Shape() { +   *   this.x = 0; +   *   this.y = 0; +   * } +   * +   * function Circle() { +   *   Shape.call(this); +   * } +   * +   * Circle.prototype = _.create(Shape.prototype, { +   *   'constructor': Circle +   * }); +   * +   * var circle = new Circle; +   * circle instanceof Circle; +   * // => true +   * +   * circle instanceof Shape; +   * // => true +   */ +  function create(prototype, properties) { +    var result = baseCreate(prototype); +    return properties == null ? result : assign(result, properties); +  } + +  /** +   * Assigns own and inherited enumerable string keyed properties of source +   * objects to the destination object for all destination properties that +   * resolve to `undefined`. Source objects are applied from left to right. +   * Once a property is set, additional values of the same property are ignored. +   * +   * **Note:** This method mutates `object`. +   * +   * @static +   * @since 0.1.0 +   * @memberOf _ +   * @category Object +   * @param {Object} object The destination object. +   * @param {...Object} [sources] The source objects. +   * @returns {Object} Returns `object`. +   * @see _.defaultsDeep +   * @example +   * +   * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); +   * // => { 'a': 1, 'b': 2 } +   */ +  var defaults = baseRest(function(object, sources) { +    object = Object(object); + +    var index = -1; +    var length = sources.length; +    var guard = length > 2 ? sources[2] : undefined; + +    if (guard && isIterateeCall(sources[0], sources[1], guard)) { +      length = 1; +    } + +    while (++index < length) { +      var source = sources[index]; +      var props = keysIn(source); +      var propsIndex = -1; +      var propsLength = props.length; + +      while (++propsIndex < propsLength) { +        var key = props[propsIndex]; +        var value = object[key]; + +        if (value === undefined || +            (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { +          object[key] = source[key]; +        } +      } +    } + +    return object; +  }); + +  /** +   * Checks if `path` is a direct property of `object`. +   * +   * @static +   * @since 0.1.0 +   * @memberOf _ +   * @category Object +   * @param {Object} object The object to query. +   * @param {Array|string} path The path to check. +   * @returns {boolean} Returns `true` if `path` exists, else `false`. +   * @example +   * +   * var object = { 'a': { 'b': 2 } }; +   * var other = _.create({ 'a': _.create({ 'b': 2 }) }); +   * +   * _.has(object, 'a'); +   * // => true +   * +   * _.has(object, 'a.b'); +   * // => true +   * +   * _.has(object, ['a', 'b']); +   * // => true +   * +   * _.has(other, 'a'); +   * // => false +   */ +  function has(object, path) { +    return object != null && hasOwnProperty.call(object, path); +  } + +  /** +   * Creates an array of the own enumerable property names of `object`. +   * +   * **Note:** Non-object values are coerced to objects. See the +   * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) +   * for more details. +   * +   * @static +   * @since 0.1.0 +   * @memberOf _ +   * @category Object +   * @param {Object} object The object to query. +   * @returns {Array} Returns the array of property names. +   * @example +   * +   * function Foo() { +   *   this.a = 1; +   *   this.b = 2; +   * } +   * +   * Foo.prototype.c = 3; +   * +   * _.keys(new Foo); +   * // => ['a', 'b'] (iteration order is not guaranteed) +   * +   * _.keys('hi'); +   * // => ['0', '1'] +   */ +  var keys = nativeKeys; + +  /** +   * Creates an array of the own and inherited enumerable property names of `object`. +   * +   * **Note:** Non-object values are coerced to objects. +   * +   * @static +   * @memberOf _ +   * @since 3.0.0 +   * @category Object +   * @param {Object} object The object to query. +   * @returns {Array} Returns the array of property names. +   * @example +   * +   * function Foo() { +   *   this.a = 1; +   *   this.b = 2; +   * } +   * +   * Foo.prototype.c = 3; +   * +   * _.keysIn(new Foo); +   * // => ['a', 'b', 'c'] (iteration order is not guaranteed) +   */ +  var keysIn = nativeKeysIn; + +  /** +   * Creates an object composed of the picked `object` properties. +   * +   * @static +   * @since 0.1.0 +   * @memberOf _ +   * @category Object +   * @param {Object} object The source object. +   * @param {...(string|string[])} [paths] The property paths to pick. +   * @returns {Object} Returns the new object. +   * @example +   * +   * var object = { 'a': 1, 'b': '2', 'c': 3 }; +   * +   * _.pick(object, ['a', 'c']); +   * // => { 'a': 1, 'c': 3 } +   */ +  var pick = flatRest(function(object, paths) { +    return object == null ? {} : basePick(object, paths); +  }); + +  /** +   * This method is like `_.get` except that if the resolved value is a +   * function it's invoked with the `this` binding of its parent object and +   * its result is returned. +   * +   * @static +   * @since 0.1.0 +   * @memberOf _ +   * @category Object +   * @param {Object} object The object to query. +   * @param {Array|string} path The path of the property to resolve. +   * @param {*} [defaultValue] The value returned for `undefined` resolved values. +   * @returns {*} Returns the resolved value. +   * @example +   * +   * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; +   * +   * _.result(object, 'a[0].b.c1'); +   * // => 3 +   * +   * _.result(object, 'a[0].b.c2'); +   * // => 4 +   * +   * _.result(object, 'a[0].b.c3', 'default'); +   * // => 'default' +   * +   * _.result(object, 'a[0].b.c3', _.constant('default')); +   * // => 'default' +   */ +  function result(object, path, defaultValue) { +    var value = object == null ? undefined : object[path]; +    if (value === undefined) { +      value = defaultValue; +    } +    return isFunction(value) ? value.call(object) : value; +  } + +  /** +   * Creates an array of the own enumerable string keyed property values of `object`. +   * +   * **Note:** Non-object values are coerced to objects. +   * +   * @static +   * @since 0.1.0 +   * @memberOf _ +   * @category Object +   * @param {Object} object The object to query. +   * @returns {Array} Returns the array of property values. +   * @example +   * +   * function Foo() { +   *   this.a = 1; +   *   this.b = 2; +   * } +   * +   * Foo.prototype.c = 3; +   * +   * _.values(new Foo); +   * // => [1, 2] (iteration order is not guaranteed) +   * +   * _.values('hi'); +   * // => ['h', 'i'] +   */ +  function values(object) { +    return object == null ? [] : baseValues(object, keys(object)); +  } + +  /*------------------------------------------------------------------------*/ + +  /** +   * Converts the characters "&", "<", ">", '"', and "'" in `string` to their +   * corresponding HTML entities. +   * +   * **Note:** No other characters are escaped. To escape additional +   * characters use a third-party library like [_he_](https://mths.be/he). +   * +   * Though the ">" character is escaped for symmetry, characters like +   * ">" and "/" don't need escaping in HTML and have no special meaning +   * unless they're part of a tag or unquoted attribute value. See +   * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) +   * (under "semi-related fun fact") for more details. +   * +   * When working with HTML you should always +   * [quote attribute values](http://wonko.com/post/html-escaping) to reduce +   * XSS vectors. +   * +   * @static +   * @since 0.1.0 +   * @memberOf _ +   * @category String +   * @param {string} [string=''] The string to escape. +   * @returns {string} Returns the escaped string. +   * @example +   * +   * _.escape('fred, barney, & pebbles'); +   * // => 'fred, barney, & pebbles' +   */ +  function escape(string) { +    string = toString(string); +    return (string && reHasUnescapedHtml.test(string)) +      ? string.replace(reUnescapedHtml, escapeHtmlChar) +      : string; +  } + +  /*------------------------------------------------------------------------*/ + +  /** +   * This method returns the first argument it receives. +   * +   * @static +   * @since 0.1.0 +   * @memberOf _ +   * @category Util +   * @param {*} value Any value. +   * @returns {*} Returns `value`. +   * @example +   * +   * var object = { 'a': 1 }; +   * +   * console.log(_.identity(object) === object); +   * // => true +   */ +  function identity(value) { +    return value; +  } + +  /** +   * Creates a function that invokes `func` with the arguments of the created +   * function. If `func` is a property name, the created function returns the +   * property value for a given element. If `func` is an array or object, the +   * created function returns `true` for elements that contain the equivalent +   * source properties, otherwise it returns `false`. +   * +   * @static +   * @since 4.0.0 +   * @memberOf _ +   * @category Util +   * @param {*} [func=_.identity] The value to convert to a callback. +   * @returns {Function} Returns the callback. +   * @example +   * +   * var users = [ +   *   { 'user': 'barney', 'age': 36, 'active': true }, +   *   { 'user': 'fred',   'age': 40, 'active': false } +   * ]; +   * +   * // The `_.matches` iteratee shorthand. +   * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); +   * // => [{ 'user': 'barney', 'age': 36, 'active': true }] +   * +   * // The `_.matchesProperty` iteratee shorthand. +   * _.filter(users, _.iteratee(['user', 'fred'])); +   * // => [{ 'user': 'fred', 'age': 40 }] +   * +   * // The `_.property` iteratee shorthand. +   * _.map(users, _.iteratee('user')); +   * // => ['barney', 'fred'] +   * +   * // Create custom iteratee shorthands. +   * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { +   *   return !_.isRegExp(func) ? iteratee(func) : function(string) { +   *     return func.test(string); +   *   }; +   * }); +   * +   * _.filter(['abc', 'def'], /ef/); +   * // => ['def'] +   */ +  var iteratee = baseIteratee; + +  /** +   * Creates a function that performs a partial deep comparison between a given +   * object and `source`, returning `true` if the given object has equivalent +   * property values, else `false`. +   * +   * **Note:** The created function is equivalent to `_.isMatch` with `source` +   * partially applied. +   * +   * Partial comparisons will match empty array and empty object `source` +   * values against any array or object value, respectively. See `_.isEqual` +   * for a list of supported value comparisons. +   * +   * **Note:** Multiple values can be checked by combining several matchers +   * using `_.overSome` +   * +   * @static +   * @memberOf _ +   * @since 3.0.0 +   * @category Util +   * @param {Object} source The object of property values to match. +   * @returns {Function} Returns the new spec function. +   * @example +   * +   * var objects = [ +   *   { 'a': 1, 'b': 2, 'c': 3 }, +   *   { 'a': 4, 'b': 5, 'c': 6 } +   * ]; +   * +   * _.filter(objects, _.matches({ 'a': 4, 'c': 6 })); +   * // => [{ 'a': 4, 'b': 5, 'c': 6 }] +   * +   * // Checking for several possible values +   * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })])); +   * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }] +   */ +  function matches(source) { +    return baseMatches(assign({}, source)); +  } + +  /** +   * Adds all own enumerable string keyed function properties of a source +   * object to the destination object. If `object` is a function, then methods +   * are added to its prototype as well. +   * +   * **Note:** Use `_.runInContext` to create a pristine `lodash` function to +   * avoid conflicts caused by modifying the original. +   * +   * @static +   * @since 0.1.0 +   * @memberOf _ +   * @category Util +   * @param {Function|Object} [object=lodash] The destination object. +   * @param {Object} source The object of functions to add. +   * @param {Object} [options={}] The options object. +   * @param {boolean} [options.chain=true] Specify whether mixins are chainable. +   * @returns {Function|Object} Returns `object`. +   * @example +   * +   * function vowels(string) { +   *   return _.filter(string, function(v) { +   *     return /[aeiou]/i.test(v); +   *   }); +   * } +   * +   * _.mixin({ 'vowels': vowels }); +   * _.vowels('fred'); +   * // => ['e'] +   * +   * _('fred').vowels().value(); +   * // => ['e'] +   * +   * _.mixin({ 'vowels': vowels }, { 'chain': false }); +   * _('fred').vowels(); +   * // => ['e'] +   */ +  function mixin(object, source, options) { +    var props = keys(source), +        methodNames = baseFunctions(source, props); + +    if (options == null && +        !(isObject(source) && (methodNames.length || !props.length))) { +      options = source; +      source = object; +      object = this; +      methodNames = baseFunctions(source, keys(source)); +    } +    var chain = !(isObject(options) && 'chain' in options) || !!options.chain, +        isFunc = isFunction(object); + +    baseEach(methodNames, function(methodName) { +      var func = source[methodName]; +      object[methodName] = func; +      if (isFunc) { +        object.prototype[methodName] = function() { +          var chainAll = this.__chain__; +          if (chain || chainAll) { +            var result = object(this.__wrapped__), +                actions = result.__actions__ = copyArray(this.__actions__); + +            actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); +            result.__chain__ = chainAll; +            return result; +          } +          return func.apply(object, arrayPush([this.value()], arguments)); +        }; +      } +    }); + +    return object; +  } + +  /** +   * Reverts the `_` variable to its previous value and returns a reference to +   * the `lodash` function. +   * +   * @static +   * @since 0.1.0 +   * @memberOf _ +   * @category Util +   * @returns {Function} Returns the `lodash` function. +   * @example +   * +   * var lodash = _.noConflict(); +   */ +  function noConflict() { +    if (root._ === this) { +      root._ = oldDash; +    } +    return this; +  } + +  /** +   * This method returns `undefined`. +   * +   * @static +   * @memberOf _ +   * @since 2.3.0 +   * @category Util +   * @example +   * +   * _.times(2, _.noop); +   * // => [undefined, undefined] +   */ +  function noop() { +    // No operation performed. +  } + +  /** +   * Generates a unique ID. If `prefix` is given, the ID is appended to it. +   * +   * @static +   * @since 0.1.0 +   * @memberOf _ +   * @category Util +   * @param {string} [prefix=''] The value to prefix the ID with. +   * @returns {string} Returns the unique ID. +   * @example +   * +   * _.uniqueId('contact_'); +   * // => 'contact_104' +   * +   * _.uniqueId(); +   * // => '105' +   */ +  function uniqueId(prefix) { +    var id = ++idCounter; +    return toString(prefix) + id; +  } + +  /*------------------------------------------------------------------------*/ + +  /** +   * Computes the maximum value of `array`. If `array` is empty or falsey, +   * `undefined` is returned. +   * +   * @static +   * @since 0.1.0 +   * @memberOf _ +   * @category Math +   * @param {Array} array The array to iterate over. +   * @returns {*} Returns the maximum value. +   * @example +   * +   * _.max([4, 2, 8, 6]); +   * // => 8 +   * +   * _.max([]); +   * // => undefined +   */ +  function max(array) { +    return (array && array.length) +      ? baseExtremum(array, identity, baseGt) +      : undefined; +  } + +  /** +   * Computes the minimum value of `array`. If `array` is empty or falsey, +   * `undefined` is returned. +   * +   * @static +   * @since 0.1.0 +   * @memberOf _ +   * @category Math +   * @param {Array} array The array to iterate over. +   * @returns {*} Returns the minimum value. +   * @example +   * +   * _.min([4, 2, 8, 6]); +   * // => 2 +   * +   * _.min([]); +   * // => undefined +   */ +  function min(array) { +    return (array && array.length) +      ? baseExtremum(array, identity, baseLt) +      : undefined; +  } + +  /*------------------------------------------------------------------------*/ + +  // Add methods that return wrapped values in chain sequences. +  lodash.assignIn = assignIn; +  lodash.before = before; +  lodash.bind = bind; +  lodash.chain = chain; +  lodash.compact = compact; +  lodash.concat = concat; +  lodash.create = create; +  lodash.defaults = defaults; +  lodash.defer = defer; +  lodash.delay = delay; +  lodash.filter = filter; +  lodash.flatten = flatten; +  lodash.flattenDeep = flattenDeep; +  lodash.iteratee = iteratee; +  lodash.keys = keys; +  lodash.map = map; +  lodash.matches = matches; +  lodash.mixin = mixin; +  lodash.negate = negate; +  lodash.once = once; +  lodash.pick = pick; +  lodash.slice = slice; +  lodash.sortBy = sortBy; +  lodash.tap = tap; +  lodash.thru = thru; +  lodash.toArray = toArray; +  lodash.values = values; + +  // Add aliases. +  lodash.extend = assignIn; + +  // Add methods to `lodash.prototype`. +  mixin(lodash, lodash); + +  /*------------------------------------------------------------------------*/ + +  // Add methods that return unwrapped values in chain sequences. +  lodash.clone = clone; +  lodash.escape = escape; +  lodash.every = every; +  lodash.find = find; +  lodash.forEach = forEach; +  lodash.has = has; +  lodash.head = head; +  lodash.identity = identity; +  lodash.indexOf = indexOf; +  lodash.isArguments = isArguments; +  lodash.isArray = isArray; +  lodash.isBoolean = isBoolean; +  lodash.isDate = isDate; +  lodash.isEmpty = isEmpty; +  lodash.isEqual = isEqual; +  lodash.isFinite = isFinite; +  lodash.isFunction = isFunction; +  lodash.isNaN = isNaN; +  lodash.isNull = isNull; +  lodash.isNumber = isNumber; +  lodash.isObject = isObject; +  lodash.isRegExp = isRegExp; +  lodash.isString = isString; +  lodash.isUndefined = isUndefined; +  lodash.last = last; +  lodash.max = max; +  lodash.min = min; +  lodash.noConflict = noConflict; +  lodash.noop = noop; +  lodash.reduce = reduce; +  lodash.result = result; +  lodash.size = size; +  lodash.some = some; +  lodash.uniqueId = uniqueId; + +  // Add aliases. +  lodash.each = forEach; +  lodash.first = head; + +  mixin(lodash, (function() { +    var source = {}; +    baseForOwn(lodash, function(func, methodName) { +      if (!hasOwnProperty.call(lodash.prototype, methodName)) { +        source[methodName] = func; +      } +    }); +    return source; +  }()), { 'chain': false }); + +  /*------------------------------------------------------------------------*/ + +  /** +   * The semantic version number. +   * +   * @static +   * @memberOf _ +   * @type {string} +   */ +  lodash.VERSION = VERSION; + +  // Add `Array` methods to `lodash.prototype`. +  baseEach(['pop', 'join', 'replace', 'reverse', 'split', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { +    var func = (/^(?:replace|split)$/.test(methodName) ? String.prototype : arrayProto)[methodName], +        chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', +        retUnwrapped = /^(?:pop|join|replace|shift)$/.test(methodName); + +    lodash.prototype[methodName] = function() { +      var args = arguments; +      if (retUnwrapped && !this.__chain__) { +        var value = this.value(); +        return func.apply(isArray(value) ? value : [], args); +      } +      return this[chainName](function(value) { +        return func.apply(isArray(value) ? value : [], args); +      }); +    }; +  }); + +  // Add chain sequence methods to the `lodash` wrapper. +  lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; + +  /*--------------------------------------------------------------------------*/ + +  // Some AMD build optimizers, like r.js, check for condition patterns like: +  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { +    // Expose Lodash on the global object to prevent errors when Lodash is +    // loaded by a script tag in the presence of an AMD loader. +    // See http://requirejs.org/docs/errors.html#mismatch for more details. +    // Use `_.noConflict` to remove Lodash from the global object. +    root._ = lodash; + +    // Define as an anonymous module so, through path mapping, it can be +    // referenced as the "underscore" module. +    define(function() { +      return lodash; +    }); +  } +  // Check for `exports` after `define` in case a build optimizer adds it. +  else if (freeModule) { +    // Export for Node.js. +    (freeModule.exports = lodash)._ = lodash; +    // Export for CommonJS support. +    freeExports._ = lodash; +  } +  else { +    // Export to the global object. +    root._ = lodash; +  } +}.call(this)); diff --git a/node_modules/lodash/core.min.js b/node_modules/lodash/core.min.js new file mode 100644 index 0000000..e425e4d --- /dev/null +++ b/node_modules/lodash/core.min.js @@ -0,0 +1,29 @@ +/** + * @license + * Lodash (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE + * Build: `lodash core -o ./dist/lodash.core.js` + */ +;(function(){function n(n){return H(n)&&pn.call(n,"callee")&&!yn.call(n,"callee")}function t(n,t){return n.push.apply(n,t),n}function r(n){return function(t){return null==t?Z:t[n]}}function e(n,t,r,e,u){return u(n,function(n,u,o){r=e?(e=false,n):t(r,n,u,o)}),r}function u(n,t){return j(t,function(t){return n[t]})}function o(n){return n instanceof i?n:new i(n)}function i(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t}function c(n,t,r){if(typeof n!="function")throw new TypeError("Expected a function"); +return setTimeout(function(){n.apply(Z,r)},t)}function f(n,t){var r=true;return mn(n,function(n,e,u){return r=!!t(n,e,u)}),r}function a(n,t,r){for(var e=-1,u=n.length;++e<u;){var o=n[e],i=t(o);if(null!=i&&(c===Z?i===i:r(i,c)))var c=i,f=o}return f}function l(n,t){var r=[];return mn(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function p(n,r,e,u,o){var i=-1,c=n.length;for(e||(e=R),o||(o=[]);++i<c;){var f=n[i];0<r&&e(f)?1<r?p(f,r-1,e,u,o):t(o,f):u||(o[o.length]=f)}return o}function s(n,t){return n&&On(n,t,Dn); +}function h(n,t){return l(t,function(t){return U(n[t])})}function v(n,t){return n>t}function b(n,t,r,e,u){return n===t||(null==n||null==t||!H(n)&&!H(t)?n!==n&&t!==t:y(n,t,r,e,b,u))}function y(n,t,r,e,u,o){var i=Nn(n),c=Nn(t),f=i?"[object Array]":hn.call(n),a=c?"[object Array]":hn.call(t),f="[object Arguments]"==f?"[object Object]":f,a="[object Arguments]"==a?"[object Object]":a,l="[object Object]"==f,c="[object Object]"==a,a=f==a;o||(o=[]);var p=An(o,function(t){return t[0]==n}),s=An(o,function(n){ +return n[0]==t});if(p&&s)return p[1]==t;if(o.push([n,t]),o.push([t,n]),a&&!l){if(i)r=T(n,t,r,e,u,o);else n:{switch(f){case"[object Boolean]":case"[object Date]":case"[object Number]":r=J(+n,+t);break n;case"[object Error]":r=n.name==t.name&&n.message==t.message;break n;case"[object RegExp]":case"[object String]":r=n==t+"";break n}r=false}return o.pop(),r}return 1&r||(i=l&&pn.call(n,"__wrapped__"),f=c&&pn.call(t,"__wrapped__"),!i&&!f)?!!a&&(r=B(n,t,r,e,u,o),o.pop(),r):(i=i?n.value():n,f=f?t.value():t, +r=u(i,f,r,e,o),o.pop(),r)}function g(n){return typeof n=="function"?n:null==n?X:(typeof n=="object"?d:r)(n)}function _(n,t){return n<t}function j(n,t){var r=-1,e=M(n)?Array(n.length):[];return mn(n,function(n,u,o){e[++r]=t(n,u,o)}),e}function d(n){var t=_n(n);return function(r){var e=t.length;if(null==r)return!e;for(r=Object(r);e--;){var u=t[e];if(!(u in r&&b(n[u],r[u],3)))return false}return true}}function m(n,t){return n=Object(n),C(t,function(t,r){return r in n&&(t[r]=n[r]),t},{})}function O(n){return xn(I(n,void 0,X),n+""); +}function x(n,t,r){var e=-1,u=n.length;for(0>t&&(t=-t>u?0:u+t),r=r>u?u:r,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Array(u);++e<u;)r[e]=n[e+t];return r}function A(n){return x(n,0,n.length)}function E(n,t){var r;return mn(n,function(n,e,u){return r=t(n,e,u),!r}),!!r}function w(n,r){return C(r,function(n,r){return r.func.apply(r.thisArg,t([n],r.args))},n)}function k(n,t,r){var e=!r;r||(r={});for(var u=-1,o=t.length;++u<o;){var i=t[u],c=Z;if(c===Z&&(c=n[i]),e)r[i]=c;else{var f=r,a=f[i];pn.call(f,i)&&J(a,c)&&(c!==Z||i in f)||(f[i]=c); +}}return r}function N(n){return O(function(t,r){var e=-1,u=r.length,o=1<u?r[u-1]:Z,o=3<n.length&&typeof o=="function"?(u--,o):Z;for(t=Object(t);++e<u;){var i=r[e];i&&n(t,i,e,o)}return t})}function F(n){return function(){var t=arguments,r=dn(n.prototype),t=n.apply(r,t);return V(t)?t:r}}function S(n,t,r){function e(){for(var o=-1,i=arguments.length,c=-1,f=r.length,a=Array(f+i),l=this&&this!==on&&this instanceof e?u:n;++c<f;)a[c]=r[c];for(;i--;)a[c++]=arguments[++o];return l.apply(t,a)}if(typeof n!="function")throw new TypeError("Expected a function"); +var u=F(n);return e}function T(n,t,r,e,u,o){var i=n.length,c=t.length;if(i!=c&&!(1&r&&c>i))return false;var c=o.get(n),f=o.get(t);if(c&&f)return c==t&&f==n;for(var c=-1,f=true,a=2&r?[]:Z;++c<i;){var l=n[c],p=t[c];if(void 0!==Z){f=false;break}if(a){if(!E(t,function(n,t){if(!P(a,t)&&(l===n||u(l,n,r,e,o)))return a.push(t)})){f=false;break}}else if(l!==p&&!u(l,p,r,e,o)){f=false;break}}return f}function B(n,t,r,e,u,o){var i=1&r,c=Dn(n),f=c.length,a=Dn(t).length;if(f!=a&&!i)return false;for(a=f;a--;){var l=c[a];if(!(i?l in t:pn.call(t,l)))return false; +}var p=o.get(n),l=o.get(t);if(p&&l)return p==t&&l==n;for(p=true;++a<f;){var l=c[a],s=n[l],h=t[l];if(void 0!==Z||s!==h&&!u(s,h,r,e,o)){p=false;break}i||(i="constructor"==l)}return p&&!i&&(r=n.constructor,e=t.constructor,r!=e&&"constructor"in n&&"constructor"in t&&!(typeof r=="function"&&r instanceof r&&typeof e=="function"&&e instanceof e)&&(p=false)),p}function R(t){return Nn(t)||n(t)}function D(n){var t=[];if(null!=n)for(var r in Object(n))t.push(r);return t}function I(n,t,r){return t=jn(t===Z?n.length-1:t,0), +function(){for(var e=arguments,u=-1,o=jn(e.length-t,0),i=Array(o);++u<o;)i[u]=e[t+u];for(u=-1,o=Array(t+1);++u<t;)o[u]=e[u];return o[t]=r(i),n.apply(this,o)}}function $(n){return(null==n?0:n.length)?p(n,1):[]}function q(n){return n&&n.length?n[0]:Z}function P(n,t,r){var e=null==n?0:n.length;r=typeof r=="number"?0>r?jn(e+r,0):r:0,r=(r||0)-1;for(var u=t===t;++r<e;){var o=n[r];if(u?o===t:o!==o)return r}return-1}function z(n,t){return mn(n,g(t))}function C(n,t,r){return e(n,g(t),r,3>arguments.length,mn); +}function G(n,t){var r;if(typeof t!="function")throw new TypeError("Expected a function");return n=Fn(n),function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=Z),r}}function J(n,t){return n===t||n!==n&&t!==t}function M(n){var t;return(t=null!=n)&&(t=n.length,t=typeof t=="number"&&-1<t&&0==t%1&&9007199254740991>=t),t&&!U(n)}function U(n){return!!V(n)&&(n=hn.call(n),"[object Function]"==n||"[object GeneratorFunction]"==n||"[object AsyncFunction]"==n||"[object Proxy]"==n)}function V(n){var t=typeof n; +return null!=n&&("object"==t||"function"==t)}function H(n){return null!=n&&typeof n=="object"}function K(n){return typeof n=="number"||H(n)&&"[object Number]"==hn.call(n)}function L(n){return typeof n=="string"||!Nn(n)&&H(n)&&"[object String]"==hn.call(n)}function Q(n){return typeof n=="string"?n:null==n?"":n+""}function W(n){return null==n?[]:u(n,Dn(n))}function X(n){return n}function Y(n,r,e){var u=Dn(r),o=h(r,u);null!=e||V(r)&&(o.length||!u.length)||(e=r,r=n,n=this,o=h(r,Dn(r)));var i=!(V(e)&&"chain"in e&&!e.chain),c=U(n); +return mn(o,function(e){var u=r[e];n[e]=u,c&&(n.prototype[e]=function(){var r=this.__chain__;if(i||r){var e=n(this.__wrapped__);return(e.__actions__=A(this.__actions__)).push({func:u,args:arguments,thisArg:n}),e.__chain__=r,e}return u.apply(n,t([this.value()],arguments))})}),n}var Z,nn=1/0,tn=/[&<>"']/g,rn=RegExp(tn.source),en=/^(?:0|[1-9]\d*)$/,un=typeof self=="object"&&self&&self.Object===Object&&self,on=typeof global=="object"&&global&&global.Object===Object&&global||un||Function("return this")(),cn=(un=typeof exports=="object"&&exports&&!exports.nodeType&&exports)&&typeof module=="object"&&module&&!module.nodeType&&module,fn=function(n){ +return function(t){return null==n?Z:n[t]}}({"&":"&","<":"<",">":">",'"':""","'":"'"}),an=Array.prototype,ln=Object.prototype,pn=ln.hasOwnProperty,sn=0,hn=ln.toString,vn=on._,bn=Object.create,yn=ln.propertyIsEnumerable,gn=on.isFinite,_n=function(n,t){return function(r){return n(t(r))}}(Object.keys,Object),jn=Math.max,dn=function(){function n(){}return function(t){return V(t)?bn?bn(t):(n.prototype=t,t=new n,n.prototype=Z,t):{}}}();i.prototype=dn(o.prototype),i.prototype.constructor=i; +var mn=function(n,t){return function(r,e){if(null==r)return r;if(!M(r))return n(r,e);for(var u=r.length,o=t?u:-1,i=Object(r);(t?o--:++o<u)&&false!==e(i[o],o,i););return r}}(s),On=function(n){return function(t,r,e){var u=-1,o=Object(t);e=e(t);for(var i=e.length;i--;){var c=e[n?i:++u];if(false===r(o[c],c,o))break}return t}}(),xn=X,An=function(n){return function(t,r,e){var u=Object(t);if(!M(t)){var o=g(r);t=Dn(t),r=function(n){return o(u[n],n,u)}}return r=n(t,r,e),-1<r?u[o?t[r]:r]:Z}}(function(n,t,r){var e=null==n?0:n.length; +if(!e)return-1;r=null==r?0:Fn(r),0>r&&(r=jn(e+r,0));n:{for(t=g(t),e=n.length,r+=-1;++r<e;)if(t(n[r],r,n)){n=r;break n}n=-1}return n}),En=O(function(n,t,r){return S(n,t,r)}),wn=O(function(n,t){return c(n,1,t)}),kn=O(function(n,t,r){return c(n,Sn(t)||0,r)}),Nn=Array.isArray,Fn=Number,Sn=Number,Tn=N(function(n,t){k(t,_n(t),n)}),Bn=N(function(n,t){k(t,D(t),n)}),Rn=O(function(n,t){n=Object(n);var r,e=-1,u=t.length,o=2<u?t[2]:Z;if(r=o){r=t[0];var i=t[1];if(V(o)){var c=typeof i;if("number"==c){if(c=M(o))var c=o.length,f=typeof i,c=null==c?9007199254740991:c,c=!!c&&("number"==f||"symbol"!=f&&en.test(i))&&-1<i&&0==i%1&&i<c; +}else c="string"==c&&i in o;r=!!c&&J(o[i],r)}else r=false}for(r&&(u=1);++e<u;)for(o=t[e],r=In(o),i=-1,c=r.length;++i<c;){var f=r[i],a=n[f];(a===Z||J(a,ln[f])&&!pn.call(n,f))&&(n[f]=o[f])}return n}),Dn=_n,In=D,$n=function(n){return xn(I(n,Z,$),n+"")}(function(n,t){return null==n?{}:m(n,t)});o.assignIn=Bn,o.before=G,o.bind=En,o.chain=function(n){return n=o(n),n.__chain__=true,n},o.compact=function(n){return l(n,Boolean)},o.concat=function(){var n=arguments.length;if(!n)return[];for(var r=Array(n-1),e=arguments[0];n--;)r[n-1]=arguments[n]; +return t(Nn(e)?A(e):[e],p(r,1))},o.create=function(n,t){var r=dn(n);return null==t?r:Tn(r,t)},o.defaults=Rn,o.defer=wn,o.delay=kn,o.filter=function(n,t){return l(n,g(t))},o.flatten=$,o.flattenDeep=function(n){return(null==n?0:n.length)?p(n,nn):[]},o.iteratee=g,o.keys=Dn,o.map=function(n,t){return j(n,g(t))},o.matches=function(n){return d(Tn({},n))},o.mixin=Y,o.negate=function(n){if(typeof n!="function")throw new TypeError("Expected a function");return function(){return!n.apply(this,arguments)}},o.once=function(n){ +return G(2,n)},o.pick=$n,o.slice=function(n,t,r){var e=null==n?0:n.length;return r=r===Z?e:+r,e?x(n,null==t?0:+t,r):[]},o.sortBy=function(n,t){var e=0;return t=g(t),j(j(n,function(n,r,u){return{value:n,index:e++,criteria:t(n,r,u)}}).sort(function(n,t){var r;n:{r=n.criteria;var e=t.criteria;if(r!==e){var u=r!==Z,o=null===r,i=r===r,c=e!==Z,f=null===e,a=e===e;if(!f&&r>e||o&&c&&a||!u&&a||!i){r=1;break n}if(!o&&r<e||f&&u&&i||!c&&i||!a){r=-1;break n}}r=0}return r||n.index-t.index}),r("value"))},o.tap=function(n,t){ +return t(n),n},o.thru=function(n,t){return t(n)},o.toArray=function(n){return M(n)?n.length?A(n):[]:W(n)},o.values=W,o.extend=Bn,Y(o,o),o.clone=function(n){return V(n)?Nn(n)?A(n):k(n,_n(n)):n},o.escape=function(n){return(n=Q(n))&&rn.test(n)?n.replace(tn,fn):n},o.every=function(n,t,r){return t=r?Z:t,f(n,g(t))},o.find=An,o.forEach=z,o.has=function(n,t){return null!=n&&pn.call(n,t)},o.head=q,o.identity=X,o.indexOf=P,o.isArguments=n,o.isArray=Nn,o.isBoolean=function(n){return true===n||false===n||H(n)&&"[object Boolean]"==hn.call(n); +},o.isDate=function(n){return H(n)&&"[object Date]"==hn.call(n)},o.isEmpty=function(t){return M(t)&&(Nn(t)||L(t)||U(t.splice)||n(t))?!t.length:!_n(t).length},o.isEqual=function(n,t){return b(n,t)},o.isFinite=function(n){return typeof n=="number"&&gn(n)},o.isFunction=U,o.isNaN=function(n){return K(n)&&n!=+n},o.isNull=function(n){return null===n},o.isNumber=K,o.isObject=V,o.isRegExp=function(n){return H(n)&&"[object RegExp]"==hn.call(n)},o.isString=L,o.isUndefined=function(n){return n===Z},o.last=function(n){ +var t=null==n?0:n.length;return t?n[t-1]:Z},o.max=function(n){return n&&n.length?a(n,X,v):Z},o.min=function(n){return n&&n.length?a(n,X,_):Z},o.noConflict=function(){return on._===this&&(on._=vn),this},o.noop=function(){},o.reduce=C,o.result=function(n,t,r){return t=null==n?Z:n[t],t===Z&&(t=r),U(t)?t.call(n):t},o.size=function(n){return null==n?0:(n=M(n)?n:_n(n),n.length)},o.some=function(n,t,r){return t=r?Z:t,E(n,g(t))},o.uniqueId=function(n){var t=++sn;return Q(n)+t},o.each=z,o.first=q,Y(o,function(){ +var n={};return s(o,function(t,r){pn.call(o.prototype,r)||(n[r]=t)}),n}(),{chain:false}),o.VERSION="4.17.21",mn("pop join replace reverse split push shift sort splice unshift".split(" "),function(n){var t=(/^(?:replace|split)$/.test(n)?String.prototype:an)[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|join|replace|shift)$/.test(n);o.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var u=this.value();return t.apply(Nn(u)?u:[],n)}return this[r](function(r){return t.apply(Nn(r)?r:[],n); +})}}),o.prototype.toJSON=o.prototype.valueOf=o.prototype.value=function(){return w(this.__wrapped__,this.__actions__)},typeof define=="function"&&typeof define.amd=="object"&&define.amd?(on._=o, define(function(){return o})):cn?((cn.exports=o)._=o,un._=o):on._=o}).call(this);
\ No newline at end of file diff --git a/node_modules/lodash/countBy.js b/node_modules/lodash/countBy.js new file mode 100644 index 0000000..0e88abc --- /dev/null +++ b/node_modules/lodash/countBy.js @@ -0,0 +1,40 @@ +var baseAssignValue = require('./_baseAssignValue'), +    createAggregator = require('./_createAggregator'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the number of times the key was returned by `iteratee`. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.countBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': 1, '6': 2 } + * + * // The `_.property` iteratee shorthand. + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */ +var countBy = createAggregator(function(result, value, key) { +  if (hasOwnProperty.call(result, key)) { +    ++result[key]; +  } else { +    baseAssignValue(result, key, 1); +  } +}); + +module.exports = countBy; diff --git a/node_modules/lodash/create.js b/node_modules/lodash/create.js new file mode 100644 index 0000000..919edb8 --- /dev/null +++ b/node_modules/lodash/create.js @@ -0,0 +1,43 @@ +var baseAssign = require('./_baseAssign'), +    baseCreate = require('./_baseCreate'); + +/** + * Creates an object that inherits from the `prototype` object. If a + * `properties` object is given, its own enumerable string keyed properties + * are assigned to the created object. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + *   this.x = 0; + *   this.y = 0; + * } + * + * function Circle() { + *   Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + *   'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ +function create(prototype, properties) { +  var result = baseCreate(prototype); +  return properties == null ? result : baseAssign(result, properties); +} + +module.exports = create; diff --git a/node_modules/lodash/curry.js b/node_modules/lodash/curry.js new file mode 100644 index 0000000..918db1a --- /dev/null +++ b/node_modules/lodash/curry.js @@ -0,0 +1,57 @@ +var createWrap = require('./_createWrap'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_CURRY_FLAG = 8; + +/** + * Creates a function that accepts arguments of `func` and either invokes + * `func` returning its result, if at least `arity` number of arguments have + * been provided, or returns a function that accepts the remaining `func` + * arguments, and so on. The arity of `func` may be specified if `func.length` + * is not sufficient. + * + * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + *   return [a, b, c]; + * }; + * + * var curried = _.curry(abc); + * + * curried(1)(2)(3); + * // => [1, 2, 3] + * + * curried(1, 2)(3); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(1)(_, 3)(2); + * // => [1, 2, 3] + */ +function curry(func, arity, guard) { +  arity = guard ? undefined : arity; +  var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); +  result.placeholder = curry.placeholder; +  return result; +} + +// Assign default placeholders. +curry.placeholder = {}; + +module.exports = curry; diff --git a/node_modules/lodash/curryRight.js b/node_modules/lodash/curryRight.js new file mode 100644 index 0000000..c85b6f3 --- /dev/null +++ b/node_modules/lodash/curryRight.js @@ -0,0 +1,54 @@ +var createWrap = require('./_createWrap'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_CURRY_RIGHT_FLAG = 16; + +/** + * This method is like `_.curry` except that arguments are applied to `func` + * in the manner of `_.partialRight` instead of `_.partial`. + * + * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + *   return [a, b, c]; + * }; + * + * var curried = _.curryRight(abc); + * + * curried(3)(2)(1); + * // => [1, 2, 3] + * + * curried(2, 3)(1); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(3)(1, _)(2); + * // => [1, 2, 3] + */ +function curryRight(func, arity, guard) { +  arity = guard ? undefined : arity; +  var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); +  result.placeholder = curryRight.placeholder; +  return result; +} + +// Assign default placeholders. +curryRight.placeholder = {}; + +module.exports = curryRight; diff --git a/node_modules/lodash/date.js b/node_modules/lodash/date.js new file mode 100644 index 0000000..cbf5b41 --- /dev/null +++ b/node_modules/lodash/date.js @@ -0,0 +1,3 @@ +module.exports = { +  'now': require('./now') +}; diff --git a/node_modules/lodash/debounce.js b/node_modules/lodash/debounce.js new file mode 100644 index 0000000..8f751d5 --- /dev/null +++ b/node_modules/lodash/debounce.js @@ -0,0 +1,191 @@ +var isObject = require('./isObject'), +    now = require('./now'), +    toNumber = require('./toNumber'); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, +    nativeMin = Math.min; + +/** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + *  Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + *  The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + *  Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + *   'leading': true, + *   'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ +function debounce(func, wait, options) { +  var lastArgs, +      lastThis, +      maxWait, +      result, +      timerId, +      lastCallTime, +      lastInvokeTime = 0, +      leading = false, +      maxing = false, +      trailing = true; + +  if (typeof func != 'function') { +    throw new TypeError(FUNC_ERROR_TEXT); +  } +  wait = toNumber(wait) || 0; +  if (isObject(options)) { +    leading = !!options.leading; +    maxing = 'maxWait' in options; +    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; +    trailing = 'trailing' in options ? !!options.trailing : trailing; +  } + +  function invokeFunc(time) { +    var args = lastArgs, +        thisArg = lastThis; + +    lastArgs = lastThis = undefined; +    lastInvokeTime = time; +    result = func.apply(thisArg, args); +    return result; +  } + +  function leadingEdge(time) { +    // Reset any `maxWait` timer. +    lastInvokeTime = time; +    // Start the timer for the trailing edge. +    timerId = setTimeout(timerExpired, wait); +    // Invoke the leading edge. +    return leading ? invokeFunc(time) : result; +  } + +  function remainingWait(time) { +    var timeSinceLastCall = time - lastCallTime, +        timeSinceLastInvoke = time - lastInvokeTime, +        timeWaiting = wait - timeSinceLastCall; + +    return maxing +      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) +      : timeWaiting; +  } + +  function shouldInvoke(time) { +    var timeSinceLastCall = time - lastCallTime, +        timeSinceLastInvoke = time - lastInvokeTime; + +    // Either this is the first call, activity has stopped and we're at the +    // trailing edge, the system time has gone backwards and we're treating +    // it as the trailing edge, or we've hit the `maxWait` limit. +    return (lastCallTime === undefined || (timeSinceLastCall >= wait) || +      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); +  } + +  function timerExpired() { +    var time = now(); +    if (shouldInvoke(time)) { +      return trailingEdge(time); +    } +    // Restart the timer. +    timerId = setTimeout(timerExpired, remainingWait(time)); +  } + +  function trailingEdge(time) { +    timerId = undefined; + +    // Only invoke if we have `lastArgs` which means `func` has been +    // debounced at least once. +    if (trailing && lastArgs) { +      return invokeFunc(time); +    } +    lastArgs = lastThis = undefined; +    return result; +  } + +  function cancel() { +    if (timerId !== undefined) { +      clearTimeout(timerId); +    } +    lastInvokeTime = 0; +    lastArgs = lastCallTime = lastThis = timerId = undefined; +  } + +  function flush() { +    return timerId === undefined ? result : trailingEdge(now()); +  } + +  function debounced() { +    var time = now(), +        isInvoking = shouldInvoke(time); + +    lastArgs = arguments; +    lastThis = this; +    lastCallTime = time; + +    if (isInvoking) { +      if (timerId === undefined) { +        return leadingEdge(lastCallTime); +      } +      if (maxing) { +        // Handle invocations in a tight loop. +        clearTimeout(timerId); +        timerId = setTimeout(timerExpired, wait); +        return invokeFunc(lastCallTime); +      } +    } +    if (timerId === undefined) { +      timerId = setTimeout(timerExpired, wait); +    } +    return result; +  } +  debounced.cancel = cancel; +  debounced.flush = flush; +  return debounced; +} + +module.exports = debounce; diff --git a/node_modules/lodash/deburr.js b/node_modules/lodash/deburr.js new file mode 100644 index 0000000..f85e314 --- /dev/null +++ b/node_modules/lodash/deburr.js @@ -0,0 +1,45 @@ +var deburrLetter = require('./_deburrLetter'), +    toString = require('./toString'); + +/** Used to match Latin Unicode letters (excluding mathematical operators). */ +var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; + +/** Used to compose unicode character classes. */ +var rsComboMarksRange = '\\u0300-\\u036f', +    reComboHalfMarksRange = '\\ufe20-\\ufe2f', +    rsComboSymbolsRange = '\\u20d0-\\u20ff', +    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange; + +/** Used to compose unicode capture groups. */ +var rsCombo = '[' + rsComboRange + ']'; + +/** + * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and + * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). + */ +var reComboMark = RegExp(rsCombo, 'g'); + +/** + * Deburrs `string` by converting + * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) + * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) + * letters to basic Latin letters and removing + * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to deburr. + * @returns {string} Returns the deburred string. + * @example + * + * _.deburr('déjà vu'); + * // => 'deja vu' + */ +function deburr(string) { +  string = toString(string); +  return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); +} + +module.exports = deburr; diff --git a/node_modules/lodash/defaultTo.js b/node_modules/lodash/defaultTo.js new file mode 100644 index 0000000..5b33359 --- /dev/null +++ b/node_modules/lodash/defaultTo.js @@ -0,0 +1,25 @@ +/** + * Checks `value` to determine whether a default value should be returned in + * its place. The `defaultValue` is returned if `value` is `NaN`, `null`, + * or `undefined`. + * + * @static + * @memberOf _ + * @since 4.14.0 + * @category Util + * @param {*} value The value to check. + * @param {*} defaultValue The default value. + * @returns {*} Returns the resolved value. + * @example + * + * _.defaultTo(1, 10); + * // => 1 + * + * _.defaultTo(undefined, 10); + * // => 10 + */ +function defaultTo(value, defaultValue) { +  return (value == null || value !== value) ? defaultValue : value; +} + +module.exports = defaultTo; diff --git a/node_modules/lodash/defaults.js b/node_modules/lodash/defaults.js new file mode 100644 index 0000000..c74df04 --- /dev/null +++ b/node_modules/lodash/defaults.js @@ -0,0 +1,64 @@ +var baseRest = require('./_baseRest'), +    eq = require('./eq'), +    isIterateeCall = require('./_isIterateeCall'), +    keysIn = require('./keysIn'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = baseRest(function(object, sources) { +  object = Object(object); + +  var index = -1; +  var length = sources.length; +  var guard = length > 2 ? sources[2] : undefined; + +  if (guard && isIterateeCall(sources[0], sources[1], guard)) { +    length = 1; +  } + +  while (++index < length) { +    var source = sources[index]; +    var props = keysIn(source); +    var propsIndex = -1; +    var propsLength = props.length; + +    while (++propsIndex < propsLength) { +      var key = props[propsIndex]; +      var value = object[key]; + +      if (value === undefined || +          (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { +        object[key] = source[key]; +      } +    } +  } + +  return object; +}); + +module.exports = defaults; diff --git a/node_modules/lodash/defaultsDeep.js b/node_modules/lodash/defaultsDeep.js new file mode 100644 index 0000000..9b5fa3e --- /dev/null +++ b/node_modules/lodash/defaultsDeep.js @@ -0,0 +1,30 @@ +var apply = require('./_apply'), +    baseRest = require('./_baseRest'), +    customDefaultsMerge = require('./_customDefaultsMerge'), +    mergeWith = require('./mergeWith'); + +/** + * This method is like `_.defaults` except that it recursively assigns + * default properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaults + * @example + * + * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); + * // => { 'a': { 'b': 2, 'c': 3 } } + */ +var defaultsDeep = baseRest(function(args) { +  args.push(undefined, customDefaultsMerge); +  return apply(mergeWith, undefined, args); +}); + +module.exports = defaultsDeep; diff --git a/node_modules/lodash/defer.js b/node_modules/lodash/defer.js new file mode 100644 index 0000000..f6d6c6f --- /dev/null +++ b/node_modules/lodash/defer.js @@ -0,0 +1,26 @@ +var baseDelay = require('./_baseDelay'), +    baseRest = require('./_baseRest'); + +/** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + *   console.log(text); + * }, 'deferred'); + * // => Logs 'deferred' after one millisecond. + */ +var defer = baseRest(function(func, args) { +  return baseDelay(func, 1, args); +}); + +module.exports = defer; diff --git a/node_modules/lodash/delay.js b/node_modules/lodash/delay.js new file mode 100644 index 0000000..bd55479 --- /dev/null +++ b/node_modules/lodash/delay.js @@ -0,0 +1,28 @@ +var baseDelay = require('./_baseDelay'), +    baseRest = require('./_baseRest'), +    toNumber = require('./toNumber'); + +/** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + *   console.log(text); + * }, 1000, 'later'); + * // => Logs 'later' after one second. + */ +var delay = baseRest(function(func, wait, args) { +  return baseDelay(func, toNumber(wait) || 0, args); +}); + +module.exports = delay; diff --git a/node_modules/lodash/difference.js b/node_modules/lodash/difference.js new file mode 100644 index 0000000..fa28bb3 --- /dev/null +++ b/node_modules/lodash/difference.js @@ -0,0 +1,33 @@ +var baseDifference = require('./_baseDifference'), +    baseFlatten = require('./_baseFlatten'), +    baseRest = require('./_baseRest'), +    isArrayLikeObject = require('./isArrayLikeObject'); + +/** + * Creates an array of `array` values not included in the other given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * **Note:** Unlike `_.pullAll`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.without, _.xor + * @example + * + * _.difference([2, 1], [2, 3]); + * // => [1] + */ +var difference = baseRest(function(array, values) { +  return isArrayLikeObject(array) +    ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) +    : []; +}); + +module.exports = difference; diff --git a/node_modules/lodash/differenceBy.js b/node_modules/lodash/differenceBy.js new file mode 100644 index 0000000..2cd63e7 --- /dev/null +++ b/node_modules/lodash/differenceBy.js @@ -0,0 +1,44 @@ +var baseDifference = require('./_baseDifference'), +    baseFlatten = require('./_baseFlatten'), +    baseIteratee = require('./_baseIteratee'), +    baseRest = require('./_baseRest'), +    isArrayLikeObject = require('./isArrayLikeObject'), +    last = require('./last'); + +/** + * This method is like `_.difference` except that it accepts `iteratee` which + * is invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * **Note:** Unlike `_.pullAllBy`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2] + * + * // The `_.property` iteratee shorthand. + * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ +var differenceBy = baseRest(function(array, values) { +  var iteratee = last(values); +  if (isArrayLikeObject(iteratee)) { +    iteratee = undefined; +  } +  return isArrayLikeObject(array) +    ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), baseIteratee(iteratee, 2)) +    : []; +}); + +module.exports = differenceBy; diff --git a/node_modules/lodash/differenceWith.js b/node_modules/lodash/differenceWith.js new file mode 100644 index 0000000..c0233f4 --- /dev/null +++ b/node_modules/lodash/differenceWith.js @@ -0,0 +1,40 @@ +var baseDifference = require('./_baseDifference'), +    baseFlatten = require('./_baseFlatten'), +    baseRest = require('./_baseRest'), +    isArrayLikeObject = require('./isArrayLikeObject'), +    last = require('./last'); + +/** + * This method is like `_.difference` except that it accepts `comparator` + * which is invoked to compare elements of `array` to `values`. The order and + * references of result values are determined by the first array. The comparator + * is invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.pullAllWith`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * + * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); + * // => [{ 'x': 2, 'y': 1 }] + */ +var differenceWith = baseRest(function(array, values) { +  var comparator = last(values); +  if (isArrayLikeObject(comparator)) { +    comparator = undefined; +  } +  return isArrayLikeObject(array) +    ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) +    : []; +}); + +module.exports = differenceWith; diff --git a/node_modules/lodash/divide.js b/node_modules/lodash/divide.js new file mode 100644 index 0000000..8cae0cd --- /dev/null +++ b/node_modules/lodash/divide.js @@ -0,0 +1,22 @@ +var createMathOperation = require('./_createMathOperation'); + +/** + * Divide two numbers. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Math + * @param {number} dividend The first number in a division. + * @param {number} divisor The second number in a division. + * @returns {number} Returns the quotient. + * @example + * + * _.divide(6, 4); + * // => 1.5 + */ +var divide = createMathOperation(function(dividend, divisor) { +  return dividend / divisor; +}, 1); + +module.exports = divide; diff --git a/node_modules/lodash/drop.js b/node_modules/lodash/drop.js new file mode 100644 index 0000000..d5c3cba --- /dev/null +++ b/node_modules/lodash/drop.js @@ -0,0 +1,38 @@ +var baseSlice = require('./_baseSlice'), +    toInteger = require('./toInteger'); + +/** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ +function drop(array, n, guard) { +  var length = array == null ? 0 : array.length; +  if (!length) { +    return []; +  } +  n = (guard || n === undefined) ? 1 : toInteger(n); +  return baseSlice(array, n < 0 ? 0 : n, length); +} + +module.exports = drop; diff --git a/node_modules/lodash/dropRight.js b/node_modules/lodash/dropRight.js new file mode 100644 index 0000000..441fe99 --- /dev/null +++ b/node_modules/lodash/dropRight.js @@ -0,0 +1,39 @@ +var baseSlice = require('./_baseSlice'), +    toInteger = require('./toInteger'); + +/** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ +function dropRight(array, n, guard) { +  var length = array == null ? 0 : array.length; +  if (!length) { +    return []; +  } +  n = (guard || n === undefined) ? 1 : toInteger(n); +  n = length - n; +  return baseSlice(array, 0, n < 0 ? 0 : n); +} + +module.exports = dropRight; diff --git a/node_modules/lodash/dropRightWhile.js b/node_modules/lodash/dropRightWhile.js new file mode 100644 index 0000000..9ad36a0 --- /dev/null +++ b/node_modules/lodash/dropRightWhile.js @@ -0,0 +1,45 @@ +var baseIteratee = require('./_baseIteratee'), +    baseWhile = require('./_baseWhile'); + +/** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + *   { 'user': 'barney',  'active': true }, + *   { 'user': 'fred',    'active': false }, + *   { 'user': 'pebbles', 'active': false } + * ]; + * + * _.dropRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney'] + * + * // The `_.matches` iteratee shorthand. + * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropRightWhile(users, ['active', false]); + * // => objects for ['barney'] + * + * // The `_.property` iteratee shorthand. + * _.dropRightWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ +function dropRightWhile(array, predicate) { +  return (array && array.length) +    ? baseWhile(array, baseIteratee(predicate, 3), true, true) +    : []; +} + +module.exports = dropRightWhile; diff --git a/node_modules/lodash/dropWhile.js b/node_modules/lodash/dropWhile.js new file mode 100644 index 0000000..903ef56 --- /dev/null +++ b/node_modules/lodash/dropWhile.js @@ -0,0 +1,45 @@ +var baseIteratee = require('./_baseIteratee'), +    baseWhile = require('./_baseWhile'); + +/** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + *   { 'user': 'barney',  'active': false }, + *   { 'user': 'fred',    'active': false }, + *   { 'user': 'pebbles', 'active': true } + * ]; + * + * _.dropWhile(users, function(o) { return !o.active; }); + * // => objects for ['pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.dropWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropWhile(users, ['active', false]); + * // => objects for ['pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.dropWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ +function dropWhile(array, predicate) { +  return (array && array.length) +    ? baseWhile(array, baseIteratee(predicate, 3), true) +    : []; +} + +module.exports = dropWhile; diff --git a/node_modules/lodash/each.js b/node_modules/lodash/each.js new file mode 100644 index 0000000..8800f42 --- /dev/null +++ b/node_modules/lodash/each.js @@ -0,0 +1 @@ +module.exports = require('./forEach'); diff --git a/node_modules/lodash/eachRight.js b/node_modules/lodash/eachRight.js new file mode 100644 index 0000000..3252b2a --- /dev/null +++ b/node_modules/lodash/eachRight.js @@ -0,0 +1 @@ +module.exports = require('./forEachRight'); diff --git a/node_modules/lodash/endsWith.js b/node_modules/lodash/endsWith.js new file mode 100644 index 0000000..76fc866 --- /dev/null +++ b/node_modules/lodash/endsWith.js @@ -0,0 +1,43 @@ +var baseClamp = require('./_baseClamp'), +    baseToString = require('./_baseToString'), +    toInteger = require('./toInteger'), +    toString = require('./toString'); + +/** + * Checks if `string` ends with the given target string. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=string.length] The position to search up to. + * @returns {boolean} Returns `true` if `string` ends with `target`, + *  else `false`. + * @example + * + * _.endsWith('abc', 'c'); + * // => true + * + * _.endsWith('abc', 'b'); + * // => false + * + * _.endsWith('abc', 'b', 2); + * // => true + */ +function endsWith(string, target, position) { +  string = toString(string); +  target = baseToString(target); + +  var length = string.length; +  position = position === undefined +    ? length +    : baseClamp(toInteger(position), 0, length); + +  var end = position; +  position -= target.length; +  return position >= 0 && string.slice(position, end) == target; +} + +module.exports = endsWith; diff --git a/node_modules/lodash/entries.js b/node_modules/lodash/entries.js new file mode 100644 index 0000000..7a88df2 --- /dev/null +++ b/node_modules/lodash/entries.js @@ -0,0 +1 @@ +module.exports = require('./toPairs'); diff --git a/node_modules/lodash/entriesIn.js b/node_modules/lodash/entriesIn.js new file mode 100644 index 0000000..f6c6331 --- /dev/null +++ b/node_modules/lodash/entriesIn.js @@ -0,0 +1 @@ +module.exports = require('./toPairsIn'); diff --git a/node_modules/lodash/eq.js b/node_modules/lodash/eq.js new file mode 100644 index 0000000..a940688 --- /dev/null +++ b/node_modules/lodash/eq.js @@ -0,0 +1,37 @@ +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { +  return value === other || (value !== value && other !== other); +} + +module.exports = eq; diff --git a/node_modules/lodash/escape.js b/node_modules/lodash/escape.js new file mode 100644 index 0000000..9247e00 --- /dev/null +++ b/node_modules/lodash/escape.js @@ -0,0 +1,43 @@ +var escapeHtmlChar = require('./_escapeHtmlChar'), +    toString = require('./toString'); + +/** Used to match HTML entities and HTML characters. */ +var reUnescapedHtml = /[&<>"']/g, +    reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + +/** + * Converts the characters "&", "<", ">", '"', and "'" in `string` to their + * corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. See + * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * When working with HTML you should always + * [quote attribute values](http://wonko.com/post/html-escaping) to reduce + * XSS vectors. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ +function escape(string) { +  string = toString(string); +  return (string && reHasUnescapedHtml.test(string)) +    ? string.replace(reUnescapedHtml, escapeHtmlChar) +    : string; +} + +module.exports = escape; diff --git a/node_modules/lodash/escapeRegExp.js b/node_modules/lodash/escapeRegExp.js new file mode 100644 index 0000000..0a58c69 --- /dev/null +++ b/node_modules/lodash/escapeRegExp.js @@ -0,0 +1,32 @@ +var toString = require('./toString'); + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, +    reHasRegExpChar = RegExp(reRegExpChar.source); + +/** + * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", + * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escapeRegExp('[lodash](https://lodash.com/)'); + * // => '\[lodash\]\(https://lodash\.com/\)' + */ +function escapeRegExp(string) { +  string = toString(string); +  return (string && reHasRegExpChar.test(string)) +    ? string.replace(reRegExpChar, '\\$&') +    : string; +} + +module.exports = escapeRegExp; diff --git a/node_modules/lodash/every.js b/node_modules/lodash/every.js new file mode 100644 index 0000000..25080da --- /dev/null +++ b/node_modules/lodash/every.js @@ -0,0 +1,56 @@ +var arrayEvery = require('./_arrayEvery'), +    baseEvery = require('./_baseEvery'), +    baseIteratee = require('./_baseIteratee'), +    isArray = require('./isArray'), +    isIterateeCall = require('./_isIterateeCall'); + +/** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * **Note:** This method returns `true` for + * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because + * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of + * elements of empty collections. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + *  else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + *   { 'user': 'barney', 'age': 36, 'active': false }, + *   { 'user': 'fred',   'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ +function every(collection, predicate, guard) { +  var func = isArray(collection) ? arrayEvery : baseEvery; +  if (guard && isIterateeCall(collection, predicate, guard)) { +    predicate = undefined; +  } +  return func(collection, baseIteratee(predicate, 3)); +} + +module.exports = every; diff --git a/node_modules/lodash/extend.js b/node_modules/lodash/extend.js new file mode 100644 index 0000000..e00166c --- /dev/null +++ b/node_modules/lodash/extend.js @@ -0,0 +1 @@ +module.exports = require('./assignIn'); diff --git a/node_modules/lodash/extendWith.js b/node_modules/lodash/extendWith.js new file mode 100644 index 0000000..dbdcb3b --- /dev/null +++ b/node_modules/lodash/extendWith.js @@ -0,0 +1 @@ +module.exports = require('./assignInWith'); diff --git a/node_modules/lodash/fill.js b/node_modules/lodash/fill.js new file mode 100644 index 0000000..ae13aa1 --- /dev/null +++ b/node_modules/lodash/fill.js @@ -0,0 +1,45 @@ +var baseFill = require('./_baseFill'), +    isIterateeCall = require('./_isIterateeCall'); + +/** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8, 10], '*', 1, 3); + * // => [4, '*', '*', 10] + */ +function fill(array, value, start, end) { +  var length = array == null ? 0 : array.length; +  if (!length) { +    return []; +  } +  if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { +    start = 0; +    end = length; +  } +  return baseFill(array, value, start, end); +} + +module.exports = fill; diff --git a/node_modules/lodash/filter.js b/node_modules/lodash/filter.js new file mode 100644 index 0000000..89e0c8c --- /dev/null +++ b/node_modules/lodash/filter.js @@ -0,0 +1,52 @@ +var arrayFilter = require('./_arrayFilter'), +    baseFilter = require('./_baseFilter'), +    baseIteratee = require('./_baseIteratee'), +    isArray = require('./isArray'); + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + *   { 'user': 'barney', 'age': 36, 'active': true }, + *   { 'user': 'fred',   'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { +  var func = isArray(collection) ? arrayFilter : baseFilter; +  return func(collection, baseIteratee(predicate, 3)); +} + +module.exports = filter; diff --git a/node_modules/lodash/find.js b/node_modules/lodash/find.js new file mode 100644 index 0000000..de732cc --- /dev/null +++ b/node_modules/lodash/find.js @@ -0,0 +1,42 @@ +var createFind = require('./_createFind'), +    findIndex = require('./findIndex'); + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + *   { 'user': 'barney',  'age': 36, 'active': true }, + *   { 'user': 'fred',    'age': 40, 'active': false }, + *   { 'user': 'pebbles', 'age': 1,  'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = createFind(findIndex); + +module.exports = find; diff --git a/node_modules/lodash/findIndex.js b/node_modules/lodash/findIndex.js new file mode 100644 index 0000000..4689069 --- /dev/null +++ b/node_modules/lodash/findIndex.js @@ -0,0 +1,55 @@ +var baseFindIndex = require('./_baseFindIndex'), +    baseIteratee = require('./_baseIteratee'), +    toInteger = require('./toInteger'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + *   { 'user': 'barney',  'active': false }, + *   { 'user': 'fred',    'active': false }, + *   { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { +  var length = array == null ? 0 : array.length; +  if (!length) { +    return -1; +  } +  var index = fromIndex == null ? 0 : toInteger(fromIndex); +  if (index < 0) { +    index = nativeMax(length + index, 0); +  } +  return baseFindIndex(array, baseIteratee(predicate, 3), index); +} + +module.exports = findIndex; diff --git a/node_modules/lodash/findKey.js b/node_modules/lodash/findKey.js new file mode 100644 index 0000000..cac0248 --- /dev/null +++ b/node_modules/lodash/findKey.js @@ -0,0 +1,44 @@ +var baseFindKey = require('./_baseFindKey'), +    baseForOwn = require('./_baseForOwn'), +    baseIteratee = require('./_baseIteratee'); + +/** + * This method is like `_.find` except that it returns the key of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + *  else `undefined`. + * @example + * + * var users = { + *   'barney':  { 'age': 36, 'active': true }, + *   'fred':    { 'age': 40, 'active': false }, + *   'pebbles': { 'age': 1,  'active': true } + * }; + * + * _.findKey(users, function(o) { return o.age < 40; }); + * // => 'barney' (iteration order is not guaranteed) + * + * // The `_.matches` iteratee shorthand. + * _.findKey(users, { 'age': 1, 'active': true }); + * // => 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findKey(users, 'active'); + * // => 'barney' + */ +function findKey(object, predicate) { +  return baseFindKey(object, baseIteratee(predicate, 3), baseForOwn); +} + +module.exports = findKey; diff --git a/node_modules/lodash/findLast.js b/node_modules/lodash/findLast.js new file mode 100644 index 0000000..70b4271 --- /dev/null +++ b/node_modules/lodash/findLast.js @@ -0,0 +1,25 @@ +var createFind = require('./_createFind'), +    findLastIndex = require('./findLastIndex'); + +/** + * This method is like `_.find` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=collection.length-1] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(n) { + *   return n % 2 == 1; + * }); + * // => 3 + */ +var findLast = createFind(findLastIndex); + +module.exports = findLast; diff --git a/node_modules/lodash/findLastIndex.js b/node_modules/lodash/findLastIndex.js new file mode 100644 index 0000000..7da3431 --- /dev/null +++ b/node_modules/lodash/findLastIndex.js @@ -0,0 +1,59 @@ +var baseFindIndex = require('./_baseFindIndex'), +    baseIteratee = require('./_baseIteratee'), +    toInteger = require('./toInteger'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, +    nativeMin = Math.min; + +/** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + *   { 'user': 'barney',  'active': true }, + *   { 'user': 'fred',    'active': false }, + *   { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); + * // => 2 + * + * // The `_.matches` iteratee shorthand. + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastIndex(users, ['active', false]); + * // => 2 + * + * // The `_.property` iteratee shorthand. + * _.findLastIndex(users, 'active'); + * // => 0 + */ +function findLastIndex(array, predicate, fromIndex) { +  var length = array == null ? 0 : array.length; +  if (!length) { +    return -1; +  } +  var index = length - 1; +  if (fromIndex !== undefined) { +    index = toInteger(fromIndex); +    index = fromIndex < 0 +      ? nativeMax(length + index, 0) +      : nativeMin(index, length - 1); +  } +  return baseFindIndex(array, baseIteratee(predicate, 3), index, true); +} + +module.exports = findLastIndex; diff --git a/node_modules/lodash/findLastKey.js b/node_modules/lodash/findLastKey.js new file mode 100644 index 0000000..66fb9fb --- /dev/null +++ b/node_modules/lodash/findLastKey.js @@ -0,0 +1,44 @@ +var baseFindKey = require('./_baseFindKey'), +    baseForOwnRight = require('./_baseForOwnRight'), +    baseIteratee = require('./_baseIteratee'); + +/** + * This method is like `_.findKey` except that it iterates over elements of + * a collection in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + *  else `undefined`. + * @example + * + * var users = { + *   'barney':  { 'age': 36, 'active': true }, + *   'fred':    { 'age': 40, 'active': false }, + *   'pebbles': { 'age': 1,  'active': true } + * }; + * + * _.findLastKey(users, function(o) { return o.age < 40; }); + * // => returns 'pebbles' assuming `_.findKey` returns 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.findLastKey(users, { 'age': 36, 'active': true }); + * // => 'barney' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findLastKey(users, 'active'); + * // => 'pebbles' + */ +function findLastKey(object, predicate) { +  return baseFindKey(object, baseIteratee(predicate, 3), baseForOwnRight); +} + +module.exports = findLastKey; diff --git a/node_modules/lodash/first.js b/node_modules/lodash/first.js new file mode 100644 index 0000000..53f4ad1 --- /dev/null +++ b/node_modules/lodash/first.js @@ -0,0 +1 @@ +module.exports = require('./head'); diff --git a/node_modules/lodash/flake.lock b/node_modules/lodash/flake.lock new file mode 100644 index 0000000..dd03252 --- /dev/null +++ b/node_modules/lodash/flake.lock @@ -0,0 +1,40 @@ +{ +  "nodes": { +    "nixpkgs": { +      "locked": { +        "lastModified": 1613582597, +        "narHash": "sha256-6LvipIvFuhyorHpUqK3HjySC5Y6gshXHFBhU9EJ4DoM=", +        "path": "/nix/store/srvplqq673sqd9vyfhyc5w1p88y1gfm4-source", +        "rev": "6b1057b452c55bb3b463f0d7055bc4ec3fd1f381", +        "type": "path" +      }, +      "original": { +        "id": "nixpkgs", +        "type": "indirect" +      } +    }, +    "root": { +      "inputs": { +        "nixpkgs": "nixpkgs", +        "utils": "utils" +      } +    }, +    "utils": { +      "locked": { +        "lastModified": 1610051610, +        "narHash": "sha256-U9rPz/usA1/Aohhk7Cmc2gBrEEKRzcW4nwPWMPwja4Y=", +        "owner": "numtide", +        "repo": "flake-utils", +        "rev": "3982c9903e93927c2164caa727cd3f6a0e6d14cc", +        "type": "github" +      }, +      "original": { +        "owner": "numtide", +        "repo": "flake-utils", +        "type": "github" +      } +    } +  }, +  "root": "root", +  "version": 7 +} diff --git a/node_modules/lodash/flake.nix b/node_modules/lodash/flake.nix new file mode 100644 index 0000000..15a451c --- /dev/null +++ b/node_modules/lodash/flake.nix @@ -0,0 +1,20 @@ +{ +  inputs = { +    utils.url = "github:numtide/flake-utils"; +  }; + +  outputs = { self, nixpkgs, utils }: +    utils.lib.eachDefaultSystem (system: +      let +        pkgs = nixpkgs.legacyPackages."${system}"; +      in rec { +       devShell = pkgs.mkShell { +          nativeBuildInputs = with pkgs; [ +            yarn +            nodejs-14_x +            nodePackages.typescript-language-server +            nodePackages.eslint +          ]; +        }; +      }); +} diff --git a/node_modules/lodash/flatMap.js b/node_modules/lodash/flatMap.js new file mode 100644 index 0000000..e668506 --- /dev/null +++ b/node_modules/lodash/flatMap.js @@ -0,0 +1,29 @@ +var baseFlatten = require('./_baseFlatten'), +    map = require('./map'); + +/** + * Creates a flattened array of values by running each element in `collection` + * thru `iteratee` and flattening the mapped results. The iteratee is invoked + * with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + *   return [n, n]; + * } + * + * _.flatMap([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ +function flatMap(collection, iteratee) { +  return baseFlatten(map(collection, iteratee), 1); +} + +module.exports = flatMap; diff --git a/node_modules/lodash/flatMapDeep.js b/node_modules/lodash/flatMapDeep.js new file mode 100644 index 0000000..4653d60 --- /dev/null +++ b/node_modules/lodash/flatMapDeep.js @@ -0,0 +1,31 @@ +var baseFlatten = require('./_baseFlatten'), +    map = require('./map'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + *   return [[[n, n]]]; + * } + * + * _.flatMapDeep([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ +function flatMapDeep(collection, iteratee) { +  return baseFlatten(map(collection, iteratee), INFINITY); +} + +module.exports = flatMapDeep; diff --git a/node_modules/lodash/flatMapDepth.js b/node_modules/lodash/flatMapDepth.js new file mode 100644 index 0000000..6d72005 --- /dev/null +++ b/node_modules/lodash/flatMapDepth.js @@ -0,0 +1,31 @@ +var baseFlatten = require('./_baseFlatten'), +    map = require('./map'), +    toInteger = require('./toInteger'); + +/** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + *   return [[[n, n]]]; + * } + * + * _.flatMapDepth([1, 2], duplicate, 2); + * // => [[1, 1], [2, 2]] + */ +function flatMapDepth(collection, iteratee, depth) { +  depth = depth === undefined ? 1 : toInteger(depth); +  return baseFlatten(map(collection, iteratee), depth); +} + +module.exports = flatMapDepth; diff --git a/node_modules/lodash/flatten.js b/node_modules/lodash/flatten.js new file mode 100644 index 0000000..3f09f7f --- /dev/null +++ b/node_modules/lodash/flatten.js @@ -0,0 +1,22 @@ +var baseFlatten = require('./_baseFlatten'); + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { +  var length = array == null ? 0 : array.length; +  return length ? baseFlatten(array, 1) : []; +} + +module.exports = flatten; diff --git a/node_modules/lodash/flattenDeep.js b/node_modules/lodash/flattenDeep.js new file mode 100644 index 0000000..8ad585c --- /dev/null +++ b/node_modules/lodash/flattenDeep.js @@ -0,0 +1,25 @@ +var baseFlatten = require('./_baseFlatten'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ +function flattenDeep(array) { +  var length = array == null ? 0 : array.length; +  return length ? baseFlatten(array, INFINITY) : []; +} + +module.exports = flattenDeep; diff --git a/node_modules/lodash/flattenDepth.js b/node_modules/lodash/flattenDepth.js new file mode 100644 index 0000000..441fdcc --- /dev/null +++ b/node_modules/lodash/flattenDepth.js @@ -0,0 +1,33 @@ +var baseFlatten = require('./_baseFlatten'), +    toInteger = require('./toInteger'); + +/** + * Recursively flatten `array` up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Array + * @param {Array} array The array to flatten. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * var array = [1, [2, [3, [4]], 5]]; + * + * _.flattenDepth(array, 1); + * // => [1, 2, [3, [4]], 5] + * + * _.flattenDepth(array, 2); + * // => [1, 2, 3, [4], 5] + */ +function flattenDepth(array, depth) { +  var length = array == null ? 0 : array.length; +  if (!length) { +    return []; +  } +  depth = depth === undefined ? 1 : toInteger(depth); +  return baseFlatten(array, depth); +} + +module.exports = flattenDepth; diff --git a/node_modules/lodash/flip.js b/node_modules/lodash/flip.js new file mode 100644 index 0000000..c28dd78 --- /dev/null +++ b/node_modules/lodash/flip.js @@ -0,0 +1,28 @@ +var createWrap = require('./_createWrap'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_FLIP_FLAG = 512; + +/** + * Creates a function that invokes `func` with arguments reversed. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to flip arguments for. + * @returns {Function} Returns the new flipped function. + * @example + * + * var flipped = _.flip(function() { + *   return _.toArray(arguments); + * }); + * + * flipped('a', 'b', 'c', 'd'); + * // => ['d', 'c', 'b', 'a'] + */ +function flip(func) { +  return createWrap(func, WRAP_FLIP_FLAG); +} + +module.exports = flip; diff --git a/node_modules/lodash/floor.js b/node_modules/lodash/floor.js new file mode 100644 index 0000000..ab6dfa2 --- /dev/null +++ b/node_modules/lodash/floor.js @@ -0,0 +1,26 @@ +var createRound = require('./_createRound'); + +/** + * Computes `number` rounded down to `precision`. + * + * @static + * @memberOf _ + * @since 3.10.0 + * @category Math + * @param {number} number The number to round down. + * @param {number} [precision=0] The precision to round down to. + * @returns {number} Returns the rounded down number. + * @example + * + * _.floor(4.006); + * // => 4 + * + * _.floor(0.046, 2); + * // => 0.04 + * + * _.floor(4060, -2); + * // => 4000 + */ +var floor = createRound('floor'); + +module.exports = floor; diff --git a/node_modules/lodash/flow.js b/node_modules/lodash/flow.js new file mode 100644 index 0000000..74b6b62 --- /dev/null +++ b/node_modules/lodash/flow.js @@ -0,0 +1,27 @@ +var createFlow = require('./_createFlow'); + +/** + * Creates a function that returns the result of invoking the given functions + * with the `this` binding of the created function, where each successive + * invocation is supplied the return value of the previous. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Util + * @param {...(Function|Function[])} [funcs] The functions to invoke. + * @returns {Function} Returns the new composite function. + * @see _.flowRight + * @example + * + * function square(n) { + *   return n * n; + * } + * + * var addSquare = _.flow([_.add, square]); + * addSquare(1, 2); + * // => 9 + */ +var flow = createFlow(); + +module.exports = flow; diff --git a/node_modules/lodash/flowRight.js b/node_modules/lodash/flowRight.js new file mode 100644 index 0000000..1146141 --- /dev/null +++ b/node_modules/lodash/flowRight.js @@ -0,0 +1,26 @@ +var createFlow = require('./_createFlow'); + +/** + * This method is like `_.flow` except that it creates a function that + * invokes the given functions from right to left. + * + * @static + * @since 3.0.0 + * @memberOf _ + * @category Util + * @param {...(Function|Function[])} [funcs] The functions to invoke. + * @returns {Function} Returns the new composite function. + * @see _.flow + * @example + * + * function square(n) { + *   return n * n; + * } + * + * var addSquare = _.flowRight([square, _.add]); + * addSquare(1, 2); + * // => 9 + */ +var flowRight = createFlow(true); + +module.exports = flowRight; diff --git a/node_modules/lodash/forEach.js b/node_modules/lodash/forEach.js new file mode 100644 index 0000000..c64eaa7 --- /dev/null +++ b/node_modules/lodash/forEach.js @@ -0,0 +1,41 @@ +var arrayEach = require('./_arrayEach'), +    baseEach = require('./_baseEach'), +    castFunction = require('./_castFunction'), +    isArray = require('./isArray'); + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + *   console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + *   console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { +  var func = isArray(collection) ? arrayEach : baseEach; +  return func(collection, castFunction(iteratee)); +} + +module.exports = forEach; diff --git a/node_modules/lodash/forEachRight.js b/node_modules/lodash/forEachRight.js new file mode 100644 index 0000000..7390eba --- /dev/null +++ b/node_modules/lodash/forEachRight.js @@ -0,0 +1,31 @@ +var arrayEachRight = require('./_arrayEachRight'), +    baseEachRight = require('./_baseEachRight'), +    castFunction = require('./_castFunction'), +    isArray = require('./isArray'); + +/** + * This method is like `_.forEach` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @alias eachRight + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEach + * @example + * + * _.forEachRight([1, 2], function(value) { + *   console.log(value); + * }); + * // => Logs `2` then `1`. + */ +function forEachRight(collection, iteratee) { +  var func = isArray(collection) ? arrayEachRight : baseEachRight; +  return func(collection, castFunction(iteratee)); +} + +module.exports = forEachRight; diff --git a/node_modules/lodash/forIn.js b/node_modules/lodash/forIn.js new file mode 100644 index 0000000..583a596 --- /dev/null +++ b/node_modules/lodash/forIn.js @@ -0,0 +1,39 @@ +var baseFor = require('./_baseFor'), +    castFunction = require('./_castFunction'), +    keysIn = require('./keysIn'); + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + *   this.a = 1; + *   this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + *   console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { +  return object == null +    ? object +    : baseFor(object, castFunction(iteratee), keysIn); +} + +module.exports = forIn; diff --git a/node_modules/lodash/forInRight.js b/node_modules/lodash/forInRight.js new file mode 100644 index 0000000..4aedf58 --- /dev/null +++ b/node_modules/lodash/forInRight.js @@ -0,0 +1,37 @@ +var baseForRight = require('./_baseForRight'), +    castFunction = require('./_castFunction'), +    keysIn = require('./keysIn'); + +/** + * This method is like `_.forIn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forIn + * @example + * + * function Foo() { + *   this.a = 1; + *   this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forInRight(new Foo, function(value, key) { + *   console.log(key); + * }); + * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. + */ +function forInRight(object, iteratee) { +  return object == null +    ? object +    : baseForRight(object, castFunction(iteratee), keysIn); +} + +module.exports = forInRight; diff --git a/node_modules/lodash/forOwn.js b/node_modules/lodash/forOwn.js new file mode 100644 index 0000000..94eed84 --- /dev/null +++ b/node_modules/lodash/forOwn.js @@ -0,0 +1,36 @@ +var baseForOwn = require('./_baseForOwn'), +    castFunction = require('./_castFunction'); + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + *   this.a = 1; + *   this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + *   console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { +  return object && baseForOwn(object, castFunction(iteratee)); +} + +module.exports = forOwn; diff --git a/node_modules/lodash/forOwnRight.js b/node_modules/lodash/forOwnRight.js new file mode 100644 index 0000000..86f338f --- /dev/null +++ b/node_modules/lodash/forOwnRight.js @@ -0,0 +1,34 @@ +var baseForOwnRight = require('./_baseForOwnRight'), +    castFunction = require('./_castFunction'); + +/** + * This method is like `_.forOwn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwn + * @example + * + * function Foo() { + *   this.a = 1; + *   this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwnRight(new Foo, function(value, key) { + *   console.log(key); + * }); + * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. + */ +function forOwnRight(object, iteratee) { +  return object && baseForOwnRight(object, castFunction(iteratee)); +} + +module.exports = forOwnRight; diff --git a/node_modules/lodash/fp.js b/node_modules/lodash/fp.js new file mode 100644 index 0000000..e372dbb --- /dev/null +++ b/node_modules/lodash/fp.js @@ -0,0 +1,2 @@ +var _ = require('./lodash.min').runInContext(); +module.exports = require('./fp/_baseConvert')(_, _); diff --git a/node_modules/lodash/fp/F.js b/node_modules/lodash/fp/F.js new file mode 100644 index 0000000..a05a63a --- /dev/null +++ b/node_modules/lodash/fp/F.js @@ -0,0 +1 @@ +module.exports = require('./stubFalse'); diff --git a/node_modules/lodash/fp/T.js b/node_modules/lodash/fp/T.js new file mode 100644 index 0000000..e2ba8ea --- /dev/null +++ b/node_modules/lodash/fp/T.js @@ -0,0 +1 @@ +module.exports = require('./stubTrue'); diff --git a/node_modules/lodash/fp/__.js b/node_modules/lodash/fp/__.js new file mode 100644 index 0000000..4af98de --- /dev/null +++ b/node_modules/lodash/fp/__.js @@ -0,0 +1 @@ +module.exports = require('./placeholder'); diff --git a/node_modules/lodash/fp/_baseConvert.js b/node_modules/lodash/fp/_baseConvert.js new file mode 100644 index 0000000..9baf8e1 --- /dev/null +++ b/node_modules/lodash/fp/_baseConvert.js @@ -0,0 +1,569 @@ +var mapping = require('./_mapping'), +    fallbackHolder = require('./placeholder'); + +/** Built-in value reference. */ +var push = Array.prototype.push; + +/** + * Creates a function, with an arity of `n`, that invokes `func` with the + * arguments it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} n The arity of the new function. + * @returns {Function} Returns the new function. + */ +function baseArity(func, n) { +  return n == 2 +    ? function(a, b) { return func.apply(undefined, arguments); } +    : function(a) { return func.apply(undefined, arguments); }; +} + +/** + * Creates a function that invokes `func`, with up to `n` arguments, ignoring + * any additional arguments. + * + * @private + * @param {Function} func The function to cap arguments for. + * @param {number} n The arity cap. + * @returns {Function} Returns the new function. + */ +function baseAry(func, n) { +  return n == 2 +    ? function(a, b) { return func(a, b); } +    : function(a) { return func(a); }; +} + +/** + * Creates a clone of `array`. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the cloned array. + */ +function cloneArray(array) { +  var length = array ? array.length : 0, +      result = Array(length); + +  while (length--) { +    result[length] = array[length]; +  } +  return result; +} + +/** + * Creates a function that clones a given object using the assignment `func`. + * + * @private + * @param {Function} func The assignment function. + * @returns {Function} Returns the new cloner function. + */ +function createCloner(func) { +  return function(object) { +    return func({}, object); +  }; +} + +/** + * A specialized version of `_.spread` which flattens the spread array into + * the arguments of the invoked `func`. + * + * @private + * @param {Function} func The function to spread arguments over. + * @param {number} start The start position of the spread. + * @returns {Function} Returns the new function. + */ +function flatSpread(func, start) { +  return function() { +    var length = arguments.length, +        lastIndex = length - 1, +        args = Array(length); + +    while (length--) { +      args[length] = arguments[length]; +    } +    var array = args[start], +        otherArgs = args.slice(0, start); + +    if (array) { +      push.apply(otherArgs, array); +    } +    if (start != lastIndex) { +      push.apply(otherArgs, args.slice(start + 1)); +    } +    return func.apply(this, otherArgs); +  }; +} + +/** + * Creates a function that wraps `func` and uses `cloner` to clone the first + * argument it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} cloner The function to clone arguments. + * @returns {Function} Returns the new immutable function. + */ +function wrapImmutable(func, cloner) { +  return function() { +    var length = arguments.length; +    if (!length) { +      return; +    } +    var args = Array(length); +    while (length--) { +      args[length] = arguments[length]; +    } +    var result = args[0] = cloner.apply(undefined, args); +    func.apply(undefined, args); +    return result; +  }; +} + +/** + * The base implementation of `convert` which accepts a `util` object of methods + * required to perform conversions. + * + * @param {Object} util The util object. + * @param {string} name The name of the function to convert. + * @param {Function} func The function to convert. + * @param {Object} [options] The options object. + * @param {boolean} [options.cap=true] Specify capping iteratee arguments. + * @param {boolean} [options.curry=true] Specify currying. + * @param {boolean} [options.fixed=true] Specify fixed arity. + * @param {boolean} [options.immutable=true] Specify immutable operations. + * @param {boolean} [options.rearg=true] Specify rearranging arguments. + * @returns {Function|Object} Returns the converted function or object. + */ +function baseConvert(util, name, func, options) { +  var isLib = typeof name == 'function', +      isObj = name === Object(name); + +  if (isObj) { +    options = func; +    func = name; +    name = undefined; +  } +  if (func == null) { +    throw new TypeError; +  } +  options || (options = {}); + +  var config = { +    'cap': 'cap' in options ? options.cap : true, +    'curry': 'curry' in options ? options.curry : true, +    'fixed': 'fixed' in options ? options.fixed : true, +    'immutable': 'immutable' in options ? options.immutable : true, +    'rearg': 'rearg' in options ? options.rearg : true +  }; + +  var defaultHolder = isLib ? func : fallbackHolder, +      forceCurry = ('curry' in options) && options.curry, +      forceFixed = ('fixed' in options) && options.fixed, +      forceRearg = ('rearg' in options) && options.rearg, +      pristine = isLib ? func.runInContext() : undefined; + +  var helpers = isLib ? func : { +    'ary': util.ary, +    'assign': util.assign, +    'clone': util.clone, +    'curry': util.curry, +    'forEach': util.forEach, +    'isArray': util.isArray, +    'isError': util.isError, +    'isFunction': util.isFunction, +    'isWeakMap': util.isWeakMap, +    'iteratee': util.iteratee, +    'keys': util.keys, +    'rearg': util.rearg, +    'toInteger': util.toInteger, +    'toPath': util.toPath +  }; + +  var ary = helpers.ary, +      assign = helpers.assign, +      clone = helpers.clone, +      curry = helpers.curry, +      each = helpers.forEach, +      isArray = helpers.isArray, +      isError = helpers.isError, +      isFunction = helpers.isFunction, +      isWeakMap = helpers.isWeakMap, +      keys = helpers.keys, +      rearg = helpers.rearg, +      toInteger = helpers.toInteger, +      toPath = helpers.toPath; + +  var aryMethodKeys = keys(mapping.aryMethod); + +  var wrappers = { +    'castArray': function(castArray) { +      return function() { +        var value = arguments[0]; +        return isArray(value) +          ? castArray(cloneArray(value)) +          : castArray.apply(undefined, arguments); +      }; +    }, +    'iteratee': function(iteratee) { +      return function() { +        var func = arguments[0], +            arity = arguments[1], +            result = iteratee(func, arity), +            length = result.length; + +        if (config.cap && typeof arity == 'number') { +          arity = arity > 2 ? (arity - 2) : 1; +          return (length && length <= arity) ? result : baseAry(result, arity); +        } +        return result; +      }; +    }, +    'mixin': function(mixin) { +      return function(source) { +        var func = this; +        if (!isFunction(func)) { +          return mixin(func, Object(source)); +        } +        var pairs = []; +        each(keys(source), function(key) { +          if (isFunction(source[key])) { +            pairs.push([key, func.prototype[key]]); +          } +        }); + +        mixin(func, Object(source)); + +        each(pairs, function(pair) { +          var value = pair[1]; +          if (isFunction(value)) { +            func.prototype[pair[0]] = value; +          } else { +            delete func.prototype[pair[0]]; +          } +        }); +        return func; +      }; +    }, +    'nthArg': function(nthArg) { +      return function(n) { +        var arity = n < 0 ? 1 : (toInteger(n) + 1); +        return curry(nthArg(n), arity); +      }; +    }, +    'rearg': function(rearg) { +      return function(func, indexes) { +        var arity = indexes ? indexes.length : 0; +        return curry(rearg(func, indexes), arity); +      }; +    }, +    'runInContext': function(runInContext) { +      return function(context) { +        return baseConvert(util, runInContext(context), options); +      }; +    } +  }; + +  /*--------------------------------------------------------------------------*/ + +  /** +   * Casts `func` to a function with an arity capped iteratee if needed. +   * +   * @private +   * @param {string} name The name of the function to inspect. +   * @param {Function} func The function to inspect. +   * @returns {Function} Returns the cast function. +   */ +  function castCap(name, func) { +    if (config.cap) { +      var indexes = mapping.iterateeRearg[name]; +      if (indexes) { +        return iterateeRearg(func, indexes); +      } +      var n = !isLib && mapping.iterateeAry[name]; +      if (n) { +        return iterateeAry(func, n); +      } +    } +    return func; +  } + +  /** +   * Casts `func` to a curried function if needed. +   * +   * @private +   * @param {string} name The name of the function to inspect. +   * @param {Function} func The function to inspect. +   * @param {number} n The arity of `func`. +   * @returns {Function} Returns the cast function. +   */ +  function castCurry(name, func, n) { +    return (forceCurry || (config.curry && n > 1)) +      ? curry(func, n) +      : func; +  } + +  /** +   * Casts `func` to a fixed arity function if needed. +   * +   * @private +   * @param {string} name The name of the function to inspect. +   * @param {Function} func The function to inspect. +   * @param {number} n The arity cap. +   * @returns {Function} Returns the cast function. +   */ +  function castFixed(name, func, n) { +    if (config.fixed && (forceFixed || !mapping.skipFixed[name])) { +      var data = mapping.methodSpread[name], +          start = data && data.start; + +      return start  === undefined ? ary(func, n) : flatSpread(func, start); +    } +    return func; +  } + +  /** +   * Casts `func` to an rearged function if needed. +   * +   * @private +   * @param {string} name The name of the function to inspect. +   * @param {Function} func The function to inspect. +   * @param {number} n The arity of `func`. +   * @returns {Function} Returns the cast function. +   */ +  function castRearg(name, func, n) { +    return (config.rearg && n > 1 && (forceRearg || !mapping.skipRearg[name])) +      ? rearg(func, mapping.methodRearg[name] || mapping.aryRearg[n]) +      : func; +  } + +  /** +   * Creates a clone of `object` by `path`. +   * +   * @private +   * @param {Object} object The object to clone. +   * @param {Array|string} path The path to clone by. +   * @returns {Object} Returns the cloned object. +   */ +  function cloneByPath(object, path) { +    path = toPath(path); + +    var index = -1, +        length = path.length, +        lastIndex = length - 1, +        result = clone(Object(object)), +        nested = result; + +    while (nested != null && ++index < length) { +      var key = path[index], +          value = nested[key]; + +      if (value != null && +          !(isFunction(value) || isError(value) || isWeakMap(value))) { +        nested[key] = clone(index == lastIndex ? value : Object(value)); +      } +      nested = nested[key]; +    } +    return result; +  } + +  /** +   * Converts `lodash` to an immutable auto-curried iteratee-first data-last +   * version with conversion `options` applied. +   * +   * @param {Object} [options] The options object. See `baseConvert` for more details. +   * @returns {Function} Returns the converted `lodash`. +   */ +  function convertLib(options) { +    return _.runInContext.convert(options)(undefined); +  } + +  /** +   * Create a converter function for `func` of `name`. +   * +   * @param {string} name The name of the function to convert. +   * @param {Function} func The function to convert. +   * @returns {Function} Returns the new converter function. +   */ +  function createConverter(name, func) { +    var realName = mapping.aliasToReal[name] || name, +        methodName = mapping.remap[realName] || realName, +        oldOptions = options; + +    return function(options) { +      var newUtil = isLib ? pristine : helpers, +          newFunc = isLib ? pristine[methodName] : func, +          newOptions = assign(assign({}, oldOptions), options); + +      return baseConvert(newUtil, realName, newFunc, newOptions); +    }; +  } + +  /** +   * Creates a function that wraps `func` to invoke its iteratee, with up to `n` +   * arguments, ignoring any additional arguments. +   * +   * @private +   * @param {Function} func The function to cap iteratee arguments for. +   * @param {number} n The arity cap. +   * @returns {Function} Returns the new function. +   */ +  function iterateeAry(func, n) { +    return overArg(func, function(func) { +      return typeof func == 'function' ? baseAry(func, n) : func; +    }); +  } + +  /** +   * Creates a function that wraps `func` to invoke its iteratee with arguments +   * arranged according to the specified `indexes` where the argument value at +   * the first index is provided as the first argument, the argument value at +   * the second index is provided as the second argument, and so on. +   * +   * @private +   * @param {Function} func The function to rearrange iteratee arguments for. +   * @param {number[]} indexes The arranged argument indexes. +   * @returns {Function} Returns the new function. +   */ +  function iterateeRearg(func, indexes) { +    return overArg(func, function(func) { +      var n = indexes.length; +      return baseArity(rearg(baseAry(func, n), indexes), n); +    }); +  } + +  /** +   * Creates a function that invokes `func` with its first argument transformed. +   * +   * @private +   * @param {Function} func The function to wrap. +   * @param {Function} transform The argument transform. +   * @returns {Function} Returns the new function. +   */ +  function overArg(func, transform) { +    return function() { +      var length = arguments.length; +      if (!length) { +        return func(); +      } +      var args = Array(length); +      while (length--) { +        args[length] = arguments[length]; +      } +      var index = config.rearg ? 0 : (length - 1); +      args[index] = transform(args[index]); +      return func.apply(undefined, args); +    }; +  } + +  /** +   * Creates a function that wraps `func` and applys the conversions +   * rules by `name`. +   * +   * @private +   * @param {string} name The name of the function to wrap. +   * @param {Function} func The function to wrap. +   * @returns {Function} Returns the converted function. +   */ +  function wrap(name, func, placeholder) { +    var result, +        realName = mapping.aliasToReal[name] || name, +        wrapped = func, +        wrapper = wrappers[realName]; + +    if (wrapper) { +      wrapped = wrapper(func); +    } +    else if (config.immutable) { +      if (mapping.mutate.array[realName]) { +        wrapped = wrapImmutable(func, cloneArray); +      } +      else if (mapping.mutate.object[realName]) { +        wrapped = wrapImmutable(func, createCloner(func)); +      } +      else if (mapping.mutate.set[realName]) { +        wrapped = wrapImmutable(func, cloneByPath); +      } +    } +    each(aryMethodKeys, function(aryKey) { +      each(mapping.aryMethod[aryKey], function(otherName) { +        if (realName == otherName) { +          var data = mapping.methodSpread[realName], +              afterRearg = data && data.afterRearg; + +          result = afterRearg +            ? castFixed(realName, castRearg(realName, wrapped, aryKey), aryKey) +            : castRearg(realName, castFixed(realName, wrapped, aryKey), aryKey); + +          result = castCap(realName, result); +          result = castCurry(realName, result, aryKey); +          return false; +        } +      }); +      return !result; +    }); + +    result || (result = wrapped); +    if (result == func) { +      result = forceCurry ? curry(result, 1) : function() { +        return func.apply(this, arguments); +      }; +    } +    result.convert = createConverter(realName, func); +    result.placeholder = func.placeholder = placeholder; + +    return result; +  } + +  /*--------------------------------------------------------------------------*/ + +  if (!isObj) { +    return wrap(name, func, defaultHolder); +  } +  var _ = func; + +  // Convert methods by ary cap. +  var pairs = []; +  each(aryMethodKeys, function(aryKey) { +    each(mapping.aryMethod[aryKey], function(key) { +      var func = _[mapping.remap[key] || key]; +      if (func) { +        pairs.push([key, wrap(key, func, _)]); +      } +    }); +  }); + +  // Convert remaining methods. +  each(keys(_), function(key) { +    var func = _[key]; +    if (typeof func == 'function') { +      var length = pairs.length; +      while (length--) { +        if (pairs[length][0] == key) { +          return; +        } +      } +      func.convert = createConverter(key, func); +      pairs.push([key, func]); +    } +  }); + +  // Assign to `_` leaving `_.prototype` unchanged to allow chaining. +  each(pairs, function(pair) { +    _[pair[0]] = pair[1]; +  }); + +  _.convert = convertLib; +  _.placeholder = _; + +  // Assign aliases. +  each(keys(_), function(key) { +    each(mapping.realToAlias[key] || [], function(alias) { +      _[alias] = _[key]; +    }); +  }); + +  return _; +} + +module.exports = baseConvert; diff --git a/node_modules/lodash/fp/_convertBrowser.js b/node_modules/lodash/fp/_convertBrowser.js new file mode 100644 index 0000000..bde030d --- /dev/null +++ b/node_modules/lodash/fp/_convertBrowser.js @@ -0,0 +1,18 @@ +var baseConvert = require('./_baseConvert'); + +/** + * Converts `lodash` to an immutable auto-curried iteratee-first data-last + * version with conversion `options` applied. + * + * @param {Function} lodash The lodash function to convert. + * @param {Object} [options] The options object. See `baseConvert` for more details. + * @returns {Function} Returns the converted `lodash`. + */ +function browserConvert(lodash, options) { +  return baseConvert(lodash, lodash, options); +} + +if (typeof _ == 'function' && typeof _.runInContext == 'function') { +  _ = browserConvert(_.runInContext()); +} +module.exports = browserConvert; diff --git a/node_modules/lodash/fp/_falseOptions.js b/node_modules/lodash/fp/_falseOptions.js new file mode 100644 index 0000000..773235e --- /dev/null +++ b/node_modules/lodash/fp/_falseOptions.js @@ -0,0 +1,7 @@ +module.exports = { +  'cap': false, +  'curry': false, +  'fixed': false, +  'immutable': false, +  'rearg': false +}; diff --git a/node_modules/lodash/fp/_mapping.js b/node_modules/lodash/fp/_mapping.js new file mode 100644 index 0000000..a642ec0 --- /dev/null +++ b/node_modules/lodash/fp/_mapping.js @@ -0,0 +1,358 @@ +/** Used to map aliases to their real names. */ +exports.aliasToReal = { + +  // Lodash aliases. +  'each': 'forEach', +  'eachRight': 'forEachRight', +  'entries': 'toPairs', +  'entriesIn': 'toPairsIn', +  'extend': 'assignIn', +  'extendAll': 'assignInAll', +  'extendAllWith': 'assignInAllWith', +  'extendWith': 'assignInWith', +  'first': 'head', + +  // Methods that are curried variants of others. +  'conforms': 'conformsTo', +  'matches': 'isMatch', +  'property': 'get', + +  // Ramda aliases. +  '__': 'placeholder', +  'F': 'stubFalse', +  'T': 'stubTrue', +  'all': 'every', +  'allPass': 'overEvery', +  'always': 'constant', +  'any': 'some', +  'anyPass': 'overSome', +  'apply': 'spread', +  'assoc': 'set', +  'assocPath': 'set', +  'complement': 'negate', +  'compose': 'flowRight', +  'contains': 'includes', +  'dissoc': 'unset', +  'dissocPath': 'unset', +  'dropLast': 'dropRight', +  'dropLastWhile': 'dropRightWhile', +  'equals': 'isEqual', +  'identical': 'eq', +  'indexBy': 'keyBy', +  'init': 'initial', +  'invertObj': 'invert', +  'juxt': 'over', +  'omitAll': 'omit', +  'nAry': 'ary', +  'path': 'get', +  'pathEq': 'matchesProperty', +  'pathOr': 'getOr', +  'paths': 'at', +  'pickAll': 'pick', +  'pipe': 'flow', +  'pluck': 'map', +  'prop': 'get', +  'propEq': 'matchesProperty', +  'propOr': 'getOr', +  'props': 'at', +  'symmetricDifference': 'xor', +  'symmetricDifferenceBy': 'xorBy', +  'symmetricDifferenceWith': 'xorWith', +  'takeLast': 'takeRight', +  'takeLastWhile': 'takeRightWhile', +  'unapply': 'rest', +  'unnest': 'flatten', +  'useWith': 'overArgs', +  'where': 'conformsTo', +  'whereEq': 'isMatch', +  'zipObj': 'zipObject' +}; + +/** Used to map ary to method names. */ +exports.aryMethod = { +  '1': [ +    'assignAll', 'assignInAll', 'attempt', 'castArray', 'ceil', 'create', +    'curry', 'curryRight', 'defaultsAll', 'defaultsDeepAll', 'floor', 'flow', +    'flowRight', 'fromPairs', 'invert', 'iteratee', 'memoize', 'method', 'mergeAll', +    'methodOf', 'mixin', 'nthArg', 'over', 'overEvery', 'overSome','rest', 'reverse', +    'round', 'runInContext', 'spread', 'template', 'trim', 'trimEnd', 'trimStart', +    'uniqueId', 'words', 'zipAll' +  ], +  '2': [ +    'add', 'after', 'ary', 'assign', 'assignAllWith', 'assignIn', 'assignInAllWith', +    'at', 'before', 'bind', 'bindAll', 'bindKey', 'chunk', 'cloneDeepWith', +    'cloneWith', 'concat', 'conformsTo', 'countBy', 'curryN', 'curryRightN', +    'debounce', 'defaults', 'defaultsDeep', 'defaultTo', 'delay', 'difference', +    'divide', 'drop', 'dropRight', 'dropRightWhile', 'dropWhile', 'endsWith', 'eq', +    'every', 'filter', 'find', 'findIndex', 'findKey', 'findLast', 'findLastIndex', +    'findLastKey', 'flatMap', 'flatMapDeep', 'flattenDepth', 'forEach', +    'forEachRight', 'forIn', 'forInRight', 'forOwn', 'forOwnRight', 'get', +    'groupBy', 'gt', 'gte', 'has', 'hasIn', 'includes', 'indexOf', 'intersection', +    'invertBy', 'invoke', 'invokeMap', 'isEqual', 'isMatch', 'join', 'keyBy', +    'lastIndexOf', 'lt', 'lte', 'map', 'mapKeys', 'mapValues', 'matchesProperty', +    'maxBy', 'meanBy', 'merge', 'mergeAllWith', 'minBy', 'multiply', 'nth', 'omit', +    'omitBy', 'overArgs', 'pad', 'padEnd', 'padStart', 'parseInt', 'partial', +    'partialRight', 'partition', 'pick', 'pickBy', 'propertyOf', 'pull', 'pullAll', +    'pullAt', 'random', 'range', 'rangeRight', 'rearg', 'reject', 'remove', +    'repeat', 'restFrom', 'result', 'sampleSize', 'some', 'sortBy', 'sortedIndex', +    'sortedIndexOf', 'sortedLastIndex', 'sortedLastIndexOf', 'sortedUniqBy', +    'split', 'spreadFrom', 'startsWith', 'subtract', 'sumBy', 'take', 'takeRight', +    'takeRightWhile', 'takeWhile', 'tap', 'throttle', 'thru', 'times', 'trimChars', +    'trimCharsEnd', 'trimCharsStart', 'truncate', 'union', 'uniqBy', 'uniqWith', +    'unset', 'unzipWith', 'without', 'wrap', 'xor', 'zip', 'zipObject', +    'zipObjectDeep' +  ], +  '3': [ +    'assignInWith', 'assignWith', 'clamp', 'differenceBy', 'differenceWith', +    'findFrom', 'findIndexFrom', 'findLastFrom', 'findLastIndexFrom', 'getOr', +    'includesFrom', 'indexOfFrom', 'inRange', 'intersectionBy', 'intersectionWith', +    'invokeArgs', 'invokeArgsMap', 'isEqualWith', 'isMatchWith', 'flatMapDepth', +    'lastIndexOfFrom', 'mergeWith', 'orderBy', 'padChars', 'padCharsEnd', +    'padCharsStart', 'pullAllBy', 'pullAllWith', 'rangeStep', 'rangeStepRight', +    'reduce', 'reduceRight', 'replace', 'set', 'slice', 'sortedIndexBy', +    'sortedLastIndexBy', 'transform', 'unionBy', 'unionWith', 'update', 'xorBy', +    'xorWith', 'zipWith' +  ], +  '4': [ +    'fill', 'setWith', 'updateWith' +  ] +}; + +/** Used to map ary to rearg configs. */ +exports.aryRearg = { +  '2': [1, 0], +  '3': [2, 0, 1], +  '4': [3, 2, 0, 1] +}; + +/** Used to map method names to their iteratee ary. */ +exports.iterateeAry = { +  'dropRightWhile': 1, +  'dropWhile': 1, +  'every': 1, +  'filter': 1, +  'find': 1, +  'findFrom': 1, +  'findIndex': 1, +  'findIndexFrom': 1, +  'findKey': 1, +  'findLast': 1, +  'findLastFrom': 1, +  'findLastIndex': 1, +  'findLastIndexFrom': 1, +  'findLastKey': 1, +  'flatMap': 1, +  'flatMapDeep': 1, +  'flatMapDepth': 1, +  'forEach': 1, +  'forEachRight': 1, +  'forIn': 1, +  'forInRight': 1, +  'forOwn': 1, +  'forOwnRight': 1, +  'map': 1, +  'mapKeys': 1, +  'mapValues': 1, +  'partition': 1, +  'reduce': 2, +  'reduceRight': 2, +  'reject': 1, +  'remove': 1, +  'some': 1, +  'takeRightWhile': 1, +  'takeWhile': 1, +  'times': 1, +  'transform': 2 +}; + +/** Used to map method names to iteratee rearg configs. */ +exports.iterateeRearg = { +  'mapKeys': [1], +  'reduceRight': [1, 0] +}; + +/** Used to map method names to rearg configs. */ +exports.methodRearg = { +  'assignInAllWith': [1, 0], +  'assignInWith': [1, 2, 0], +  'assignAllWith': [1, 0], +  'assignWith': [1, 2, 0], +  'differenceBy': [1, 2, 0], +  'differenceWith': [1, 2, 0], +  'getOr': [2, 1, 0], +  'intersectionBy': [1, 2, 0], +  'intersectionWith': [1, 2, 0], +  'isEqualWith': [1, 2, 0], +  'isMatchWith': [2, 1, 0], +  'mergeAllWith': [1, 0], +  'mergeWith': [1, 2, 0], +  'padChars': [2, 1, 0], +  'padCharsEnd': [2, 1, 0], +  'padCharsStart': [2, 1, 0], +  'pullAllBy': [2, 1, 0], +  'pullAllWith': [2, 1, 0], +  'rangeStep': [1, 2, 0], +  'rangeStepRight': [1, 2, 0], +  'setWith': [3, 1, 2, 0], +  'sortedIndexBy': [2, 1, 0], +  'sortedLastIndexBy': [2, 1, 0], +  'unionBy': [1, 2, 0], +  'unionWith': [1, 2, 0], +  'updateWith': [3, 1, 2, 0], +  'xorBy': [1, 2, 0], +  'xorWith': [1, 2, 0], +  'zipWith': [1, 2, 0] +}; + +/** Used to map method names to spread configs. */ +exports.methodSpread = { +  'assignAll': { 'start': 0 }, +  'assignAllWith': { 'start': 0 }, +  'assignInAll': { 'start': 0 }, +  'assignInAllWith': { 'start': 0 }, +  'defaultsAll': { 'start': 0 }, +  'defaultsDeepAll': { 'start': 0 }, +  'invokeArgs': { 'start': 2 }, +  'invokeArgsMap': { 'start': 2 }, +  'mergeAll': { 'start': 0 }, +  'mergeAllWith': { 'start': 0 }, +  'partial': { 'start': 1 }, +  'partialRight': { 'start': 1 }, +  'without': { 'start': 1 }, +  'zipAll': { 'start': 0 } +}; + +/** Used to identify methods which mutate arrays or objects. */ +exports.mutate = { +  'array': { +    'fill': true, +    'pull': true, +    'pullAll': true, +    'pullAllBy': true, +    'pullAllWith': true, +    'pullAt': true, +    'remove': true, +    'reverse': true +  }, +  'object': { +    'assign': true, +    'assignAll': true, +    'assignAllWith': true, +    'assignIn': true, +    'assignInAll': true, +    'assignInAllWith': true, +    'assignInWith': true, +    'assignWith': true, +    'defaults': true, +    'defaultsAll': true, +    'defaultsDeep': true, +    'defaultsDeepAll': true, +    'merge': true, +    'mergeAll': true, +    'mergeAllWith': true, +    'mergeWith': true, +  }, +  'set': { +    'set': true, +    'setWith': true, +    'unset': true, +    'update': true, +    'updateWith': true +  } +}; + +/** Used to map real names to their aliases. */ +exports.realToAlias = (function() { +  var hasOwnProperty = Object.prototype.hasOwnProperty, +      object = exports.aliasToReal, +      result = {}; + +  for (var key in object) { +    var value = object[key]; +    if (hasOwnProperty.call(result, value)) { +      result[value].push(key); +    } else { +      result[value] = [key]; +    } +  } +  return result; +}()); + +/** Used to map method names to other names. */ +exports.remap = { +  'assignAll': 'assign', +  'assignAllWith': 'assignWith', +  'assignInAll': 'assignIn', +  'assignInAllWith': 'assignInWith', +  'curryN': 'curry', +  'curryRightN': 'curryRight', +  'defaultsAll': 'defaults', +  'defaultsDeepAll': 'defaultsDeep', +  'findFrom': 'find', +  'findIndexFrom': 'findIndex', +  'findLastFrom': 'findLast', +  'findLastIndexFrom': 'findLastIndex', +  'getOr': 'get', +  'includesFrom': 'includes', +  'indexOfFrom': 'indexOf', +  'invokeArgs': 'invoke', +  'invokeArgsMap': 'invokeMap', +  'lastIndexOfFrom': 'lastIndexOf', +  'mergeAll': 'merge', +  'mergeAllWith': 'mergeWith', +  'padChars': 'pad', +  'padCharsEnd': 'padEnd', +  'padCharsStart': 'padStart', +  'propertyOf': 'get', +  'rangeStep': 'range', +  'rangeStepRight': 'rangeRight', +  'restFrom': 'rest', +  'spreadFrom': 'spread', +  'trimChars': 'trim', +  'trimCharsEnd': 'trimEnd', +  'trimCharsStart': 'trimStart', +  'zipAll': 'zip' +}; + +/** Used to track methods that skip fixing their arity. */ +exports.skipFixed = { +  'castArray': true, +  'flow': true, +  'flowRight': true, +  'iteratee': true, +  'mixin': true, +  'rearg': true, +  'runInContext': true +}; + +/** Used to track methods that skip rearranging arguments. */ +exports.skipRearg = { +  'add': true, +  'assign': true, +  'assignIn': true, +  'bind': true, +  'bindKey': true, +  'concat': true, +  'difference': true, +  'divide': true, +  'eq': true, +  'gt': true, +  'gte': true, +  'isEqual': true, +  'lt': true, +  'lte': true, +  'matchesProperty': true, +  'merge': true, +  'multiply': true, +  'overArgs': true, +  'partial': true, +  'partialRight': true, +  'propertyOf': true, +  'random': true, +  'range': true, +  'rangeRight': true, +  'subtract': true, +  'zip': true, +  'zipObject': true, +  'zipObjectDeep': true +}; diff --git a/node_modules/lodash/fp/_util.js b/node_modules/lodash/fp/_util.js new file mode 100644 index 0000000..1dbf36f --- /dev/null +++ b/node_modules/lodash/fp/_util.js @@ -0,0 +1,16 @@ +module.exports = { +  'ary': require('../ary'), +  'assign': require('../_baseAssign'), +  'clone': require('../clone'), +  'curry': require('../curry'), +  'forEach': require('../_arrayEach'), +  'isArray': require('../isArray'), +  'isError': require('../isError'), +  'isFunction': require('../isFunction'), +  'isWeakMap': require('../isWeakMap'), +  'iteratee': require('../iteratee'), +  'keys': require('../_baseKeys'), +  'rearg': require('../rearg'), +  'toInteger': require('../toInteger'), +  'toPath': require('../toPath') +}; diff --git a/node_modules/lodash/fp/add.js b/node_modules/lodash/fp/add.js new file mode 100644 index 0000000..816eeec --- /dev/null +++ b/node_modules/lodash/fp/add.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('add', require('../add')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/after.js b/node_modules/lodash/fp/after.js new file mode 100644 index 0000000..21a0167 --- /dev/null +++ b/node_modules/lodash/fp/after.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('after', require('../after')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/all.js b/node_modules/lodash/fp/all.js new file mode 100644 index 0000000..d0839f7 --- /dev/null +++ b/node_modules/lodash/fp/all.js @@ -0,0 +1 @@ +module.exports = require('./every'); diff --git a/node_modules/lodash/fp/allPass.js b/node_modules/lodash/fp/allPass.js new file mode 100644 index 0000000..79b73ef --- /dev/null +++ b/node_modules/lodash/fp/allPass.js @@ -0,0 +1 @@ +module.exports = require('./overEvery'); diff --git a/node_modules/lodash/fp/always.js b/node_modules/lodash/fp/always.js new file mode 100644 index 0000000..9887703 --- /dev/null +++ b/node_modules/lodash/fp/always.js @@ -0,0 +1 @@ +module.exports = require('./constant'); diff --git a/node_modules/lodash/fp/any.js b/node_modules/lodash/fp/any.js new file mode 100644 index 0000000..900ac25 --- /dev/null +++ b/node_modules/lodash/fp/any.js @@ -0,0 +1 @@ +module.exports = require('./some'); diff --git a/node_modules/lodash/fp/anyPass.js b/node_modules/lodash/fp/anyPass.js new file mode 100644 index 0000000..2774ab3 --- /dev/null +++ b/node_modules/lodash/fp/anyPass.js @@ -0,0 +1 @@ +module.exports = require('./overSome'); diff --git a/node_modules/lodash/fp/apply.js b/node_modules/lodash/fp/apply.js new file mode 100644 index 0000000..2b75712 --- /dev/null +++ b/node_modules/lodash/fp/apply.js @@ -0,0 +1 @@ +module.exports = require('./spread'); diff --git a/node_modules/lodash/fp/array.js b/node_modules/lodash/fp/array.js new file mode 100644 index 0000000..fe939c2 --- /dev/null +++ b/node_modules/lodash/fp/array.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../array')); diff --git a/node_modules/lodash/fp/ary.js b/node_modules/lodash/fp/ary.js new file mode 100644 index 0000000..8edf187 --- /dev/null +++ b/node_modules/lodash/fp/ary.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('ary', require('../ary')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/assign.js b/node_modules/lodash/fp/assign.js new file mode 100644 index 0000000..23f47af --- /dev/null +++ b/node_modules/lodash/fp/assign.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('assign', require('../assign')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/assignAll.js b/node_modules/lodash/fp/assignAll.js new file mode 100644 index 0000000..b1d36c7 --- /dev/null +++ b/node_modules/lodash/fp/assignAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('assignAll', require('../assign')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/assignAllWith.js b/node_modules/lodash/fp/assignAllWith.js new file mode 100644 index 0000000..21e836e --- /dev/null +++ b/node_modules/lodash/fp/assignAllWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('assignAllWith', require('../assignWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/assignIn.js b/node_modules/lodash/fp/assignIn.js new file mode 100644 index 0000000..6e7c65f --- /dev/null +++ b/node_modules/lodash/fp/assignIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('assignIn', require('../assignIn')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/assignInAll.js b/node_modules/lodash/fp/assignInAll.js new file mode 100644 index 0000000..7ba75db --- /dev/null +++ b/node_modules/lodash/fp/assignInAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('assignInAll', require('../assignIn')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/assignInAllWith.js b/node_modules/lodash/fp/assignInAllWith.js new file mode 100644 index 0000000..e766903 --- /dev/null +++ b/node_modules/lodash/fp/assignInAllWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('assignInAllWith', require('../assignInWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/assignInWith.js b/node_modules/lodash/fp/assignInWith.js new file mode 100644 index 0000000..acb5923 --- /dev/null +++ b/node_modules/lodash/fp/assignInWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('assignInWith', require('../assignInWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/assignWith.js b/node_modules/lodash/fp/assignWith.js new file mode 100644 index 0000000..eb92521 --- /dev/null +++ b/node_modules/lodash/fp/assignWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('assignWith', require('../assignWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/assoc.js b/node_modules/lodash/fp/assoc.js new file mode 100644 index 0000000..7648820 --- /dev/null +++ b/node_modules/lodash/fp/assoc.js @@ -0,0 +1 @@ +module.exports = require('./set'); diff --git a/node_modules/lodash/fp/assocPath.js b/node_modules/lodash/fp/assocPath.js new file mode 100644 index 0000000..7648820 --- /dev/null +++ b/node_modules/lodash/fp/assocPath.js @@ -0,0 +1 @@ +module.exports = require('./set'); diff --git a/node_modules/lodash/fp/at.js b/node_modules/lodash/fp/at.js new file mode 100644 index 0000000..cc39d25 --- /dev/null +++ b/node_modules/lodash/fp/at.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('at', require('../at')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/attempt.js b/node_modules/lodash/fp/attempt.js new file mode 100644 index 0000000..26ca42e --- /dev/null +++ b/node_modules/lodash/fp/attempt.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('attempt', require('../attempt')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/before.js b/node_modules/lodash/fp/before.js new file mode 100644 index 0000000..7a2de65 --- /dev/null +++ b/node_modules/lodash/fp/before.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('before', require('../before')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/bind.js b/node_modules/lodash/fp/bind.js new file mode 100644 index 0000000..5cbe4f3 --- /dev/null +++ b/node_modules/lodash/fp/bind.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('bind', require('../bind')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/bindAll.js b/node_modules/lodash/fp/bindAll.js new file mode 100644 index 0000000..6b4a4a0 --- /dev/null +++ b/node_modules/lodash/fp/bindAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('bindAll', require('../bindAll')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/bindKey.js b/node_modules/lodash/fp/bindKey.js new file mode 100644 index 0000000..6a46c6b --- /dev/null +++ b/node_modules/lodash/fp/bindKey.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('bindKey', require('../bindKey')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/camelCase.js b/node_modules/lodash/fp/camelCase.js new file mode 100644 index 0000000..87b77b4 --- /dev/null +++ b/node_modules/lodash/fp/camelCase.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('camelCase', require('../camelCase'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/capitalize.js b/node_modules/lodash/fp/capitalize.js new file mode 100644 index 0000000..cac74e1 --- /dev/null +++ b/node_modules/lodash/fp/capitalize.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('capitalize', require('../capitalize'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/castArray.js b/node_modules/lodash/fp/castArray.js new file mode 100644 index 0000000..8681c09 --- /dev/null +++ b/node_modules/lodash/fp/castArray.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('castArray', require('../castArray')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/ceil.js b/node_modules/lodash/fp/ceil.js new file mode 100644 index 0000000..f416b72 --- /dev/null +++ b/node_modules/lodash/fp/ceil.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('ceil', require('../ceil')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/chain.js b/node_modules/lodash/fp/chain.js new file mode 100644 index 0000000..604fe39 --- /dev/null +++ b/node_modules/lodash/fp/chain.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('chain', require('../chain'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/chunk.js b/node_modules/lodash/fp/chunk.js new file mode 100644 index 0000000..871ab08 --- /dev/null +++ b/node_modules/lodash/fp/chunk.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('chunk', require('../chunk')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/clamp.js b/node_modules/lodash/fp/clamp.js new file mode 100644 index 0000000..3b06c01 --- /dev/null +++ b/node_modules/lodash/fp/clamp.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('clamp', require('../clamp')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/clone.js b/node_modules/lodash/fp/clone.js new file mode 100644 index 0000000..cadb59c --- /dev/null +++ b/node_modules/lodash/fp/clone.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('clone', require('../clone'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/cloneDeep.js b/node_modules/lodash/fp/cloneDeep.js new file mode 100644 index 0000000..a6107aa --- /dev/null +++ b/node_modules/lodash/fp/cloneDeep.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('cloneDeep', require('../cloneDeep'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/cloneDeepWith.js b/node_modules/lodash/fp/cloneDeepWith.js new file mode 100644 index 0000000..6f01e44 --- /dev/null +++ b/node_modules/lodash/fp/cloneDeepWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('cloneDeepWith', require('../cloneDeepWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/cloneWith.js b/node_modules/lodash/fp/cloneWith.js new file mode 100644 index 0000000..aa88578 --- /dev/null +++ b/node_modules/lodash/fp/cloneWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('cloneWith', require('../cloneWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/collection.js b/node_modules/lodash/fp/collection.js new file mode 100644 index 0000000..fc8b328 --- /dev/null +++ b/node_modules/lodash/fp/collection.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../collection')); diff --git a/node_modules/lodash/fp/commit.js b/node_modules/lodash/fp/commit.js new file mode 100644 index 0000000..130a894 --- /dev/null +++ b/node_modules/lodash/fp/commit.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('commit', require('../commit'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/compact.js b/node_modules/lodash/fp/compact.js new file mode 100644 index 0000000..ce8f7a1 --- /dev/null +++ b/node_modules/lodash/fp/compact.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('compact', require('../compact'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/complement.js b/node_modules/lodash/fp/complement.js new file mode 100644 index 0000000..93eb462 --- /dev/null +++ b/node_modules/lodash/fp/complement.js @@ -0,0 +1 @@ +module.exports = require('./negate'); diff --git a/node_modules/lodash/fp/compose.js b/node_modules/lodash/fp/compose.js new file mode 100644 index 0000000..1954e94 --- /dev/null +++ b/node_modules/lodash/fp/compose.js @@ -0,0 +1 @@ +module.exports = require('./flowRight'); diff --git a/node_modules/lodash/fp/concat.js b/node_modules/lodash/fp/concat.js new file mode 100644 index 0000000..e59346a --- /dev/null +++ b/node_modules/lodash/fp/concat.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('concat', require('../concat')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/cond.js b/node_modules/lodash/fp/cond.js new file mode 100644 index 0000000..6a0120e --- /dev/null +++ b/node_modules/lodash/fp/cond.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('cond', require('../cond'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/conforms.js b/node_modules/lodash/fp/conforms.js new file mode 100644 index 0000000..3247f64 --- /dev/null +++ b/node_modules/lodash/fp/conforms.js @@ -0,0 +1 @@ +module.exports = require('./conformsTo'); diff --git a/node_modules/lodash/fp/conformsTo.js b/node_modules/lodash/fp/conformsTo.js new file mode 100644 index 0000000..aa7f41e --- /dev/null +++ b/node_modules/lodash/fp/conformsTo.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('conformsTo', require('../conformsTo')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/constant.js b/node_modules/lodash/fp/constant.js new file mode 100644 index 0000000..9e406fc --- /dev/null +++ b/node_modules/lodash/fp/constant.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('constant', require('../constant'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/contains.js b/node_modules/lodash/fp/contains.js new file mode 100644 index 0000000..594722a --- /dev/null +++ b/node_modules/lodash/fp/contains.js @@ -0,0 +1 @@ +module.exports = require('./includes'); diff --git a/node_modules/lodash/fp/convert.js b/node_modules/lodash/fp/convert.js new file mode 100644 index 0000000..4795dc4 --- /dev/null +++ b/node_modules/lodash/fp/convert.js @@ -0,0 +1,18 @@ +var baseConvert = require('./_baseConvert'), +    util = require('./_util'); + +/** + * Converts `func` of `name` to an immutable auto-curried iteratee-first data-last + * version with conversion `options` applied. If `name` is an object its methods + * will be converted. + * + * @param {string} name The name of the function to wrap. + * @param {Function} [func] The function to wrap. + * @param {Object} [options] The options object. See `baseConvert` for more details. + * @returns {Function|Object} Returns the converted function or object. + */ +function convert(name, func, options) { +  return baseConvert(util, name, func, options); +} + +module.exports = convert; diff --git a/node_modules/lodash/fp/countBy.js b/node_modules/lodash/fp/countBy.js new file mode 100644 index 0000000..dfa4643 --- /dev/null +++ b/node_modules/lodash/fp/countBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('countBy', require('../countBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/create.js b/node_modules/lodash/fp/create.js new file mode 100644 index 0000000..752025f --- /dev/null +++ b/node_modules/lodash/fp/create.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('create', require('../create')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/curry.js b/node_modules/lodash/fp/curry.js new file mode 100644 index 0000000..b0b4168 --- /dev/null +++ b/node_modules/lodash/fp/curry.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('curry', require('../curry')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/curryN.js b/node_modules/lodash/fp/curryN.js new file mode 100644 index 0000000..2ae7d00 --- /dev/null +++ b/node_modules/lodash/fp/curryN.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('curryN', require('../curry')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/curryRight.js b/node_modules/lodash/fp/curryRight.js new file mode 100644 index 0000000..cb619eb --- /dev/null +++ b/node_modules/lodash/fp/curryRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('curryRight', require('../curryRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/curryRightN.js b/node_modules/lodash/fp/curryRightN.js new file mode 100644 index 0000000..2495afc --- /dev/null +++ b/node_modules/lodash/fp/curryRightN.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('curryRightN', require('../curryRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/date.js b/node_modules/lodash/fp/date.js new file mode 100644 index 0000000..82cb952 --- /dev/null +++ b/node_modules/lodash/fp/date.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../date')); diff --git a/node_modules/lodash/fp/debounce.js b/node_modules/lodash/fp/debounce.js new file mode 100644 index 0000000..2612229 --- /dev/null +++ b/node_modules/lodash/fp/debounce.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('debounce', require('../debounce')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/deburr.js b/node_modules/lodash/fp/deburr.js new file mode 100644 index 0000000..96463ab --- /dev/null +++ b/node_modules/lodash/fp/deburr.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('deburr', require('../deburr'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/defaultTo.js b/node_modules/lodash/fp/defaultTo.js new file mode 100644 index 0000000..d6b52a4 --- /dev/null +++ b/node_modules/lodash/fp/defaultTo.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('defaultTo', require('../defaultTo')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/defaults.js b/node_modules/lodash/fp/defaults.js new file mode 100644 index 0000000..e1a8e6e --- /dev/null +++ b/node_modules/lodash/fp/defaults.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('defaults', require('../defaults')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/defaultsAll.js b/node_modules/lodash/fp/defaultsAll.js new file mode 100644 index 0000000..238fcc3 --- /dev/null +++ b/node_modules/lodash/fp/defaultsAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('defaultsAll', require('../defaults')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/defaultsDeep.js b/node_modules/lodash/fp/defaultsDeep.js new file mode 100644 index 0000000..1f172ff --- /dev/null +++ b/node_modules/lodash/fp/defaultsDeep.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('defaultsDeep', require('../defaultsDeep')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/defaultsDeepAll.js b/node_modules/lodash/fp/defaultsDeepAll.js new file mode 100644 index 0000000..6835f2f --- /dev/null +++ b/node_modules/lodash/fp/defaultsDeepAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('defaultsDeepAll', require('../defaultsDeep')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/defer.js b/node_modules/lodash/fp/defer.js new file mode 100644 index 0000000..ec7990f --- /dev/null +++ b/node_modules/lodash/fp/defer.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('defer', require('../defer'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/delay.js b/node_modules/lodash/fp/delay.js new file mode 100644 index 0000000..556dbd5 --- /dev/null +++ b/node_modules/lodash/fp/delay.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('delay', require('../delay')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/difference.js b/node_modules/lodash/fp/difference.js new file mode 100644 index 0000000..2d03765 --- /dev/null +++ b/node_modules/lodash/fp/difference.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('difference', require('../difference')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/differenceBy.js b/node_modules/lodash/fp/differenceBy.js new file mode 100644 index 0000000..2f91491 --- /dev/null +++ b/node_modules/lodash/fp/differenceBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('differenceBy', require('../differenceBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/differenceWith.js b/node_modules/lodash/fp/differenceWith.js new file mode 100644 index 0000000..bcf5ad2 --- /dev/null +++ b/node_modules/lodash/fp/differenceWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('differenceWith', require('../differenceWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/dissoc.js b/node_modules/lodash/fp/dissoc.js new file mode 100644 index 0000000..7ec7be1 --- /dev/null +++ b/node_modules/lodash/fp/dissoc.js @@ -0,0 +1 @@ +module.exports = require('./unset'); diff --git a/node_modules/lodash/fp/dissocPath.js b/node_modules/lodash/fp/dissocPath.js new file mode 100644 index 0000000..7ec7be1 --- /dev/null +++ b/node_modules/lodash/fp/dissocPath.js @@ -0,0 +1 @@ +module.exports = require('./unset'); diff --git a/node_modules/lodash/fp/divide.js b/node_modules/lodash/fp/divide.js new file mode 100644 index 0000000..82048c5 --- /dev/null +++ b/node_modules/lodash/fp/divide.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('divide', require('../divide')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/drop.js b/node_modules/lodash/fp/drop.js new file mode 100644 index 0000000..2fa9b4f --- /dev/null +++ b/node_modules/lodash/fp/drop.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('drop', require('../drop')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/dropLast.js b/node_modules/lodash/fp/dropLast.js new file mode 100644 index 0000000..174e525 --- /dev/null +++ b/node_modules/lodash/fp/dropLast.js @@ -0,0 +1 @@ +module.exports = require('./dropRight'); diff --git a/node_modules/lodash/fp/dropLastWhile.js b/node_modules/lodash/fp/dropLastWhile.js new file mode 100644 index 0000000..be2a9d2 --- /dev/null +++ b/node_modules/lodash/fp/dropLastWhile.js @@ -0,0 +1 @@ +module.exports = require('./dropRightWhile'); diff --git a/node_modules/lodash/fp/dropRight.js b/node_modules/lodash/fp/dropRight.js new file mode 100644 index 0000000..e98881f --- /dev/null +++ b/node_modules/lodash/fp/dropRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('dropRight', require('../dropRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/dropRightWhile.js b/node_modules/lodash/fp/dropRightWhile.js new file mode 100644 index 0000000..cacaa70 --- /dev/null +++ b/node_modules/lodash/fp/dropRightWhile.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('dropRightWhile', require('../dropRightWhile')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/dropWhile.js b/node_modules/lodash/fp/dropWhile.js new file mode 100644 index 0000000..285f864 --- /dev/null +++ b/node_modules/lodash/fp/dropWhile.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('dropWhile', require('../dropWhile')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/each.js b/node_modules/lodash/fp/each.js new file mode 100644 index 0000000..8800f42 --- /dev/null +++ b/node_modules/lodash/fp/each.js @@ -0,0 +1 @@ +module.exports = require('./forEach'); diff --git a/node_modules/lodash/fp/eachRight.js b/node_modules/lodash/fp/eachRight.js new file mode 100644 index 0000000..3252b2a --- /dev/null +++ b/node_modules/lodash/fp/eachRight.js @@ -0,0 +1 @@ +module.exports = require('./forEachRight'); diff --git a/node_modules/lodash/fp/endsWith.js b/node_modules/lodash/fp/endsWith.js new file mode 100644 index 0000000..17dc2a4 --- /dev/null +++ b/node_modules/lodash/fp/endsWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('endsWith', require('../endsWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/entries.js b/node_modules/lodash/fp/entries.js new file mode 100644 index 0000000..7a88df2 --- /dev/null +++ b/node_modules/lodash/fp/entries.js @@ -0,0 +1 @@ +module.exports = require('./toPairs'); diff --git a/node_modules/lodash/fp/entriesIn.js b/node_modules/lodash/fp/entriesIn.js new file mode 100644 index 0000000..f6c6331 --- /dev/null +++ b/node_modules/lodash/fp/entriesIn.js @@ -0,0 +1 @@ +module.exports = require('./toPairsIn'); diff --git a/node_modules/lodash/fp/eq.js b/node_modules/lodash/fp/eq.js new file mode 100644 index 0000000..9a3d21b --- /dev/null +++ b/node_modules/lodash/fp/eq.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('eq', require('../eq')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/equals.js b/node_modules/lodash/fp/equals.js new file mode 100644 index 0000000..e6a5ce0 --- /dev/null +++ b/node_modules/lodash/fp/equals.js @@ -0,0 +1 @@ +module.exports = require('./isEqual'); diff --git a/node_modules/lodash/fp/escape.js b/node_modules/lodash/fp/escape.js new file mode 100644 index 0000000..52c1fbb --- /dev/null +++ b/node_modules/lodash/fp/escape.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('escape', require('../escape'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/escapeRegExp.js b/node_modules/lodash/fp/escapeRegExp.js new file mode 100644 index 0000000..369b2ef --- /dev/null +++ b/node_modules/lodash/fp/escapeRegExp.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('escapeRegExp', require('../escapeRegExp'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/every.js b/node_modules/lodash/fp/every.js new file mode 100644 index 0000000..95c2776 --- /dev/null +++ b/node_modules/lodash/fp/every.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('every', require('../every')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/extend.js b/node_modules/lodash/fp/extend.js new file mode 100644 index 0000000..e00166c --- /dev/null +++ b/node_modules/lodash/fp/extend.js @@ -0,0 +1 @@ +module.exports = require('./assignIn'); diff --git a/node_modules/lodash/fp/extendAll.js b/node_modules/lodash/fp/extendAll.js new file mode 100644 index 0000000..cc55b64 --- /dev/null +++ b/node_modules/lodash/fp/extendAll.js @@ -0,0 +1 @@ +module.exports = require('./assignInAll'); diff --git a/node_modules/lodash/fp/extendAllWith.js b/node_modules/lodash/fp/extendAllWith.js new file mode 100644 index 0000000..6679d20 --- /dev/null +++ b/node_modules/lodash/fp/extendAllWith.js @@ -0,0 +1 @@ +module.exports = require('./assignInAllWith'); diff --git a/node_modules/lodash/fp/extendWith.js b/node_modules/lodash/fp/extendWith.js new file mode 100644 index 0000000..dbdcb3b --- /dev/null +++ b/node_modules/lodash/fp/extendWith.js @@ -0,0 +1 @@ +module.exports = require('./assignInWith'); diff --git a/node_modules/lodash/fp/fill.js b/node_modules/lodash/fp/fill.js new file mode 100644 index 0000000..b2d47e8 --- /dev/null +++ b/node_modules/lodash/fp/fill.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('fill', require('../fill')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/filter.js b/node_modules/lodash/fp/filter.js new file mode 100644 index 0000000..796d501 --- /dev/null +++ b/node_modules/lodash/fp/filter.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('filter', require('../filter')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/find.js b/node_modules/lodash/fp/find.js new file mode 100644 index 0000000..f805d33 --- /dev/null +++ b/node_modules/lodash/fp/find.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('find', require('../find')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/findFrom.js b/node_modules/lodash/fp/findFrom.js new file mode 100644 index 0000000..da8275e --- /dev/null +++ b/node_modules/lodash/fp/findFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('findFrom', require('../find')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/findIndex.js b/node_modules/lodash/fp/findIndex.js new file mode 100644 index 0000000..8c15fd1 --- /dev/null +++ b/node_modules/lodash/fp/findIndex.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('findIndex', require('../findIndex')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/findIndexFrom.js b/node_modules/lodash/fp/findIndexFrom.js new file mode 100644 index 0000000..32e98cb --- /dev/null +++ b/node_modules/lodash/fp/findIndexFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('findIndexFrom', require('../findIndex')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/findKey.js b/node_modules/lodash/fp/findKey.js new file mode 100644 index 0000000..475bcfa --- /dev/null +++ b/node_modules/lodash/fp/findKey.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('findKey', require('../findKey')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/findLast.js b/node_modules/lodash/fp/findLast.js new file mode 100644 index 0000000..093fe94 --- /dev/null +++ b/node_modules/lodash/fp/findLast.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('findLast', require('../findLast')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/findLastFrom.js b/node_modules/lodash/fp/findLastFrom.js new file mode 100644 index 0000000..76c38fb --- /dev/null +++ b/node_modules/lodash/fp/findLastFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('findLastFrom', require('../findLast')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/findLastIndex.js b/node_modules/lodash/fp/findLastIndex.js new file mode 100644 index 0000000..36986df --- /dev/null +++ b/node_modules/lodash/fp/findLastIndex.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('findLastIndex', require('../findLastIndex')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/findLastIndexFrom.js b/node_modules/lodash/fp/findLastIndexFrom.js new file mode 100644 index 0000000..34c8176 --- /dev/null +++ b/node_modules/lodash/fp/findLastIndexFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('findLastIndexFrom', require('../findLastIndex')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/findLastKey.js b/node_modules/lodash/fp/findLastKey.js new file mode 100644 index 0000000..5f81b60 --- /dev/null +++ b/node_modules/lodash/fp/findLastKey.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('findLastKey', require('../findLastKey')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/first.js b/node_modules/lodash/fp/first.js new file mode 100644 index 0000000..53f4ad1 --- /dev/null +++ b/node_modules/lodash/fp/first.js @@ -0,0 +1 @@ +module.exports = require('./head'); diff --git a/node_modules/lodash/fp/flatMap.js b/node_modules/lodash/fp/flatMap.js new file mode 100644 index 0000000..d01dc4d --- /dev/null +++ b/node_modules/lodash/fp/flatMap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('flatMap', require('../flatMap')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/flatMapDeep.js b/node_modules/lodash/fp/flatMapDeep.js new file mode 100644 index 0000000..569c42e --- /dev/null +++ b/node_modules/lodash/fp/flatMapDeep.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('flatMapDeep', require('../flatMapDeep')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/flatMapDepth.js b/node_modules/lodash/fp/flatMapDepth.js new file mode 100644 index 0000000..6eb68fd --- /dev/null +++ b/node_modules/lodash/fp/flatMapDepth.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('flatMapDepth', require('../flatMapDepth')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/flatten.js b/node_modules/lodash/fp/flatten.js new file mode 100644 index 0000000..30425d8 --- /dev/null +++ b/node_modules/lodash/fp/flatten.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('flatten', require('../flatten'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/flattenDeep.js b/node_modules/lodash/fp/flattenDeep.js new file mode 100644 index 0000000..aed5db2 --- /dev/null +++ b/node_modules/lodash/fp/flattenDeep.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('flattenDeep', require('../flattenDeep'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/flattenDepth.js b/node_modules/lodash/fp/flattenDepth.js new file mode 100644 index 0000000..ad65e37 --- /dev/null +++ b/node_modules/lodash/fp/flattenDepth.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('flattenDepth', require('../flattenDepth')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/flip.js b/node_modules/lodash/fp/flip.js new file mode 100644 index 0000000..0547e7b --- /dev/null +++ b/node_modules/lodash/fp/flip.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('flip', require('../flip'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/floor.js b/node_modules/lodash/fp/floor.js new file mode 100644 index 0000000..a6cf335 --- /dev/null +++ b/node_modules/lodash/fp/floor.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('floor', require('../floor')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/flow.js b/node_modules/lodash/fp/flow.js new file mode 100644 index 0000000..cd83677 --- /dev/null +++ b/node_modules/lodash/fp/flow.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('flow', require('../flow')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/flowRight.js b/node_modules/lodash/fp/flowRight.js new file mode 100644 index 0000000..972a5b9 --- /dev/null +++ b/node_modules/lodash/fp/flowRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('flowRight', require('../flowRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/forEach.js b/node_modules/lodash/fp/forEach.js new file mode 100644 index 0000000..2f49452 --- /dev/null +++ b/node_modules/lodash/fp/forEach.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('forEach', require('../forEach')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/forEachRight.js b/node_modules/lodash/fp/forEachRight.js new file mode 100644 index 0000000..3ff9733 --- /dev/null +++ b/node_modules/lodash/fp/forEachRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('forEachRight', require('../forEachRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/forIn.js b/node_modules/lodash/fp/forIn.js new file mode 100644 index 0000000..9341749 --- /dev/null +++ b/node_modules/lodash/fp/forIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('forIn', require('../forIn')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/forInRight.js b/node_modules/lodash/fp/forInRight.js new file mode 100644 index 0000000..cecf8bb --- /dev/null +++ b/node_modules/lodash/fp/forInRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('forInRight', require('../forInRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/forOwn.js b/node_modules/lodash/fp/forOwn.js new file mode 100644 index 0000000..246449e --- /dev/null +++ b/node_modules/lodash/fp/forOwn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('forOwn', require('../forOwn')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/forOwnRight.js b/node_modules/lodash/fp/forOwnRight.js new file mode 100644 index 0000000..c5e826e --- /dev/null +++ b/node_modules/lodash/fp/forOwnRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('forOwnRight', require('../forOwnRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/fromPairs.js b/node_modules/lodash/fp/fromPairs.js new file mode 100644 index 0000000..f8cc596 --- /dev/null +++ b/node_modules/lodash/fp/fromPairs.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('fromPairs', require('../fromPairs')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/function.js b/node_modules/lodash/fp/function.js new file mode 100644 index 0000000..dfe69b1 --- /dev/null +++ b/node_modules/lodash/fp/function.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../function')); diff --git a/node_modules/lodash/fp/functions.js b/node_modules/lodash/fp/functions.js new file mode 100644 index 0000000..09d1bb1 --- /dev/null +++ b/node_modules/lodash/fp/functions.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('functions', require('../functions'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/functionsIn.js b/node_modules/lodash/fp/functionsIn.js new file mode 100644 index 0000000..2cfeb83 --- /dev/null +++ b/node_modules/lodash/fp/functionsIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('functionsIn', require('../functionsIn'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/get.js b/node_modules/lodash/fp/get.js new file mode 100644 index 0000000..6d3a328 --- /dev/null +++ b/node_modules/lodash/fp/get.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('get', require('../get')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/getOr.js b/node_modules/lodash/fp/getOr.js new file mode 100644 index 0000000..7dbf771 --- /dev/null +++ b/node_modules/lodash/fp/getOr.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('getOr', require('../get')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/groupBy.js b/node_modules/lodash/fp/groupBy.js new file mode 100644 index 0000000..fc0bc78 --- /dev/null +++ b/node_modules/lodash/fp/groupBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('groupBy', require('../groupBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/gt.js b/node_modules/lodash/fp/gt.js new file mode 100644 index 0000000..9e57c80 --- /dev/null +++ b/node_modules/lodash/fp/gt.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('gt', require('../gt')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/gte.js b/node_modules/lodash/fp/gte.js new file mode 100644 index 0000000..4584786 --- /dev/null +++ b/node_modules/lodash/fp/gte.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('gte', require('../gte')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/has.js b/node_modules/lodash/fp/has.js new file mode 100644 index 0000000..b901298 --- /dev/null +++ b/node_modules/lodash/fp/has.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('has', require('../has')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/hasIn.js b/node_modules/lodash/fp/hasIn.js new file mode 100644 index 0000000..b3c3d1a --- /dev/null +++ b/node_modules/lodash/fp/hasIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('hasIn', require('../hasIn')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/head.js b/node_modules/lodash/fp/head.js new file mode 100644 index 0000000..2694f0a --- /dev/null +++ b/node_modules/lodash/fp/head.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('head', require('../head'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/identical.js b/node_modules/lodash/fp/identical.js new file mode 100644 index 0000000..85563f4 --- /dev/null +++ b/node_modules/lodash/fp/identical.js @@ -0,0 +1 @@ +module.exports = require('./eq'); diff --git a/node_modules/lodash/fp/identity.js b/node_modules/lodash/fp/identity.js new file mode 100644 index 0000000..096415a --- /dev/null +++ b/node_modules/lodash/fp/identity.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('identity', require('../identity'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/inRange.js b/node_modules/lodash/fp/inRange.js new file mode 100644 index 0000000..202d940 --- /dev/null +++ b/node_modules/lodash/fp/inRange.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('inRange', require('../inRange')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/includes.js b/node_modules/lodash/fp/includes.js new file mode 100644 index 0000000..1146780 --- /dev/null +++ b/node_modules/lodash/fp/includes.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('includes', require('../includes')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/includesFrom.js b/node_modules/lodash/fp/includesFrom.js new file mode 100644 index 0000000..683afdb --- /dev/null +++ b/node_modules/lodash/fp/includesFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('includesFrom', require('../includes')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/indexBy.js b/node_modules/lodash/fp/indexBy.js new file mode 100644 index 0000000..7e64bc0 --- /dev/null +++ b/node_modules/lodash/fp/indexBy.js @@ -0,0 +1 @@ +module.exports = require('./keyBy'); diff --git a/node_modules/lodash/fp/indexOf.js b/node_modules/lodash/fp/indexOf.js new file mode 100644 index 0000000..524658e --- /dev/null +++ b/node_modules/lodash/fp/indexOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('indexOf', require('../indexOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/indexOfFrom.js b/node_modules/lodash/fp/indexOfFrom.js new file mode 100644 index 0000000..d99c822 --- /dev/null +++ b/node_modules/lodash/fp/indexOfFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('indexOfFrom', require('../indexOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/init.js b/node_modules/lodash/fp/init.js new file mode 100644 index 0000000..2f88d8b --- /dev/null +++ b/node_modules/lodash/fp/init.js @@ -0,0 +1 @@ +module.exports = require('./initial'); diff --git a/node_modules/lodash/fp/initial.js b/node_modules/lodash/fp/initial.js new file mode 100644 index 0000000..b732ba0 --- /dev/null +++ b/node_modules/lodash/fp/initial.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('initial', require('../initial'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/intersection.js b/node_modules/lodash/fp/intersection.js new file mode 100644 index 0000000..52936d5 --- /dev/null +++ b/node_modules/lodash/fp/intersection.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('intersection', require('../intersection')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/intersectionBy.js b/node_modules/lodash/fp/intersectionBy.js new file mode 100644 index 0000000..72629f2 --- /dev/null +++ b/node_modules/lodash/fp/intersectionBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('intersectionBy', require('../intersectionBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/intersectionWith.js b/node_modules/lodash/fp/intersectionWith.js new file mode 100644 index 0000000..e064f40 --- /dev/null +++ b/node_modules/lodash/fp/intersectionWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('intersectionWith', require('../intersectionWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/invert.js b/node_modules/lodash/fp/invert.js new file mode 100644 index 0000000..2d5d1f0 --- /dev/null +++ b/node_modules/lodash/fp/invert.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('invert', require('../invert')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/invertBy.js b/node_modules/lodash/fp/invertBy.js new file mode 100644 index 0000000..63ca97e --- /dev/null +++ b/node_modules/lodash/fp/invertBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('invertBy', require('../invertBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/invertObj.js b/node_modules/lodash/fp/invertObj.js new file mode 100644 index 0000000..f1d842e --- /dev/null +++ b/node_modules/lodash/fp/invertObj.js @@ -0,0 +1 @@ +module.exports = require('./invert'); diff --git a/node_modules/lodash/fp/invoke.js b/node_modules/lodash/fp/invoke.js new file mode 100644 index 0000000..fcf17f0 --- /dev/null +++ b/node_modules/lodash/fp/invoke.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('invoke', require('../invoke')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/invokeArgs.js b/node_modules/lodash/fp/invokeArgs.js new file mode 100644 index 0000000..d3f2953 --- /dev/null +++ b/node_modules/lodash/fp/invokeArgs.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('invokeArgs', require('../invoke')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/invokeArgsMap.js b/node_modules/lodash/fp/invokeArgsMap.js new file mode 100644 index 0000000..eaa9f84 --- /dev/null +++ b/node_modules/lodash/fp/invokeArgsMap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('invokeArgsMap', require('../invokeMap')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/invokeMap.js b/node_modules/lodash/fp/invokeMap.js new file mode 100644 index 0000000..6515fd7 --- /dev/null +++ b/node_modules/lodash/fp/invokeMap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('invokeMap', require('../invokeMap')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isArguments.js b/node_modules/lodash/fp/isArguments.js new file mode 100644 index 0000000..1d93c9e --- /dev/null +++ b/node_modules/lodash/fp/isArguments.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isArguments', require('../isArguments'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isArray.js b/node_modules/lodash/fp/isArray.js new file mode 100644 index 0000000..ba7ade8 --- /dev/null +++ b/node_modules/lodash/fp/isArray.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isArray', require('../isArray'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isArrayBuffer.js b/node_modules/lodash/fp/isArrayBuffer.js new file mode 100644 index 0000000..5088513 --- /dev/null +++ b/node_modules/lodash/fp/isArrayBuffer.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isArrayBuffer', require('../isArrayBuffer'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isArrayLike.js b/node_modules/lodash/fp/isArrayLike.js new file mode 100644 index 0000000..8f1856b --- /dev/null +++ b/node_modules/lodash/fp/isArrayLike.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isArrayLike', require('../isArrayLike'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isArrayLikeObject.js b/node_modules/lodash/fp/isArrayLikeObject.js new file mode 100644 index 0000000..2108498 --- /dev/null +++ b/node_modules/lodash/fp/isArrayLikeObject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isArrayLikeObject', require('../isArrayLikeObject'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isBoolean.js b/node_modules/lodash/fp/isBoolean.js new file mode 100644 index 0000000..9339f75 --- /dev/null +++ b/node_modules/lodash/fp/isBoolean.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isBoolean', require('../isBoolean'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isBuffer.js b/node_modules/lodash/fp/isBuffer.js new file mode 100644 index 0000000..e60b123 --- /dev/null +++ b/node_modules/lodash/fp/isBuffer.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isBuffer', require('../isBuffer'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isDate.js b/node_modules/lodash/fp/isDate.js new file mode 100644 index 0000000..dc41d08 --- /dev/null +++ b/node_modules/lodash/fp/isDate.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isDate', require('../isDate'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isElement.js b/node_modules/lodash/fp/isElement.js new file mode 100644 index 0000000..18ee039 --- /dev/null +++ b/node_modules/lodash/fp/isElement.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isElement', require('../isElement'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isEmpty.js b/node_modules/lodash/fp/isEmpty.js new file mode 100644 index 0000000..0f4ae84 --- /dev/null +++ b/node_modules/lodash/fp/isEmpty.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isEmpty', require('../isEmpty'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isEqual.js b/node_modules/lodash/fp/isEqual.js new file mode 100644 index 0000000..4138386 --- /dev/null +++ b/node_modules/lodash/fp/isEqual.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isEqual', require('../isEqual')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isEqualWith.js b/node_modules/lodash/fp/isEqualWith.js new file mode 100644 index 0000000..029ff5c --- /dev/null +++ b/node_modules/lodash/fp/isEqualWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isEqualWith', require('../isEqualWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isError.js b/node_modules/lodash/fp/isError.js new file mode 100644 index 0000000..3dfd81c --- /dev/null +++ b/node_modules/lodash/fp/isError.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isError', require('../isError'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isFinite.js b/node_modules/lodash/fp/isFinite.js new file mode 100644 index 0000000..0b647b8 --- /dev/null +++ b/node_modules/lodash/fp/isFinite.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isFinite', require('../isFinite'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isFunction.js b/node_modules/lodash/fp/isFunction.js new file mode 100644 index 0000000..ff8e5c4 --- /dev/null +++ b/node_modules/lodash/fp/isFunction.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isFunction', require('../isFunction'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isInteger.js b/node_modules/lodash/fp/isInteger.js new file mode 100644 index 0000000..67af4ff --- /dev/null +++ b/node_modules/lodash/fp/isInteger.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isInteger', require('../isInteger'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isLength.js b/node_modules/lodash/fp/isLength.js new file mode 100644 index 0000000..fc101c5 --- /dev/null +++ b/node_modules/lodash/fp/isLength.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isLength', require('../isLength'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isMap.js b/node_modules/lodash/fp/isMap.js new file mode 100644 index 0000000..a209aa6 --- /dev/null +++ b/node_modules/lodash/fp/isMap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isMap', require('../isMap'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isMatch.js b/node_modules/lodash/fp/isMatch.js new file mode 100644 index 0000000..6264ca1 --- /dev/null +++ b/node_modules/lodash/fp/isMatch.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isMatch', require('../isMatch')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isMatchWith.js b/node_modules/lodash/fp/isMatchWith.js new file mode 100644 index 0000000..d95f319 --- /dev/null +++ b/node_modules/lodash/fp/isMatchWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isMatchWith', require('../isMatchWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isNaN.js b/node_modules/lodash/fp/isNaN.js new file mode 100644 index 0000000..66a978f --- /dev/null +++ b/node_modules/lodash/fp/isNaN.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isNaN', require('../isNaN'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isNative.js b/node_modules/lodash/fp/isNative.js new file mode 100644 index 0000000..3d775ba --- /dev/null +++ b/node_modules/lodash/fp/isNative.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isNative', require('../isNative'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isNil.js b/node_modules/lodash/fp/isNil.js new file mode 100644 index 0000000..5952c02 --- /dev/null +++ b/node_modules/lodash/fp/isNil.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isNil', require('../isNil'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isNull.js b/node_modules/lodash/fp/isNull.js new file mode 100644 index 0000000..f201a35 --- /dev/null +++ b/node_modules/lodash/fp/isNull.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isNull', require('../isNull'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isNumber.js b/node_modules/lodash/fp/isNumber.js new file mode 100644 index 0000000..a2b5fa0 --- /dev/null +++ b/node_modules/lodash/fp/isNumber.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isNumber', require('../isNumber'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isObject.js b/node_modules/lodash/fp/isObject.js new file mode 100644 index 0000000..231ace0 --- /dev/null +++ b/node_modules/lodash/fp/isObject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isObject', require('../isObject'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isObjectLike.js b/node_modules/lodash/fp/isObjectLike.js new file mode 100644 index 0000000..f16082e --- /dev/null +++ b/node_modules/lodash/fp/isObjectLike.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isObjectLike', require('../isObjectLike'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isPlainObject.js b/node_modules/lodash/fp/isPlainObject.js new file mode 100644 index 0000000..b5bea90 --- /dev/null +++ b/node_modules/lodash/fp/isPlainObject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isPlainObject', require('../isPlainObject'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isRegExp.js b/node_modules/lodash/fp/isRegExp.js new file mode 100644 index 0000000..12a1a3d --- /dev/null +++ b/node_modules/lodash/fp/isRegExp.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isRegExp', require('../isRegExp'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isSafeInteger.js b/node_modules/lodash/fp/isSafeInteger.js new file mode 100644 index 0000000..7230f55 --- /dev/null +++ b/node_modules/lodash/fp/isSafeInteger.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isSafeInteger', require('../isSafeInteger'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isSet.js b/node_modules/lodash/fp/isSet.js new file mode 100644 index 0000000..35c01f6 --- /dev/null +++ b/node_modules/lodash/fp/isSet.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isSet', require('../isSet'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isString.js b/node_modules/lodash/fp/isString.js new file mode 100644 index 0000000..1fd0679 --- /dev/null +++ b/node_modules/lodash/fp/isString.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isString', require('../isString'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isSymbol.js b/node_modules/lodash/fp/isSymbol.js new file mode 100644 index 0000000..3867695 --- /dev/null +++ b/node_modules/lodash/fp/isSymbol.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isSymbol', require('../isSymbol'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isTypedArray.js b/node_modules/lodash/fp/isTypedArray.js new file mode 100644 index 0000000..8567953 --- /dev/null +++ b/node_modules/lodash/fp/isTypedArray.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isTypedArray', require('../isTypedArray'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isUndefined.js b/node_modules/lodash/fp/isUndefined.js new file mode 100644 index 0000000..ddbca31 --- /dev/null +++ b/node_modules/lodash/fp/isUndefined.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isUndefined', require('../isUndefined'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isWeakMap.js b/node_modules/lodash/fp/isWeakMap.js new file mode 100644 index 0000000..ef60c61 --- /dev/null +++ b/node_modules/lodash/fp/isWeakMap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isWeakMap', require('../isWeakMap'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/isWeakSet.js b/node_modules/lodash/fp/isWeakSet.js new file mode 100644 index 0000000..c99bfaa --- /dev/null +++ b/node_modules/lodash/fp/isWeakSet.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('isWeakSet', require('../isWeakSet'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/iteratee.js b/node_modules/lodash/fp/iteratee.js new file mode 100644 index 0000000..9f0f717 --- /dev/null +++ b/node_modules/lodash/fp/iteratee.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('iteratee', require('../iteratee')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/join.js b/node_modules/lodash/fp/join.js new file mode 100644 index 0000000..a220e00 --- /dev/null +++ b/node_modules/lodash/fp/join.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('join', require('../join')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/juxt.js b/node_modules/lodash/fp/juxt.js new file mode 100644 index 0000000..f71e04e --- /dev/null +++ b/node_modules/lodash/fp/juxt.js @@ -0,0 +1 @@ +module.exports = require('./over'); diff --git a/node_modules/lodash/fp/kebabCase.js b/node_modules/lodash/fp/kebabCase.js new file mode 100644 index 0000000..60737f1 --- /dev/null +++ b/node_modules/lodash/fp/kebabCase.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('kebabCase', require('../kebabCase'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/keyBy.js b/node_modules/lodash/fp/keyBy.js new file mode 100644 index 0000000..9a6a85d --- /dev/null +++ b/node_modules/lodash/fp/keyBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('keyBy', require('../keyBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/keys.js b/node_modules/lodash/fp/keys.js new file mode 100644 index 0000000..e12bb07 --- /dev/null +++ b/node_modules/lodash/fp/keys.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('keys', require('../keys'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/keysIn.js b/node_modules/lodash/fp/keysIn.js new file mode 100644 index 0000000..f3eb36a --- /dev/null +++ b/node_modules/lodash/fp/keysIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('keysIn', require('../keysIn'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/lang.js b/node_modules/lodash/fp/lang.js new file mode 100644 index 0000000..08cc9c1 --- /dev/null +++ b/node_modules/lodash/fp/lang.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../lang')); diff --git a/node_modules/lodash/fp/last.js b/node_modules/lodash/fp/last.js new file mode 100644 index 0000000..0f71699 --- /dev/null +++ b/node_modules/lodash/fp/last.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('last', require('../last'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/lastIndexOf.js b/node_modules/lodash/fp/lastIndexOf.js new file mode 100644 index 0000000..ddf39c3 --- /dev/null +++ b/node_modules/lodash/fp/lastIndexOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('lastIndexOf', require('../lastIndexOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/lastIndexOfFrom.js b/node_modules/lodash/fp/lastIndexOfFrom.js new file mode 100644 index 0000000..1ff6a0b --- /dev/null +++ b/node_modules/lodash/fp/lastIndexOfFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('lastIndexOfFrom', require('../lastIndexOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/lowerCase.js b/node_modules/lodash/fp/lowerCase.js new file mode 100644 index 0000000..ea64bc1 --- /dev/null +++ b/node_modules/lodash/fp/lowerCase.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('lowerCase', require('../lowerCase'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/lowerFirst.js b/node_modules/lodash/fp/lowerFirst.js new file mode 100644 index 0000000..539720a --- /dev/null +++ b/node_modules/lodash/fp/lowerFirst.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('lowerFirst', require('../lowerFirst'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/lt.js b/node_modules/lodash/fp/lt.js new file mode 100644 index 0000000..a31d21e --- /dev/null +++ b/node_modules/lodash/fp/lt.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('lt', require('../lt')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/lte.js b/node_modules/lodash/fp/lte.js new file mode 100644 index 0000000..d795d10 --- /dev/null +++ b/node_modules/lodash/fp/lte.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('lte', require('../lte')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/map.js b/node_modules/lodash/fp/map.js new file mode 100644 index 0000000..cf98794 --- /dev/null +++ b/node_modules/lodash/fp/map.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('map', require('../map')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/mapKeys.js b/node_modules/lodash/fp/mapKeys.js new file mode 100644 index 0000000..1684587 --- /dev/null +++ b/node_modules/lodash/fp/mapKeys.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('mapKeys', require('../mapKeys')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/mapValues.js b/node_modules/lodash/fp/mapValues.js new file mode 100644 index 0000000..4004972 --- /dev/null +++ b/node_modules/lodash/fp/mapValues.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('mapValues', require('../mapValues')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/matches.js b/node_modules/lodash/fp/matches.js new file mode 100644 index 0000000..29d1e1e --- /dev/null +++ b/node_modules/lodash/fp/matches.js @@ -0,0 +1 @@ +module.exports = require('./isMatch'); diff --git a/node_modules/lodash/fp/matchesProperty.js b/node_modules/lodash/fp/matchesProperty.js new file mode 100644 index 0000000..4575bd2 --- /dev/null +++ b/node_modules/lodash/fp/matchesProperty.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('matchesProperty', require('../matchesProperty')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/math.js b/node_modules/lodash/fp/math.js new file mode 100644 index 0000000..e8f50f7 --- /dev/null +++ b/node_modules/lodash/fp/math.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../math')); diff --git a/node_modules/lodash/fp/max.js b/node_modules/lodash/fp/max.js new file mode 100644 index 0000000..a66acac --- /dev/null +++ b/node_modules/lodash/fp/max.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('max', require('../max'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/maxBy.js b/node_modules/lodash/fp/maxBy.js new file mode 100644 index 0000000..d083fd6 --- /dev/null +++ b/node_modules/lodash/fp/maxBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('maxBy', require('../maxBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/mean.js b/node_modules/lodash/fp/mean.js new file mode 100644 index 0000000..3117246 --- /dev/null +++ b/node_modules/lodash/fp/mean.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('mean', require('../mean'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/meanBy.js b/node_modules/lodash/fp/meanBy.js new file mode 100644 index 0000000..556f25e --- /dev/null +++ b/node_modules/lodash/fp/meanBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('meanBy', require('../meanBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/memoize.js b/node_modules/lodash/fp/memoize.js new file mode 100644 index 0000000..638eec6 --- /dev/null +++ b/node_modules/lodash/fp/memoize.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('memoize', require('../memoize')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/merge.js b/node_modules/lodash/fp/merge.js new file mode 100644 index 0000000..ac66add --- /dev/null +++ b/node_modules/lodash/fp/merge.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('merge', require('../merge')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/mergeAll.js b/node_modules/lodash/fp/mergeAll.js new file mode 100644 index 0000000..a3674d6 --- /dev/null +++ b/node_modules/lodash/fp/mergeAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('mergeAll', require('../merge')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/mergeAllWith.js b/node_modules/lodash/fp/mergeAllWith.js new file mode 100644 index 0000000..4bd4206 --- /dev/null +++ b/node_modules/lodash/fp/mergeAllWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('mergeAllWith', require('../mergeWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/mergeWith.js b/node_modules/lodash/fp/mergeWith.js new file mode 100644 index 0000000..00d44d5 --- /dev/null +++ b/node_modules/lodash/fp/mergeWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('mergeWith', require('../mergeWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/method.js b/node_modules/lodash/fp/method.js new file mode 100644 index 0000000..f4060c6 --- /dev/null +++ b/node_modules/lodash/fp/method.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('method', require('../method')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/methodOf.js b/node_modules/lodash/fp/methodOf.js new file mode 100644 index 0000000..6139905 --- /dev/null +++ b/node_modules/lodash/fp/methodOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('methodOf', require('../methodOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/min.js b/node_modules/lodash/fp/min.js new file mode 100644 index 0000000..d12c6b4 --- /dev/null +++ b/node_modules/lodash/fp/min.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('min', require('../min'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/minBy.js b/node_modules/lodash/fp/minBy.js new file mode 100644 index 0000000..fdb9e24 --- /dev/null +++ b/node_modules/lodash/fp/minBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('minBy', require('../minBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/mixin.js b/node_modules/lodash/fp/mixin.js new file mode 100644 index 0000000..332e6fb --- /dev/null +++ b/node_modules/lodash/fp/mixin.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('mixin', require('../mixin')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/multiply.js b/node_modules/lodash/fp/multiply.js new file mode 100644 index 0000000..4dcf0b0 --- /dev/null +++ b/node_modules/lodash/fp/multiply.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('multiply', require('../multiply')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/nAry.js b/node_modules/lodash/fp/nAry.js new file mode 100644 index 0000000..f262a76 --- /dev/null +++ b/node_modules/lodash/fp/nAry.js @@ -0,0 +1 @@ +module.exports = require('./ary'); diff --git a/node_modules/lodash/fp/negate.js b/node_modules/lodash/fp/negate.js new file mode 100644 index 0000000..8b6dc7c --- /dev/null +++ b/node_modules/lodash/fp/negate.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('negate', require('../negate'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/next.js b/node_modules/lodash/fp/next.js new file mode 100644 index 0000000..140155e --- /dev/null +++ b/node_modules/lodash/fp/next.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('next', require('../next'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/noop.js b/node_modules/lodash/fp/noop.js new file mode 100644 index 0000000..b9e32cc --- /dev/null +++ b/node_modules/lodash/fp/noop.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('noop', require('../noop'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/now.js b/node_modules/lodash/fp/now.js new file mode 100644 index 0000000..6de2068 --- /dev/null +++ b/node_modules/lodash/fp/now.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('now', require('../now'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/nth.js b/node_modules/lodash/fp/nth.js new file mode 100644 index 0000000..da4fda7 --- /dev/null +++ b/node_modules/lodash/fp/nth.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('nth', require('../nth')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/nthArg.js b/node_modules/lodash/fp/nthArg.js new file mode 100644 index 0000000..fce3165 --- /dev/null +++ b/node_modules/lodash/fp/nthArg.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('nthArg', require('../nthArg')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/number.js b/node_modules/lodash/fp/number.js new file mode 100644 index 0000000..5c10b88 --- /dev/null +++ b/node_modules/lodash/fp/number.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../number')); diff --git a/node_modules/lodash/fp/object.js b/node_modules/lodash/fp/object.js new file mode 100644 index 0000000..ae39a13 --- /dev/null +++ b/node_modules/lodash/fp/object.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../object')); diff --git a/node_modules/lodash/fp/omit.js b/node_modules/lodash/fp/omit.js new file mode 100644 index 0000000..fd68529 --- /dev/null +++ b/node_modules/lodash/fp/omit.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('omit', require('../omit')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/omitAll.js b/node_modules/lodash/fp/omitAll.js new file mode 100644 index 0000000..144cf4b --- /dev/null +++ b/node_modules/lodash/fp/omitAll.js @@ -0,0 +1 @@ +module.exports = require('./omit'); diff --git a/node_modules/lodash/fp/omitBy.js b/node_modules/lodash/fp/omitBy.js new file mode 100644 index 0000000..90df738 --- /dev/null +++ b/node_modules/lodash/fp/omitBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('omitBy', require('../omitBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/once.js b/node_modules/lodash/fp/once.js new file mode 100644 index 0000000..f8f0a5c --- /dev/null +++ b/node_modules/lodash/fp/once.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('once', require('../once'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/orderBy.js b/node_modules/lodash/fp/orderBy.js new file mode 100644 index 0000000..848e210 --- /dev/null +++ b/node_modules/lodash/fp/orderBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('orderBy', require('../orderBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/over.js b/node_modules/lodash/fp/over.js new file mode 100644 index 0000000..01eba7b --- /dev/null +++ b/node_modules/lodash/fp/over.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('over', require('../over')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/overArgs.js b/node_modules/lodash/fp/overArgs.js new file mode 100644 index 0000000..738556f --- /dev/null +++ b/node_modules/lodash/fp/overArgs.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('overArgs', require('../overArgs')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/overEvery.js b/node_modules/lodash/fp/overEvery.js new file mode 100644 index 0000000..9f5a032 --- /dev/null +++ b/node_modules/lodash/fp/overEvery.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('overEvery', require('../overEvery')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/overSome.js b/node_modules/lodash/fp/overSome.js new file mode 100644 index 0000000..15939d5 --- /dev/null +++ b/node_modules/lodash/fp/overSome.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('overSome', require('../overSome')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/pad.js b/node_modules/lodash/fp/pad.js new file mode 100644 index 0000000..f1dea4a --- /dev/null +++ b/node_modules/lodash/fp/pad.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('pad', require('../pad')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/padChars.js b/node_modules/lodash/fp/padChars.js new file mode 100644 index 0000000..d6e0804 --- /dev/null +++ b/node_modules/lodash/fp/padChars.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('padChars', require('../pad')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/padCharsEnd.js b/node_modules/lodash/fp/padCharsEnd.js new file mode 100644 index 0000000..d4ab79a --- /dev/null +++ b/node_modules/lodash/fp/padCharsEnd.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('padCharsEnd', require('../padEnd')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/padCharsStart.js b/node_modules/lodash/fp/padCharsStart.js new file mode 100644 index 0000000..a08a300 --- /dev/null +++ b/node_modules/lodash/fp/padCharsStart.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('padCharsStart', require('../padStart')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/padEnd.js b/node_modules/lodash/fp/padEnd.js new file mode 100644 index 0000000..a8522ec --- /dev/null +++ b/node_modules/lodash/fp/padEnd.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('padEnd', require('../padEnd')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/padStart.js b/node_modules/lodash/fp/padStart.js new file mode 100644 index 0000000..f4ca79d --- /dev/null +++ b/node_modules/lodash/fp/padStart.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('padStart', require('../padStart')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/parseInt.js b/node_modules/lodash/fp/parseInt.js new file mode 100644 index 0000000..27314cc --- /dev/null +++ b/node_modules/lodash/fp/parseInt.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('parseInt', require('../parseInt')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/partial.js b/node_modules/lodash/fp/partial.js new file mode 100644 index 0000000..5d46015 --- /dev/null +++ b/node_modules/lodash/fp/partial.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('partial', require('../partial')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/partialRight.js b/node_modules/lodash/fp/partialRight.js new file mode 100644 index 0000000..7f05fed --- /dev/null +++ b/node_modules/lodash/fp/partialRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('partialRight', require('../partialRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/partition.js b/node_modules/lodash/fp/partition.js new file mode 100644 index 0000000..2ebcacc --- /dev/null +++ b/node_modules/lodash/fp/partition.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('partition', require('../partition')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/path.js b/node_modules/lodash/fp/path.js new file mode 100644 index 0000000..b29cfb2 --- /dev/null +++ b/node_modules/lodash/fp/path.js @@ -0,0 +1 @@ +module.exports = require('./get'); diff --git a/node_modules/lodash/fp/pathEq.js b/node_modules/lodash/fp/pathEq.js new file mode 100644 index 0000000..36c027a --- /dev/null +++ b/node_modules/lodash/fp/pathEq.js @@ -0,0 +1 @@ +module.exports = require('./matchesProperty'); diff --git a/node_modules/lodash/fp/pathOr.js b/node_modules/lodash/fp/pathOr.js new file mode 100644 index 0000000..4ab5820 --- /dev/null +++ b/node_modules/lodash/fp/pathOr.js @@ -0,0 +1 @@ +module.exports = require('./getOr'); diff --git a/node_modules/lodash/fp/paths.js b/node_modules/lodash/fp/paths.js new file mode 100644 index 0000000..1eb7950 --- /dev/null +++ b/node_modules/lodash/fp/paths.js @@ -0,0 +1 @@ +module.exports = require('./at'); diff --git a/node_modules/lodash/fp/pick.js b/node_modules/lodash/fp/pick.js new file mode 100644 index 0000000..197393d --- /dev/null +++ b/node_modules/lodash/fp/pick.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('pick', require('../pick')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/pickAll.js b/node_modules/lodash/fp/pickAll.js new file mode 100644 index 0000000..a8ecd46 --- /dev/null +++ b/node_modules/lodash/fp/pickAll.js @@ -0,0 +1 @@ +module.exports = require('./pick'); diff --git a/node_modules/lodash/fp/pickBy.js b/node_modules/lodash/fp/pickBy.js new file mode 100644 index 0000000..d832d16 --- /dev/null +++ b/node_modules/lodash/fp/pickBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('pickBy', require('../pickBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/pipe.js b/node_modules/lodash/fp/pipe.js new file mode 100644 index 0000000..b2e1e2c --- /dev/null +++ b/node_modules/lodash/fp/pipe.js @@ -0,0 +1 @@ +module.exports = require('./flow'); diff --git a/node_modules/lodash/fp/placeholder.js b/node_modules/lodash/fp/placeholder.js new file mode 100644 index 0000000..1ce1739 --- /dev/null +++ b/node_modules/lodash/fp/placeholder.js @@ -0,0 +1,6 @@ +/** + * The default argument placeholder value for methods. + * + * @type {Object} + */ +module.exports = {}; diff --git a/node_modules/lodash/fp/plant.js b/node_modules/lodash/fp/plant.js new file mode 100644 index 0000000..eca8f32 --- /dev/null +++ b/node_modules/lodash/fp/plant.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('plant', require('../plant'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/pluck.js b/node_modules/lodash/fp/pluck.js new file mode 100644 index 0000000..0d1e1ab --- /dev/null +++ b/node_modules/lodash/fp/pluck.js @@ -0,0 +1 @@ +module.exports = require('./map'); diff --git a/node_modules/lodash/fp/prop.js b/node_modules/lodash/fp/prop.js new file mode 100644 index 0000000..b29cfb2 --- /dev/null +++ b/node_modules/lodash/fp/prop.js @@ -0,0 +1 @@ +module.exports = require('./get'); diff --git a/node_modules/lodash/fp/propEq.js b/node_modules/lodash/fp/propEq.js new file mode 100644 index 0000000..36c027a --- /dev/null +++ b/node_modules/lodash/fp/propEq.js @@ -0,0 +1 @@ +module.exports = require('./matchesProperty'); diff --git a/node_modules/lodash/fp/propOr.js b/node_modules/lodash/fp/propOr.js new file mode 100644 index 0000000..4ab5820 --- /dev/null +++ b/node_modules/lodash/fp/propOr.js @@ -0,0 +1 @@ +module.exports = require('./getOr'); diff --git a/node_modules/lodash/fp/property.js b/node_modules/lodash/fp/property.js new file mode 100644 index 0000000..b29cfb2 --- /dev/null +++ b/node_modules/lodash/fp/property.js @@ -0,0 +1 @@ +module.exports = require('./get'); diff --git a/node_modules/lodash/fp/propertyOf.js b/node_modules/lodash/fp/propertyOf.js new file mode 100644 index 0000000..f6273ee --- /dev/null +++ b/node_modules/lodash/fp/propertyOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('propertyOf', require('../get')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/props.js b/node_modules/lodash/fp/props.js new file mode 100644 index 0000000..1eb7950 --- /dev/null +++ b/node_modules/lodash/fp/props.js @@ -0,0 +1 @@ +module.exports = require('./at'); diff --git a/node_modules/lodash/fp/pull.js b/node_modules/lodash/fp/pull.js new file mode 100644 index 0000000..8d7084f --- /dev/null +++ b/node_modules/lodash/fp/pull.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('pull', require('../pull')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/pullAll.js b/node_modules/lodash/fp/pullAll.js new file mode 100644 index 0000000..98d5c9a --- /dev/null +++ b/node_modules/lodash/fp/pullAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('pullAll', require('../pullAll')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/pullAllBy.js b/node_modules/lodash/fp/pullAllBy.js new file mode 100644 index 0000000..876bc3b --- /dev/null +++ b/node_modules/lodash/fp/pullAllBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('pullAllBy', require('../pullAllBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/pullAllWith.js b/node_modules/lodash/fp/pullAllWith.js new file mode 100644 index 0000000..f71ba4d --- /dev/null +++ b/node_modules/lodash/fp/pullAllWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('pullAllWith', require('../pullAllWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/pullAt.js b/node_modules/lodash/fp/pullAt.js new file mode 100644 index 0000000..e8b3bb6 --- /dev/null +++ b/node_modules/lodash/fp/pullAt.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('pullAt', require('../pullAt')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/random.js b/node_modules/lodash/fp/random.js new file mode 100644 index 0000000..99d852e --- /dev/null +++ b/node_modules/lodash/fp/random.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('random', require('../random')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/range.js b/node_modules/lodash/fp/range.js new file mode 100644 index 0000000..a6bb591 --- /dev/null +++ b/node_modules/lodash/fp/range.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('range', require('../range')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/rangeRight.js b/node_modules/lodash/fp/rangeRight.js new file mode 100644 index 0000000..fdb712f --- /dev/null +++ b/node_modules/lodash/fp/rangeRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('rangeRight', require('../rangeRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/rangeStep.js b/node_modules/lodash/fp/rangeStep.js new file mode 100644 index 0000000..d72dfc2 --- /dev/null +++ b/node_modules/lodash/fp/rangeStep.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('rangeStep', require('../range')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/rangeStepRight.js b/node_modules/lodash/fp/rangeStepRight.js new file mode 100644 index 0000000..8b2a67b --- /dev/null +++ b/node_modules/lodash/fp/rangeStepRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('rangeStepRight', require('../rangeRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/rearg.js b/node_modules/lodash/fp/rearg.js new file mode 100644 index 0000000..678e02a --- /dev/null +++ b/node_modules/lodash/fp/rearg.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('rearg', require('../rearg')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/reduce.js b/node_modules/lodash/fp/reduce.js new file mode 100644 index 0000000..4cef0a0 --- /dev/null +++ b/node_modules/lodash/fp/reduce.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('reduce', require('../reduce')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/reduceRight.js b/node_modules/lodash/fp/reduceRight.js new file mode 100644 index 0000000..caf5bb5 --- /dev/null +++ b/node_modules/lodash/fp/reduceRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('reduceRight', require('../reduceRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/reject.js b/node_modules/lodash/fp/reject.js new file mode 100644 index 0000000..c163273 --- /dev/null +++ b/node_modules/lodash/fp/reject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('reject', require('../reject')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/remove.js b/node_modules/lodash/fp/remove.js new file mode 100644 index 0000000..e9d1327 --- /dev/null +++ b/node_modules/lodash/fp/remove.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('remove', require('../remove')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/repeat.js b/node_modules/lodash/fp/repeat.js new file mode 100644 index 0000000..08470f2 --- /dev/null +++ b/node_modules/lodash/fp/repeat.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('repeat', require('../repeat')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/replace.js b/node_modules/lodash/fp/replace.js new file mode 100644 index 0000000..2227db6 --- /dev/null +++ b/node_modules/lodash/fp/replace.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('replace', require('../replace')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/rest.js b/node_modules/lodash/fp/rest.js new file mode 100644 index 0000000..c1f3d64 --- /dev/null +++ b/node_modules/lodash/fp/rest.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('rest', require('../rest')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/restFrom.js b/node_modules/lodash/fp/restFrom.js new file mode 100644 index 0000000..714e42b --- /dev/null +++ b/node_modules/lodash/fp/restFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('restFrom', require('../rest')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/result.js b/node_modules/lodash/fp/result.js new file mode 100644 index 0000000..f86ce07 --- /dev/null +++ b/node_modules/lodash/fp/result.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('result', require('../result')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/reverse.js b/node_modules/lodash/fp/reverse.js new file mode 100644 index 0000000..07c9f5e --- /dev/null +++ b/node_modules/lodash/fp/reverse.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('reverse', require('../reverse')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/round.js b/node_modules/lodash/fp/round.js new file mode 100644 index 0000000..4c0e5c8 --- /dev/null +++ b/node_modules/lodash/fp/round.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('round', require('../round')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/sample.js b/node_modules/lodash/fp/sample.js new file mode 100644 index 0000000..6bea125 --- /dev/null +++ b/node_modules/lodash/fp/sample.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('sample', require('../sample'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/sampleSize.js b/node_modules/lodash/fp/sampleSize.js new file mode 100644 index 0000000..359ed6f --- /dev/null +++ b/node_modules/lodash/fp/sampleSize.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('sampleSize', require('../sampleSize')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/seq.js b/node_modules/lodash/fp/seq.js new file mode 100644 index 0000000..d8f42b0 --- /dev/null +++ b/node_modules/lodash/fp/seq.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../seq')); diff --git a/node_modules/lodash/fp/set.js b/node_modules/lodash/fp/set.js new file mode 100644 index 0000000..0b56a56 --- /dev/null +++ b/node_modules/lodash/fp/set.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('set', require('../set')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/setWith.js b/node_modules/lodash/fp/setWith.js new file mode 100644 index 0000000..0b58495 --- /dev/null +++ b/node_modules/lodash/fp/setWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('setWith', require('../setWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/shuffle.js b/node_modules/lodash/fp/shuffle.js new file mode 100644 index 0000000..aa3a1ca --- /dev/null +++ b/node_modules/lodash/fp/shuffle.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('shuffle', require('../shuffle'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/size.js b/node_modules/lodash/fp/size.js new file mode 100644 index 0000000..7490136 --- /dev/null +++ b/node_modules/lodash/fp/size.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('size', require('../size'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/slice.js b/node_modules/lodash/fp/slice.js new file mode 100644 index 0000000..15945d3 --- /dev/null +++ b/node_modules/lodash/fp/slice.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('slice', require('../slice')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/snakeCase.js b/node_modules/lodash/fp/snakeCase.js new file mode 100644 index 0000000..a0ff780 --- /dev/null +++ b/node_modules/lodash/fp/snakeCase.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('snakeCase', require('../snakeCase'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/some.js b/node_modules/lodash/fp/some.js new file mode 100644 index 0000000..a4fa2d0 --- /dev/null +++ b/node_modules/lodash/fp/some.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('some', require('../some')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/sortBy.js b/node_modules/lodash/fp/sortBy.js new file mode 100644 index 0000000..e0790ad --- /dev/null +++ b/node_modules/lodash/fp/sortBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('sortBy', require('../sortBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/sortedIndex.js b/node_modules/lodash/fp/sortedIndex.js new file mode 100644 index 0000000..364a054 --- /dev/null +++ b/node_modules/lodash/fp/sortedIndex.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('sortedIndex', require('../sortedIndex')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/sortedIndexBy.js b/node_modules/lodash/fp/sortedIndexBy.js new file mode 100644 index 0000000..9593dbd --- /dev/null +++ b/node_modules/lodash/fp/sortedIndexBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('sortedIndexBy', require('../sortedIndexBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/sortedIndexOf.js b/node_modules/lodash/fp/sortedIndexOf.js new file mode 100644 index 0000000..c9084ca --- /dev/null +++ b/node_modules/lodash/fp/sortedIndexOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('sortedIndexOf', require('../sortedIndexOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/sortedLastIndex.js b/node_modules/lodash/fp/sortedLastIndex.js new file mode 100644 index 0000000..47fe241 --- /dev/null +++ b/node_modules/lodash/fp/sortedLastIndex.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('sortedLastIndex', require('../sortedLastIndex')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/sortedLastIndexBy.js b/node_modules/lodash/fp/sortedLastIndexBy.js new file mode 100644 index 0000000..0f9a347 --- /dev/null +++ b/node_modules/lodash/fp/sortedLastIndexBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('sortedLastIndexBy', require('../sortedLastIndexBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/sortedLastIndexOf.js b/node_modules/lodash/fp/sortedLastIndexOf.js new file mode 100644 index 0000000..0d4d932 --- /dev/null +++ b/node_modules/lodash/fp/sortedLastIndexOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('sortedLastIndexOf', require('../sortedLastIndexOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/sortedUniq.js b/node_modules/lodash/fp/sortedUniq.js new file mode 100644 index 0000000..882d283 --- /dev/null +++ b/node_modules/lodash/fp/sortedUniq.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('sortedUniq', require('../sortedUniq'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/sortedUniqBy.js b/node_modules/lodash/fp/sortedUniqBy.js new file mode 100644 index 0000000..033db91 --- /dev/null +++ b/node_modules/lodash/fp/sortedUniqBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('sortedUniqBy', require('../sortedUniqBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/split.js b/node_modules/lodash/fp/split.js new file mode 100644 index 0000000..14de1a7 --- /dev/null +++ b/node_modules/lodash/fp/split.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('split', require('../split')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/spread.js b/node_modules/lodash/fp/spread.js new file mode 100644 index 0000000..2d11b70 --- /dev/null +++ b/node_modules/lodash/fp/spread.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('spread', require('../spread')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/spreadFrom.js b/node_modules/lodash/fp/spreadFrom.js new file mode 100644 index 0000000..0b630df --- /dev/null +++ b/node_modules/lodash/fp/spreadFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('spreadFrom', require('../spread')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/startCase.js b/node_modules/lodash/fp/startCase.js new file mode 100644 index 0000000..ada98c9 --- /dev/null +++ b/node_modules/lodash/fp/startCase.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('startCase', require('../startCase'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/startsWith.js b/node_modules/lodash/fp/startsWith.js new file mode 100644 index 0000000..985e2f2 --- /dev/null +++ b/node_modules/lodash/fp/startsWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('startsWith', require('../startsWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/string.js b/node_modules/lodash/fp/string.js new file mode 100644 index 0000000..773b037 --- /dev/null +++ b/node_modules/lodash/fp/string.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../string')); diff --git a/node_modules/lodash/fp/stubArray.js b/node_modules/lodash/fp/stubArray.js new file mode 100644 index 0000000..cd604cb --- /dev/null +++ b/node_modules/lodash/fp/stubArray.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('stubArray', require('../stubArray'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/stubFalse.js b/node_modules/lodash/fp/stubFalse.js new file mode 100644 index 0000000..3296664 --- /dev/null +++ b/node_modules/lodash/fp/stubFalse.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('stubFalse', require('../stubFalse'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/stubObject.js b/node_modules/lodash/fp/stubObject.js new file mode 100644 index 0000000..c6c8ec4 --- /dev/null +++ b/node_modules/lodash/fp/stubObject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('stubObject', require('../stubObject'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/stubString.js b/node_modules/lodash/fp/stubString.js new file mode 100644 index 0000000..701051e --- /dev/null +++ b/node_modules/lodash/fp/stubString.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('stubString', require('../stubString'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/stubTrue.js b/node_modules/lodash/fp/stubTrue.js new file mode 100644 index 0000000..9249082 --- /dev/null +++ b/node_modules/lodash/fp/stubTrue.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('stubTrue', require('../stubTrue'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/subtract.js b/node_modules/lodash/fp/subtract.js new file mode 100644 index 0000000..d32b16d --- /dev/null +++ b/node_modules/lodash/fp/subtract.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('subtract', require('../subtract')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/sum.js b/node_modules/lodash/fp/sum.js new file mode 100644 index 0000000..5cce12b --- /dev/null +++ b/node_modules/lodash/fp/sum.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('sum', require('../sum'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/sumBy.js b/node_modules/lodash/fp/sumBy.js new file mode 100644 index 0000000..c882656 --- /dev/null +++ b/node_modules/lodash/fp/sumBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('sumBy', require('../sumBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/symmetricDifference.js b/node_modules/lodash/fp/symmetricDifference.js new file mode 100644 index 0000000..78c16ad --- /dev/null +++ b/node_modules/lodash/fp/symmetricDifference.js @@ -0,0 +1 @@ +module.exports = require('./xor'); diff --git a/node_modules/lodash/fp/symmetricDifferenceBy.js b/node_modules/lodash/fp/symmetricDifferenceBy.js new file mode 100644 index 0000000..298fc7f --- /dev/null +++ b/node_modules/lodash/fp/symmetricDifferenceBy.js @@ -0,0 +1 @@ +module.exports = require('./xorBy'); diff --git a/node_modules/lodash/fp/symmetricDifferenceWith.js b/node_modules/lodash/fp/symmetricDifferenceWith.js new file mode 100644 index 0000000..70bc6fa --- /dev/null +++ b/node_modules/lodash/fp/symmetricDifferenceWith.js @@ -0,0 +1 @@ +module.exports = require('./xorWith'); diff --git a/node_modules/lodash/fp/tail.js b/node_modules/lodash/fp/tail.js new file mode 100644 index 0000000..f122f0a --- /dev/null +++ b/node_modules/lodash/fp/tail.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('tail', require('../tail'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/take.js b/node_modules/lodash/fp/take.js new file mode 100644 index 0000000..9af98a7 --- /dev/null +++ b/node_modules/lodash/fp/take.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('take', require('../take')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/takeLast.js b/node_modules/lodash/fp/takeLast.js new file mode 100644 index 0000000..e98c84a --- /dev/null +++ b/node_modules/lodash/fp/takeLast.js @@ -0,0 +1 @@ +module.exports = require('./takeRight'); diff --git a/node_modules/lodash/fp/takeLastWhile.js b/node_modules/lodash/fp/takeLastWhile.js new file mode 100644 index 0000000..5367968 --- /dev/null +++ b/node_modules/lodash/fp/takeLastWhile.js @@ -0,0 +1 @@ +module.exports = require('./takeRightWhile'); diff --git a/node_modules/lodash/fp/takeRight.js b/node_modules/lodash/fp/takeRight.js new file mode 100644 index 0000000..b82950a --- /dev/null +++ b/node_modules/lodash/fp/takeRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('takeRight', require('../takeRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/takeRightWhile.js b/node_modules/lodash/fp/takeRightWhile.js new file mode 100644 index 0000000..8ffb0a2 --- /dev/null +++ b/node_modules/lodash/fp/takeRightWhile.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('takeRightWhile', require('../takeRightWhile')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/takeWhile.js b/node_modules/lodash/fp/takeWhile.js new file mode 100644 index 0000000..2813664 --- /dev/null +++ b/node_modules/lodash/fp/takeWhile.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('takeWhile', require('../takeWhile')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/tap.js b/node_modules/lodash/fp/tap.js new file mode 100644 index 0000000..d33ad6e --- /dev/null +++ b/node_modules/lodash/fp/tap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('tap', require('../tap')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/template.js b/node_modules/lodash/fp/template.js new file mode 100644 index 0000000..74857e1 --- /dev/null +++ b/node_modules/lodash/fp/template.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('template', require('../template')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/templateSettings.js b/node_modules/lodash/fp/templateSettings.js new file mode 100644 index 0000000..7bcc0a8 --- /dev/null +++ b/node_modules/lodash/fp/templateSettings.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('templateSettings', require('../templateSettings'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/throttle.js b/node_modules/lodash/fp/throttle.js new file mode 100644 index 0000000..77fff14 --- /dev/null +++ b/node_modules/lodash/fp/throttle.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('throttle', require('../throttle')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/thru.js b/node_modules/lodash/fp/thru.js new file mode 100644 index 0000000..d42b3b1 --- /dev/null +++ b/node_modules/lodash/fp/thru.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('thru', require('../thru')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/times.js b/node_modules/lodash/fp/times.js new file mode 100644 index 0000000..0dab06d --- /dev/null +++ b/node_modules/lodash/fp/times.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('times', require('../times')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toArray.js b/node_modules/lodash/fp/toArray.js new file mode 100644 index 0000000..f0c360a --- /dev/null +++ b/node_modules/lodash/fp/toArray.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('toArray', require('../toArray'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toFinite.js b/node_modules/lodash/fp/toFinite.js new file mode 100644 index 0000000..3a47687 --- /dev/null +++ b/node_modules/lodash/fp/toFinite.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('toFinite', require('../toFinite'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toInteger.js b/node_modules/lodash/fp/toInteger.js new file mode 100644 index 0000000..e0af6a7 --- /dev/null +++ b/node_modules/lodash/fp/toInteger.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('toInteger', require('../toInteger'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toIterator.js b/node_modules/lodash/fp/toIterator.js new file mode 100644 index 0000000..65e6baa --- /dev/null +++ b/node_modules/lodash/fp/toIterator.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('toIterator', require('../toIterator'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toJSON.js b/node_modules/lodash/fp/toJSON.js new file mode 100644 index 0000000..2d718d0 --- /dev/null +++ b/node_modules/lodash/fp/toJSON.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('toJSON', require('../toJSON'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toLength.js b/node_modules/lodash/fp/toLength.js new file mode 100644 index 0000000..b97cdd9 --- /dev/null +++ b/node_modules/lodash/fp/toLength.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('toLength', require('../toLength'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toLower.js b/node_modules/lodash/fp/toLower.js new file mode 100644 index 0000000..616ef36 --- /dev/null +++ b/node_modules/lodash/fp/toLower.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('toLower', require('../toLower'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toNumber.js b/node_modules/lodash/fp/toNumber.js new file mode 100644 index 0000000..d0c6f4d --- /dev/null +++ b/node_modules/lodash/fp/toNumber.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('toNumber', require('../toNumber'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toPairs.js b/node_modules/lodash/fp/toPairs.js new file mode 100644 index 0000000..af78378 --- /dev/null +++ b/node_modules/lodash/fp/toPairs.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('toPairs', require('../toPairs'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toPairsIn.js b/node_modules/lodash/fp/toPairsIn.js new file mode 100644 index 0000000..66504ab --- /dev/null +++ b/node_modules/lodash/fp/toPairsIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('toPairsIn', require('../toPairsIn'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toPath.js b/node_modules/lodash/fp/toPath.js new file mode 100644 index 0000000..b4d5e50 --- /dev/null +++ b/node_modules/lodash/fp/toPath.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('toPath', require('../toPath'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toPlainObject.js b/node_modules/lodash/fp/toPlainObject.js new file mode 100644 index 0000000..278bb86 --- /dev/null +++ b/node_modules/lodash/fp/toPlainObject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('toPlainObject', require('../toPlainObject'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toSafeInteger.js b/node_modules/lodash/fp/toSafeInteger.js new file mode 100644 index 0000000..367a26f --- /dev/null +++ b/node_modules/lodash/fp/toSafeInteger.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('toSafeInteger', require('../toSafeInteger'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toString.js b/node_modules/lodash/fp/toString.js new file mode 100644 index 0000000..cec4f8e --- /dev/null +++ b/node_modules/lodash/fp/toString.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('toString', require('../toString'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/toUpper.js b/node_modules/lodash/fp/toUpper.js new file mode 100644 index 0000000..54f9a56 --- /dev/null +++ b/node_modules/lodash/fp/toUpper.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('toUpper', require('../toUpper'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/transform.js b/node_modules/lodash/fp/transform.js new file mode 100644 index 0000000..759d088 --- /dev/null +++ b/node_modules/lodash/fp/transform.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('transform', require('../transform')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/trim.js b/node_modules/lodash/fp/trim.js new file mode 100644 index 0000000..e6319a7 --- /dev/null +++ b/node_modules/lodash/fp/trim.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('trim', require('../trim')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/trimChars.js b/node_modules/lodash/fp/trimChars.js new file mode 100644 index 0000000..c9294de --- /dev/null +++ b/node_modules/lodash/fp/trimChars.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('trimChars', require('../trim')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/trimCharsEnd.js b/node_modules/lodash/fp/trimCharsEnd.js new file mode 100644 index 0000000..284bc2f --- /dev/null +++ b/node_modules/lodash/fp/trimCharsEnd.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('trimCharsEnd', require('../trimEnd')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/trimCharsStart.js b/node_modules/lodash/fp/trimCharsStart.js new file mode 100644 index 0000000..ff0ee65 --- /dev/null +++ b/node_modules/lodash/fp/trimCharsStart.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('trimCharsStart', require('../trimStart')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/trimEnd.js b/node_modules/lodash/fp/trimEnd.js new file mode 100644 index 0000000..7190880 --- /dev/null +++ b/node_modules/lodash/fp/trimEnd.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('trimEnd', require('../trimEnd')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/trimStart.js b/node_modules/lodash/fp/trimStart.js new file mode 100644 index 0000000..fda902c --- /dev/null +++ b/node_modules/lodash/fp/trimStart.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('trimStart', require('../trimStart')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/truncate.js b/node_modules/lodash/fp/truncate.js new file mode 100644 index 0000000..d265c1d --- /dev/null +++ b/node_modules/lodash/fp/truncate.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('truncate', require('../truncate')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/unapply.js b/node_modules/lodash/fp/unapply.js new file mode 100644 index 0000000..c5dfe77 --- /dev/null +++ b/node_modules/lodash/fp/unapply.js @@ -0,0 +1 @@ +module.exports = require('./rest'); diff --git a/node_modules/lodash/fp/unary.js b/node_modules/lodash/fp/unary.js new file mode 100644 index 0000000..286c945 --- /dev/null +++ b/node_modules/lodash/fp/unary.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('unary', require('../unary'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/unescape.js b/node_modules/lodash/fp/unescape.js new file mode 100644 index 0000000..fddcb46 --- /dev/null +++ b/node_modules/lodash/fp/unescape.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('unescape', require('../unescape'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/union.js b/node_modules/lodash/fp/union.js new file mode 100644 index 0000000..ef8228d --- /dev/null +++ b/node_modules/lodash/fp/union.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('union', require('../union')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/unionBy.js b/node_modules/lodash/fp/unionBy.js new file mode 100644 index 0000000..603687a --- /dev/null +++ b/node_modules/lodash/fp/unionBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('unionBy', require('../unionBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/unionWith.js b/node_modules/lodash/fp/unionWith.js new file mode 100644 index 0000000..65bb3a7 --- /dev/null +++ b/node_modules/lodash/fp/unionWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('unionWith', require('../unionWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/uniq.js b/node_modules/lodash/fp/uniq.js new file mode 100644 index 0000000..bc18524 --- /dev/null +++ b/node_modules/lodash/fp/uniq.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('uniq', require('../uniq'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/uniqBy.js b/node_modules/lodash/fp/uniqBy.js new file mode 100644 index 0000000..634c6a8 --- /dev/null +++ b/node_modules/lodash/fp/uniqBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('uniqBy', require('../uniqBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/uniqWith.js b/node_modules/lodash/fp/uniqWith.js new file mode 100644 index 0000000..0ec601a --- /dev/null +++ b/node_modules/lodash/fp/uniqWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('uniqWith', require('../uniqWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/uniqueId.js b/node_modules/lodash/fp/uniqueId.js new file mode 100644 index 0000000..aa8fc2f --- /dev/null +++ b/node_modules/lodash/fp/uniqueId.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('uniqueId', require('../uniqueId')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/unnest.js b/node_modules/lodash/fp/unnest.js new file mode 100644 index 0000000..5d34060 --- /dev/null +++ b/node_modules/lodash/fp/unnest.js @@ -0,0 +1 @@ +module.exports = require('./flatten'); diff --git a/node_modules/lodash/fp/unset.js b/node_modules/lodash/fp/unset.js new file mode 100644 index 0000000..ea203a0 --- /dev/null +++ b/node_modules/lodash/fp/unset.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('unset', require('../unset')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/unzip.js b/node_modules/lodash/fp/unzip.js new file mode 100644 index 0000000..cc364b3 --- /dev/null +++ b/node_modules/lodash/fp/unzip.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('unzip', require('../unzip'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/unzipWith.js b/node_modules/lodash/fp/unzipWith.js new file mode 100644 index 0000000..182eaa1 --- /dev/null +++ b/node_modules/lodash/fp/unzipWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('unzipWith', require('../unzipWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/update.js b/node_modules/lodash/fp/update.js new file mode 100644 index 0000000..b8ce2cc --- /dev/null +++ b/node_modules/lodash/fp/update.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('update', require('../update')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/updateWith.js b/node_modules/lodash/fp/updateWith.js new file mode 100644 index 0000000..d5e8282 --- /dev/null +++ b/node_modules/lodash/fp/updateWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('updateWith', require('../updateWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/upperCase.js b/node_modules/lodash/fp/upperCase.js new file mode 100644 index 0000000..c886f20 --- /dev/null +++ b/node_modules/lodash/fp/upperCase.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('upperCase', require('../upperCase'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/upperFirst.js b/node_modules/lodash/fp/upperFirst.js new file mode 100644 index 0000000..d8c04df --- /dev/null +++ b/node_modules/lodash/fp/upperFirst.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('upperFirst', require('../upperFirst'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/useWith.js b/node_modules/lodash/fp/useWith.js new file mode 100644 index 0000000..d8b3df5 --- /dev/null +++ b/node_modules/lodash/fp/useWith.js @@ -0,0 +1 @@ +module.exports = require('./overArgs'); diff --git a/node_modules/lodash/fp/util.js b/node_modules/lodash/fp/util.js new file mode 100644 index 0000000..18c00ba --- /dev/null +++ b/node_modules/lodash/fp/util.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../util')); diff --git a/node_modules/lodash/fp/value.js b/node_modules/lodash/fp/value.js new file mode 100644 index 0000000..555eec7 --- /dev/null +++ b/node_modules/lodash/fp/value.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('value', require('../value'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/valueOf.js b/node_modules/lodash/fp/valueOf.js new file mode 100644 index 0000000..f968807 --- /dev/null +++ b/node_modules/lodash/fp/valueOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('valueOf', require('../valueOf'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/values.js b/node_modules/lodash/fp/values.js new file mode 100644 index 0000000..2dfc561 --- /dev/null +++ b/node_modules/lodash/fp/values.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('values', require('../values'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/valuesIn.js b/node_modules/lodash/fp/valuesIn.js new file mode 100644 index 0000000..a1b2bb8 --- /dev/null +++ b/node_modules/lodash/fp/valuesIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('valuesIn', require('../valuesIn'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/where.js b/node_modules/lodash/fp/where.js new file mode 100644 index 0000000..3247f64 --- /dev/null +++ b/node_modules/lodash/fp/where.js @@ -0,0 +1 @@ +module.exports = require('./conformsTo'); diff --git a/node_modules/lodash/fp/whereEq.js b/node_modules/lodash/fp/whereEq.js new file mode 100644 index 0000000..29d1e1e --- /dev/null +++ b/node_modules/lodash/fp/whereEq.js @@ -0,0 +1 @@ +module.exports = require('./isMatch'); diff --git a/node_modules/lodash/fp/without.js b/node_modules/lodash/fp/without.js new file mode 100644 index 0000000..bad9e12 --- /dev/null +++ b/node_modules/lodash/fp/without.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('without', require('../without')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/words.js b/node_modules/lodash/fp/words.js new file mode 100644 index 0000000..4a90141 --- /dev/null +++ b/node_modules/lodash/fp/words.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('words', require('../words')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/wrap.js b/node_modules/lodash/fp/wrap.js new file mode 100644 index 0000000..e93bd8a --- /dev/null +++ b/node_modules/lodash/fp/wrap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('wrap', require('../wrap')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/wrapperAt.js b/node_modules/lodash/fp/wrapperAt.js new file mode 100644 index 0000000..8f0a310 --- /dev/null +++ b/node_modules/lodash/fp/wrapperAt.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('wrapperAt', require('../wrapperAt'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/wrapperChain.js b/node_modules/lodash/fp/wrapperChain.js new file mode 100644 index 0000000..2a48ea2 --- /dev/null +++ b/node_modules/lodash/fp/wrapperChain.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('wrapperChain', require('../wrapperChain'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/wrapperLodash.js b/node_modules/lodash/fp/wrapperLodash.js new file mode 100644 index 0000000..a7162d0 --- /dev/null +++ b/node_modules/lodash/fp/wrapperLodash.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('wrapperLodash', require('../wrapperLodash'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/wrapperReverse.js b/node_modules/lodash/fp/wrapperReverse.js new file mode 100644 index 0000000..e1481aa --- /dev/null +++ b/node_modules/lodash/fp/wrapperReverse.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('wrapperReverse', require('../wrapperReverse'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/wrapperValue.js b/node_modules/lodash/fp/wrapperValue.js new file mode 100644 index 0000000..8eb9112 --- /dev/null +++ b/node_modules/lodash/fp/wrapperValue.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('wrapperValue', require('../wrapperValue'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/xor.js b/node_modules/lodash/fp/xor.js new file mode 100644 index 0000000..29e2819 --- /dev/null +++ b/node_modules/lodash/fp/xor.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('xor', require('../xor')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/xorBy.js b/node_modules/lodash/fp/xorBy.js new file mode 100644 index 0000000..b355686 --- /dev/null +++ b/node_modules/lodash/fp/xorBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('xorBy', require('../xorBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/xorWith.js b/node_modules/lodash/fp/xorWith.js new file mode 100644 index 0000000..8e05739 --- /dev/null +++ b/node_modules/lodash/fp/xorWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('xorWith', require('../xorWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/zip.js b/node_modules/lodash/fp/zip.js new file mode 100644 index 0000000..69e147a --- /dev/null +++ b/node_modules/lodash/fp/zip.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('zip', require('../zip')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/zipAll.js b/node_modules/lodash/fp/zipAll.js new file mode 100644 index 0000000..efa8ccb --- /dev/null +++ b/node_modules/lodash/fp/zipAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('zipAll', require('../zip')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/zipObj.js b/node_modules/lodash/fp/zipObj.js new file mode 100644 index 0000000..f4a3453 --- /dev/null +++ b/node_modules/lodash/fp/zipObj.js @@ -0,0 +1 @@ +module.exports = require('./zipObject'); diff --git a/node_modules/lodash/fp/zipObject.js b/node_modules/lodash/fp/zipObject.js new file mode 100644 index 0000000..462dbb6 --- /dev/null +++ b/node_modules/lodash/fp/zipObject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('zipObject', require('../zipObject')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/zipObjectDeep.js b/node_modules/lodash/fp/zipObjectDeep.js new file mode 100644 index 0000000..53a5d33 --- /dev/null +++ b/node_modules/lodash/fp/zipObjectDeep.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('zipObjectDeep', require('../zipObjectDeep')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fp/zipWith.js b/node_modules/lodash/fp/zipWith.js new file mode 100644 index 0000000..c5cf9e2 --- /dev/null +++ b/node_modules/lodash/fp/zipWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), +    func = convert('zipWith', require('../zipWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/lodash/fromPairs.js b/node_modules/lodash/fromPairs.js new file mode 100644 index 0000000..ee7940d --- /dev/null +++ b/node_modules/lodash/fromPairs.js @@ -0,0 +1,28 @@ +/** + * The inverse of `_.toPairs`; this method returns an object composed + * from key-value `pairs`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} pairs The key-value pairs. + * @returns {Object} Returns the new object. + * @example + * + * _.fromPairs([['a', 1], ['b', 2]]); + * // => { 'a': 1, 'b': 2 } + */ +function fromPairs(pairs) { +  var index = -1, +      length = pairs == null ? 0 : pairs.length, +      result = {}; + +  while (++index < length) { +    var pair = pairs[index]; +    result[pair[0]] = pair[1]; +  } +  return result; +} + +module.exports = fromPairs; diff --git a/node_modules/lodash/function.js b/node_modules/lodash/function.js new file mode 100644 index 0000000..b0fc6d9 --- /dev/null +++ b/node_modules/lodash/function.js @@ -0,0 +1,25 @@ +module.exports = { +  'after': require('./after'), +  'ary': require('./ary'), +  'before': require('./before'), +  'bind': require('./bind'), +  'bindKey': require('./bindKey'), +  'curry': require('./curry'), +  'curryRight': require('./curryRight'), +  'debounce': require('./debounce'), +  'defer': require('./defer'), +  'delay': require('./delay'), +  'flip': require('./flip'), +  'memoize': require('./memoize'), +  'negate': require('./negate'), +  'once': require('./once'), +  'overArgs': require('./overArgs'), +  'partial': require('./partial'), +  'partialRight': require('./partialRight'), +  'rearg': require('./rearg'), +  'rest': require('./rest'), +  'spread': require('./spread'), +  'throttle': require('./throttle'), +  'unary': require('./unary'), +  'wrap': require('./wrap') +}; diff --git a/node_modules/lodash/functions.js b/node_modules/lodash/functions.js new file mode 100644 index 0000000..9722928 --- /dev/null +++ b/node_modules/lodash/functions.js @@ -0,0 +1,31 @@ +var baseFunctions = require('./_baseFunctions'), +    keys = require('./keys'); + +/** + * Creates an array of function property names from own enumerable properties + * of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functionsIn + * @example + * + * function Foo() { + *   this.a = _.constant('a'); + *   this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functions(new Foo); + * // => ['a', 'b'] + */ +function functions(object) { +  return object == null ? [] : baseFunctions(object, keys(object)); +} + +module.exports = functions; diff --git a/node_modules/lodash/functionsIn.js b/node_modules/lodash/functionsIn.js new file mode 100644 index 0000000..f00345d --- /dev/null +++ b/node_modules/lodash/functionsIn.js @@ -0,0 +1,31 @@ +var baseFunctions = require('./_baseFunctions'), +    keysIn = require('./keysIn'); + +/** + * Creates an array of function property names from own and inherited + * enumerable properties of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functions + * @example + * + * function Foo() { + *   this.a = _.constant('a'); + *   this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functionsIn(new Foo); + * // => ['a', 'b', 'c'] + */ +function functionsIn(object) { +  return object == null ? [] : baseFunctions(object, keysIn(object)); +} + +module.exports = functionsIn; diff --git a/node_modules/lodash/get.js b/node_modules/lodash/get.js new file mode 100644 index 0000000..8805ff9 --- /dev/null +++ b/node_modules/lodash/get.js @@ -0,0 +1,33 @@ +var baseGet = require('./_baseGet'); + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { +  var result = object == null ? undefined : baseGet(object, path); +  return result === undefined ? defaultValue : result; +} + +module.exports = get; diff --git a/node_modules/lodash/groupBy.js b/node_modules/lodash/groupBy.js new file mode 100644 index 0000000..babf4f6 --- /dev/null +++ b/node_modules/lodash/groupBy.js @@ -0,0 +1,41 @@ +var baseAssignValue = require('./_baseAssignValue'), +    createAggregator = require('./_createAggregator'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The order of grouped values + * is determined by the order they occur in `collection`. The corresponding + * value of each key is an array of elements responsible for generating the + * key. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': [4.2], '6': [6.1, 6.3] } + * + * // The `_.property` iteratee shorthand. + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ +var groupBy = createAggregator(function(result, value, key) { +  if (hasOwnProperty.call(result, key)) { +    result[key].push(value); +  } else { +    baseAssignValue(result, key, [value]); +  } +}); + +module.exports = groupBy; diff --git a/node_modules/lodash/gt.js b/node_modules/lodash/gt.js new file mode 100644 index 0000000..3a66282 --- /dev/null +++ b/node_modules/lodash/gt.js @@ -0,0 +1,29 @@ +var baseGt = require('./_baseGt'), +    createRelationalOperation = require('./_createRelationalOperation'); + +/** + * Checks if `value` is greater than `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + *  else `false`. + * @see _.lt + * @example + * + * _.gt(3, 1); + * // => true + * + * _.gt(3, 3); + * // => false + * + * _.gt(1, 3); + * // => false + */ +var gt = createRelationalOperation(baseGt); + +module.exports = gt; diff --git a/node_modules/lodash/gte.js b/node_modules/lodash/gte.js new file mode 100644 index 0000000..4180a68 --- /dev/null +++ b/node_modules/lodash/gte.js @@ -0,0 +1,30 @@ +var createRelationalOperation = require('./_createRelationalOperation'); + +/** + * Checks if `value` is greater than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than or equal to + *  `other`, else `false`. + * @see _.lte + * @example + * + * _.gte(3, 1); + * // => true + * + * _.gte(3, 3); + * // => true + * + * _.gte(1, 3); + * // => false + */ +var gte = createRelationalOperation(function(value, other) { +  return value >= other; +}); + +module.exports = gte; diff --git a/node_modules/lodash/has.js b/node_modules/lodash/has.js new file mode 100644 index 0000000..34df55e --- /dev/null +++ b/node_modules/lodash/has.js @@ -0,0 +1,35 @@ +var baseHas = require('./_baseHas'), +    hasPath = require('./_hasPath'); + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { +  return object != null && hasPath(object, path, baseHas); +} + +module.exports = has; diff --git a/node_modules/lodash/hasIn.js b/node_modules/lodash/hasIn.js new file mode 100644 index 0000000..06a3686 --- /dev/null +++ b/node_modules/lodash/hasIn.js @@ -0,0 +1,34 @@ +var baseHasIn = require('./_baseHasIn'), +    hasPath = require('./_hasPath'); + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { +  return object != null && hasPath(object, path, baseHasIn); +} + +module.exports = hasIn; diff --git a/node_modules/lodash/head.js b/node_modules/lodash/head.js new file mode 100644 index 0000000..dee9d1f --- /dev/null +++ b/node_modules/lodash/head.js @@ -0,0 +1,23 @@ +/** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ +function head(array) { +  return (array && array.length) ? array[0] : undefined; +} + +module.exports = head; diff --git a/node_modules/lodash/identity.js b/node_modules/lodash/identity.js new file mode 100644 index 0000000..2d5d963 --- /dev/null +++ b/node_modules/lodash/identity.js @@ -0,0 +1,21 @@ +/** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ +function identity(value) { +  return value; +} + +module.exports = identity; diff --git a/node_modules/lodash/inRange.js b/node_modules/lodash/inRange.js new file mode 100644 index 0000000..f20728d --- /dev/null +++ b/node_modules/lodash/inRange.js @@ -0,0 +1,55 @@ +var baseInRange = require('./_baseInRange'), +    toFinite = require('./toFinite'), +    toNumber = require('./toNumber'); + +/** + * Checks if `n` is between `start` and up to, but not including, `end`. If + * `end` is not specified, it's set to `start` with `start` then set to `0`. + * If `start` is greater than `end` the params are swapped to support + * negative ranges. + * + * @static + * @memberOf _ + * @since 3.3.0 + * @category Number + * @param {number} number The number to check. + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + * @see _.range, _.rangeRight + * @example + * + * _.inRange(3, 2, 4); + * // => true + * + * _.inRange(4, 8); + * // => true + * + * _.inRange(4, 2); + * // => false + * + * _.inRange(2, 2); + * // => false + * + * _.inRange(1.2, 2); + * // => true + * + * _.inRange(5.2, 4); + * // => false + * + * _.inRange(-3, -2, -6); + * // => true + */ +function inRange(number, start, end) { +  start = toFinite(start); +  if (end === undefined) { +    end = start; +    start = 0; +  } else { +    end = toFinite(end); +  } +  number = toNumber(number); +  return baseInRange(number, start, end); +} + +module.exports = inRange; diff --git a/node_modules/lodash/includes.js b/node_modules/lodash/includes.js new file mode 100644 index 0000000..ae0deed --- /dev/null +++ b/node_modules/lodash/includes.js @@ -0,0 +1,53 @@ +var baseIndexOf = require('./_baseIndexOf'), +    isArrayLike = require('./isArrayLike'), +    isString = require('./isString'), +    toInteger = require('./toInteger'), +    values = require('./values'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Checks if `value` is in `collection`. If `collection` is a string, it's + * checked for a substring of `value`, otherwise + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * is used for equality comparisons. If `fromIndex` is negative, it's used as + * the offset from the end of `collection`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {boolean} Returns `true` if `value` is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'a': 1, 'b': 2 }, 1); + * // => true + * + * _.includes('abcd', 'bc'); + * // => true + */ +function includes(collection, value, fromIndex, guard) { +  collection = isArrayLike(collection) ? collection : values(collection); +  fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; + +  var length = collection.length; +  if (fromIndex < 0) { +    fromIndex = nativeMax(length + fromIndex, 0); +  } +  return isString(collection) +    ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) +    : (!!length && baseIndexOf(collection, value, fromIndex) > -1); +} + +module.exports = includes; diff --git a/node_modules/lodash/index.js b/node_modules/lodash/index.js new file mode 100644 index 0000000..5d063e2 --- /dev/null +++ b/node_modules/lodash/index.js @@ -0,0 +1 @@ +module.exports = require('./lodash');
\ No newline at end of file diff --git a/node_modules/lodash/indexOf.js b/node_modules/lodash/indexOf.js new file mode 100644 index 0000000..3c644af --- /dev/null +++ b/node_modules/lodash/indexOf.js @@ -0,0 +1,42 @@ +var baseIndexOf = require('./_baseIndexOf'), +    toInteger = require('./toInteger'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ +function indexOf(array, value, fromIndex) { +  var length = array == null ? 0 : array.length; +  if (!length) { +    return -1; +  } +  var index = fromIndex == null ? 0 : toInteger(fromIndex); +  if (index < 0) { +    index = nativeMax(length + index, 0); +  } +  return baseIndexOf(array, value, index); +} + +module.exports = indexOf; diff --git a/node_modules/lodash/initial.js b/node_modules/lodash/initial.js new file mode 100644 index 0000000..f47fc50 --- /dev/null +++ b/node_modules/lodash/initial.js @@ -0,0 +1,22 @@ +var baseSlice = require('./_baseSlice'); + +/** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ +function initial(array) { +  var length = array == null ? 0 : array.length; +  return length ? baseSlice(array, 0, -1) : []; +} + +module.exports = initial; diff --git a/node_modules/lodash/intersection.js b/node_modules/lodash/intersection.js new file mode 100644 index 0000000..a94c135 --- /dev/null +++ b/node_modules/lodash/intersection.js @@ -0,0 +1,30 @@ +var arrayMap = require('./_arrayMap'), +    baseIntersection = require('./_baseIntersection'), +    baseRest = require('./_baseRest'), +    castArrayLikeObject = require('./_castArrayLikeObject'); + +/** + * Creates an array of unique values that are included in all given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersection([2, 1], [2, 3]); + * // => [2] + */ +var intersection = baseRest(function(arrays) { +  var mapped = arrayMap(arrays, castArrayLikeObject); +  return (mapped.length && mapped[0] === arrays[0]) +    ? baseIntersection(mapped) +    : []; +}); + +module.exports = intersection; diff --git a/node_modules/lodash/intersectionBy.js b/node_modules/lodash/intersectionBy.js new file mode 100644 index 0000000..31461aa --- /dev/null +++ b/node_modules/lodash/intersectionBy.js @@ -0,0 +1,45 @@ +var arrayMap = require('./_arrayMap'), +    baseIntersection = require('./_baseIntersection'), +    baseIteratee = require('./_baseIteratee'), +    baseRest = require('./_baseRest'), +    castArrayLikeObject = require('./_castArrayLikeObject'), +    last = require('./last'); + +/** + * This method is like `_.intersection` except that it accepts `iteratee` + * which is invoked for each element of each `arrays` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [2.1] + * + * // The `_.property` iteratee shorthand. + * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }] + */ +var intersectionBy = baseRest(function(arrays) { +  var iteratee = last(arrays), +      mapped = arrayMap(arrays, castArrayLikeObject); + +  if (iteratee === last(mapped)) { +    iteratee = undefined; +  } else { +    mapped.pop(); +  } +  return (mapped.length && mapped[0] === arrays[0]) +    ? baseIntersection(mapped, baseIteratee(iteratee, 2)) +    : []; +}); + +module.exports = intersectionBy; diff --git a/node_modules/lodash/intersectionWith.js b/node_modules/lodash/intersectionWith.js new file mode 100644 index 0000000..63cabfa --- /dev/null +++ b/node_modules/lodash/intersectionWith.js @@ -0,0 +1,41 @@ +var arrayMap = require('./_arrayMap'), +    baseIntersection = require('./_baseIntersection'), +    baseRest = require('./_baseRest'), +    castArrayLikeObject = require('./_castArrayLikeObject'), +    last = require('./last'); + +/** + * This method is like `_.intersection` except that it accepts `comparator` + * which is invoked to compare elements of `arrays`. The order and references + * of result values are determined by the first array. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.intersectionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }] + */ +var intersectionWith = baseRest(function(arrays) { +  var comparator = last(arrays), +      mapped = arrayMap(arrays, castArrayLikeObject); + +  comparator = typeof comparator == 'function' ? comparator : undefined; +  if (comparator) { +    mapped.pop(); +  } +  return (mapped.length && mapped[0] === arrays[0]) +    ? baseIntersection(mapped, undefined, comparator) +    : []; +}); + +module.exports = intersectionWith; diff --git a/node_modules/lodash/invert.js b/node_modules/lodash/invert.js new file mode 100644 index 0000000..8c47950 --- /dev/null +++ b/node_modules/lodash/invert.js @@ -0,0 +1,42 @@ +var constant = require('./constant'), +    createInverter = require('./_createInverter'), +    identity = require('./identity'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** + * Creates an object composed of the inverted keys and values of `object`. + * If `object` contains duplicate values, subsequent values overwrite + * property assignments of previous values. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Object + * @param {Object} object The object to invert. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invert(object); + * // => { '1': 'c', '2': 'b' } + */ +var invert = createInverter(function(result, value, key) { +  if (value != null && +      typeof value.toString != 'function') { +    value = nativeObjectToString.call(value); +  } + +  result[value] = key; +}, constant(identity)); + +module.exports = invert; diff --git a/node_modules/lodash/invertBy.js b/node_modules/lodash/invertBy.js new file mode 100644 index 0000000..3f4f7e5 --- /dev/null +++ b/node_modules/lodash/invertBy.js @@ -0,0 +1,56 @@ +var baseIteratee = require('./_baseIteratee'), +    createInverter = require('./_createInverter'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** + * This method is like `_.invert` except that the inverted object is generated + * from the results of running each element of `object` thru `iteratee`. The + * corresponding inverted value of each inverted key is an array of keys + * responsible for generating the inverted value. The iteratee is invoked + * with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Object + * @param {Object} object The object to invert. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invertBy(object); + * // => { '1': ['a', 'c'], '2': ['b'] } + * + * _.invertBy(object, function(value) { + *   return 'group' + value; + * }); + * // => { 'group1': ['a', 'c'], 'group2': ['b'] } + */ +var invertBy = createInverter(function(result, value, key) { +  if (value != null && +      typeof value.toString != 'function') { +    value = nativeObjectToString.call(value); +  } + +  if (hasOwnProperty.call(result, value)) { +    result[value].push(key); +  } else { +    result[value] = [key]; +  } +}, baseIteratee); + +module.exports = invertBy; diff --git a/node_modules/lodash/invoke.js b/node_modules/lodash/invoke.js new file mode 100644 index 0000000..97d51eb --- /dev/null +++ b/node_modules/lodash/invoke.js @@ -0,0 +1,24 @@ +var baseInvoke = require('./_baseInvoke'), +    baseRest = require('./_baseRest'); + +/** + * Invokes the method at `path` of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + * @example + * + * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; + * + * _.invoke(object, 'a[0].b.c.slice', 1, 3); + * // => [2, 3] + */ +var invoke = baseRest(baseInvoke); + +module.exports = invoke; diff --git a/node_modules/lodash/invokeMap.js b/node_modules/lodash/invokeMap.js new file mode 100644 index 0000000..8da5126 --- /dev/null +++ b/node_modules/lodash/invokeMap.js @@ -0,0 +1,41 @@ +var apply = require('./_apply'), +    baseEach = require('./_baseEach'), +    baseInvoke = require('./_baseInvoke'), +    baseRest = require('./_baseRest'), +    isArrayLike = require('./isArrayLike'); + +/** + * Invokes the method at `path` of each element in `collection`, returning + * an array of the results of each invoked method. Any additional arguments + * are provided to each invoked method. If `path` is a function, it's invoked + * for, and `this` bound to, each element in `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array|Function|string} path The path of the method to invoke or + *  the function invoked per iteration. + * @param {...*} [args] The arguments to invoke each method with. + * @returns {Array} Returns the array of results. + * @example + * + * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] + * + * _.invokeMap([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] + */ +var invokeMap = baseRest(function(collection, path, args) { +  var index = -1, +      isFunc = typeof path == 'function', +      result = isArrayLike(collection) ? Array(collection.length) : []; + +  baseEach(collection, function(value) { +    result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); +  }); +  return result; +}); + +module.exports = invokeMap; diff --git a/node_modules/lodash/isArguments.js b/node_modules/lodash/isArguments.js new file mode 100644 index 0000000..8b9ed66 --- /dev/null +++ b/node_modules/lodash/isArguments.js @@ -0,0 +1,36 @@ +var baseIsArguments = require('./_baseIsArguments'), +    isObjectLike = require('./isObjectLike'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + *  else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { +  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && +    !propertyIsEnumerable.call(value, 'callee'); +}; + +module.exports = isArguments; diff --git a/node_modules/lodash/isArray.js b/node_modules/lodash/isArray.js new file mode 100644 index 0000000..88ab55f --- /dev/null +++ b/node_modules/lodash/isArray.js @@ -0,0 +1,26 @@ +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +module.exports = isArray; diff --git a/node_modules/lodash/isArrayBuffer.js b/node_modules/lodash/isArrayBuffer.js new file mode 100644 index 0000000..12904a6 --- /dev/null +++ b/node_modules/lodash/isArrayBuffer.js @@ -0,0 +1,27 @@ +var baseIsArrayBuffer = require('./_baseIsArrayBuffer'), +    baseUnary = require('./_baseUnary'), +    nodeUtil = require('./_nodeUtil'); + +/* Node.js helper references. */ +var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer; + +/** + * Checks if `value` is classified as an `ArrayBuffer` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + * @example + * + * _.isArrayBuffer(new ArrayBuffer(2)); + * // => true + * + * _.isArrayBuffer(new Array(2)); + * // => false + */ +var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; + +module.exports = isArrayBuffer; diff --git a/node_modules/lodash/isArrayLike.js b/node_modules/lodash/isArrayLike.js new file mode 100644 index 0000000..0f96680 --- /dev/null +++ b/node_modules/lodash/isArrayLike.js @@ -0,0 +1,33 @@ +var isFunction = require('./isFunction'), +    isLength = require('./isLength'); + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { +  return value != null && isLength(value.length) && !isFunction(value); +} + +module.exports = isArrayLike; diff --git a/node_modules/lodash/isArrayLikeObject.js b/node_modules/lodash/isArrayLikeObject.js new file mode 100644 index 0000000..6c4812a --- /dev/null +++ b/node_modules/lodash/isArrayLikeObject.js @@ -0,0 +1,33 @@ +var isArrayLike = require('./isArrayLike'), +    isObjectLike = require('./isObjectLike'); + +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + *  else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { +  return isObjectLike(value) && isArrayLike(value); +} + +module.exports = isArrayLikeObject; diff --git a/node_modules/lodash/isBoolean.js b/node_modules/lodash/isBoolean.js new file mode 100644 index 0000000..a43ed4b --- /dev/null +++ b/node_modules/lodash/isBoolean.js @@ -0,0 +1,29 @@ +var baseGetTag = require('./_baseGetTag'), +    isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]'; + +/** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ +function isBoolean(value) { +  return value === true || value === false || +    (isObjectLike(value) && baseGetTag(value) == boolTag); +} + +module.exports = isBoolean; diff --git a/node_modules/lodash/isBuffer.js b/node_modules/lodash/isBuffer.js new file mode 100644 index 0000000..c103cc7 --- /dev/null +++ b/node_modules/lodash/isBuffer.js @@ -0,0 +1,38 @@ +var root = require('./_root'), +    stubFalse = require('./stubFalse'); + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Built-in value references. */ +var Buffer = moduleExports ? root.Buffer : undefined; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + +/** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ +var isBuffer = nativeIsBuffer || stubFalse; + +module.exports = isBuffer; diff --git a/node_modules/lodash/isDate.js b/node_modules/lodash/isDate.js new file mode 100644 index 0000000..7f0209f --- /dev/null +++ b/node_modules/lodash/isDate.js @@ -0,0 +1,27 @@ +var baseIsDate = require('./_baseIsDate'), +    baseUnary = require('./_baseUnary'), +    nodeUtil = require('./_nodeUtil'); + +/* Node.js helper references. */ +var nodeIsDate = nodeUtil && nodeUtil.isDate; + +/** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ +var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; + +module.exports = isDate; diff --git a/node_modules/lodash/isElement.js b/node_modules/lodash/isElement.js new file mode 100644 index 0000000..76ae29c --- /dev/null +++ b/node_modules/lodash/isElement.js @@ -0,0 +1,25 @@ +var isObjectLike = require('./isObjectLike'), +    isPlainObject = require('./isPlainObject'); + +/** + * Checks if `value` is likely a DOM element. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. + * @example + * + * _.isElement(document.body); + * // => true + * + * _.isElement('<body>'); + * // => false + */ +function isElement(value) { +  return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); +} + +module.exports = isElement; diff --git a/node_modules/lodash/isEmpty.js b/node_modules/lodash/isEmpty.js new file mode 100644 index 0000000..3597294 --- /dev/null +++ b/node_modules/lodash/isEmpty.js @@ -0,0 +1,77 @@ +var baseKeys = require('./_baseKeys'), +    getTag = require('./_getTag'), +    isArguments = require('./isArguments'), +    isArray = require('./isArray'), +    isArrayLike = require('./isArrayLike'), +    isBuffer = require('./isBuffer'), +    isPrototype = require('./_isPrototype'), +    isTypedArray = require('./isTypedArray'); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', +    setTag = '[object Set]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ +function isEmpty(value) { +  if (value == null) { +    return true; +  } +  if (isArrayLike(value) && +      (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || +        isBuffer(value) || isTypedArray(value) || isArguments(value))) { +    return !value.length; +  } +  var tag = getTag(value); +  if (tag == mapTag || tag == setTag) { +    return !value.size; +  } +  if (isPrototype(value)) { +    return !baseKeys(value).length; +  } +  for (var key in value) { +    if (hasOwnProperty.call(value, key)) { +      return false; +    } +  } +  return true; +} + +module.exports = isEmpty; diff --git a/node_modules/lodash/isEqual.js b/node_modules/lodash/isEqual.js new file mode 100644 index 0000000..5e23e76 --- /dev/null +++ b/node_modules/lodash/isEqual.js @@ -0,0 +1,35 @@ +var baseIsEqual = require('./_baseIsEqual'); + +/** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ +function isEqual(value, other) { +  return baseIsEqual(value, other); +} + +module.exports = isEqual; diff --git a/node_modules/lodash/isEqualWith.js b/node_modules/lodash/isEqualWith.js new file mode 100644 index 0000000..21bdc7f --- /dev/null +++ b/node_modules/lodash/isEqualWith.js @@ -0,0 +1,41 @@ +var baseIsEqual = require('./_baseIsEqual'); + +/** + * This method is like `_.isEqual` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with up to + * six arguments: (objValue, othValue [, index|key, object, other, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * function isGreeting(value) { + *   return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, othValue) { + *   if (isGreeting(objValue) && isGreeting(othValue)) { + *     return true; + *   } + * } + * + * var array = ['hello', 'goodbye']; + * var other = ['hi', 'goodbye']; + * + * _.isEqualWith(array, other, customizer); + * // => true + */ +function isEqualWith(value, other, customizer) { +  customizer = typeof customizer == 'function' ? customizer : undefined; +  var result = customizer ? customizer(value, other) : undefined; +  return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result; +} + +module.exports = isEqualWith; diff --git a/node_modules/lodash/isError.js b/node_modules/lodash/isError.js new file mode 100644 index 0000000..b4f41e0 --- /dev/null +++ b/node_modules/lodash/isError.js @@ -0,0 +1,36 @@ +var baseGetTag = require('./_baseGetTag'), +    isObjectLike = require('./isObjectLike'), +    isPlainObject = require('./isPlainObject'); + +/** `Object#toString` result references. */ +var domExcTag = '[object DOMException]', +    errorTag = '[object Error]'; + +/** + * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, + * `SyntaxError`, `TypeError`, or `URIError` object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an error object, else `false`. + * @example + * + * _.isError(new Error); + * // => true + * + * _.isError(Error); + * // => false + */ +function isError(value) { +  if (!isObjectLike(value)) { +    return false; +  } +  var tag = baseGetTag(value); +  return tag == errorTag || tag == domExcTag || +    (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); +} + +module.exports = isError; diff --git a/node_modules/lodash/isFinite.js b/node_modules/lodash/isFinite.js new file mode 100644 index 0000000..601842b --- /dev/null +++ b/node_modules/lodash/isFinite.js @@ -0,0 +1,36 @@ +var root = require('./_root'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsFinite = root.isFinite; + +/** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on + * [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MIN_VALUE); + * // => true + * + * _.isFinite(Infinity); + * // => false + * + * _.isFinite('3'); + * // => false + */ +function isFinite(value) { +  return typeof value == 'number' && nativeIsFinite(value); +} + +module.exports = isFinite; diff --git a/node_modules/lodash/isFunction.js b/node_modules/lodash/isFunction.js new file mode 100644 index 0000000..907a8cd --- /dev/null +++ b/node_modules/lodash/isFunction.js @@ -0,0 +1,37 @@ +var baseGetTag = require('./_baseGetTag'), +    isObject = require('./isObject'); + +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]', +    funcTag = '[object Function]', +    genTag = '[object GeneratorFunction]', +    proxyTag = '[object Proxy]'; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { +  if (!isObject(value)) { +    return false; +  } +  // The use of `Object#toString` avoids issues with the `typeof` operator +  // in Safari 9 which returns 'object' for typed arrays and other constructors. +  var tag = baseGetTag(value); +  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +module.exports = isFunction; diff --git a/node_modules/lodash/isInteger.js b/node_modules/lodash/isInteger.js new file mode 100644 index 0000000..66aa87d --- /dev/null +++ b/node_modules/lodash/isInteger.js @@ -0,0 +1,33 @@ +var toInteger = require('./toInteger'); + +/** + * Checks if `value` is an integer. + * + * **Note:** This method is based on + * [`Number.isInteger`](https://mdn.io/Number/isInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an integer, else `false`. + * @example + * + * _.isInteger(3); + * // => true + * + * _.isInteger(Number.MIN_VALUE); + * // => false + * + * _.isInteger(Infinity); + * // => false + * + * _.isInteger('3'); + * // => false + */ +function isInteger(value) { +  return typeof value == 'number' && value == toInteger(value); +} + +module.exports = isInteger; diff --git a/node_modules/lodash/isLength.js b/node_modules/lodash/isLength.js new file mode 100644 index 0000000..3a95caa --- /dev/null +++ b/node_modules/lodash/isLength.js @@ -0,0 +1,35 @@ +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { +  return typeof value == 'number' && +    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +module.exports = isLength; diff --git a/node_modules/lodash/isMap.js b/node_modules/lodash/isMap.js new file mode 100644 index 0000000..44f8517 --- /dev/null +++ b/node_modules/lodash/isMap.js @@ -0,0 +1,27 @@ +var baseIsMap = require('./_baseIsMap'), +    baseUnary = require('./_baseUnary'), +    nodeUtil = require('./_nodeUtil'); + +/* Node.js helper references. */ +var nodeIsMap = nodeUtil && nodeUtil.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; + +module.exports = isMap; diff --git a/node_modules/lodash/isMatch.js b/node_modules/lodash/isMatch.js new file mode 100644 index 0000000..9773a18 --- /dev/null +++ b/node_modules/lodash/isMatch.js @@ -0,0 +1,36 @@ +var baseIsMatch = require('./_baseIsMatch'), +    getMatchData = require('./_getMatchData'); + +/** + * Performs a partial deep comparison between `object` and `source` to + * determine if `object` contains equivalent property values. + * + * **Note:** This method is equivalent to `_.matches` when `source` is + * partially applied. + * + * Partial comparisons will match empty array and empty object `source` + * values against any array or object value, respectively. See `_.isEqual` + * for a list of supported value comparisons. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.isMatch(object, { 'b': 2 }); + * // => true + * + * _.isMatch(object, { 'b': 1 }); + * // => false + */ +function isMatch(object, source) { +  return object === source || baseIsMatch(object, source, getMatchData(source)); +} + +module.exports = isMatch; diff --git a/node_modules/lodash/isMatchWith.js b/node_modules/lodash/isMatchWith.js new file mode 100644 index 0000000..187b6a6 --- /dev/null +++ b/node_modules/lodash/isMatchWith.js @@ -0,0 +1,41 @@ +var baseIsMatch = require('./_baseIsMatch'), +    getMatchData = require('./_getMatchData'); + +/** + * This method is like `_.isMatch` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with five + * arguments: (objValue, srcValue, index|key, object, source). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * function isGreeting(value) { + *   return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, srcValue) { + *   if (isGreeting(objValue) && isGreeting(srcValue)) { + *     return true; + *   } + * } + * + * var object = { 'greeting': 'hello' }; + * var source = { 'greeting': 'hi' }; + * + * _.isMatchWith(object, source, customizer); + * // => true + */ +function isMatchWith(object, source, customizer) { +  customizer = typeof customizer == 'function' ? customizer : undefined; +  return baseIsMatch(object, source, getMatchData(source), customizer); +} + +module.exports = isMatchWith; diff --git a/node_modules/lodash/isNaN.js b/node_modules/lodash/isNaN.js new file mode 100644 index 0000000..7d0d783 --- /dev/null +++ b/node_modules/lodash/isNaN.js @@ -0,0 +1,38 @@ +var isNumber = require('./isNumber'); + +/** + * Checks if `value` is `NaN`. + * + * **Note:** This method is based on + * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as + * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for + * `undefined` and other non-number values. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ +function isNaN(value) { +  // An `NaN` primitive is the only value that is not equal to itself. +  // Perform the `toStringTag` check first to avoid errors with some +  // ActiveX objects in IE. +  return isNumber(value) && value != +value; +} + +module.exports = isNaN; diff --git a/node_modules/lodash/isNative.js b/node_modules/lodash/isNative.js new file mode 100644 index 0000000..f0cb8d5 --- /dev/null +++ b/node_modules/lodash/isNative.js @@ -0,0 +1,40 @@ +var baseIsNative = require('./_baseIsNative'), +    isMaskable = require('./_isMaskable'); + +/** Error message constants. */ +var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.'; + +/** + * Checks if `value` is a pristine native function. + * + * **Note:** This method can't reliably detect native functions in the presence + * of the core-js package because core-js circumvents this kind of detection. + * Despite multiple requests, the core-js maintainer has made it clear: any + * attempt to fix the detection will be obstructed. As a result, we're left + * with little choice but to throw an error. Unfortunately, this also affects + * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), + * which rely on core-js. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + *  else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ +function isNative(value) { +  if (isMaskable(value)) { +    throw new Error(CORE_ERROR_TEXT); +  } +  return baseIsNative(value); +} + +module.exports = isNative; diff --git a/node_modules/lodash/isNil.js b/node_modules/lodash/isNil.js new file mode 100644 index 0000000..79f0505 --- /dev/null +++ b/node_modules/lodash/isNil.js @@ -0,0 +1,25 @@ +/** + * Checks if `value` is `null` or `undefined`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is nullish, else `false`. + * @example + * + * _.isNil(null); + * // => true + * + * _.isNil(void 0); + * // => true + * + * _.isNil(NaN); + * // => false + */ +function isNil(value) { +  return value == null; +} + +module.exports = isNil; diff --git a/node_modules/lodash/isNull.js b/node_modules/lodash/isNull.js new file mode 100644 index 0000000..c0a374d --- /dev/null +++ b/node_modules/lodash/isNull.js @@ -0,0 +1,22 @@ +/** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ +function isNull(value) { +  return value === null; +} + +module.exports = isNull; diff --git a/node_modules/lodash/isNumber.js b/node_modules/lodash/isNumber.js new file mode 100644 index 0000000..cd34ee4 --- /dev/null +++ b/node_modules/lodash/isNumber.js @@ -0,0 +1,38 @@ +var baseGetTag = require('./_baseGetTag'), +    isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var numberTag = '[object Number]'; + +/** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are + * classified as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a number, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ +function isNumber(value) { +  return typeof value == 'number' || +    (isObjectLike(value) && baseGetTag(value) == numberTag); +} + +module.exports = isNumber; diff --git a/node_modules/lodash/isObject.js b/node_modules/lodash/isObject.js new file mode 100644 index 0000000..1dc8939 --- /dev/null +++ b/node_modules/lodash/isObject.js @@ -0,0 +1,31 @@ +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { +  var type = typeof value; +  return value != null && (type == 'object' || type == 'function'); +} + +module.exports = isObject; diff --git a/node_modules/lodash/isObjectLike.js b/node_modules/lodash/isObjectLike.js new file mode 100644 index 0000000..301716b --- /dev/null +++ b/node_modules/lodash/isObjectLike.js @@ -0,0 +1,29 @@ +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { +  return value != null && typeof value == 'object'; +} + +module.exports = isObjectLike; diff --git a/node_modules/lodash/isPlainObject.js b/node_modules/lodash/isPlainObject.js new file mode 100644 index 0000000..2387373 --- /dev/null +++ b/node_modules/lodash/isPlainObject.js @@ -0,0 +1,62 @@ +var baseGetTag = require('./_baseGetTag'), +    getPrototype = require('./_getPrototype'), +    isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, +    objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to infer the `Object` constructor. */ +var objectCtorString = funcToString.call(Object); + +/** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + *   this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ +function isPlainObject(value) { +  if (!isObjectLike(value) || baseGetTag(value) != objectTag) { +    return false; +  } +  var proto = getPrototype(value); +  if (proto === null) { +    return true; +  } +  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; +  return typeof Ctor == 'function' && Ctor instanceof Ctor && +    funcToString.call(Ctor) == objectCtorString; +} + +module.exports = isPlainObject; diff --git a/node_modules/lodash/isRegExp.js b/node_modules/lodash/isRegExp.js new file mode 100644 index 0000000..76c9b6e --- /dev/null +++ b/node_modules/lodash/isRegExp.js @@ -0,0 +1,27 @@ +var baseIsRegExp = require('./_baseIsRegExp'), +    baseUnary = require('./_baseUnary'), +    nodeUtil = require('./_nodeUtil'); + +/* Node.js helper references. */ +var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp; + +/** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ +var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; + +module.exports = isRegExp; diff --git a/node_modules/lodash/isSafeInteger.js b/node_modules/lodash/isSafeInteger.js new file mode 100644 index 0000000..2a48526 --- /dev/null +++ b/node_modules/lodash/isSafeInteger.js @@ -0,0 +1,37 @@ +var isInteger = require('./isInteger'); + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 + * double precision number which isn't the result of a rounded unsafe integer. + * + * **Note:** This method is based on + * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. + * @example + * + * _.isSafeInteger(3); + * // => true + * + * _.isSafeInteger(Number.MIN_VALUE); + * // => false + * + * _.isSafeInteger(Infinity); + * // => false + * + * _.isSafeInteger('3'); + * // => false + */ +function isSafeInteger(value) { +  return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; +} + +module.exports = isSafeInteger; diff --git a/node_modules/lodash/isSet.js b/node_modules/lodash/isSet.js new file mode 100644 index 0000000..ab88bdf --- /dev/null +++ b/node_modules/lodash/isSet.js @@ -0,0 +1,27 @@ +var baseIsSet = require('./_baseIsSet'), +    baseUnary = require('./_baseUnary'), +    nodeUtil = require('./_nodeUtil'); + +/* Node.js helper references. */ +var nodeIsSet = nodeUtil && nodeUtil.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; + +module.exports = isSet; diff --git a/node_modules/lodash/isString.js b/node_modules/lodash/isString.js new file mode 100644 index 0000000..627eb9c --- /dev/null +++ b/node_modules/lodash/isString.js @@ -0,0 +1,30 @@ +var baseGetTag = require('./_baseGetTag'), +    isArray = require('./isArray'), +    isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { +  return typeof value == 'string' || +    (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); +} + +module.exports = isString; diff --git a/node_modules/lodash/isSymbol.js b/node_modules/lodash/isSymbol.js new file mode 100644 index 0000000..dfb60b9 --- /dev/null +++ b/node_modules/lodash/isSymbol.js @@ -0,0 +1,29 @@ +var baseGetTag = require('./_baseGetTag'), +    isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { +  return typeof value == 'symbol' || +    (isObjectLike(value) && baseGetTag(value) == symbolTag); +} + +module.exports = isSymbol; diff --git a/node_modules/lodash/isTypedArray.js b/node_modules/lodash/isTypedArray.js new file mode 100644 index 0000000..da3f8dd --- /dev/null +++ b/node_modules/lodash/isTypedArray.js @@ -0,0 +1,27 @@ +var baseIsTypedArray = require('./_baseIsTypedArray'), +    baseUnary = require('./_baseUnary'), +    nodeUtil = require('./_nodeUtil'); + +/* Node.js helper references. */ +var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + +module.exports = isTypedArray; diff --git a/node_modules/lodash/isUndefined.js b/node_modules/lodash/isUndefined.js new file mode 100644 index 0000000..377d121 --- /dev/null +++ b/node_modules/lodash/isUndefined.js @@ -0,0 +1,22 @@ +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { +  return value === undefined; +} + +module.exports = isUndefined; diff --git a/node_modules/lodash/isWeakMap.js b/node_modules/lodash/isWeakMap.js new file mode 100644 index 0000000..8d36f66 --- /dev/null +++ b/node_modules/lodash/isWeakMap.js @@ -0,0 +1,28 @@ +var getTag = require('./_getTag'), +    isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var weakMapTag = '[object WeakMap]'; + +/** + * Checks if `value` is classified as a `WeakMap` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. + * @example + * + * _.isWeakMap(new WeakMap); + * // => true + * + * _.isWeakMap(new Map); + * // => false + */ +function isWeakMap(value) { +  return isObjectLike(value) && getTag(value) == weakMapTag; +} + +module.exports = isWeakMap; diff --git a/node_modules/lodash/isWeakSet.js b/node_modules/lodash/isWeakSet.js new file mode 100644 index 0000000..e628b26 --- /dev/null +++ b/node_modules/lodash/isWeakSet.js @@ -0,0 +1,28 @@ +var baseGetTag = require('./_baseGetTag'), +    isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var weakSetTag = '[object WeakSet]'; + +/** + * Checks if `value` is classified as a `WeakSet` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. + * @example + * + * _.isWeakSet(new WeakSet); + * // => true + * + * _.isWeakSet(new Set); + * // => false + */ +function isWeakSet(value) { +  return isObjectLike(value) && baseGetTag(value) == weakSetTag; +} + +module.exports = isWeakSet; diff --git a/node_modules/lodash/iteratee.js b/node_modules/lodash/iteratee.js new file mode 100644 index 0000000..61b73a8 --- /dev/null +++ b/node_modules/lodash/iteratee.js @@ -0,0 +1,53 @@ +var baseClone = require('./_baseClone'), +    baseIteratee = require('./_baseIteratee'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1; + +/** + * Creates a function that invokes `func` with the arguments of the created + * function. If `func` is a property name, the created function returns the + * property value for a given element. If `func` is an array or object, the + * created function returns `true` for elements that contain the equivalent + * source properties, otherwise it returns `false`. + * + * @static + * @since 4.0.0 + * @memberOf _ + * @category Util + * @param {*} [func=_.identity] The value to convert to a callback. + * @returns {Function} Returns the callback. + * @example + * + * var users = [ + *   { 'user': 'barney', 'age': 36, 'active': true }, + *   { 'user': 'fred',   'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); + * // => [{ 'user': 'barney', 'age': 36, 'active': true }] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, _.iteratee(['user', 'fred'])); + * // => [{ 'user': 'fred', 'age': 40 }] + * + * // The `_.property` iteratee shorthand. + * _.map(users, _.iteratee('user')); + * // => ['barney', 'fred'] + * + * // Create custom iteratee shorthands. + * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { + *   return !_.isRegExp(func) ? iteratee(func) : function(string) { + *     return func.test(string); + *   }; + * }); + * + * _.filter(['abc', 'def'], /ef/); + * // => ['def'] + */ +function iteratee(func) { +  return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG)); +} + +module.exports = iteratee; diff --git a/node_modules/lodash/join.js b/node_modules/lodash/join.js new file mode 100644 index 0000000..45de079 --- /dev/null +++ b/node_modules/lodash/join.js @@ -0,0 +1,26 @@ +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeJoin = arrayProto.join; + +/** + * Converts all elements in `array` into a string separated by `separator`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to convert. + * @param {string} [separator=','] The element separator. + * @returns {string} Returns the joined string. + * @example + * + * _.join(['a', 'b', 'c'], '~'); + * // => 'a~b~c' + */ +function join(array, separator) { +  return array == null ? '' : nativeJoin.call(array, separator); +} + +module.exports = join; diff --git a/node_modules/lodash/kebabCase.js b/node_modules/lodash/kebabCase.js new file mode 100644 index 0000000..8a52be6 --- /dev/null +++ b/node_modules/lodash/kebabCase.js @@ -0,0 +1,28 @@ +var createCompounder = require('./_createCompounder'); + +/** + * Converts `string` to + * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the kebab cased string. + * @example + * + * _.kebabCase('Foo Bar'); + * // => 'foo-bar' + * + * _.kebabCase('fooBar'); + * // => 'foo-bar' + * + * _.kebabCase('__FOO_BAR__'); + * // => 'foo-bar' + */ +var kebabCase = createCompounder(function(result, word, index) { +  return result + (index ? '-' : '') + word.toLowerCase(); +}); + +module.exports = kebabCase; diff --git a/node_modules/lodash/keyBy.js b/node_modules/lodash/keyBy.js new file mode 100644 index 0000000..acc007a --- /dev/null +++ b/node_modules/lodash/keyBy.js @@ -0,0 +1,36 @@ +var baseAssignValue = require('./_baseAssignValue'), +    createAggregator = require('./_createAggregator'); + +/** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the last element responsible for generating the key. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var array = [ + *   { 'dir': 'left', 'code': 97 }, + *   { 'dir': 'right', 'code': 100 } + * ]; + * + * _.keyBy(array, function(o) { + *   return String.fromCharCode(o.code); + * }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.keyBy(array, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } + */ +var keyBy = createAggregator(function(result, value, key) { +  baseAssignValue(result, key, value); +}); + +module.exports = keyBy; diff --git a/node_modules/lodash/keys.js b/node_modules/lodash/keys.js new file mode 100644 index 0000000..d143c71 --- /dev/null +++ b/node_modules/lodash/keys.js @@ -0,0 +1,37 @@ +var arrayLikeKeys = require('./_arrayLikeKeys'), +    baseKeys = require('./_baseKeys'), +    isArrayLike = require('./isArrayLike'); + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + *   this.a = 1; + *   this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { +  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +} + +module.exports = keys; diff --git a/node_modules/lodash/keysIn.js b/node_modules/lodash/keysIn.js new file mode 100644 index 0000000..a62308f --- /dev/null +++ b/node_modules/lodash/keysIn.js @@ -0,0 +1,32 @@ +var arrayLikeKeys = require('./_arrayLikeKeys'), +    baseKeysIn = require('./_baseKeysIn'), +    isArrayLike = require('./isArrayLike'); + +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + *   this.a = 1; + *   this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { +  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); +} + +module.exports = keysIn; diff --git a/node_modules/lodash/lang.js b/node_modules/lodash/lang.js new file mode 100644 index 0000000..a396216 --- /dev/null +++ b/node_modules/lodash/lang.js @@ -0,0 +1,58 @@ +module.exports = { +  'castArray': require('./castArray'), +  'clone': require('./clone'), +  'cloneDeep': require('./cloneDeep'), +  'cloneDeepWith': require('./cloneDeepWith'), +  'cloneWith': require('./cloneWith'), +  'conformsTo': require('./conformsTo'), +  'eq': require('./eq'), +  'gt': require('./gt'), +  'gte': require('./gte'), +  'isArguments': require('./isArguments'), +  'isArray': require('./isArray'), +  'isArrayBuffer': require('./isArrayBuffer'), +  'isArrayLike': require('./isArrayLike'), +  'isArrayLikeObject': require('./isArrayLikeObject'), +  'isBoolean': require('./isBoolean'), +  'isBuffer': require('./isBuffer'), +  'isDate': require('./isDate'), +  'isElement': require('./isElement'), +  'isEmpty': require('./isEmpty'), +  'isEqual': require('./isEqual'), +  'isEqualWith': require('./isEqualWith'), +  'isError': require('./isError'), +  'isFinite': require('./isFinite'), +  'isFunction': require('./isFunction'), +  'isInteger': require('./isInteger'), +  'isLength': require('./isLength'), +  'isMap': require('./isMap'), +  'isMatch': require('./isMatch'), +  'isMatchWith': require('./isMatchWith'), +  'isNaN': require('./isNaN'), +  'isNative': require('./isNative'), +  'isNil': require('./isNil'), +  'isNull': require('./isNull'), +  'isNumber': require('./isNumber'), +  'isObject': require('./isObject'), +  'isObjectLike': require('./isObjectLike'), +  'isPlainObject': require('./isPlainObject'), +  'isRegExp': require('./isRegExp'), +  'isSafeInteger': require('./isSafeInteger'), +  'isSet': require('./isSet'), +  'isString': require('./isString'), +  'isSymbol': require('./isSymbol'), +  'isTypedArray': require('./isTypedArray'), +  'isUndefined': require('./isUndefined'), +  'isWeakMap': require('./isWeakMap'), +  'isWeakSet': require('./isWeakSet'), +  'lt': require('./lt'), +  'lte': require('./lte'), +  'toArray': require('./toArray'), +  'toFinite': require('./toFinite'), +  'toInteger': require('./toInteger'), +  'toLength': require('./toLength'), +  'toNumber': require('./toNumber'), +  'toPlainObject': require('./toPlainObject'), +  'toSafeInteger': require('./toSafeInteger'), +  'toString': require('./toString') +}; diff --git a/node_modules/lodash/last.js b/node_modules/lodash/last.js new file mode 100644 index 0000000..cad1eaf --- /dev/null +++ b/node_modules/lodash/last.js @@ -0,0 +1,20 @@ +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { +  var length = array == null ? 0 : array.length; +  return length ? array[length - 1] : undefined; +} + +module.exports = last; diff --git a/node_modules/lodash/lastIndexOf.js b/node_modules/lodash/lastIndexOf.js new file mode 100644 index 0000000..dabfb61 --- /dev/null +++ b/node_modules/lodash/lastIndexOf.js @@ -0,0 +1,46 @@ +var baseFindIndex = require('./_baseFindIndex'), +    baseIsNaN = require('./_baseIsNaN'), +    strictLastIndexOf = require('./_strictLastIndexOf'), +    toInteger = require('./toInteger'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, +    nativeMin = Math.min; + +/** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // Search from the `fromIndex`. + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + */ +function lastIndexOf(array, value, fromIndex) { +  var length = array == null ? 0 : array.length; +  if (!length) { +    return -1; +  } +  var index = length; +  if (fromIndex !== undefined) { +    index = toInteger(fromIndex); +    index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); +  } +  return value === value +    ? strictLastIndexOf(array, value, index) +    : baseFindIndex(array, baseIsNaN, index, true); +} + +module.exports = lastIndexOf; diff --git a/node_modules/lodash/lodash.js b/node_modules/lodash/lodash.js new file mode 100644 index 0000000..4131e93 --- /dev/null +++ b/node_modules/lodash/lodash.js @@ -0,0 +1,17209 @@ +/** + * @license + * Lodash <https://lodash.com/> + * Copyright OpenJS Foundation and other contributors <https://openjsf.org/> + * Released under MIT license <https://lodash.com/license> + * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ +;(function() { + +  /** Used as a safe reference for `undefined` in pre-ES5 environments. */ +  var undefined; + +  /** Used as the semantic version number. */ +  var VERSION = '4.17.21'; + +  /** Used as the size to enable large array optimizations. */ +  var LARGE_ARRAY_SIZE = 200; + +  /** Error message constants. */ +  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.', +      FUNC_ERROR_TEXT = 'Expected a function', +      INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`'; + +  /** Used to stand-in for `undefined` hash values. */ +  var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +  /** Used as the maximum memoize cache size. */ +  var MAX_MEMOIZE_SIZE = 500; + +  /** Used as the internal argument placeholder. */ +  var PLACEHOLDER = '__lodash_placeholder__'; + +  /** Used to compose bitmasks for cloning. */ +  var CLONE_DEEP_FLAG = 1, +      CLONE_FLAT_FLAG = 2, +      CLONE_SYMBOLS_FLAG = 4; + +  /** Used to compose bitmasks for value comparisons. */ +  var COMPARE_PARTIAL_FLAG = 1, +      COMPARE_UNORDERED_FLAG = 2; + +  /** Used to compose bitmasks for function metadata. */ +  var WRAP_BIND_FLAG = 1, +      WRAP_BIND_KEY_FLAG = 2, +      WRAP_CURRY_BOUND_FLAG = 4, +      WRAP_CURRY_FLAG = 8, +      WRAP_CURRY_RIGHT_FLAG = 16, +      WRAP_PARTIAL_FLAG = 32, +      WRAP_PARTIAL_RIGHT_FLAG = 64, +      WRAP_ARY_FLAG = 128, +      WRAP_REARG_FLAG = 256, +      WRAP_FLIP_FLAG = 512; + +  /** Used as default options for `_.truncate`. */ +  var DEFAULT_TRUNC_LENGTH = 30, +      DEFAULT_TRUNC_OMISSION = '...'; + +  /** Used to detect hot functions by number of calls within a span of milliseconds. */ +  var HOT_COUNT = 800, +      HOT_SPAN = 16; + +  /** Used to indicate the type of lazy iteratees. */ +  var LAZY_FILTER_FLAG = 1, +      LAZY_MAP_FLAG = 2, +      LAZY_WHILE_FLAG = 3; + +  /** Used as references for various `Number` constants. */ +  var INFINITY = 1 / 0, +      MAX_SAFE_INTEGER = 9007199254740991, +      MAX_INTEGER = 1.7976931348623157e+308, +      NAN = 0 / 0; + +  /** Used as references for the maximum length and index of an array. */ +  var MAX_ARRAY_LENGTH = 4294967295, +      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, +      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + +  /** Used to associate wrap methods with their bit flags. */ +  var wrapFlags = [ +    ['ary', WRAP_ARY_FLAG], +    ['bind', WRAP_BIND_FLAG], +    ['bindKey', WRAP_BIND_KEY_FLAG], +    ['curry', WRAP_CURRY_FLAG], +    ['curryRight', WRAP_CURRY_RIGHT_FLAG], +    ['flip', WRAP_FLIP_FLAG], +    ['partial', WRAP_PARTIAL_FLAG], +    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], +    ['rearg', WRAP_REARG_FLAG] +  ]; + +  /** `Object#toString` result references. */ +  var argsTag = '[object Arguments]', +      arrayTag = '[object Array]', +      asyncTag = '[object AsyncFunction]', +      boolTag = '[object Boolean]', +      dateTag = '[object Date]', +      domExcTag = '[object DOMException]', +      errorTag = '[object Error]', +      funcTag = '[object Function]', +      genTag = '[object GeneratorFunction]', +      mapTag = '[object Map]', +      numberTag = '[object Number]', +      nullTag = '[object Null]', +      objectTag = '[object Object]', +      promiseTag = '[object Promise]', +      proxyTag = '[object Proxy]', +      regexpTag = '[object RegExp]', +      setTag = '[object Set]', +      stringTag = '[object String]', +      symbolTag = '[object Symbol]', +      undefinedTag = '[object Undefined]', +      weakMapTag = '[object WeakMap]', +      weakSetTag = '[object WeakSet]'; + +  var arrayBufferTag = '[object ArrayBuffer]', +      dataViewTag = '[object DataView]', +      float32Tag = '[object Float32Array]', +      float64Tag = '[object Float64Array]', +      int8Tag = '[object Int8Array]', +      int16Tag = '[object Int16Array]', +      int32Tag = '[object Int32Array]', +      uint8Tag = '[object Uint8Array]', +      uint8ClampedTag = '[object Uint8ClampedArray]', +      uint16Tag = '[object Uint16Array]', +      uint32Tag = '[object Uint32Array]'; + +  /** Used to match empty string literals in compiled template source. */ +  var reEmptyStringLeading = /\b__p \+= '';/g, +      reEmptyStringMiddle = /\b(__p \+=) '' \+/g, +      reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; + +  /** Used to match HTML entities and HTML characters. */ +  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, +      reUnescapedHtml = /[&<>"']/g, +      reHasEscapedHtml = RegExp(reEscapedHtml.source), +      reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + +  /** Used to match template delimiters. */ +  var reEscape = /<%-([\s\S]+?)%>/g, +      reEvaluate = /<%([\s\S]+?)%>/g, +      reInterpolate = /<%=([\s\S]+?)%>/g; + +  /** Used to match property names within property paths. */ +  var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, +      reIsPlainProp = /^\w*$/, +      rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +  /** +   * Used to match `RegExp` +   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). +   */ +  var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, +      reHasRegExpChar = RegExp(reRegExpChar.source); + +  /** Used to match leading whitespace. */ +  var reTrimStart = /^\s+/; + +  /** Used to match a single whitespace character. */ +  var reWhitespace = /\s/; + +  /** Used to match wrap detail comments. */ +  var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, +      reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, +      reSplitDetails = /,? & /; + +  /** Used to match words composed of alphanumeric characters. */ +  var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; + +  /** +   * Used to validate the `validate` option in `_.template` variable. +   * +   * Forbids characters which could potentially change the meaning of the function argument definition: +   * - "()," (modification of function parameters) +   * - "=" (default value) +   * - "[]{}" (destructuring of function parameters) +   * - "/" (beginning of a comment) +   * - whitespace +   */ +  var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/; + +  /** Used to match backslashes in property paths. */ +  var reEscapeChar = /\\(\\)?/g; + +  /** +   * Used to match +   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). +   */ +  var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; + +  /** Used to match `RegExp` flags from their coerced string values. */ +  var reFlags = /\w*$/; + +  /** Used to detect bad signed hexadecimal string values. */ +  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +  /** Used to detect binary string values. */ +  var reIsBinary = /^0b[01]+$/i; + +  /** Used to detect host constructors (Safari). */ +  var reIsHostCtor = /^\[object .+?Constructor\]$/; + +  /** Used to detect octal string values. */ +  var reIsOctal = /^0o[0-7]+$/i; + +  /** Used to detect unsigned integer values. */ +  var reIsUint = /^(?:0|[1-9]\d*)$/; + +  /** Used to match Latin Unicode letters (excluding mathematical operators). */ +  var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; + +  /** Used to ensure capturing order of template delimiters. */ +  var reNoMatch = /($^)/; + +  /** Used to match unescaped characters in compiled string literals. */ +  var reUnescapedString = /['\n\r\u2028\u2029\\]/g; + +  /** Used to compose unicode character classes. */ +  var rsAstralRange = '\\ud800-\\udfff', +      rsComboMarksRange = '\\u0300-\\u036f', +      reComboHalfMarksRange = '\\ufe20-\\ufe2f', +      rsComboSymbolsRange = '\\u20d0-\\u20ff', +      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, +      rsDingbatRange = '\\u2700-\\u27bf', +      rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', +      rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', +      rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', +      rsPunctuationRange = '\\u2000-\\u206f', +      rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', +      rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', +      rsVarRange = '\\ufe0e\\ufe0f', +      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; + +  /** Used to compose unicode capture groups. */ +  var rsApos = "['\u2019]", +      rsAstral = '[' + rsAstralRange + ']', +      rsBreak = '[' + rsBreakRange + ']', +      rsCombo = '[' + rsComboRange + ']', +      rsDigits = '\\d+', +      rsDingbat = '[' + rsDingbatRange + ']', +      rsLower = '[' + rsLowerRange + ']', +      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', +      rsFitz = '\\ud83c[\\udffb-\\udfff]', +      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', +      rsNonAstral = '[^' + rsAstralRange + ']', +      rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', +      rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', +      rsUpper = '[' + rsUpperRange + ']', +      rsZWJ = '\\u200d'; + +  /** Used to compose unicode regexes. */ +  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', +      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', +      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', +      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', +      reOptMod = rsModifier + '?', +      rsOptVar = '[' + rsVarRange + ']?', +      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', +      rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', +      rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', +      rsSeq = rsOptVar + reOptMod + rsOptJoin, +      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, +      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +  /** Used to match apostrophes. */ +  var reApos = RegExp(rsApos, 'g'); + +  /** +   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and +   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). +   */ +  var reComboMark = RegExp(rsCombo, 'g'); + +  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +  /** Used to match complex or compound words. */ +  var reUnicodeWord = RegExp([ +    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', +    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', +    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, +    rsUpper + '+' + rsOptContrUpper, +    rsOrdUpper, +    rsOrdLower, +    rsDigits, +    rsEmoji +  ].join('|'), 'g'); + +  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']'); + +  /** Used to detect strings that need a more robust regexp to match words. */ +  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; + +  /** Used to assign default `context` object properties. */ +  var contextProps = [ +    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', +    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', +    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', +    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', +    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' +  ]; + +  /** Used to make template sourceURLs easier to identify. */ +  var templateCounter = -1; + +  /** Used to identify `toStringTag` values of typed arrays. */ +  var typedArrayTags = {}; +  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +  typedArrayTags[uint32Tag] = true; +  typedArrayTags[argsTag] = typedArrayTags[arrayTag] = +  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = +  typedArrayTags[errorTag] = typedArrayTags[funcTag] = +  typedArrayTags[mapTag] = typedArrayTags[numberTag] = +  typedArrayTags[objectTag] = typedArrayTags[regexpTag] = +  typedArrayTags[setTag] = typedArrayTags[stringTag] = +  typedArrayTags[weakMapTag] = false; + +  /** Used to identify `toStringTag` values supported by `_.clone`. */ +  var cloneableTags = {}; +  cloneableTags[argsTag] = cloneableTags[arrayTag] = +  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = +  cloneableTags[boolTag] = cloneableTags[dateTag] = +  cloneableTags[float32Tag] = cloneableTags[float64Tag] = +  cloneableTags[int8Tag] = cloneableTags[int16Tag] = +  cloneableTags[int32Tag] = cloneableTags[mapTag] = +  cloneableTags[numberTag] = cloneableTags[objectTag] = +  cloneableTags[regexpTag] = cloneableTags[setTag] = +  cloneableTags[stringTag] = cloneableTags[symbolTag] = +  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = +  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; +  cloneableTags[errorTag] = cloneableTags[funcTag] = +  cloneableTags[weakMapTag] = false; + +  /** Used to map Latin Unicode letters to basic Latin letters. */ +  var deburredLetters = { +    // Latin-1 Supplement block. +    '\xc0': 'A',  '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', +    '\xe0': 'a',  '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', +    '\xc7': 'C',  '\xe7': 'c', +    '\xd0': 'D',  '\xf0': 'd', +    '\xc8': 'E',  '\xc9': 'E', '\xca': 'E', '\xcb': 'E', +    '\xe8': 'e',  '\xe9': 'e', '\xea': 'e', '\xeb': 'e', +    '\xcc': 'I',  '\xcd': 'I', '\xce': 'I', '\xcf': 'I', +    '\xec': 'i',  '\xed': 'i', '\xee': 'i', '\xef': 'i', +    '\xd1': 'N',  '\xf1': 'n', +    '\xd2': 'O',  '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', +    '\xf2': 'o',  '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', +    '\xd9': 'U',  '\xda': 'U', '\xdb': 'U', '\xdc': 'U', +    '\xf9': 'u',  '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', +    '\xdd': 'Y',  '\xfd': 'y', '\xff': 'y', +    '\xc6': 'Ae', '\xe6': 'ae', +    '\xde': 'Th', '\xfe': 'th', +    '\xdf': 'ss', +    // Latin Extended-A block. +    '\u0100': 'A',  '\u0102': 'A', '\u0104': 'A', +    '\u0101': 'a',  '\u0103': 'a', '\u0105': 'a', +    '\u0106': 'C',  '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', +    '\u0107': 'c',  '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', +    '\u010e': 'D',  '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', +    '\u0112': 'E',  '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', +    '\u0113': 'e',  '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', +    '\u011c': 'G',  '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', +    '\u011d': 'g',  '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', +    '\u0124': 'H',  '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', +    '\u0128': 'I',  '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', +    '\u0129': 'i',  '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', +    '\u0134': 'J',  '\u0135': 'j', +    '\u0136': 'K',  '\u0137': 'k', '\u0138': 'k', +    '\u0139': 'L',  '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', +    '\u013a': 'l',  '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', +    '\u0143': 'N',  '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', +    '\u0144': 'n',  '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', +    '\u014c': 'O',  '\u014e': 'O', '\u0150': 'O', +    '\u014d': 'o',  '\u014f': 'o', '\u0151': 'o', +    '\u0154': 'R',  '\u0156': 'R', '\u0158': 'R', +    '\u0155': 'r',  '\u0157': 'r', '\u0159': 'r', +    '\u015a': 'S',  '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', +    '\u015b': 's',  '\u015d': 's', '\u015f': 's', '\u0161': 's', +    '\u0162': 'T',  '\u0164': 'T', '\u0166': 'T', +    '\u0163': 't',  '\u0165': 't', '\u0167': 't', +    '\u0168': 'U',  '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', +    '\u0169': 'u',  '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', +    '\u0174': 'W',  '\u0175': 'w', +    '\u0176': 'Y',  '\u0177': 'y', '\u0178': 'Y', +    '\u0179': 'Z',  '\u017b': 'Z', '\u017d': 'Z', +    '\u017a': 'z',  '\u017c': 'z', '\u017e': 'z', +    '\u0132': 'IJ', '\u0133': 'ij', +    '\u0152': 'Oe', '\u0153': 'oe', +    '\u0149': "'n", '\u017f': 's' +  }; + +  /** Used to map characters to HTML entities. */ +  var htmlEscapes = { +    '&': '&', +    '<': '<', +    '>': '>', +    '"': '"', +    "'": ''' +  }; + +  /** Used to map HTML entities to characters. */ +  var htmlUnescapes = { +    '&': '&', +    '<': '<', +    '>': '>', +    '"': '"', +    ''': "'" +  }; + +  /** Used to escape characters for inclusion in compiled string literals. */ +  var stringEscapes = { +    '\\': '\\', +    "'": "'", +    '\n': 'n', +    '\r': 'r', +    '\u2028': 'u2028', +    '\u2029': 'u2029' +  }; + +  /** Built-in method references without a dependency on `root`. */ +  var freeParseFloat = parseFloat, +      freeParseInt = parseInt; + +  /** Detect free variable `global` from Node.js. */ +  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +  /** Detect free variable `self`. */ +  var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +  /** Used as a reference to the global object. */ +  var root = freeGlobal || freeSelf || Function('return this')(); + +  /** Detect free variable `exports`. */ +  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +  /** Detect free variable `module`. */ +  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +  /** Detect the popular CommonJS extension `module.exports`. */ +  var moduleExports = freeModule && freeModule.exports === freeExports; + +  /** Detect free variable `process` from Node.js. */ +  var freeProcess = moduleExports && freeGlobal.process; + +  /** Used to access faster Node.js helpers. */ +  var nodeUtil = (function() { +    try { +      // Use `util.types` for Node.js 10+. +      var types = freeModule && freeModule.require && freeModule.require('util').types; + +      if (types) { +        return types; +      } + +      // Legacy `process.binding('util')` for Node.js < 10. +      return freeProcess && freeProcess.binding && freeProcess.binding('util'); +    } catch (e) {} +  }()); + +  /* Node.js helper references. */ +  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, +      nodeIsDate = nodeUtil && nodeUtil.isDate, +      nodeIsMap = nodeUtil && nodeUtil.isMap, +      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, +      nodeIsSet = nodeUtil && nodeUtil.isSet, +      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + +  /*--------------------------------------------------------------------------*/ + +  /** +   * A faster alternative to `Function#apply`, this function invokes `func` +   * with the `this` binding of `thisArg` and the arguments of `args`. +   * +   * @private +   * @param {Function} func The function to invoke. +   * @param {*} thisArg The `this` binding of `func`. +   * @param {Array} args The arguments to invoke `func` with. +   * @returns {*} Returns the result of `func`. +   */ +  function apply(func, thisArg, args) { +    switch (args.length) { +      case 0: return func.call(thisArg); +      case 1: return func.call(thisArg, args[0]); +      case 2: return func.call(thisArg, args[0], args[1]); +      case 3: return func.call(thisArg, args[0], args[1], args[2]); +    } +    return func.apply(thisArg, args); +  } + +  /** +   * A specialized version of `baseAggregator` for arrays. +   * +   * @private +   * @param {Array} [array] The array to iterate over. +   * @param {Function} setter The function to set `accumulator` values. +   * @param {Function} iteratee The iteratee to transform keys. +   * @param {Object} accumulator The initial aggregated object. +   * @returns {Function} Returns `accumulator`. +   */ +  function arrayAggregator(array, setter, iteratee, accumulator) { +    var index = -1, +        length = array == null ? 0 : array.length; + +    while (++index < length) { +      var value = array[index]; +      setter(accumulator, value, iteratee(value), array); +    } +    return accumulator; +  } + +  /** +   * A specialized version of `_.forEach` for arrays without support for +   * iteratee shorthands. +   * +   * @private +   * @param {Array} [array] The array to iterate over. +   * @param {Function} iteratee The function invoked per iteration. +   * @returns {Array} Returns `array`. +   */ +  function arrayEach(array, iteratee) { +    var index = -1, +        length = array == null ? 0 : array.length; + +    while (++index < length) { +      if (iteratee(array[index], index, array) === false) { +        break; +      } +    } +    return array; +  } + +  /** +   * A specialized version of `_.forEachRight` for arrays without support for +   * iteratee shorthands. +   * +   * @private +   * @param {Array} [array] The array to iterate over. +   * @param {Function} iteratee The function invoked per iteration. +   * @returns {Array} Returns `array`. +   */ +  function arrayEachRight(array, iteratee) { +    var length = array == null ? 0 : array.length; + +    while (length--) { +      if (iteratee(array[length], length, array) === false) { +        break; +      } +    } +    return array; +  } + +  /** +   * A specialized version of `_.every` for arrays without support for +   * iteratee shorthands. +   * +   * @private +   * @param {Array} [array] The array to iterate over. +   * @param {Function} predicate The function invoked per iteration. +   * @returns {boolean} Returns `true` if all elements pass the predicate check, +   *  else `false`. +   */ +  function arrayEvery(array, predicate) { +    var index = -1, +        length = array == null ? 0 : array.length; + +    while (++index < length) { +      if (!predicate(array[index], index, array)) { +        return false; +      } +    } +    return true; +  } + +  /** +   * A specialized version of `_.filter` for arrays without support for +   * iteratee shorthands. +   * +   * @private +   * @param {Array} [array] The array to iterate over. +   * @param {Function} predicate The function invoked per iteration. +   * @returns {Array} Returns the new filtered array. +   */ +  function arrayFilter(array, predicate) { +    var index = -1, +        length = array == null ? 0 : array.length, +        resIndex = 0, +        result = []; + +    while (++index < length) { +      var value = array[index]; +      if (predicate(value, index, array)) { +        result[resIndex++] = value; +      } +    } +    return result; +  } + +  /** +   * A specialized version of `_.includes` for arrays without support for +   * specifying an index to search from. +   * +   * @private +   * @param {Array} [array] The array to inspect. +   * @param {*} target The value to search for. +   * @returns {boolean} Returns `true` if `target` is found, else `false`. +   */ +  function arrayIncludes(array, value) { +    var length = array == null ? 0 : array.length; +    return !!length && baseIndexOf(array, value, 0) > -1; +  } + +  /** +   * This function is like `arrayIncludes` except that it accepts a comparator. +   * +   * @private +   * @param {Array} [array] The array to inspect. +   * @param {*} target The value to search for. +   * @param {Function} comparator The comparator invoked per element. +   * @returns {boolean} Returns `true` if `target` is found, else `false`. +   */ +  function arrayIncludesWith(array, value, comparator) { +    var index = -1, +        length = array == null ? 0 : array.length; + +    while (++index < length) { +      if (comparator(value, array[index])) { +        return true; +      } +    } +    return false; +  } + +  /** +   * A specialized version of `_.map` for arrays without support for iteratee +   * shorthands. +   * +   * @private +   * @param {Array} [array] The array to iterate over. +   * @param {Function} iteratee The function invoked per iteration. +   * @returns {Array} Returns the new mapped array. +   */ +  function arrayMap(array, iteratee) { +    var index = -1, +        length = array == null ? 0 : array.length, +        result = Array(length); + +    while (++index < length) { +      result[index] = iteratee(array[index], index, array); +    } +    return result; +  } + +  /** +   * Appends the elements of `values` to `array`. +   * +   * @private +   * @param {Array} array The array to modify. +   * @param {Array} values The values to append. +   * @returns {Array} Returns `array`. +   */ +  function arrayPush(array, values) { +    var index = -1, +        length = values.length, +        offset = array.length; + +    while (++index < length) { +      array[offset + index] = values[index]; +    } +    return array; +  } + +  /** +   * A specialized version of `_.reduce` for arrays without support for +   * iteratee shorthands. +   * +   * @private +   * @param {Array} [array] The array to iterate over. +   * @param {Function} iteratee The function invoked per iteration. +   * @param {*} [accumulator] The initial value. +   * @param {boolean} [initAccum] Specify using the first element of `array` as +   *  the initial value. +   * @returns {*} Returns the accumulated value. +   */ +  function arrayReduce(array, iteratee, accumulator, initAccum) { +    var index = -1, +        length = array == null ? 0 : array.length; + +    if (initAccum && length) { +      accumulator = array[++index]; +    } +    while (++index < length) { +      accumulator = iteratee(accumulator, array[index], index, array); +    } +    return accumulator; +  } + +  /** +   * A specialized version of `_.reduceRight` for arrays without support for +   * iteratee shorthands. +   * +   * @private +   * @param {Array} [array] The array to iterate over. +   * @param {Function} iteratee The function invoked per iteration. +   * @param {*} [accumulator] The initial value. +   * @param {boolean} [initAccum] Specify using the last element of `array` as +   *  the initial value. +   * @returns {*} Returns the accumulated value. +   */ +  function arrayReduceRight(array, iteratee, accumulator, initAccum) { +    var length = array == null ? 0 : array.length; +    if (initAccum && length) { +      accumulator = array[--length]; +    } +    while (length--) { +      accumulator = iteratee(accumulator, array[length], length, array); +    } +    return accumulator; +  } + +  /** +   * A specialized version of `_.some` for arrays without support for iteratee +   * shorthands. +   * +   * @private +   * @param {Array} [array] The array to iterate over. +   * @param {Function} predicate The function invoked per iteration. +   * @returns {boolean} Returns `true` if any element passes the predicate check, +   *  else `false`. +   */ +  function arraySome(array, predicate) { +    var index = -1, +        length = array == null ? 0 : array.length; + +    while (++index < length) { +      if (predicate(array[index], index, array)) { +        return true; +      } +    } +    return false; +  } + +  /** +   * Gets the size of an ASCII `string`. +   * +   * @private +   * @param {string} string The string inspect. +   * @returns {number} Returns the string size. +   */ +  var asciiSize = baseProperty('length'); + +  /** +   * Converts an ASCII `string` to an array. +   * +   * @private +   * @param {string} string The string to convert. +   * @returns {Array} Returns the converted array. +   */ +  function asciiToArray(string) { +    return string.split(''); +  } + +  /** +   * Splits an ASCII `string` into an array of its words. +   * +   * @private +   * @param {string} The string to inspect. +   * @returns {Array} Returns the words of `string`. +   */ +  function asciiWords(string) { +    return string.match(reAsciiWord) || []; +  } + +  /** +   * The base implementation of methods like `_.findKey` and `_.findLastKey`, +   * without support for iteratee shorthands, which iterates over `collection` +   * using `eachFunc`. +   * +   * @private +   * @param {Array|Object} collection The collection to inspect. +   * @param {Function} predicate The function invoked per iteration. +   * @param {Function} eachFunc The function to iterate over `collection`. +   * @returns {*} Returns the found element or its key, else `undefined`. +   */ +  function baseFindKey(collection, predicate, eachFunc) { +    var result; +    eachFunc(collection, function(value, key, collection) { +      if (predicate(value, key, collection)) { +        result = key; +        return false; +      } +    }); +    return result; +  } + +  /** +   * The base implementation of `_.findIndex` and `_.findLastIndex` without +   * support for iteratee shorthands. +   * +   * @private +   * @param {Array} array The array to inspect. +   * @param {Function} predicate The function invoked per iteration. +   * @param {number} fromIndex The index to search from. +   * @param {boolean} [fromRight] Specify iterating from right to left. +   * @returns {number} Returns the index of the matched value, else `-1`. +   */ +  function baseFindIndex(array, predicate, fromIndex, fromRight) { +    var length = array.length, +        index = fromIndex + (fromRight ? 1 : -1); + +    while ((fromRight ? index-- : ++index < length)) { +      if (predicate(array[index], index, array)) { +        return index; +      } +    } +    return -1; +  } + +  /** +   * The base implementation of `_.indexOf` without `fromIndex` bounds checks. +   * +   * @private +   * @param {Array} array The array to inspect. +   * @param {*} value The value to search for. +   * @param {number} fromIndex The index to search from. +   * @returns {number} Returns the index of the matched value, else `-1`. +   */ +  function baseIndexOf(array, value, fromIndex) { +    return value === value +      ? strictIndexOf(array, value, fromIndex) +      : baseFindIndex(array, baseIsNaN, fromIndex); +  } + +  /** +   * This function is like `baseIndexOf` except that it accepts a comparator. +   * +   * @private +   * @param {Array} array The array to inspect. +   * @param {*} value The value to search for. +   * @param {number} fromIndex The index to search from. +   * @param {Function} comparator The comparator invoked per element. +   * @returns {number} Returns the index of the matched value, else `-1`. +   */ +  function baseIndexOfWith(array, value, fromIndex, comparator) { +    var index = fromIndex - 1, +        length = array.length; + +    while (++index < length) { +      if (comparator(array[index], value)) { +        return index; +      } +    } +    return -1; +  } + +  /** +   * The base implementation of `_.isNaN` without support for number objects. +   * +   * @private +   * @param {*} value The value to check. +   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. +   */ +  function baseIsNaN(value) { +    return value !== value; +  } + +  /** +   * The base implementation of `_.mean` and `_.meanBy` without support for +   * iteratee shorthands. +   * +   * @private +   * @param {Array} array The array to iterate over. +   * @param {Function} iteratee The function invoked per iteration. +   * @returns {number} Returns the mean. +   */ +  function baseMean(array, iteratee) { +    var length = array == null ? 0 : array.length; +    return length ? (baseSum(array, iteratee) / length) : NAN; +  } + +  /** +   * The base implementation of `_.property` without support for deep paths. +   * +   * @private +   * @param {string} key The key of the property to get. +   * @returns {Function} Returns the new accessor function. +   */ +  function baseProperty(key) { +    return function(object) { +      return object == null ? undefined : object[key]; +    }; +  } + +  /** +   * The base implementation of `_.propertyOf` without support for deep paths. +   * +   * @private +   * @param {Object} object The object to query. +   * @returns {Function} Returns the new accessor function. +   */ +  function basePropertyOf(object) { +    return function(key) { +      return object == null ? undefined : object[key]; +    }; +  } + +  /** +   * The base implementation of `_.reduce` and `_.reduceRight`, without support +   * for iteratee shorthands, which iterates over `collection` using `eachFunc`. +   * +   * @private +   * @param {Array|Object} collection The collection to iterate over. +   * @param {Function} iteratee The function invoked per iteration. +   * @param {*} accumulator The initial value. +   * @param {boolean} initAccum Specify using the first or last element of +   *  `collection` as the initial value. +   * @param {Function} eachFunc The function to iterate over `collection`. +   * @returns {*} Returns the accumulated value. +   */ +  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { +    eachFunc(collection, function(value, index, collection) { +      accumulator = initAccum +        ? (initAccum = false, value) +        : iteratee(accumulator, value, index, collection); +    }); +    return accumulator; +  } + +  /** +   * The base implementation of `_.sortBy` which uses `comparer` to define the +   * sort order of `array` and replaces criteria objects with their corresponding +   * values. +   * +   * @private +   * @param {Array} array The array to sort. +   * @param {Function} comparer The function to define sort order. +   * @returns {Array} Returns `array`. +   */ +  function baseSortBy(array, comparer) { +    var length = array.length; + +    array.sort(comparer); +    while (length--) { +      array[length] = array[length].value; +    } +    return array; +  } + +  /** +   * The base implementation of `_.sum` and `_.sumBy` without support for +   * iteratee shorthands. +   * +   * @private +   * @param {Array} array The array to iterate over. +   * @param {Function} iteratee The function invoked per iteration. +   * @returns {number} Returns the sum. +   */ +  function baseSum(array, iteratee) { +    var result, +        index = -1, +        length = array.length; + +    while (++index < length) { +      var current = iteratee(array[index]); +      if (current !== undefined) { +        result = result === undefined ? current : (result + current); +      } +    } +    return result; +  } + +  /** +   * The base implementation of `_.times` without support for iteratee shorthands +   * or max array length checks. +   * +   * @private +   * @param {number} n The number of times to invoke `iteratee`. +   * @param {Function} iteratee The function invoked per iteration. +   * @returns {Array} Returns the array of results. +   */ +  function baseTimes(n, iteratee) { +    var index = -1, +        result = Array(n); + +    while (++index < n) { +      result[index] = iteratee(index); +    } +    return result; +  } + +  /** +   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array +   * of key-value pairs for `object` corresponding to the property names of `props`. +   * +   * @private +   * @param {Object} object The object to query. +   * @param {Array} props The property names to get values for. +   * @returns {Object} Returns the key-value pairs. +   */ +  function baseToPairs(object, props) { +    return arrayMap(props, function(key) { +      return [key, object[key]]; +    }); +  } + +  /** +   * The base implementation of `_.trim`. +   * +   * @private +   * @param {string} string The string to trim. +   * @returns {string} Returns the trimmed string. +   */ +  function baseTrim(string) { +    return string +      ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') +      : string; +  } + +  /** +   * The base implementation of `_.unary` without support for storing metadata. +   * +   * @private +   * @param {Function} func The function to cap arguments for. +   * @returns {Function} Returns the new capped function. +   */ +  function baseUnary(func) { +    return function(value) { +      return func(value); +    }; +  } + +  /** +   * The base implementation of `_.values` and `_.valuesIn` which creates an +   * array of `object` property values corresponding to the property names +   * of `props`. +   * +   * @private +   * @param {Object} object The object to query. +   * @param {Array} props The property names to get values for. +   * @returns {Object} Returns the array of property values. +   */ +  function baseValues(object, props) { +    return arrayMap(props, function(key) { +      return object[key]; +    }); +  } + +  /** +   * Checks if a `cache` value for `key` exists. +   * +   * @private +   * @param {Object} cache The cache to query. +   * @param {string} key The key of the entry to check. +   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. +   */ +  function cacheHas(cache, key) { +    return cache.has(key); +  } + +  /** +   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol +   * that is not found in the character symbols. +   * +   * @private +   * @param {Array} strSymbols The string symbols to inspect. +   * @param {Array} chrSymbols The character symbols to find. +   * @returns {number} Returns the index of the first unmatched string symbol. +   */ +  function charsStartIndex(strSymbols, chrSymbols) { +    var index = -1, +        length = strSymbols.length; + +    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} +    return index; +  } + +  /** +   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol +   * that is not found in the character symbols. +   * +   * @private +   * @param {Array} strSymbols The string symbols to inspect. +   * @param {Array} chrSymbols The character symbols to find. +   * @returns {number} Returns the index of the last unmatched string symbol. +   */ +  function charsEndIndex(strSymbols, chrSymbols) { +    var index = strSymbols.length; + +    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} +    return index; +  } + +  /** +   * Gets the number of `placeholder` occurrences in `array`. +   * +   * @private +   * @param {Array} array The array to inspect. +   * @param {*} placeholder The placeholder to search for. +   * @returns {number} Returns the placeholder count. +   */ +  function countHolders(array, placeholder) { +    var length = array.length, +        result = 0; + +    while (length--) { +      if (array[length] === placeholder) { +        ++result; +      } +    } +    return result; +  } + +  /** +   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A +   * letters to basic Latin letters. +   * +   * @private +   * @param {string} letter The matched letter to deburr. +   * @returns {string} Returns the deburred letter. +   */ +  var deburrLetter = basePropertyOf(deburredLetters); + +  /** +   * Used by `_.escape` to convert characters to HTML entities. +   * +   * @private +   * @param {string} chr The matched character to escape. +   * @returns {string} Returns the escaped character. +   */ +  var escapeHtmlChar = basePropertyOf(htmlEscapes); + +  /** +   * Used by `_.template` to escape characters for inclusion in compiled string literals. +   * +   * @private +   * @param {string} chr The matched character to escape. +   * @returns {string} Returns the escaped character. +   */ +  function escapeStringChar(chr) { +    return '\\' + stringEscapes[chr]; +  } + +  /** +   * Gets the value at `key` of `object`. +   * +   * @private +   * @param {Object} [object] The object to query. +   * @param {string} key The key of the property to get. +   * @returns {*} Returns the property value. +   */ +  function getValue(object, key) { +    return object == null ? undefined : object[key]; +  } + +  /** +   * Checks if `string` contains Unicode symbols. +   * +   * @private +   * @param {string} string The string to inspect. +   * @returns {boolean} Returns `true` if a symbol is found, else `false`. +   */ +  function hasUnicode(string) { +    return reHasUnicode.test(string); +  } + +  /** +   * Checks if `string` contains a word composed of Unicode symbols. +   * +   * @private +   * @param {string} string The string to inspect. +   * @returns {boolean} Returns `true` if a word is found, else `false`. +   */ +  function hasUnicodeWord(string) { +    return reHasUnicodeWord.test(string); +  } + +  /** +   * Converts `iterator` to an array. +   * +   * @private +   * @param {Object} iterator The iterator to convert. +   * @returns {Array} Returns the converted array. +   */ +  function iteratorToArray(iterator) { +    var data, +        result = []; + +    while (!(data = iterator.next()).done) { +      result.push(data.value); +    } +    return result; +  } + +  /** +   * Converts `map` to its key-value pairs. +   * +   * @private +   * @param {Object} map The map to convert. +   * @returns {Array} Returns the key-value pairs. +   */ +  function mapToArray(map) { +    var index = -1, +        result = Array(map.size); + +    map.forEach(function(value, key) { +      result[++index] = [key, value]; +    }); +    return result; +  } + +  /** +   * Creates a unary function that invokes `func` with its argument transformed. +   * +   * @private +   * @param {Function} func The function to wrap. +   * @param {Function} transform The argument transform. +   * @returns {Function} Returns the new function. +   */ +  function overArg(func, transform) { +    return function(arg) { +      return func(transform(arg)); +    }; +  } + +  /** +   * Replaces all `placeholder` elements in `array` with an internal placeholder +   * and returns an array of their indexes. +   * +   * @private +   * @param {Array} array The array to modify. +   * @param {*} placeholder The placeholder to replace. +   * @returns {Array} Returns the new array of placeholder indexes. +   */ +  function replaceHolders(array, placeholder) { +    var index = -1, +        length = array.length, +        resIndex = 0, +        result = []; + +    while (++index < length) { +      var value = array[index]; +      if (value === placeholder || value === PLACEHOLDER) { +        array[index] = PLACEHOLDER; +        result[resIndex++] = index; +      } +    } +    return result; +  } + +  /** +   * Converts `set` to an array of its values. +   * +   * @private +   * @param {Object} set The set to convert. +   * @returns {Array} Returns the values. +   */ +  function setToArray(set) { +    var index = -1, +        result = Array(set.size); + +    set.forEach(function(value) { +      result[++index] = value; +    }); +    return result; +  } + +  /** +   * Converts `set` to its value-value pairs. +   * +   * @private +   * @param {Object} set The set to convert. +   * @returns {Array} Returns the value-value pairs. +   */ +  function setToPairs(set) { +    var index = -1, +        result = Array(set.size); + +    set.forEach(function(value) { +      result[++index] = [value, value]; +    }); +    return result; +  } + +  /** +   * A specialized version of `_.indexOf` which performs strict equality +   * comparisons of values, i.e. `===`. +   * +   * @private +   * @param {Array} array The array to inspect. +   * @param {*} value The value to search for. +   * @param {number} fromIndex The index to search from. +   * @returns {number} Returns the index of the matched value, else `-1`. +   */ +  function strictIndexOf(array, value, fromIndex) { +    var index = fromIndex - 1, +        length = array.length; + +    while (++index < length) { +      if (array[index] === value) { +        return index; +      } +    } +    return -1; +  } + +  /** +   * A specialized version of `_.lastIndexOf` which performs strict equality +   * comparisons of values, i.e. `===`. +   * +   * @private +   * @param {Array} array The array to inspect. +   * @param {*} value The value to search for. +   * @param {number} fromIndex The index to search from. +   * @returns {number} Returns the index of the matched value, else `-1`. +   */ +  function strictLastIndexOf(array, value, fromIndex) { +    var index = fromIndex + 1; +    while (index--) { +      if (array[index] === value) { +        return index; +      } +    } +    return index; +  } + +  /** +   * Gets the number of symbols in `string`. +   * +   * @private +   * @param {string} string The string to inspect. +   * @returns {number} Returns the string size. +   */ +  function stringSize(string) { +    return hasUnicode(string) +      ? unicodeSize(string) +      : asciiSize(string); +  } + +  /** +   * Converts `string` to an array. +   * +   * @private +   * @param {string} string The string to convert. +   * @returns {Array} Returns the converted array. +   */ +  function stringToArray(string) { +    return hasUnicode(string) +      ? unicodeToArray(string) +      : asciiToArray(string); +  } + +  /** +   * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace +   * character of `string`. +   * +   * @private +   * @param {string} string The string to inspect. +   * @returns {number} Returns the index of the last non-whitespace character. +   */ +  function trimmedEndIndex(string) { +    var index = string.length; + +    while (index-- && reWhitespace.test(string.charAt(index))) {} +    return index; +  } + +  /** +   * Used by `_.unescape` to convert HTML entities to characters. +   * +   * @private +   * @param {string} chr The matched character to unescape. +   * @returns {string} Returns the unescaped character. +   */ +  var unescapeHtmlChar = basePropertyOf(htmlUnescapes); + +  /** +   * Gets the size of a Unicode `string`. +   * +   * @private +   * @param {string} string The string inspect. +   * @returns {number} Returns the string size. +   */ +  function unicodeSize(string) { +    var result = reUnicode.lastIndex = 0; +    while (reUnicode.test(string)) { +      ++result; +    } +    return result; +  } + +  /** +   * Converts a Unicode `string` to an array. +   * +   * @private +   * @param {string} string The string to convert. +   * @returns {Array} Returns the converted array. +   */ +  function unicodeToArray(string) { +    return string.match(reUnicode) || []; +  } + +  /** +   * Splits a Unicode `string` into an array of its words. +   * +   * @private +   * @param {string} The string to inspect. +   * @returns {Array} Returns the words of `string`. +   */ +  function unicodeWords(string) { +    return string.match(reUnicodeWord) || []; +  } + +  /*--------------------------------------------------------------------------*/ + +  /** +   * Create a new pristine `lodash` function using the `context` object. +   * +   * @static +   * @memberOf _ +   * @since 1.1.0 +   * @category Util +   * @param {Object} [context=root] The context object. +   * @returns {Function} Returns a new `lodash` function. +   * @example +   * +   * _.mixin({ 'foo': _.constant('foo') }); +   * +   * var lodash = _.runInContext(); +   * lodash.mixin({ 'bar': lodash.constant('bar') }); +   * +   * _.isFunction(_.foo); +   * // => true +   * _.isFunction(_.bar); +   * // => false +   * +   * lodash.isFunction(lodash.foo); +   * // => false +   * lodash.isFunction(lodash.bar); +   * // => true +   * +   * // Create a suped-up `defer` in Node.js. +   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; +   */ +  var runInContext = (function runInContext(context) { +    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps)); + +    /** Built-in constructor references. */ +    var Array = context.Array, +        Date = context.Date, +        Error = context.Error, +        Function = context.Function, +        Math = context.Math, +        Object = context.Object, +        RegExp = context.RegExp, +        String = context.String, +        TypeError = context.TypeError; + +    /** Used for built-in method references. */ +    var arrayProto = Array.prototype, +        funcProto = Function.prototype, +        objectProto = Object.prototype; + +    /** Used to detect overreaching core-js shims. */ +    var coreJsData = context['__core-js_shared__']; + +    /** Used to resolve the decompiled source of functions. */ +    var funcToString = funcProto.toString; + +    /** Used to check objects for own properties. */ +    var hasOwnProperty = objectProto.hasOwnProperty; + +    /** Used to generate unique IDs. */ +    var idCounter = 0; + +    /** Used to detect methods masquerading as native. */ +    var maskSrcKey = (function() { +      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); +      return uid ? ('Symbol(src)_1.' + uid) : ''; +    }()); + +    /** +     * Used to resolve the +     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) +     * of values. +     */ +    var nativeObjectToString = objectProto.toString; + +    /** Used to infer the `Object` constructor. */ +    var objectCtorString = funcToString.call(Object); + +    /** Used to restore the original `_` reference in `_.noConflict`. */ +    var oldDash = root._; + +    /** Used to detect if a method is native. */ +    var reIsNative = RegExp('^' + +      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') +      .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +    ); + +    /** Built-in value references. */ +    var Buffer = moduleExports ? context.Buffer : undefined, +        Symbol = context.Symbol, +        Uint8Array = context.Uint8Array, +        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, +        getPrototype = overArg(Object.getPrototypeOf, Object), +        objectCreate = Object.create, +        propertyIsEnumerable = objectProto.propertyIsEnumerable, +        splice = arrayProto.splice, +        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, +        symIterator = Symbol ? Symbol.iterator : undefined, +        symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +    var defineProperty = (function() { +      try { +        var func = getNative(Object, 'defineProperty'); +        func({}, '', {}); +        return func; +      } catch (e) {} +    }()); + +    /** Mocked built-ins. */ +    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, +        ctxNow = Date && Date.now !== root.Date.now && Date.now, +        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; + +    /* Built-in method references for those with the same name as other `lodash` methods. */ +    var nativeCeil = Math.ceil, +        nativeFloor = Math.floor, +        nativeGetSymbols = Object.getOwnPropertySymbols, +        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, +        nativeIsFinite = context.isFinite, +        nativeJoin = arrayProto.join, +        nativeKeys = overArg(Object.keys, Object), +        nativeMax = Math.max, +        nativeMin = Math.min, +        nativeNow = Date.now, +        nativeParseInt = context.parseInt, +        nativeRandom = Math.random, +        nativeReverse = arrayProto.reverse; + +    /* Built-in method references that are verified to be native. */ +    var DataView = getNative(context, 'DataView'), +        Map = getNative(context, 'Map'), +        Promise = getNative(context, 'Promise'), +        Set = getNative(context, 'Set'), +        WeakMap = getNative(context, 'WeakMap'), +        nativeCreate = getNative(Object, 'create'); + +    /** Used to store function metadata. */ +    var metaMap = WeakMap && new WeakMap; + +    /** Used to lookup unminified function names. */ +    var realNames = {}; + +    /** Used to detect maps, sets, and weakmaps. */ +    var dataViewCtorString = toSource(DataView), +        mapCtorString = toSource(Map), +        promiseCtorString = toSource(Promise), +        setCtorString = toSource(Set), +        weakMapCtorString = toSource(WeakMap); + +    /** Used to convert symbols to primitives and strings. */ +    var symbolProto = Symbol ? Symbol.prototype : undefined, +        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, +        symbolToString = symbolProto ? symbolProto.toString : undefined; + +    /*------------------------------------------------------------------------*/ + +    /** +     * Creates a `lodash` object which wraps `value` to enable implicit method +     * chain sequences. Methods that operate on and return arrays, collections, +     * and functions can be chained together. Methods that retrieve a single value +     * or may return a primitive value will automatically end the chain sequence +     * and return the unwrapped value. Otherwise, the value must be unwrapped +     * with `_#value`. +     * +     * Explicit chain sequences, which must be unwrapped with `_#value`, may be +     * enabled using `_.chain`. +     * +     * The execution of chained methods is lazy, that is, it's deferred until +     * `_#value` is implicitly or explicitly called. +     * +     * Lazy evaluation allows several methods to support shortcut fusion. +     * Shortcut fusion is an optimization to merge iteratee calls; this avoids +     * the creation of intermediate arrays and can greatly reduce the number of +     * iteratee executions. Sections of a chain sequence qualify for shortcut +     * fusion if the section is applied to an array and iteratees accept only +     * one argument. The heuristic for whether a section qualifies for shortcut +     * fusion is subject to change. +     * +     * Chaining is supported in custom builds as long as the `_#value` method is +     * directly or indirectly included in the build. +     * +     * In addition to lodash methods, wrappers have `Array` and `String` methods. +     * +     * The wrapper `Array` methods are: +     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` +     * +     * The wrapper `String` methods are: +     * `replace` and `split` +     * +     * The wrapper methods that support shortcut fusion are: +     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, +     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, +     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` +     * +     * The chainable wrapper methods are: +     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, +     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, +     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, +     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, +     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, +     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, +     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, +     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, +     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, +     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, +     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, +     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, +     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, +     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, +     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, +     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, +     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, +     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, +     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, +     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, +     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, +     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, +     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, +     * `zipObject`, `zipObjectDeep`, and `zipWith` +     * +     * The wrapper methods that are **not** chainable by default are: +     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, +     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, +     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, +     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, +     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, +     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, +     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, +     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, +     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, +     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, +     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, +     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, +     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, +     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, +     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, +     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, +     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, +     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, +     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, +     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, +     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, +     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, +     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, +     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, +     * `upperFirst`, `value`, and `words` +     * +     * @name _ +     * @constructor +     * @category Seq +     * @param {*} value The value to wrap in a `lodash` instance. +     * @returns {Object} Returns the new `lodash` wrapper instance. +     * @example +     * +     * function square(n) { +     *   return n * n; +     * } +     * +     * var wrapped = _([1, 2, 3]); +     * +     * // Returns an unwrapped value. +     * wrapped.reduce(_.add); +     * // => 6 +     * +     * // Returns a wrapped value. +     * var squares = wrapped.map(square); +     * +     * _.isArray(squares); +     * // => false +     * +     * _.isArray(squares.value()); +     * // => true +     */ +    function lodash(value) { +      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { +        if (value instanceof LodashWrapper) { +          return value; +        } +        if (hasOwnProperty.call(value, '__wrapped__')) { +          return wrapperClone(value); +        } +      } +      return new LodashWrapper(value); +    } + +    /** +     * The base implementation of `_.create` without support for assigning +     * properties to the created object. +     * +     * @private +     * @param {Object} proto The object to inherit from. +     * @returns {Object} Returns the new object. +     */ +    var baseCreate = (function() { +      function object() {} +      return function(proto) { +        if (!isObject(proto)) { +          return {}; +        } +        if (objectCreate) { +          return objectCreate(proto); +        } +        object.prototype = proto; +        var result = new object; +        object.prototype = undefined; +        return result; +      }; +    }()); + +    /** +     * The function whose prototype chain sequence wrappers inherit from. +     * +     * @private +     */ +    function baseLodash() { +      // No operation performed. +    } + +    /** +     * The base constructor for creating `lodash` wrapper objects. +     * +     * @private +     * @param {*} value The value to wrap. +     * @param {boolean} [chainAll] Enable explicit method chain sequences. +     */ +    function LodashWrapper(value, chainAll) { +      this.__wrapped__ = value; +      this.__actions__ = []; +      this.__chain__ = !!chainAll; +      this.__index__ = 0; +      this.__values__ = undefined; +    } + +    /** +     * By default, the template delimiters used by lodash are like those in +     * embedded Ruby (ERB) as well as ES2015 template strings. Change the +     * following template settings to use alternative delimiters. +     * +     * @static +     * @memberOf _ +     * @type {Object} +     */ +    lodash.templateSettings = { + +      /** +       * Used to detect `data` property values to be HTML-escaped. +       * +       * @memberOf _.templateSettings +       * @type {RegExp} +       */ +      'escape': reEscape, + +      /** +       * Used to detect code to be evaluated. +       * +       * @memberOf _.templateSettings +       * @type {RegExp} +       */ +      'evaluate': reEvaluate, + +      /** +       * Used to detect `data` property values to inject. +       * +       * @memberOf _.templateSettings +       * @type {RegExp} +       */ +      'interpolate': reInterpolate, + +      /** +       * Used to reference the data object in the template text. +       * +       * @memberOf _.templateSettings +       * @type {string} +       */ +      'variable': '', + +      /** +       * Used to import variables into the compiled template. +       * +       * @memberOf _.templateSettings +       * @type {Object} +       */ +      'imports': { + +        /** +         * A reference to the `lodash` function. +         * +         * @memberOf _.templateSettings.imports +         * @type {Function} +         */ +        '_': lodash +      } +    }; + +    // Ensure wrappers are instances of `baseLodash`. +    lodash.prototype = baseLodash.prototype; +    lodash.prototype.constructor = lodash; + +    LodashWrapper.prototype = baseCreate(baseLodash.prototype); +    LodashWrapper.prototype.constructor = LodashWrapper; + +    /*------------------------------------------------------------------------*/ + +    /** +     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. +     * +     * @private +     * @constructor +     * @param {*} value The value to wrap. +     */ +    function LazyWrapper(value) { +      this.__wrapped__ = value; +      this.__actions__ = []; +      this.__dir__ = 1; +      this.__filtered__ = false; +      this.__iteratees__ = []; +      this.__takeCount__ = MAX_ARRAY_LENGTH; +      this.__views__ = []; +    } + +    /** +     * Creates a clone of the lazy wrapper object. +     * +     * @private +     * @name clone +     * @memberOf LazyWrapper +     * @returns {Object} Returns the cloned `LazyWrapper` object. +     */ +    function lazyClone() { +      var result = new LazyWrapper(this.__wrapped__); +      result.__actions__ = copyArray(this.__actions__); +      result.__dir__ = this.__dir__; +      result.__filtered__ = this.__filtered__; +      result.__iteratees__ = copyArray(this.__iteratees__); +      result.__takeCount__ = this.__takeCount__; +      result.__views__ = copyArray(this.__views__); +      return result; +    } + +    /** +     * Reverses the direction of lazy iteration. +     * +     * @private +     * @name reverse +     * @memberOf LazyWrapper +     * @returns {Object} Returns the new reversed `LazyWrapper` object. +     */ +    function lazyReverse() { +      if (this.__filtered__) { +        var result = new LazyWrapper(this); +        result.__dir__ = -1; +        result.__filtered__ = true; +      } else { +        result = this.clone(); +        result.__dir__ *= -1; +      } +      return result; +    } + +    /** +     * Extracts the unwrapped value from its lazy wrapper. +     * +     * @private +     * @name value +     * @memberOf LazyWrapper +     * @returns {*} Returns the unwrapped value. +     */ +    function lazyValue() { +      var array = this.__wrapped__.value(), +          dir = this.__dir__, +          isArr = isArray(array), +          isRight = dir < 0, +          arrLength = isArr ? array.length : 0, +          view = getView(0, arrLength, this.__views__), +          start = view.start, +          end = view.end, +          length = end - start, +          index = isRight ? end : (start - 1), +          iteratees = this.__iteratees__, +          iterLength = iteratees.length, +          resIndex = 0, +          takeCount = nativeMin(length, this.__takeCount__); + +      if (!isArr || (!isRight && arrLength == length && takeCount == length)) { +        return baseWrapperValue(array, this.__actions__); +      } +      var result = []; + +      outer: +      while (length-- && resIndex < takeCount) { +        index += dir; + +        var iterIndex = -1, +            value = array[index]; + +        while (++iterIndex < iterLength) { +          var data = iteratees[iterIndex], +              iteratee = data.iteratee, +              type = data.type, +              computed = iteratee(value); + +          if (type == LAZY_MAP_FLAG) { +            value = computed; +          } else if (!computed) { +            if (type == LAZY_FILTER_FLAG) { +              continue outer; +            } else { +              break outer; +            } +          } +        } +        result[resIndex++] = value; +      } +      return result; +    } + +    // Ensure `LazyWrapper` is an instance of `baseLodash`. +    LazyWrapper.prototype = baseCreate(baseLodash.prototype); +    LazyWrapper.prototype.constructor = LazyWrapper; + +    /*------------------------------------------------------------------------*/ + +    /** +     * Creates a hash object. +     * +     * @private +     * @constructor +     * @param {Array} [entries] The key-value pairs to cache. +     */ +    function Hash(entries) { +      var index = -1, +          length = entries == null ? 0 : entries.length; + +      this.clear(); +      while (++index < length) { +        var entry = entries[index]; +        this.set(entry[0], entry[1]); +      } +    } + +    /** +     * Removes all key-value entries from the hash. +     * +     * @private +     * @name clear +     * @memberOf Hash +     */ +    function hashClear() { +      this.__data__ = nativeCreate ? nativeCreate(null) : {}; +      this.size = 0; +    } + +    /** +     * Removes `key` and its value from the hash. +     * +     * @private +     * @name delete +     * @memberOf Hash +     * @param {Object} hash The hash to modify. +     * @param {string} key The key of the value to remove. +     * @returns {boolean} Returns `true` if the entry was removed, else `false`. +     */ +    function hashDelete(key) { +      var result = this.has(key) && delete this.__data__[key]; +      this.size -= result ? 1 : 0; +      return result; +    } + +    /** +     * Gets the hash value for `key`. +     * +     * @private +     * @name get +     * @memberOf Hash +     * @param {string} key The key of the value to get. +     * @returns {*} Returns the entry value. +     */ +    function hashGet(key) { +      var data = this.__data__; +      if (nativeCreate) { +        var result = data[key]; +        return result === HASH_UNDEFINED ? undefined : result; +      } +      return hasOwnProperty.call(data, key) ? data[key] : undefined; +    } + +    /** +     * Checks if a hash value for `key` exists. +     * +     * @private +     * @name has +     * @memberOf Hash +     * @param {string} key The key of the entry to check. +     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. +     */ +    function hashHas(key) { +      var data = this.__data__; +      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); +    } + +    /** +     * Sets the hash `key` to `value`. +     * +     * @private +     * @name set +     * @memberOf Hash +     * @param {string} key The key of the value to set. +     * @param {*} value The value to set. +     * @returns {Object} Returns the hash instance. +     */ +    function hashSet(key, value) { +      var data = this.__data__; +      this.size += this.has(key) ? 0 : 1; +      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; +      return this; +    } + +    // Add methods to `Hash`. +    Hash.prototype.clear = hashClear; +    Hash.prototype['delete'] = hashDelete; +    Hash.prototype.get = hashGet; +    Hash.prototype.has = hashHas; +    Hash.prototype.set = hashSet; + +    /*------------------------------------------------------------------------*/ + +    /** +     * Creates an list cache object. +     * +     * @private +     * @constructor +     * @param {Array} [entries] The key-value pairs to cache. +     */ +    function ListCache(entries) { +      var index = -1, +          length = entries == null ? 0 : entries.length; + +      this.clear(); +      while (++index < length) { +        var entry = entries[index]; +        this.set(entry[0], entry[1]); +      } +    } + +    /** +     * Removes all key-value entries from the list cache. +     * +     * @private +     * @name clear +     * @memberOf ListCache +     */ +    function listCacheClear() { +      this.__data__ = []; +      this.size = 0; +    } + +    /** +     * Removes `key` and its value from the list cache. +     * +     * @private +     * @name delete +     * @memberOf ListCache +     * @param {string} key The key of the value to remove. +     * @returns {boolean} Returns `true` if the entry was removed, else `false`. +     */ +    function listCacheDelete(key) { +      var data = this.__data__, +          index = assocIndexOf(data, key); + +      if (index < 0) { +        return false; +      } +      var lastIndex = data.length - 1; +      if (index == lastIndex) { +        data.pop(); +      } else { +        splice.call(data, index, 1); +      } +      --this.size; +      return true; +    } + +    /** +     * Gets the list cache value for `key`. +     * +     * @private +     * @name get +     * @memberOf ListCache +     * @param {string} key The key of the value to get. +     * @returns {*} Returns the entry value. +     */ +    function listCacheGet(key) { +      var data = this.__data__, +          index = assocIndexOf(data, key); + +      return index < 0 ? undefined : data[index][1]; +    } + +    /** +     * Checks if a list cache value for `key` exists. +     * +     * @private +     * @name has +     * @memberOf ListCache +     * @param {string} key The key of the entry to check. +     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. +     */ +    function listCacheHas(key) { +      return assocIndexOf(this.__data__, key) > -1; +    } + +    /** +     * Sets the list cache `key` to `value`. +     * +     * @private +     * @name set +     * @memberOf ListCache +     * @param {string} key The key of the value to set. +     * @param {*} value The value to set. +     * @returns {Object} Returns the list cache instance. +     */ +    function listCacheSet(key, value) { +      var data = this.__data__, +          index = assocIndexOf(data, key); + +      if (index < 0) { +        ++this.size; +        data.push([key, value]); +      } else { +        data[index][1] = value; +      } +      return this; +    } + +    // Add methods to `ListCache`. +    ListCache.prototype.clear = listCacheClear; +    ListCache.prototype['delete'] = listCacheDelete; +    ListCache.prototype.get = listCacheGet; +    ListCache.prototype.has = listCacheHas; +    ListCache.prototype.set = listCacheSet; + +    /*------------------------------------------------------------------------*/ + +    /** +     * Creates a map cache object to store key-value pairs. +     * +     * @private +     * @constructor +     * @param {Array} [entries] The key-value pairs to cache. +     */ +    function MapCache(entries) { +      var index = -1, +          length = entries == null ? 0 : entries.length; + +      this.clear(); +      while (++index < length) { +        var entry = entries[index]; +        this.set(entry[0], entry[1]); +      } +    } + +    /** +     * Removes all key-value entries from the map. +     * +     * @private +     * @name clear +     * @memberOf MapCache +     */ +    function mapCacheClear() { +      this.size = 0; +      this.__data__ = { +        'hash': new Hash, +        'map': new (Map || ListCache), +        'string': new Hash +      }; +    } + +    /** +     * Removes `key` and its value from the map. +     * +     * @private +     * @name delete +     * @memberOf MapCache +     * @param {string} key The key of the value to remove. +     * @returns {boolean} Returns `true` if the entry was removed, else `false`. +     */ +    function mapCacheDelete(key) { +      var result = getMapData(this, key)['delete'](key); +      this.size -= result ? 1 : 0; +      return result; +    } + +    /** +     * Gets the map value for `key`. +     * +     * @private +     * @name get +     * @memberOf MapCache +     * @param {string} key The key of the value to get. +     * @returns {*} Returns the entry value. +     */ +    function mapCacheGet(key) { +      return getMapData(this, key).get(key); +    } + +    /** +     * Checks if a map value for `key` exists. +     * +     * @private +     * @name has +     * @memberOf MapCache +     * @param {string} key The key of the entry to check. +     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. +     */ +    function mapCacheHas(key) { +      return getMapData(this, key).has(key); +    } + +    /** +     * Sets the map `key` to `value`. +     * +     * @private +     * @name set +     * @memberOf MapCache +     * @param {string} key The key of the value to set. +     * @param {*} value The value to set. +     * @returns {Object} Returns the map cache instance. +     */ +    function mapCacheSet(key, value) { +      var data = getMapData(this, key), +          size = data.size; + +      data.set(key, value); +      this.size += data.size == size ? 0 : 1; +      return this; +    } + +    // Add methods to `MapCache`. +    MapCache.prototype.clear = mapCacheClear; +    MapCache.prototype['delete'] = mapCacheDelete; +    MapCache.prototype.get = mapCacheGet; +    MapCache.prototype.has = mapCacheHas; +    MapCache.prototype.set = mapCacheSet; + +    /*------------------------------------------------------------------------*/ + +    /** +     * +     * Creates an array cache object to store unique values. +     * +     * @private +     * @constructor +     * @param {Array} [values] The values to cache. +     */ +    function SetCache(values) { +      var index = -1, +          length = values == null ? 0 : values.length; + +      this.__data__ = new MapCache; +      while (++index < length) { +        this.add(values[index]); +      } +    } + +    /** +     * Adds `value` to the array cache. +     * +     * @private +     * @name add +     * @memberOf SetCache +     * @alias push +     * @param {*} value The value to cache. +     * @returns {Object} Returns the cache instance. +     */ +    function setCacheAdd(value) { +      this.__data__.set(value, HASH_UNDEFINED); +      return this; +    } + +    /** +     * Checks if `value` is in the array cache. +     * +     * @private +     * @name has +     * @memberOf SetCache +     * @param {*} value The value to search for. +     * @returns {number} Returns `true` if `value` is found, else `false`. +     */ +    function setCacheHas(value) { +      return this.__data__.has(value); +    } + +    // Add methods to `SetCache`. +    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; +    SetCache.prototype.has = setCacheHas; + +    /*------------------------------------------------------------------------*/ + +    /** +     * Creates a stack cache object to store key-value pairs. +     * +     * @private +     * @constructor +     * @param {Array} [entries] The key-value pairs to cache. +     */ +    function Stack(entries) { +      var data = this.__data__ = new ListCache(entries); +      this.size = data.size; +    } + +    /** +     * Removes all key-value entries from the stack. +     * +     * @private +     * @name clear +     * @memberOf Stack +     */ +    function stackClear() { +      this.__data__ = new ListCache; +      this.size = 0; +    } + +    /** +     * Removes `key` and its value from the stack. +     * +     * @private +     * @name delete +     * @memberOf Stack +     * @param {string} key The key of the value to remove. +     * @returns {boolean} Returns `true` if the entry was removed, else `false`. +     */ +    function stackDelete(key) { +      var data = this.__data__, +          result = data['delete'](key); + +      this.size = data.size; +      return result; +    } + +    /** +     * Gets the stack value for `key`. +     * +     * @private +     * @name get +     * @memberOf Stack +     * @param {string} key The key of the value to get. +     * @returns {*} Returns the entry value. +     */ +    function stackGet(key) { +      return this.__data__.get(key); +    } + +    /** +     * Checks if a stack value for `key` exists. +     * +     * @private +     * @name has +     * @memberOf Stack +     * @param {string} key The key of the entry to check. +     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. +     */ +    function stackHas(key) { +      return this.__data__.has(key); +    } + +    /** +     * Sets the stack `key` to `value`. +     * +     * @private +     * @name set +     * @memberOf Stack +     * @param {string} key The key of the value to set. +     * @param {*} value The value to set. +     * @returns {Object} Returns the stack cache instance. +     */ +    function stackSet(key, value) { +      var data = this.__data__; +      if (data instanceof ListCache) { +        var pairs = data.__data__; +        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { +          pairs.push([key, value]); +          this.size = ++data.size; +          return this; +        } +        data = this.__data__ = new MapCache(pairs); +      } +      data.set(key, value); +      this.size = data.size; +      return this; +    } + +    // Add methods to `Stack`. +    Stack.prototype.clear = stackClear; +    Stack.prototype['delete'] = stackDelete; +    Stack.prototype.get = stackGet; +    Stack.prototype.has = stackHas; +    Stack.prototype.set = stackSet; + +    /*------------------------------------------------------------------------*/ + +    /** +     * Creates an array of the enumerable property names of the array-like `value`. +     * +     * @private +     * @param {*} value The value to query. +     * @param {boolean} inherited Specify returning inherited property names. +     * @returns {Array} Returns the array of property names. +     */ +    function arrayLikeKeys(value, inherited) { +      var isArr = isArray(value), +          isArg = !isArr && isArguments(value), +          isBuff = !isArr && !isArg && isBuffer(value), +          isType = !isArr && !isArg && !isBuff && isTypedArray(value), +          skipIndexes = isArr || isArg || isBuff || isType, +          result = skipIndexes ? baseTimes(value.length, String) : [], +          length = result.length; + +      for (var key in value) { +        if ((inherited || hasOwnProperty.call(value, key)) && +            !(skipIndexes && ( +               // Safari 9 has enumerable `arguments.length` in strict mode. +               key == 'length' || +               // Node.js 0.10 has enumerable non-index properties on buffers. +               (isBuff && (key == 'offset' || key == 'parent')) || +               // PhantomJS 2 has enumerable non-index properties on typed arrays. +               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || +               // Skip index properties. +               isIndex(key, length) +            ))) { +          result.push(key); +        } +      } +      return result; +    } + +    /** +     * A specialized version of `_.sample` for arrays. +     * +     * @private +     * @param {Array} array The array to sample. +     * @returns {*} Returns the random element. +     */ +    function arraySample(array) { +      var length = array.length; +      return length ? array[baseRandom(0, length - 1)] : undefined; +    } + +    /** +     * A specialized version of `_.sampleSize` for arrays. +     * +     * @private +     * @param {Array} array The array to sample. +     * @param {number} n The number of elements to sample. +     * @returns {Array} Returns the random elements. +     */ +    function arraySampleSize(array, n) { +      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); +    } + +    /** +     * A specialized version of `_.shuffle` for arrays. +     * +     * @private +     * @param {Array} array The array to shuffle. +     * @returns {Array} Returns the new shuffled array. +     */ +    function arrayShuffle(array) { +      return shuffleSelf(copyArray(array)); +    } + +    /** +     * This function is like `assignValue` except that it doesn't assign +     * `undefined` values. +     * +     * @private +     * @param {Object} object The object to modify. +     * @param {string} key The key of the property to assign. +     * @param {*} value The value to assign. +     */ +    function assignMergeValue(object, key, value) { +      if ((value !== undefined && !eq(object[key], value)) || +          (value === undefined && !(key in object))) { +        baseAssignValue(object, key, value); +      } +    } + +    /** +     * Assigns `value` to `key` of `object` if the existing value is not equivalent +     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +     * for equality comparisons. +     * +     * @private +     * @param {Object} object The object to modify. +     * @param {string} key The key of the property to assign. +     * @param {*} value The value to assign. +     */ +    function assignValue(object, key, value) { +      var objValue = object[key]; +      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || +          (value === undefined && !(key in object))) { +        baseAssignValue(object, key, value); +      } +    } + +    /** +     * Gets the index at which the `key` is found in `array` of key-value pairs. +     * +     * @private +     * @param {Array} array The array to inspect. +     * @param {*} key The key to search for. +     * @returns {number} Returns the index of the matched value, else `-1`. +     */ +    function assocIndexOf(array, key) { +      var length = array.length; +      while (length--) { +        if (eq(array[length][0], key)) { +          return length; +        } +      } +      return -1; +    } + +    /** +     * Aggregates elements of `collection` on `accumulator` with keys transformed +     * by `iteratee` and values set by `setter`. +     * +     * @private +     * @param {Array|Object} collection The collection to iterate over. +     * @param {Function} setter The function to set `accumulator` values. +     * @param {Function} iteratee The iteratee to transform keys. +     * @param {Object} accumulator The initial aggregated object. +     * @returns {Function} Returns `accumulator`. +     */ +    function baseAggregator(collection, setter, iteratee, accumulator) { +      baseEach(collection, function(value, key, collection) { +        setter(accumulator, value, iteratee(value), collection); +      }); +      return accumulator; +    } + +    /** +     * The base implementation of `_.assign` without support for multiple sources +     * or `customizer` functions. +     * +     * @private +     * @param {Object} object The destination object. +     * @param {Object} source The source object. +     * @returns {Object} Returns `object`. +     */ +    function baseAssign(object, source) { +      return object && copyObject(source, keys(source), object); +    } + +    /** +     * The base implementation of `_.assignIn` without support for multiple sources +     * or `customizer` functions. +     * +     * @private +     * @param {Object} object The destination object. +     * @param {Object} source The source object. +     * @returns {Object} Returns `object`. +     */ +    function baseAssignIn(object, source) { +      return object && copyObject(source, keysIn(source), object); +    } + +    /** +     * The base implementation of `assignValue` and `assignMergeValue` without +     * value checks. +     * +     * @private +     * @param {Object} object The object to modify. +     * @param {string} key The key of the property to assign. +     * @param {*} value The value to assign. +     */ +    function baseAssignValue(object, key, value) { +      if (key == '__proto__' && defineProperty) { +        defineProperty(object, key, { +          'configurable': true, +          'enumerable': true, +          'value': value, +          'writable': true +        }); +      } else { +        object[key] = value; +      } +    } + +    /** +     * The base implementation of `_.at` without support for individual paths. +     * +     * @private +     * @param {Object} object The object to iterate over. +     * @param {string[]} paths The property paths to pick. +     * @returns {Array} Returns the picked elements. +     */ +    function baseAt(object, paths) { +      var index = -1, +          length = paths.length, +          result = Array(length), +          skip = object == null; + +      while (++index < length) { +        result[index] = skip ? undefined : get(object, paths[index]); +      } +      return result; +    } + +    /** +     * The base implementation of `_.clamp` which doesn't coerce arguments. +     * +     * @private +     * @param {number} number The number to clamp. +     * @param {number} [lower] The lower bound. +     * @param {number} upper The upper bound. +     * @returns {number} Returns the clamped number. +     */ +    function baseClamp(number, lower, upper) { +      if (number === number) { +        if (upper !== undefined) { +          number = number <= upper ? number : upper; +        } +        if (lower !== undefined) { +          number = number >= lower ? number : lower; +        } +      } +      return number; +    } + +    /** +     * The base implementation of `_.clone` and `_.cloneDeep` which tracks +     * traversed objects. +     * +     * @private +     * @param {*} value The value to clone. +     * @param {boolean} bitmask The bitmask flags. +     *  1 - Deep clone +     *  2 - Flatten inherited properties +     *  4 - Clone symbols +     * @param {Function} [customizer] The function to customize cloning. +     * @param {string} [key] The key of `value`. +     * @param {Object} [object] The parent object of `value`. +     * @param {Object} [stack] Tracks traversed objects and their clone counterparts. +     * @returns {*} Returns the cloned value. +     */ +    function baseClone(value, bitmask, customizer, key, object, stack) { +      var result, +          isDeep = bitmask & CLONE_DEEP_FLAG, +          isFlat = bitmask & CLONE_FLAT_FLAG, +          isFull = bitmask & CLONE_SYMBOLS_FLAG; + +      if (customizer) { +        result = object ? customizer(value, key, object, stack) : customizer(value); +      } +      if (result !== undefined) { +        return result; +      } +      if (!isObject(value)) { +        return value; +      } +      var isArr = isArray(value); +      if (isArr) { +        result = initCloneArray(value); +        if (!isDeep) { +          return copyArray(value, result); +        } +      } else { +        var tag = getTag(value), +            isFunc = tag == funcTag || tag == genTag; + +        if (isBuffer(value)) { +          return cloneBuffer(value, isDeep); +        } +        if (tag == objectTag || tag == argsTag || (isFunc && !object)) { +          result = (isFlat || isFunc) ? {} : initCloneObject(value); +          if (!isDeep) { +            return isFlat +              ? copySymbolsIn(value, baseAssignIn(result, value)) +              : copySymbols(value, baseAssign(result, value)); +          } +        } else { +          if (!cloneableTags[tag]) { +            return object ? value : {}; +          } +          result = initCloneByTag(value, tag, isDeep); +        } +      } +      // Check for circular references and return its corresponding clone. +      stack || (stack = new Stack); +      var stacked = stack.get(value); +      if (stacked) { +        return stacked; +      } +      stack.set(value, result); + +      if (isSet(value)) { +        value.forEach(function(subValue) { +          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); +        }); +      } else if (isMap(value)) { +        value.forEach(function(subValue, key) { +          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); +        }); +      } + +      var keysFunc = isFull +        ? (isFlat ? getAllKeysIn : getAllKeys) +        : (isFlat ? keysIn : keys); + +      var props = isArr ? undefined : keysFunc(value); +      arrayEach(props || value, function(subValue, key) { +        if (props) { +          key = subValue; +          subValue = value[key]; +        } +        // Recursively populate clone (susceptible to call stack limits). +        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); +      }); +      return result; +    } + +    /** +     * The base implementation of `_.conforms` which doesn't clone `source`. +     * +     * @private +     * @param {Object} source The object of property predicates to conform to. +     * @returns {Function} Returns the new spec function. +     */ +    function baseConforms(source) { +      var props = keys(source); +      return function(object) { +        return baseConformsTo(object, source, props); +      }; +    } + +    /** +     * The base implementation of `_.conformsTo` which accepts `props` to check. +     * +     * @private +     * @param {Object} object The object to inspect. +     * @param {Object} source The object of property predicates to conform to. +     * @returns {boolean} Returns `true` if `object` conforms, else `false`. +     */ +    function baseConformsTo(object, source, props) { +      var length = props.length; +      if (object == null) { +        return !length; +      } +      object = Object(object); +      while (length--) { +        var key = props[length], +            predicate = source[key], +            value = object[key]; + +        if ((value === undefined && !(key in object)) || !predicate(value)) { +          return false; +        } +      } +      return true; +    } + +    /** +     * The base implementation of `_.delay` and `_.defer` which accepts `args` +     * to provide to `func`. +     * +     * @private +     * @param {Function} func The function to delay. +     * @param {number} wait The number of milliseconds to delay invocation. +     * @param {Array} args The arguments to provide to `func`. +     * @returns {number|Object} Returns the timer id or timeout object. +     */ +    function baseDelay(func, wait, args) { +      if (typeof func != 'function') { +        throw new TypeError(FUNC_ERROR_TEXT); +      } +      return setTimeout(function() { func.apply(undefined, args); }, wait); +    } + +    /** +     * The base implementation of methods like `_.difference` without support +     * for excluding multiple arrays or iteratee shorthands. +     * +     * @private +     * @param {Array} array The array to inspect. +     * @param {Array} values The values to exclude. +     * @param {Function} [iteratee] The iteratee invoked per element. +     * @param {Function} [comparator] The comparator invoked per element. +     * @returns {Array} Returns the new array of filtered values. +     */ +    function baseDifference(array, values, iteratee, comparator) { +      var index = -1, +          includes = arrayIncludes, +          isCommon = true, +          length = array.length, +          result = [], +          valuesLength = values.length; + +      if (!length) { +        return result; +      } +      if (iteratee) { +        values = arrayMap(values, baseUnary(iteratee)); +      } +      if (comparator) { +        includes = arrayIncludesWith; +        isCommon = false; +      } +      else if (values.length >= LARGE_ARRAY_SIZE) { +        includes = cacheHas; +        isCommon = false; +        values = new SetCache(values); +      } +      outer: +      while (++index < length) { +        var value = array[index], +            computed = iteratee == null ? value : iteratee(value); + +        value = (comparator || value !== 0) ? value : 0; +        if (isCommon && computed === computed) { +          var valuesIndex = valuesLength; +          while (valuesIndex--) { +            if (values[valuesIndex] === computed) { +              continue outer; +            } +          } +          result.push(value); +        } +        else if (!includes(values, computed, comparator)) { +          result.push(value); +        } +      } +      return result; +    } + +    /** +     * The base implementation of `_.forEach` without support for iteratee shorthands. +     * +     * @private +     * @param {Array|Object} collection The collection to iterate over. +     * @param {Function} iteratee The function invoked per iteration. +     * @returns {Array|Object} Returns `collection`. +     */ +    var baseEach = createBaseEach(baseForOwn); + +    /** +     * The base implementation of `_.forEachRight` without support for iteratee shorthands. +     * +     * @private +     * @param {Array|Object} collection The collection to iterate over. +     * @param {Function} iteratee The function invoked per iteration. +     * @returns {Array|Object} Returns `collection`. +     */ +    var baseEachRight = createBaseEach(baseForOwnRight, true); + +    /** +     * The base implementation of `_.every` without support for iteratee shorthands. +     * +     * @private +     * @param {Array|Object} collection The collection to iterate over. +     * @param {Function} predicate The function invoked per iteration. +     * @returns {boolean} Returns `true` if all elements pass the predicate check, +     *  else `false` +     */ +    function baseEvery(collection, predicate) { +      var result = true; +      baseEach(collection, function(value, index, collection) { +        result = !!predicate(value, index, collection); +        return result; +      }); +      return result; +    } + +    /** +     * The base implementation of methods like `_.max` and `_.min` which accepts a +     * `comparator` to determine the extremum value. +     * +     * @private +     * @param {Array} array The array to iterate over. +     * @param {Function} iteratee The iteratee invoked per iteration. +     * @param {Function} comparator The comparator used to compare values. +     * @returns {*} Returns the extremum value. +     */ +    function baseExtremum(array, iteratee, comparator) { +      var index = -1, +          length = array.length; + +      while (++index < length) { +        var value = array[index], +            current = iteratee(value); + +        if (current != null && (computed === undefined +              ? (current === current && !isSymbol(current)) +              : comparator(current, computed) +            )) { +          var computed = current, +              result = value; +        } +      } +      return result; +    } + +    /** +     * The base implementation of `_.fill` without an iteratee call guard. +     * +     * @private +     * @param {Array} array The array to fill. +     * @param {*} value The value to fill `array` with. +     * @param {number} [start=0] The start position. +     * @param {number} [end=array.length] The end position. +     * @returns {Array} Returns `array`. +     */ +    function baseFill(array, value, start, end) { +      var length = array.length; + +      start = toInteger(start); +      if (start < 0) { +        start = -start > length ? 0 : (length + start); +      } +      end = (end === undefined || end > length) ? length : toInteger(end); +      if (end < 0) { +        end += length; +      } +      end = start > end ? 0 : toLength(end); +      while (start < end) { +        array[start++] = value; +      } +      return array; +    } + +    /** +     * The base implementation of `_.filter` without support for iteratee shorthands. +     * +     * @private +     * @param {Array|Object} collection The collection to iterate over. +     * @param {Function} predicate The function invoked per iteration. +     * @returns {Array} Returns the new filtered array. +     */ +    function baseFilter(collection, predicate) { +      var result = []; +      baseEach(collection, function(value, index, collection) { +        if (predicate(value, index, collection)) { +          result.push(value); +        } +      }); +      return result; +    } + +    /** +     * The base implementation of `_.flatten` with support for restricting flattening. +     * +     * @private +     * @param {Array} array The array to flatten. +     * @param {number} depth The maximum recursion depth. +     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. +     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. +     * @param {Array} [result=[]] The initial result value. +     * @returns {Array} Returns the new flattened array. +     */ +    function baseFlatten(array, depth, predicate, isStrict, result) { +      var index = -1, +          length = array.length; + +      predicate || (predicate = isFlattenable); +      result || (result = []); + +      while (++index < length) { +        var value = array[index]; +        if (depth > 0 && predicate(value)) { +          if (depth > 1) { +            // Recursively flatten arrays (susceptible to call stack limits). +            baseFlatten(value, depth - 1, predicate, isStrict, result); +          } else { +            arrayPush(result, value); +          } +        } else if (!isStrict) { +          result[result.length] = value; +        } +      } +      return result; +    } + +    /** +     * The base implementation of `baseForOwn` which iterates over `object` +     * properties returned by `keysFunc` and invokes `iteratee` for each property. +     * Iteratee functions may exit iteration early by explicitly returning `false`. +     * +     * @private +     * @param {Object} object The object to iterate over. +     * @param {Function} iteratee The function invoked per iteration. +     * @param {Function} keysFunc The function to get the keys of `object`. +     * @returns {Object} Returns `object`. +     */ +    var baseFor = createBaseFor(); + +    /** +     * This function is like `baseFor` except that it iterates over properties +     * in the opposite order. +     * +     * @private +     * @param {Object} object The object to iterate over. +     * @param {Function} iteratee The function invoked per iteration. +     * @param {Function} keysFunc The function to get the keys of `object`. +     * @returns {Object} Returns `object`. +     */ +    var baseForRight = createBaseFor(true); + +    /** +     * The base implementation of `_.forOwn` without support for iteratee shorthands. +     * +     * @private +     * @param {Object} object The object to iterate over. +     * @param {Function} iteratee The function invoked per iteration. +     * @returns {Object} Returns `object`. +     */ +    function baseForOwn(object, iteratee) { +      return object && baseFor(object, iteratee, keys); +    } + +    /** +     * The base implementation of `_.forOwnRight` without support for iteratee shorthands. +     * +     * @private +     * @param {Object} object The object to iterate over. +     * @param {Function} iteratee The function invoked per iteration. +     * @returns {Object} Returns `object`. +     */ +    function baseForOwnRight(object, iteratee) { +      return object && baseForRight(object, iteratee, keys); +    } + +    /** +     * The base implementation of `_.functions` which creates an array of +     * `object` function property names filtered from `props`. +     * +     * @private +     * @param {Object} object The object to inspect. +     * @param {Array} props The property names to filter. +     * @returns {Array} Returns the function names. +     */ +    function baseFunctions(object, props) { +      return arrayFilter(props, function(key) { +        return isFunction(object[key]); +      }); +    } + +    /** +     * The base implementation of `_.get` without support for default values. +     * +     * @private +     * @param {Object} object The object to query. +     * @param {Array|string} path The path of the property to get. +     * @returns {*} Returns the resolved value. +     */ +    function baseGet(object, path) { +      path = castPath(path, object); + +      var index = 0, +          length = path.length; + +      while (object != null && index < length) { +        object = object[toKey(path[index++])]; +      } +      return (index && index == length) ? object : undefined; +    } + +    /** +     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses +     * `keysFunc` and `symbolsFunc` to get the enumerable property names and +     * symbols of `object`. +     * +     * @private +     * @param {Object} object The object to query. +     * @param {Function} keysFunc The function to get the keys of `object`. +     * @param {Function} symbolsFunc The function to get the symbols of `object`. +     * @returns {Array} Returns the array of property names and symbols. +     */ +    function baseGetAllKeys(object, keysFunc, symbolsFunc) { +      var result = keysFunc(object); +      return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); +    } + +    /** +     * The base implementation of `getTag` without fallbacks for buggy environments. +     * +     * @private +     * @param {*} value The value to query. +     * @returns {string} Returns the `toStringTag`. +     */ +    function baseGetTag(value) { +      if (value == null) { +        return value === undefined ? undefinedTag : nullTag; +      } +      return (symToStringTag && symToStringTag in Object(value)) +        ? getRawTag(value) +        : objectToString(value); +    } + +    /** +     * The base implementation of `_.gt` which doesn't coerce arguments. +     * +     * @private +     * @param {*} value The value to compare. +     * @param {*} other The other value to compare. +     * @returns {boolean} Returns `true` if `value` is greater than `other`, +     *  else `false`. +     */ +    function baseGt(value, other) { +      return value > other; +    } + +    /** +     * The base implementation of `_.has` without support for deep paths. +     * +     * @private +     * @param {Object} [object] The object to query. +     * @param {Array|string} key The key to check. +     * @returns {boolean} Returns `true` if `key` exists, else `false`. +     */ +    function baseHas(object, key) { +      return object != null && hasOwnProperty.call(object, key); +    } + +    /** +     * The base implementation of `_.hasIn` without support for deep paths. +     * +     * @private +     * @param {Object} [object] The object to query. +     * @param {Array|string} key The key to check. +     * @returns {boolean} Returns `true` if `key` exists, else `false`. +     */ +    function baseHasIn(object, key) { +      return object != null && key in Object(object); +    } + +    /** +     * The base implementation of `_.inRange` which doesn't coerce arguments. +     * +     * @private +     * @param {number} number The number to check. +     * @param {number} start The start of the range. +     * @param {number} end The end of the range. +     * @returns {boolean} Returns `true` if `number` is in the range, else `false`. +     */ +    function baseInRange(number, start, end) { +      return number >= nativeMin(start, end) && number < nativeMax(start, end); +    } + +    /** +     * The base implementation of methods like `_.intersection`, without support +     * for iteratee shorthands, that accepts an array of arrays to inspect. +     * +     * @private +     * @param {Array} arrays The arrays to inspect. +     * @param {Function} [iteratee] The iteratee invoked per element. +     * @param {Function} [comparator] The comparator invoked per element. +     * @returns {Array} Returns the new array of shared values. +     */ +    function baseIntersection(arrays, iteratee, comparator) { +      var includes = comparator ? arrayIncludesWith : arrayIncludes, +          length = arrays[0].length, +          othLength = arrays.length, +          othIndex = othLength, +          caches = Array(othLength), +          maxLength = Infinity, +          result = []; + +      while (othIndex--) { +        var array = arrays[othIndex]; +        if (othIndex && iteratee) { +          array = arrayMap(array, baseUnary(iteratee)); +        } +        maxLength = nativeMin(array.length, maxLength); +        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) +          ? new SetCache(othIndex && array) +          : undefined; +      } +      array = arrays[0]; + +      var index = -1, +          seen = caches[0]; + +      outer: +      while (++index < length && result.length < maxLength) { +        var value = array[index], +            computed = iteratee ? iteratee(value) : value; + +        value = (comparator || value !== 0) ? value : 0; +        if (!(seen +              ? cacheHas(seen, computed) +              : includes(result, computed, comparator) +            )) { +          othIndex = othLength; +          while (--othIndex) { +            var cache = caches[othIndex]; +            if (!(cache +                  ? cacheHas(cache, computed) +                  : includes(arrays[othIndex], computed, comparator)) +                ) { +              continue outer; +            } +          } +          if (seen) { +            seen.push(computed); +          } +          result.push(value); +        } +      } +      return result; +    } + +    /** +     * The base implementation of `_.invert` and `_.invertBy` which inverts +     * `object` with values transformed by `iteratee` and set by `setter`. +     * +     * @private +     * @param {Object} object The object to iterate over. +     * @param {Function} setter The function to set `accumulator` values. +     * @param {Function} iteratee The iteratee to transform values. +     * @param {Object} accumulator The initial inverted object. +     * @returns {Function} Returns `accumulator`. +     */ +    function baseInverter(object, setter, iteratee, accumulator) { +      baseForOwn(object, function(value, key, object) { +        setter(accumulator, iteratee(value), key, object); +      }); +      return accumulator; +    } + +    /** +     * The base implementation of `_.invoke` without support for individual +     * method arguments. +     * +     * @private +     * @param {Object} object The object to query. +     * @param {Array|string} path The path of the method to invoke. +     * @param {Array} args The arguments to invoke the method with. +     * @returns {*} Returns the result of the invoked method. +     */ +    function baseInvoke(object, path, args) { +      path = castPath(path, object); +      object = parent(object, path); +      var func = object == null ? object : object[toKey(last(path))]; +      return func == null ? undefined : apply(func, object, args); +    } + +    /** +     * The base implementation of `_.isArguments`. +     * +     * @private +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is an `arguments` object, +     */ +    function baseIsArguments(value) { +      return isObjectLike(value) && baseGetTag(value) == argsTag; +    } + +    /** +     * The base implementation of `_.isArrayBuffer` without Node.js optimizations. +     * +     * @private +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. +     */ +    function baseIsArrayBuffer(value) { +      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; +    } + +    /** +     * The base implementation of `_.isDate` without Node.js optimizations. +     * +     * @private +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is a date object, else `false`. +     */ +    function baseIsDate(value) { +      return isObjectLike(value) && baseGetTag(value) == dateTag; +    } + +    /** +     * The base implementation of `_.isEqual` which supports partial comparisons +     * and tracks traversed objects. +     * +     * @private +     * @param {*} value The value to compare. +     * @param {*} other The other value to compare. +     * @param {boolean} bitmask The bitmask flags. +     *  1 - Unordered comparison +     *  2 - Partial comparison +     * @param {Function} [customizer] The function to customize comparisons. +     * @param {Object} [stack] Tracks traversed `value` and `other` objects. +     * @returns {boolean} Returns `true` if the values are equivalent, else `false`. +     */ +    function baseIsEqual(value, other, bitmask, customizer, stack) { +      if (value === other) { +        return true; +      } +      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { +        return value !== value && other !== other; +      } +      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +    } + +    /** +     * A specialized version of `baseIsEqual` for arrays and objects which performs +     * deep comparisons and tracks traversed objects enabling objects with circular +     * references to be compared. +     * +     * @private +     * @param {Object} object The object to compare. +     * @param {Object} other The other object to compare. +     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. +     * @param {Function} customizer The function to customize comparisons. +     * @param {Function} equalFunc The function to determine equivalents of values. +     * @param {Object} [stack] Tracks traversed `object` and `other` objects. +     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. +     */ +    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { +      var objIsArr = isArray(object), +          othIsArr = isArray(other), +          objTag = objIsArr ? arrayTag : getTag(object), +          othTag = othIsArr ? arrayTag : getTag(other); + +      objTag = objTag == argsTag ? objectTag : objTag; +      othTag = othTag == argsTag ? objectTag : othTag; + +      var objIsObj = objTag == objectTag, +          othIsObj = othTag == objectTag, +          isSameTag = objTag == othTag; + +      if (isSameTag && isBuffer(object)) { +        if (!isBuffer(other)) { +          return false; +        } +        objIsArr = true; +        objIsObj = false; +      } +      if (isSameTag && !objIsObj) { +        stack || (stack = new Stack); +        return (objIsArr || isTypedArray(object)) +          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) +          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); +      } +      if (!(bitmask & COMPARE_PARTIAL_FLAG)) { +        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), +            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + +        if (objIsWrapped || othIsWrapped) { +          var objUnwrapped = objIsWrapped ? object.value() : object, +              othUnwrapped = othIsWrapped ? other.value() : other; + +          stack || (stack = new Stack); +          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); +        } +      } +      if (!isSameTag) { +        return false; +      } +      stack || (stack = new Stack); +      return equalObjects(object, other, bitmask, customizer, equalFunc, stack); +    } + +    /** +     * The base implementation of `_.isMap` without Node.js optimizations. +     * +     * @private +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is a map, else `false`. +     */ +    function baseIsMap(value) { +      return isObjectLike(value) && getTag(value) == mapTag; +    } + +    /** +     * The base implementation of `_.isMatch` without support for iteratee shorthands. +     * +     * @private +     * @param {Object} object The object to inspect. +     * @param {Object} source The object of property values to match. +     * @param {Array} matchData The property names, values, and compare flags to match. +     * @param {Function} [customizer] The function to customize comparisons. +     * @returns {boolean} Returns `true` if `object` is a match, else `false`. +     */ +    function baseIsMatch(object, source, matchData, customizer) { +      var index = matchData.length, +          length = index, +          noCustomizer = !customizer; + +      if (object == null) { +        return !length; +      } +      object = Object(object); +      while (index--) { +        var data = matchData[index]; +        if ((noCustomizer && data[2]) +              ? data[1] !== object[data[0]] +              : !(data[0] in object) +            ) { +          return false; +        } +      } +      while (++index < length) { +        data = matchData[index]; +        var key = data[0], +            objValue = object[key], +            srcValue = data[1]; + +        if (noCustomizer && data[2]) { +          if (objValue === undefined && !(key in object)) { +            return false; +          } +        } else { +          var stack = new Stack; +          if (customizer) { +            var result = customizer(objValue, srcValue, key, object, source, stack); +          } +          if (!(result === undefined +                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) +                : result +              )) { +            return false; +          } +        } +      } +      return true; +    } + +    /** +     * The base implementation of `_.isNative` without bad shim checks. +     * +     * @private +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is a native function, +     *  else `false`. +     */ +    function baseIsNative(value) { +      if (!isObject(value) || isMasked(value)) { +        return false; +      } +      var pattern = isFunction(value) ? reIsNative : reIsHostCtor; +      return pattern.test(toSource(value)); +    } + +    /** +     * The base implementation of `_.isRegExp` without Node.js optimizations. +     * +     * @private +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. +     */ +    function baseIsRegExp(value) { +      return isObjectLike(value) && baseGetTag(value) == regexpTag; +    } + +    /** +     * The base implementation of `_.isSet` without Node.js optimizations. +     * +     * @private +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is a set, else `false`. +     */ +    function baseIsSet(value) { +      return isObjectLike(value) && getTag(value) == setTag; +    } + +    /** +     * The base implementation of `_.isTypedArray` without Node.js optimizations. +     * +     * @private +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. +     */ +    function baseIsTypedArray(value) { +      return isObjectLike(value) && +        isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +    } + +    /** +     * The base implementation of `_.iteratee`. +     * +     * @private +     * @param {*} [value=_.identity] The value to convert to an iteratee. +     * @returns {Function} Returns the iteratee. +     */ +    function baseIteratee(value) { +      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. +      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. +      if (typeof value == 'function') { +        return value; +      } +      if (value == null) { +        return identity; +      } +      if (typeof value == 'object') { +        return isArray(value) +          ? baseMatchesProperty(value[0], value[1]) +          : baseMatches(value); +      } +      return property(value); +    } + +    /** +     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. +     * +     * @private +     * @param {Object} object The object to query. +     * @returns {Array} Returns the array of property names. +     */ +    function baseKeys(object) { +      if (!isPrototype(object)) { +        return nativeKeys(object); +      } +      var result = []; +      for (var key in Object(object)) { +        if (hasOwnProperty.call(object, key) && key != 'constructor') { +          result.push(key); +        } +      } +      return result; +    } + +    /** +     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. +     * +     * @private +     * @param {Object} object The object to query. +     * @returns {Array} Returns the array of property names. +     */ +    function baseKeysIn(object) { +      if (!isObject(object)) { +        return nativeKeysIn(object); +      } +      var isProto = isPrototype(object), +          result = []; + +      for (var key in object) { +        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { +          result.push(key); +        } +      } +      return result; +    } + +    /** +     * The base implementation of `_.lt` which doesn't coerce arguments. +     * +     * @private +     * @param {*} value The value to compare. +     * @param {*} other The other value to compare. +     * @returns {boolean} Returns `true` if `value` is less than `other`, +     *  else `false`. +     */ +    function baseLt(value, other) { +      return value < other; +    } + +    /** +     * The base implementation of `_.map` without support for iteratee shorthands. +     * +     * @private +     * @param {Array|Object} collection The collection to iterate over. +     * @param {Function} iteratee The function invoked per iteration. +     * @returns {Array} Returns the new mapped array. +     */ +    function baseMap(collection, iteratee) { +      var index = -1, +          result = isArrayLike(collection) ? Array(collection.length) : []; + +      baseEach(collection, function(value, key, collection) { +        result[++index] = iteratee(value, key, collection); +      }); +      return result; +    } + +    /** +     * The base implementation of `_.matches` which doesn't clone `source`. +     * +     * @private +     * @param {Object} source The object of property values to match. +     * @returns {Function} Returns the new spec function. +     */ +    function baseMatches(source) { +      var matchData = getMatchData(source); +      if (matchData.length == 1 && matchData[0][2]) { +        return matchesStrictComparable(matchData[0][0], matchData[0][1]); +      } +      return function(object) { +        return object === source || baseIsMatch(object, source, matchData); +      }; +    } + +    /** +     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. +     * +     * @private +     * @param {string} path The path of the property to get. +     * @param {*} srcValue The value to match. +     * @returns {Function} Returns the new spec function. +     */ +    function baseMatchesProperty(path, srcValue) { +      if (isKey(path) && isStrictComparable(srcValue)) { +        return matchesStrictComparable(toKey(path), srcValue); +      } +      return function(object) { +        var objValue = get(object, path); +        return (objValue === undefined && objValue === srcValue) +          ? hasIn(object, path) +          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); +      }; +    } + +    /** +     * The base implementation of `_.merge` without support for multiple sources. +     * +     * @private +     * @param {Object} object The destination object. +     * @param {Object} source The source object. +     * @param {number} srcIndex The index of `source`. +     * @param {Function} [customizer] The function to customize merged values. +     * @param {Object} [stack] Tracks traversed source values and their merged +     *  counterparts. +     */ +    function baseMerge(object, source, srcIndex, customizer, stack) { +      if (object === source) { +        return; +      } +      baseFor(source, function(srcValue, key) { +        stack || (stack = new Stack); +        if (isObject(srcValue)) { +          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); +        } +        else { +          var newValue = customizer +            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) +            : undefined; + +          if (newValue === undefined) { +            newValue = srcValue; +          } +          assignMergeValue(object, key, newValue); +        } +      }, keysIn); +    } + +    /** +     * A specialized version of `baseMerge` for arrays and objects which performs +     * deep merges and tracks traversed objects enabling objects with circular +     * references to be merged. +     * +     * @private +     * @param {Object} object The destination object. +     * @param {Object} source The source object. +     * @param {string} key The key of the value to merge. +     * @param {number} srcIndex The index of `source`. +     * @param {Function} mergeFunc The function to merge values. +     * @param {Function} [customizer] The function to customize assigned values. +     * @param {Object} [stack] Tracks traversed source values and their merged +     *  counterparts. +     */ +    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { +      var objValue = safeGet(object, key), +          srcValue = safeGet(source, key), +          stacked = stack.get(srcValue); + +      if (stacked) { +        assignMergeValue(object, key, stacked); +        return; +      } +      var newValue = customizer +        ? customizer(objValue, srcValue, (key + ''), object, source, stack) +        : undefined; + +      var isCommon = newValue === undefined; + +      if (isCommon) { +        var isArr = isArray(srcValue), +            isBuff = !isArr && isBuffer(srcValue), +            isTyped = !isArr && !isBuff && isTypedArray(srcValue); + +        newValue = srcValue; +        if (isArr || isBuff || isTyped) { +          if (isArray(objValue)) { +            newValue = objValue; +          } +          else if (isArrayLikeObject(objValue)) { +            newValue = copyArray(objValue); +          } +          else if (isBuff) { +            isCommon = false; +            newValue = cloneBuffer(srcValue, true); +          } +          else if (isTyped) { +            isCommon = false; +            newValue = cloneTypedArray(srcValue, true); +          } +          else { +            newValue = []; +          } +        } +        else if (isPlainObject(srcValue) || isArguments(srcValue)) { +          newValue = objValue; +          if (isArguments(objValue)) { +            newValue = toPlainObject(objValue); +          } +          else if (!isObject(objValue) || isFunction(objValue)) { +            newValue = initCloneObject(srcValue); +          } +        } +        else { +          isCommon = false; +        } +      } +      if (isCommon) { +        // Recursively merge objects and arrays (susceptible to call stack limits). +        stack.set(srcValue, newValue); +        mergeFunc(newValue, srcValue, srcIndex, customizer, stack); +        stack['delete'](srcValue); +      } +      assignMergeValue(object, key, newValue); +    } + +    /** +     * The base implementation of `_.nth` which doesn't coerce arguments. +     * +     * @private +     * @param {Array} array The array to query. +     * @param {number} n The index of the element to return. +     * @returns {*} Returns the nth element of `array`. +     */ +    function baseNth(array, n) { +      var length = array.length; +      if (!length) { +        return; +      } +      n += n < 0 ? length : 0; +      return isIndex(n, length) ? array[n] : undefined; +    } + +    /** +     * The base implementation of `_.orderBy` without param guards. +     * +     * @private +     * @param {Array|Object} collection The collection to iterate over. +     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. +     * @param {string[]} orders The sort orders of `iteratees`. +     * @returns {Array} Returns the new sorted array. +     */ +    function baseOrderBy(collection, iteratees, orders) { +      if (iteratees.length) { +        iteratees = arrayMap(iteratees, function(iteratee) { +          if (isArray(iteratee)) { +            return function(value) { +              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee); +            } +          } +          return iteratee; +        }); +      } else { +        iteratees = [identity]; +      } + +      var index = -1; +      iteratees = arrayMap(iteratees, baseUnary(getIteratee())); + +      var result = baseMap(collection, function(value, key, collection) { +        var criteria = arrayMap(iteratees, function(iteratee) { +          return iteratee(value); +        }); +        return { 'criteria': criteria, 'index': ++index, 'value': value }; +      }); + +      return baseSortBy(result, function(object, other) { +        return compareMultiple(object, other, orders); +      }); +    } + +    /** +     * The base implementation of `_.pick` without support for individual +     * property identifiers. +     * +     * @private +     * @param {Object} object The source object. +     * @param {string[]} paths The property paths to pick. +     * @returns {Object} Returns the new object. +     */ +    function basePick(object, paths) { +      return basePickBy(object, paths, function(value, path) { +        return hasIn(object, path); +      }); +    } + +    /** +     * The base implementation of  `_.pickBy` without support for iteratee shorthands. +     * +     * @private +     * @param {Object} object The source object. +     * @param {string[]} paths The property paths to pick. +     * @param {Function} predicate The function invoked per property. +     * @returns {Object} Returns the new object. +     */ +    function basePickBy(object, paths, predicate) { +      var index = -1, +          length = paths.length, +          result = {}; + +      while (++index < length) { +        var path = paths[index], +            value = baseGet(object, path); + +        if (predicate(value, path)) { +          baseSet(result, castPath(path, object), value); +        } +      } +      return result; +    } + +    /** +     * A specialized version of `baseProperty` which supports deep paths. +     * +     * @private +     * @param {Array|string} path The path of the property to get. +     * @returns {Function} Returns the new accessor function. +     */ +    function basePropertyDeep(path) { +      return function(object) { +        return baseGet(object, path); +      }; +    } + +    /** +     * The base implementation of `_.pullAllBy` without support for iteratee +     * shorthands. +     * +     * @private +     * @param {Array} array The array to modify. +     * @param {Array} values The values to remove. +     * @param {Function} [iteratee] The iteratee invoked per element. +     * @param {Function} [comparator] The comparator invoked per element. +     * @returns {Array} Returns `array`. +     */ +    function basePullAll(array, values, iteratee, comparator) { +      var indexOf = comparator ? baseIndexOfWith : baseIndexOf, +          index = -1, +          length = values.length, +          seen = array; + +      if (array === values) { +        values = copyArray(values); +      } +      if (iteratee) { +        seen = arrayMap(array, baseUnary(iteratee)); +      } +      while (++index < length) { +        var fromIndex = 0, +            value = values[index], +            computed = iteratee ? iteratee(value) : value; + +        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { +          if (seen !== array) { +            splice.call(seen, fromIndex, 1); +          } +          splice.call(array, fromIndex, 1); +        } +      } +      return array; +    } + +    /** +     * The base implementation of `_.pullAt` without support for individual +     * indexes or capturing the removed elements. +     * +     * @private +     * @param {Array} array The array to modify. +     * @param {number[]} indexes The indexes of elements to remove. +     * @returns {Array} Returns `array`. +     */ +    function basePullAt(array, indexes) { +      var length = array ? indexes.length : 0, +          lastIndex = length - 1; + +      while (length--) { +        var index = indexes[length]; +        if (length == lastIndex || index !== previous) { +          var previous = index; +          if (isIndex(index)) { +            splice.call(array, index, 1); +          } else { +            baseUnset(array, index); +          } +        } +      } +      return array; +    } + +    /** +     * The base implementation of `_.random` without support for returning +     * floating-point numbers. +     * +     * @private +     * @param {number} lower The lower bound. +     * @param {number} upper The upper bound. +     * @returns {number} Returns the random number. +     */ +    function baseRandom(lower, upper) { +      return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); +    } + +    /** +     * The base implementation of `_.range` and `_.rangeRight` which doesn't +     * coerce arguments. +     * +     * @private +     * @param {number} start The start of the range. +     * @param {number} end The end of the range. +     * @param {number} step The value to increment or decrement by. +     * @param {boolean} [fromRight] Specify iterating from right to left. +     * @returns {Array} Returns the range of numbers. +     */ +    function baseRange(start, end, step, fromRight) { +      var index = -1, +          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), +          result = Array(length); + +      while (length--) { +        result[fromRight ? length : ++index] = start; +        start += step; +      } +      return result; +    } + +    /** +     * The base implementation of `_.repeat` which doesn't coerce arguments. +     * +     * @private +     * @param {string} string The string to repeat. +     * @param {number} n The number of times to repeat the string. +     * @returns {string} Returns the repeated string. +     */ +    function baseRepeat(string, n) { +      var result = ''; +      if (!string || n < 1 || n > MAX_SAFE_INTEGER) { +        return result; +      } +      // Leverage the exponentiation by squaring algorithm for a faster repeat. +      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. +      do { +        if (n % 2) { +          result += string; +        } +        n = nativeFloor(n / 2); +        if (n) { +          string += string; +        } +      } while (n); + +      return result; +    } + +    /** +     * The base implementation of `_.rest` which doesn't validate or coerce arguments. +     * +     * @private +     * @param {Function} func The function to apply a rest parameter to. +     * @param {number} [start=func.length-1] The start position of the rest parameter. +     * @returns {Function} Returns the new function. +     */ +    function baseRest(func, start) { +      return setToString(overRest(func, start, identity), func + ''); +    } + +    /** +     * The base implementation of `_.sample`. +     * +     * @private +     * @param {Array|Object} collection The collection to sample. +     * @returns {*} Returns the random element. +     */ +    function baseSample(collection) { +      return arraySample(values(collection)); +    } + +    /** +     * The base implementation of `_.sampleSize` without param guards. +     * +     * @private +     * @param {Array|Object} collection The collection to sample. +     * @param {number} n The number of elements to sample. +     * @returns {Array} Returns the random elements. +     */ +    function baseSampleSize(collection, n) { +      var array = values(collection); +      return shuffleSelf(array, baseClamp(n, 0, array.length)); +    } + +    /** +     * The base implementation of `_.set`. +     * +     * @private +     * @param {Object} object The object to modify. +     * @param {Array|string} path The path of the property to set. +     * @param {*} value The value to set. +     * @param {Function} [customizer] The function to customize path creation. +     * @returns {Object} Returns `object`. +     */ +    function baseSet(object, path, value, customizer) { +      if (!isObject(object)) { +        return object; +      } +      path = castPath(path, object); + +      var index = -1, +          length = path.length, +          lastIndex = length - 1, +          nested = object; + +      while (nested != null && ++index < length) { +        var key = toKey(path[index]), +            newValue = value; + +        if (key === '__proto__' || key === 'constructor' || key === 'prototype') { +          return object; +        } + +        if (index != lastIndex) { +          var objValue = nested[key]; +          newValue = customizer ? customizer(objValue, key, nested) : undefined; +          if (newValue === undefined) { +            newValue = isObject(objValue) +              ? objValue +              : (isIndex(path[index + 1]) ? [] : {}); +          } +        } +        assignValue(nested, key, newValue); +        nested = nested[key]; +      } +      return object; +    } + +    /** +     * The base implementation of `setData` without support for hot loop shorting. +     * +     * @private +     * @param {Function} func The function to associate metadata with. +     * @param {*} data The metadata. +     * @returns {Function} Returns `func`. +     */ +    var baseSetData = !metaMap ? identity : function(func, data) { +      metaMap.set(func, data); +      return func; +    }; + +    /** +     * The base implementation of `setToString` without support for hot loop shorting. +     * +     * @private +     * @param {Function} func The function to modify. +     * @param {Function} string The `toString` result. +     * @returns {Function} Returns `func`. +     */ +    var baseSetToString = !defineProperty ? identity : function(func, string) { +      return defineProperty(func, 'toString', { +        'configurable': true, +        'enumerable': false, +        'value': constant(string), +        'writable': true +      }); +    }; + +    /** +     * The base implementation of `_.shuffle`. +     * +     * @private +     * @param {Array|Object} collection The collection to shuffle. +     * @returns {Array} Returns the new shuffled array. +     */ +    function baseShuffle(collection) { +      return shuffleSelf(values(collection)); +    } + +    /** +     * The base implementation of `_.slice` without an iteratee call guard. +     * +     * @private +     * @param {Array} array The array to slice. +     * @param {number} [start=0] The start position. +     * @param {number} [end=array.length] The end position. +     * @returns {Array} Returns the slice of `array`. +     */ +    function baseSlice(array, start, end) { +      var index = -1, +          length = array.length; + +      if (start < 0) { +        start = -start > length ? 0 : (length + start); +      } +      end = end > length ? length : end; +      if (end < 0) { +        end += length; +      } +      length = start > end ? 0 : ((end - start) >>> 0); +      start >>>= 0; + +      var result = Array(length); +      while (++index < length) { +        result[index] = array[index + start]; +      } +      return result; +    } + +    /** +     * The base implementation of `_.some` without support for iteratee shorthands. +     * +     * @private +     * @param {Array|Object} collection The collection to iterate over. +     * @param {Function} predicate The function invoked per iteration. +     * @returns {boolean} Returns `true` if any element passes the predicate check, +     *  else `false`. +     */ +    function baseSome(collection, predicate) { +      var result; + +      baseEach(collection, function(value, index, collection) { +        result = predicate(value, index, collection); +        return !result; +      }); +      return !!result; +    } + +    /** +     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which +     * performs a binary search of `array` to determine the index at which `value` +     * should be inserted into `array` in order to maintain its sort order. +     * +     * @private +     * @param {Array} array The sorted array to inspect. +     * @param {*} value The value to evaluate. +     * @param {boolean} [retHighest] Specify returning the highest qualified index. +     * @returns {number} Returns the index at which `value` should be inserted +     *  into `array`. +     */ +    function baseSortedIndex(array, value, retHighest) { +      var low = 0, +          high = array == null ? low : array.length; + +      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { +        while (low < high) { +          var mid = (low + high) >>> 1, +              computed = array[mid]; + +          if (computed !== null && !isSymbol(computed) && +              (retHighest ? (computed <= value) : (computed < value))) { +            low = mid + 1; +          } else { +            high = mid; +          } +        } +        return high; +      } +      return baseSortedIndexBy(array, value, identity, retHighest); +    } + +    /** +     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` +     * which invokes `iteratee` for `value` and each element of `array` to compute +     * their sort ranking. The iteratee is invoked with one argument; (value). +     * +     * @private +     * @param {Array} array The sorted array to inspect. +     * @param {*} value The value to evaluate. +     * @param {Function} iteratee The iteratee invoked per element. +     * @param {boolean} [retHighest] Specify returning the highest qualified index. +     * @returns {number} Returns the index at which `value` should be inserted +     *  into `array`. +     */ +    function baseSortedIndexBy(array, value, iteratee, retHighest) { +      var low = 0, +          high = array == null ? 0 : array.length; +      if (high === 0) { +        return 0; +      } + +      value = iteratee(value); +      var valIsNaN = value !== value, +          valIsNull = value === null, +          valIsSymbol = isSymbol(value), +          valIsUndefined = value === undefined; + +      while (low < high) { +        var mid = nativeFloor((low + high) / 2), +            computed = iteratee(array[mid]), +            othIsDefined = computed !== undefined, +            othIsNull = computed === null, +            othIsReflexive = computed === computed, +            othIsSymbol = isSymbol(computed); + +        if (valIsNaN) { +          var setLow = retHighest || othIsReflexive; +        } else if (valIsUndefined) { +          setLow = othIsReflexive && (retHighest || othIsDefined); +        } else if (valIsNull) { +          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); +        } else if (valIsSymbol) { +          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); +        } else if (othIsNull || othIsSymbol) { +          setLow = false; +        } else { +          setLow = retHighest ? (computed <= value) : (computed < value); +        } +        if (setLow) { +          low = mid + 1; +        } else { +          high = mid; +        } +      } +      return nativeMin(high, MAX_ARRAY_INDEX); +    } + +    /** +     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without +     * support for iteratee shorthands. +     * +     * @private +     * @param {Array} array The array to inspect. +     * @param {Function} [iteratee] The iteratee invoked per element. +     * @returns {Array} Returns the new duplicate free array. +     */ +    function baseSortedUniq(array, iteratee) { +      var index = -1, +          length = array.length, +          resIndex = 0, +          result = []; + +      while (++index < length) { +        var value = array[index], +            computed = iteratee ? iteratee(value) : value; + +        if (!index || !eq(computed, seen)) { +          var seen = computed; +          result[resIndex++] = value === 0 ? 0 : value; +        } +      } +      return result; +    } + +    /** +     * The base implementation of `_.toNumber` which doesn't ensure correct +     * conversions of binary, hexadecimal, or octal string values. +     * +     * @private +     * @param {*} value The value to process. +     * @returns {number} Returns the number. +     */ +    function baseToNumber(value) { +      if (typeof value == 'number') { +        return value; +      } +      if (isSymbol(value)) { +        return NAN; +      } +      return +value; +    } + +    /** +     * The base implementation of `_.toString` which doesn't convert nullish +     * values to empty strings. +     * +     * @private +     * @param {*} value The value to process. +     * @returns {string} Returns the string. +     */ +    function baseToString(value) { +      // Exit early for strings to avoid a performance hit in some environments. +      if (typeof value == 'string') { +        return value; +      } +      if (isArray(value)) { +        // Recursively convert values (susceptible to call stack limits). +        return arrayMap(value, baseToString) + ''; +      } +      if (isSymbol(value)) { +        return symbolToString ? symbolToString.call(value) : ''; +      } +      var result = (value + ''); +      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +    } + +    /** +     * The base implementation of `_.uniqBy` without support for iteratee shorthands. +     * +     * @private +     * @param {Array} array The array to inspect. +     * @param {Function} [iteratee] The iteratee invoked per element. +     * @param {Function} [comparator] The comparator invoked per element. +     * @returns {Array} Returns the new duplicate free array. +     */ +    function baseUniq(array, iteratee, comparator) { +      var index = -1, +          includes = arrayIncludes, +          length = array.length, +          isCommon = true, +          result = [], +          seen = result; + +      if (comparator) { +        isCommon = false; +        includes = arrayIncludesWith; +      } +      else if (length >= LARGE_ARRAY_SIZE) { +        var set = iteratee ? null : createSet(array); +        if (set) { +          return setToArray(set); +        } +        isCommon = false; +        includes = cacheHas; +        seen = new SetCache; +      } +      else { +        seen = iteratee ? [] : result; +      } +      outer: +      while (++index < length) { +        var value = array[index], +            computed = iteratee ? iteratee(value) : value; + +        value = (comparator || value !== 0) ? value : 0; +        if (isCommon && computed === computed) { +          var seenIndex = seen.length; +          while (seenIndex--) { +            if (seen[seenIndex] === computed) { +              continue outer; +            } +          } +          if (iteratee) { +            seen.push(computed); +          } +          result.push(value); +        } +        else if (!includes(seen, computed, comparator)) { +          if (seen !== result) { +            seen.push(computed); +          } +          result.push(value); +        } +      } +      return result; +    } + +    /** +     * The base implementation of `_.unset`. +     * +     * @private +     * @param {Object} object The object to modify. +     * @param {Array|string} path The property path to unset. +     * @returns {boolean} Returns `true` if the property is deleted, else `false`. +     */ +    function baseUnset(object, path) { +      path = castPath(path, object); +      object = parent(object, path); +      return object == null || delete object[toKey(last(path))]; +    } + +    /** +     * The base implementation of `_.update`. +     * +     * @private +     * @param {Object} object The object to modify. +     * @param {Array|string} path The path of the property to update. +     * @param {Function} updater The function to produce the updated value. +     * @param {Function} [customizer] The function to customize path creation. +     * @returns {Object} Returns `object`. +     */ +    function baseUpdate(object, path, updater, customizer) { +      return baseSet(object, path, updater(baseGet(object, path)), customizer); +    } + +    /** +     * The base implementation of methods like `_.dropWhile` and `_.takeWhile` +     * without support for iteratee shorthands. +     * +     * @private +     * @param {Array} array The array to query. +     * @param {Function} predicate The function invoked per iteration. +     * @param {boolean} [isDrop] Specify dropping elements instead of taking them. +     * @param {boolean} [fromRight] Specify iterating from right to left. +     * @returns {Array} Returns the slice of `array`. +     */ +    function baseWhile(array, predicate, isDrop, fromRight) { +      var length = array.length, +          index = fromRight ? length : -1; + +      while ((fromRight ? index-- : ++index < length) && +        predicate(array[index], index, array)) {} + +      return isDrop +        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) +        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); +    } + +    /** +     * The base implementation of `wrapperValue` which returns the result of +     * performing a sequence of actions on the unwrapped `value`, where each +     * successive action is supplied the return value of the previous. +     * +     * @private +     * @param {*} value The unwrapped value. +     * @param {Array} actions Actions to perform to resolve the unwrapped value. +     * @returns {*} Returns the resolved value. +     */ +    function baseWrapperValue(value, actions) { +      var result = value; +      if (result instanceof LazyWrapper) { +        result = result.value(); +      } +      return arrayReduce(actions, function(result, action) { +        return action.func.apply(action.thisArg, arrayPush([result], action.args)); +      }, result); +    } + +    /** +     * The base implementation of methods like `_.xor`, without support for +     * iteratee shorthands, that accepts an array of arrays to inspect. +     * +     * @private +     * @param {Array} arrays The arrays to inspect. +     * @param {Function} [iteratee] The iteratee invoked per element. +     * @param {Function} [comparator] The comparator invoked per element. +     * @returns {Array} Returns the new array of values. +     */ +    function baseXor(arrays, iteratee, comparator) { +      var length = arrays.length; +      if (length < 2) { +        return length ? baseUniq(arrays[0]) : []; +      } +      var index = -1, +          result = Array(length); + +      while (++index < length) { +        var array = arrays[index], +            othIndex = -1; + +        while (++othIndex < length) { +          if (othIndex != index) { +            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); +          } +        } +      } +      return baseUniq(baseFlatten(result, 1), iteratee, comparator); +    } + +    /** +     * This base implementation of `_.zipObject` which assigns values using `assignFunc`. +     * +     * @private +     * @param {Array} props The property identifiers. +     * @param {Array} values The property values. +     * @param {Function} assignFunc The function to assign values. +     * @returns {Object} Returns the new object. +     */ +    function baseZipObject(props, values, assignFunc) { +      var index = -1, +          length = props.length, +          valsLength = values.length, +          result = {}; + +      while (++index < length) { +        var value = index < valsLength ? values[index] : undefined; +        assignFunc(result, props[index], value); +      } +      return result; +    } + +    /** +     * Casts `value` to an empty array if it's not an array like object. +     * +     * @private +     * @param {*} value The value to inspect. +     * @returns {Array|Object} Returns the cast array-like object. +     */ +    function castArrayLikeObject(value) { +      return isArrayLikeObject(value) ? value : []; +    } + +    /** +     * Casts `value` to `identity` if it's not a function. +     * +     * @private +     * @param {*} value The value to inspect. +     * @returns {Function} Returns cast function. +     */ +    function castFunction(value) { +      return typeof value == 'function' ? value : identity; +    } + +    /** +     * Casts `value` to a path array if it's not one. +     * +     * @private +     * @param {*} value The value to inspect. +     * @param {Object} [object] The object to query keys on. +     * @returns {Array} Returns the cast property path array. +     */ +    function castPath(value, object) { +      if (isArray(value)) { +        return value; +      } +      return isKey(value, object) ? [value] : stringToPath(toString(value)); +    } + +    /** +     * A `baseRest` alias which can be replaced with `identity` by module +     * replacement plugins. +     * +     * @private +     * @type {Function} +     * @param {Function} func The function to apply a rest parameter to. +     * @returns {Function} Returns the new function. +     */ +    var castRest = baseRest; + +    /** +     * Casts `array` to a slice if it's needed. +     * +     * @private +     * @param {Array} array The array to inspect. +     * @param {number} start The start position. +     * @param {number} [end=array.length] The end position. +     * @returns {Array} Returns the cast slice. +     */ +    function castSlice(array, start, end) { +      var length = array.length; +      end = end === undefined ? length : end; +      return (!start && end >= length) ? array : baseSlice(array, start, end); +    } + +    /** +     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). +     * +     * @private +     * @param {number|Object} id The timer id or timeout object of the timer to clear. +     */ +    var clearTimeout = ctxClearTimeout || function(id) { +      return root.clearTimeout(id); +    }; + +    /** +     * Creates a clone of  `buffer`. +     * +     * @private +     * @param {Buffer} buffer The buffer to clone. +     * @param {boolean} [isDeep] Specify a deep clone. +     * @returns {Buffer} Returns the cloned buffer. +     */ +    function cloneBuffer(buffer, isDeep) { +      if (isDeep) { +        return buffer.slice(); +      } +      var length = buffer.length, +          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + +      buffer.copy(result); +      return result; +    } + +    /** +     * Creates a clone of `arrayBuffer`. +     * +     * @private +     * @param {ArrayBuffer} arrayBuffer The array buffer to clone. +     * @returns {ArrayBuffer} Returns the cloned array buffer. +     */ +    function cloneArrayBuffer(arrayBuffer) { +      var result = new arrayBuffer.constructor(arrayBuffer.byteLength); +      new Uint8Array(result).set(new Uint8Array(arrayBuffer)); +      return result; +    } + +    /** +     * Creates a clone of `dataView`. +     * +     * @private +     * @param {Object} dataView The data view to clone. +     * @param {boolean} [isDeep] Specify a deep clone. +     * @returns {Object} Returns the cloned data view. +     */ +    function cloneDataView(dataView, isDeep) { +      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; +      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +    } + +    /** +     * Creates a clone of `regexp`. +     * +     * @private +     * @param {Object} regexp The regexp to clone. +     * @returns {Object} Returns the cloned regexp. +     */ +    function cloneRegExp(regexp) { +      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); +      result.lastIndex = regexp.lastIndex; +      return result; +    } + +    /** +     * Creates a clone of the `symbol` object. +     * +     * @private +     * @param {Object} symbol The symbol object to clone. +     * @returns {Object} Returns the cloned symbol object. +     */ +    function cloneSymbol(symbol) { +      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +    } + +    /** +     * Creates a clone of `typedArray`. +     * +     * @private +     * @param {Object} typedArray The typed array to clone. +     * @param {boolean} [isDeep] Specify a deep clone. +     * @returns {Object} Returns the cloned typed array. +     */ +    function cloneTypedArray(typedArray, isDeep) { +      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; +      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); +    } + +    /** +     * Compares values to sort them in ascending order. +     * +     * @private +     * @param {*} value The value to compare. +     * @param {*} other The other value to compare. +     * @returns {number} Returns the sort order indicator for `value`. +     */ +    function compareAscending(value, other) { +      if (value !== other) { +        var valIsDefined = value !== undefined, +            valIsNull = value === null, +            valIsReflexive = value === value, +            valIsSymbol = isSymbol(value); + +        var othIsDefined = other !== undefined, +            othIsNull = other === null, +            othIsReflexive = other === other, +            othIsSymbol = isSymbol(other); + +        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || +            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || +            (valIsNull && othIsDefined && othIsReflexive) || +            (!valIsDefined && othIsReflexive) || +            !valIsReflexive) { +          return 1; +        } +        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || +            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || +            (othIsNull && valIsDefined && valIsReflexive) || +            (!othIsDefined && valIsReflexive) || +            !othIsReflexive) { +          return -1; +        } +      } +      return 0; +    } + +    /** +     * Used by `_.orderBy` to compare multiple properties of a value to another +     * and stable sort them. +     * +     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, +     * specify an order of "desc" for descending or "asc" for ascending sort order +     * of corresponding values. +     * +     * @private +     * @param {Object} object The object to compare. +     * @param {Object} other The other object to compare. +     * @param {boolean[]|string[]} orders The order to sort by for each property. +     * @returns {number} Returns the sort order indicator for `object`. +     */ +    function compareMultiple(object, other, orders) { +      var index = -1, +          objCriteria = object.criteria, +          othCriteria = other.criteria, +          length = objCriteria.length, +          ordersLength = orders.length; + +      while (++index < length) { +        var result = compareAscending(objCriteria[index], othCriteria[index]); +        if (result) { +          if (index >= ordersLength) { +            return result; +          } +          var order = orders[index]; +          return result * (order == 'desc' ? -1 : 1); +        } +      } +      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications +      // that causes it, under certain circumstances, to provide the same value for +      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 +      // for more details. +      // +      // This also ensures a stable sort in V8 and other engines. +      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. +      return object.index - other.index; +    } + +    /** +     * Creates an array that is the composition of partially applied arguments, +     * placeholders, and provided arguments into a single array of arguments. +     * +     * @private +     * @param {Array} args The provided arguments. +     * @param {Array} partials The arguments to prepend to those provided. +     * @param {Array} holders The `partials` placeholder indexes. +     * @params {boolean} [isCurried] Specify composing for a curried function. +     * @returns {Array} Returns the new array of composed arguments. +     */ +    function composeArgs(args, partials, holders, isCurried) { +      var argsIndex = -1, +          argsLength = args.length, +          holdersLength = holders.length, +          leftIndex = -1, +          leftLength = partials.length, +          rangeLength = nativeMax(argsLength - holdersLength, 0), +          result = Array(leftLength + rangeLength), +          isUncurried = !isCurried; + +      while (++leftIndex < leftLength) { +        result[leftIndex] = partials[leftIndex]; +      } +      while (++argsIndex < holdersLength) { +        if (isUncurried || argsIndex < argsLength) { +          result[holders[argsIndex]] = args[argsIndex]; +        } +      } +      while (rangeLength--) { +        result[leftIndex++] = args[argsIndex++]; +      } +      return result; +    } + +    /** +     * This function is like `composeArgs` except that the arguments composition +     * is tailored for `_.partialRight`. +     * +     * @private +     * @param {Array} args The provided arguments. +     * @param {Array} partials The arguments to append to those provided. +     * @param {Array} holders The `partials` placeholder indexes. +     * @params {boolean} [isCurried] Specify composing for a curried function. +     * @returns {Array} Returns the new array of composed arguments. +     */ +    function composeArgsRight(args, partials, holders, isCurried) { +      var argsIndex = -1, +          argsLength = args.length, +          holdersIndex = -1, +          holdersLength = holders.length, +          rightIndex = -1, +          rightLength = partials.length, +          rangeLength = nativeMax(argsLength - holdersLength, 0), +          result = Array(rangeLength + rightLength), +          isUncurried = !isCurried; + +      while (++argsIndex < rangeLength) { +        result[argsIndex] = args[argsIndex]; +      } +      var offset = argsIndex; +      while (++rightIndex < rightLength) { +        result[offset + rightIndex] = partials[rightIndex]; +      } +      while (++holdersIndex < holdersLength) { +        if (isUncurried || argsIndex < argsLength) { +          result[offset + holders[holdersIndex]] = args[argsIndex++]; +        } +      } +      return result; +    } + +    /** +     * Copies the values of `source` to `array`. +     * +     * @private +     * @param {Array} source The array to copy values from. +     * @param {Array} [array=[]] The array to copy values to. +     * @returns {Array} Returns `array`. +     */ +    function copyArray(source, array) { +      var index = -1, +          length = source.length; + +      array || (array = Array(length)); +      while (++index < length) { +        array[index] = source[index]; +      } +      return array; +    } + +    /** +     * Copies properties of `source` to `object`. +     * +     * @private +     * @param {Object} source The object to copy properties from. +     * @param {Array} props The property identifiers to copy. +     * @param {Object} [object={}] The object to copy properties to. +     * @param {Function} [customizer] The function to customize copied values. +     * @returns {Object} Returns `object`. +     */ +    function copyObject(source, props, object, customizer) { +      var isNew = !object; +      object || (object = {}); + +      var index = -1, +          length = props.length; + +      while (++index < length) { +        var key = props[index]; + +        var newValue = customizer +          ? customizer(object[key], source[key], key, object, source) +          : undefined; + +        if (newValue === undefined) { +          newValue = source[key]; +        } +        if (isNew) { +          baseAssignValue(object, key, newValue); +        } else { +          assignValue(object, key, newValue); +        } +      } +      return object; +    } + +    /** +     * Copies own symbols of `source` to `object`. +     * +     * @private +     * @param {Object} source The object to copy symbols from. +     * @param {Object} [object={}] The object to copy symbols to. +     * @returns {Object} Returns `object`. +     */ +    function copySymbols(source, object) { +      return copyObject(source, getSymbols(source), object); +    } + +    /** +     * Copies own and inherited symbols of `source` to `object`. +     * +     * @private +     * @param {Object} source The object to copy symbols from. +     * @param {Object} [object={}] The object to copy symbols to. +     * @returns {Object} Returns `object`. +     */ +    function copySymbolsIn(source, object) { +      return copyObject(source, getSymbolsIn(source), object); +    } + +    /** +     * Creates a function like `_.groupBy`. +     * +     * @private +     * @param {Function} setter The function to set accumulator values. +     * @param {Function} [initializer] The accumulator object initializer. +     * @returns {Function} Returns the new aggregator function. +     */ +    function createAggregator(setter, initializer) { +      return function(collection, iteratee) { +        var func = isArray(collection) ? arrayAggregator : baseAggregator, +            accumulator = initializer ? initializer() : {}; + +        return func(collection, setter, getIteratee(iteratee, 2), accumulator); +      }; +    } + +    /** +     * Creates a function like `_.assign`. +     * +     * @private +     * @param {Function} assigner The function to assign values. +     * @returns {Function} Returns the new assigner function. +     */ +    function createAssigner(assigner) { +      return baseRest(function(object, sources) { +        var index = -1, +            length = sources.length, +            customizer = length > 1 ? sources[length - 1] : undefined, +            guard = length > 2 ? sources[2] : undefined; + +        customizer = (assigner.length > 3 && typeof customizer == 'function') +          ? (length--, customizer) +          : undefined; + +        if (guard && isIterateeCall(sources[0], sources[1], guard)) { +          customizer = length < 3 ? undefined : customizer; +          length = 1; +        } +        object = Object(object); +        while (++index < length) { +          var source = sources[index]; +          if (source) { +            assigner(object, source, index, customizer); +          } +        } +        return object; +      }); +    } + +    /** +     * Creates a `baseEach` or `baseEachRight` function. +     * +     * @private +     * @param {Function} eachFunc The function to iterate over a collection. +     * @param {boolean} [fromRight] Specify iterating from right to left. +     * @returns {Function} Returns the new base function. +     */ +    function createBaseEach(eachFunc, fromRight) { +      return function(collection, iteratee) { +        if (collection == null) { +          return collection; +        } +        if (!isArrayLike(collection)) { +          return eachFunc(collection, iteratee); +        } +        var length = collection.length, +            index = fromRight ? length : -1, +            iterable = Object(collection); + +        while ((fromRight ? index-- : ++index < length)) { +          if (iteratee(iterable[index], index, iterable) === false) { +            break; +          } +        } +        return collection; +      }; +    } + +    /** +     * Creates a base function for methods like `_.forIn` and `_.forOwn`. +     * +     * @private +     * @param {boolean} [fromRight] Specify iterating from right to left. +     * @returns {Function} Returns the new base function. +     */ +    function createBaseFor(fromRight) { +      return function(object, iteratee, keysFunc) { +        var index = -1, +            iterable = Object(object), +            props = keysFunc(object), +            length = props.length; + +        while (length--) { +          var key = props[fromRight ? length : ++index]; +          if (iteratee(iterable[key], key, iterable) === false) { +            break; +          } +        } +        return object; +      }; +    } + +    /** +     * Creates a function that wraps `func` to invoke it with the optional `this` +     * binding of `thisArg`. +     * +     * @private +     * @param {Function} func The function to wrap. +     * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +     * @param {*} [thisArg] The `this` binding of `func`. +     * @returns {Function} Returns the new wrapped function. +     */ +    function createBind(func, bitmask, thisArg) { +      var isBind = bitmask & WRAP_BIND_FLAG, +          Ctor = createCtor(func); + +      function wrapper() { +        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; +        return fn.apply(isBind ? thisArg : this, arguments); +      } +      return wrapper; +    } + +    /** +     * Creates a function like `_.lowerFirst`. +     * +     * @private +     * @param {string} methodName The name of the `String` case method to use. +     * @returns {Function} Returns the new case function. +     */ +    function createCaseFirst(methodName) { +      return function(string) { +        string = toString(string); + +        var strSymbols = hasUnicode(string) +          ? stringToArray(string) +          : undefined; + +        var chr = strSymbols +          ? strSymbols[0] +          : string.charAt(0); + +        var trailing = strSymbols +          ? castSlice(strSymbols, 1).join('') +          : string.slice(1); + +        return chr[methodName]() + trailing; +      }; +    } + +    /** +     * Creates a function like `_.camelCase`. +     * +     * @private +     * @param {Function} callback The function to combine each word. +     * @returns {Function} Returns the new compounder function. +     */ +    function createCompounder(callback) { +      return function(string) { +        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); +      }; +    } + +    /** +     * Creates a function that produces an instance of `Ctor` regardless of +     * whether it was invoked as part of a `new` expression or by `call` or `apply`. +     * +     * @private +     * @param {Function} Ctor The constructor to wrap. +     * @returns {Function} Returns the new wrapped function. +     */ +    function createCtor(Ctor) { +      return function() { +        // Use a `switch` statement to work with class constructors. See +        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist +        // for more details. +        var args = arguments; +        switch (args.length) { +          case 0: return new Ctor; +          case 1: return new Ctor(args[0]); +          case 2: return new Ctor(args[0], args[1]); +          case 3: return new Ctor(args[0], args[1], args[2]); +          case 4: return new Ctor(args[0], args[1], args[2], args[3]); +          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); +          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); +          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); +        } +        var thisBinding = baseCreate(Ctor.prototype), +            result = Ctor.apply(thisBinding, args); + +        // Mimic the constructor's `return` behavior. +        // See https://es5.github.io/#x13.2.2 for more details. +        return isObject(result) ? result : thisBinding; +      }; +    } + +    /** +     * Creates a function that wraps `func` to enable currying. +     * +     * @private +     * @param {Function} func The function to wrap. +     * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +     * @param {number} arity The arity of `func`. +     * @returns {Function} Returns the new wrapped function. +     */ +    function createCurry(func, bitmask, arity) { +      var Ctor = createCtor(func); + +      function wrapper() { +        var length = arguments.length, +            args = Array(length), +            index = length, +            placeholder = getHolder(wrapper); + +        while (index--) { +          args[index] = arguments[index]; +        } +        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) +          ? [] +          : replaceHolders(args, placeholder); + +        length -= holders.length; +        if (length < arity) { +          return createRecurry( +            func, bitmask, createHybrid, wrapper.placeholder, undefined, +            args, holders, undefined, undefined, arity - length); +        } +        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; +        return apply(fn, this, args); +      } +      return wrapper; +    } + +    /** +     * Creates a `_.find` or `_.findLast` function. +     * +     * @private +     * @param {Function} findIndexFunc The function to find the collection index. +     * @returns {Function} Returns the new find function. +     */ +    function createFind(findIndexFunc) { +      return function(collection, predicate, fromIndex) { +        var iterable = Object(collection); +        if (!isArrayLike(collection)) { +          var iteratee = getIteratee(predicate, 3); +          collection = keys(collection); +          predicate = function(key) { return iteratee(iterable[key], key, iterable); }; +        } +        var index = findIndexFunc(collection, predicate, fromIndex); +        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; +      }; +    } + +    /** +     * Creates a `_.flow` or `_.flowRight` function. +     * +     * @private +     * @param {boolean} [fromRight] Specify iterating from right to left. +     * @returns {Function} Returns the new flow function. +     */ +    function createFlow(fromRight) { +      return flatRest(function(funcs) { +        var length = funcs.length, +            index = length, +            prereq = LodashWrapper.prototype.thru; + +        if (fromRight) { +          funcs.reverse(); +        } +        while (index--) { +          var func = funcs[index]; +          if (typeof func != 'function') { +            throw new TypeError(FUNC_ERROR_TEXT); +          } +          if (prereq && !wrapper && getFuncName(func) == 'wrapper') { +            var wrapper = new LodashWrapper([], true); +          } +        } +        index = wrapper ? index : length; +        while (++index < length) { +          func = funcs[index]; + +          var funcName = getFuncName(func), +              data = funcName == 'wrapper' ? getData(func) : undefined; + +          if (data && isLaziable(data[0]) && +                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && +                !data[4].length && data[9] == 1 +              ) { +            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); +          } else { +            wrapper = (func.length == 1 && isLaziable(func)) +              ? wrapper[funcName]() +              : wrapper.thru(func); +          } +        } +        return function() { +          var args = arguments, +              value = args[0]; + +          if (wrapper && args.length == 1 && isArray(value)) { +            return wrapper.plant(value).value(); +          } +          var index = 0, +              result = length ? funcs[index].apply(this, args) : value; + +          while (++index < length) { +            result = funcs[index].call(this, result); +          } +          return result; +        }; +      }); +    } + +    /** +     * Creates a function that wraps `func` to invoke it with optional `this` +     * binding of `thisArg`, partial application, and currying. +     * +     * @private +     * @param {Function|string} func The function or method name to wrap. +     * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +     * @param {*} [thisArg] The `this` binding of `func`. +     * @param {Array} [partials] The arguments to prepend to those provided to +     *  the new function. +     * @param {Array} [holders] The `partials` placeholder indexes. +     * @param {Array} [partialsRight] The arguments to append to those provided +     *  to the new function. +     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. +     * @param {Array} [argPos] The argument positions of the new function. +     * @param {number} [ary] The arity cap of `func`. +     * @param {number} [arity] The arity of `func`. +     * @returns {Function} Returns the new wrapped function. +     */ +    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { +      var isAry = bitmask & WRAP_ARY_FLAG, +          isBind = bitmask & WRAP_BIND_FLAG, +          isBindKey = bitmask & WRAP_BIND_KEY_FLAG, +          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), +          isFlip = bitmask & WRAP_FLIP_FLAG, +          Ctor = isBindKey ? undefined : createCtor(func); + +      function wrapper() { +        var length = arguments.length, +            args = Array(length), +            index = length; + +        while (index--) { +          args[index] = arguments[index]; +        } +        if (isCurried) { +          var placeholder = getHolder(wrapper), +              holdersCount = countHolders(args, placeholder); +        } +        if (partials) { +          args = composeArgs(args, partials, holders, isCurried); +        } +        if (partialsRight) { +          args = composeArgsRight(args, partialsRight, holdersRight, isCurried); +        } +        length -= holdersCount; +        if (isCurried && length < arity) { +          var newHolders = replaceHolders(args, placeholder); +          return createRecurry( +            func, bitmask, createHybrid, wrapper.placeholder, thisArg, +            args, newHolders, argPos, ary, arity - length +          ); +        } +        var thisBinding = isBind ? thisArg : this, +            fn = isBindKey ? thisBinding[func] : func; + +        length = args.length; +        if (argPos) { +          args = reorder(args, argPos); +        } else if (isFlip && length > 1) { +          args.reverse(); +        } +        if (isAry && ary < length) { +          args.length = ary; +        } +        if (this && this !== root && this instanceof wrapper) { +          fn = Ctor || createCtor(fn); +        } +        return fn.apply(thisBinding, args); +      } +      return wrapper; +    } + +    /** +     * Creates a function like `_.invertBy`. +     * +     * @private +     * @param {Function} setter The function to set accumulator values. +     * @param {Function} toIteratee The function to resolve iteratees. +     * @returns {Function} Returns the new inverter function. +     */ +    function createInverter(setter, toIteratee) { +      return function(object, iteratee) { +        return baseInverter(object, setter, toIteratee(iteratee), {}); +      }; +    } + +    /** +     * Creates a function that performs a mathematical operation on two values. +     * +     * @private +     * @param {Function} operator The function to perform the operation. +     * @param {number} [defaultValue] The value used for `undefined` arguments. +     * @returns {Function} Returns the new mathematical operation function. +     */ +    function createMathOperation(operator, defaultValue) { +      return function(value, other) { +        var result; +        if (value === undefined && other === undefined) { +          return defaultValue; +        } +        if (value !== undefined) { +          result = value; +        } +        if (other !== undefined) { +          if (result === undefined) { +            return other; +          } +          if (typeof value == 'string' || typeof other == 'string') { +            value = baseToString(value); +            other = baseToString(other); +          } else { +            value = baseToNumber(value); +            other = baseToNumber(other); +          } +          result = operator(value, other); +        } +        return result; +      }; +    } + +    /** +     * Creates a function like `_.over`. +     * +     * @private +     * @param {Function} arrayFunc The function to iterate over iteratees. +     * @returns {Function} Returns the new over function. +     */ +    function createOver(arrayFunc) { +      return flatRest(function(iteratees) { +        iteratees = arrayMap(iteratees, baseUnary(getIteratee())); +        return baseRest(function(args) { +          var thisArg = this; +          return arrayFunc(iteratees, function(iteratee) { +            return apply(iteratee, thisArg, args); +          }); +        }); +      }); +    } + +    /** +     * Creates the padding for `string` based on `length`. The `chars` string +     * is truncated if the number of characters exceeds `length`. +     * +     * @private +     * @param {number} length The padding length. +     * @param {string} [chars=' '] The string used as padding. +     * @returns {string} Returns the padding for `string`. +     */ +    function createPadding(length, chars) { +      chars = chars === undefined ? ' ' : baseToString(chars); + +      var charsLength = chars.length; +      if (charsLength < 2) { +        return charsLength ? baseRepeat(chars, length) : chars; +      } +      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); +      return hasUnicode(chars) +        ? castSlice(stringToArray(result), 0, length).join('') +        : result.slice(0, length); +    } + +    /** +     * Creates a function that wraps `func` to invoke it with the `this` binding +     * of `thisArg` and `partials` prepended to the arguments it receives. +     * +     * @private +     * @param {Function} func The function to wrap. +     * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +     * @param {*} thisArg The `this` binding of `func`. +     * @param {Array} partials The arguments to prepend to those provided to +     *  the new function. +     * @returns {Function} Returns the new wrapped function. +     */ +    function createPartial(func, bitmask, thisArg, partials) { +      var isBind = bitmask & WRAP_BIND_FLAG, +          Ctor = createCtor(func); + +      function wrapper() { +        var argsIndex = -1, +            argsLength = arguments.length, +            leftIndex = -1, +            leftLength = partials.length, +            args = Array(leftLength + argsLength), +            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + +        while (++leftIndex < leftLength) { +          args[leftIndex] = partials[leftIndex]; +        } +        while (argsLength--) { +          args[leftIndex++] = arguments[++argsIndex]; +        } +        return apply(fn, isBind ? thisArg : this, args); +      } +      return wrapper; +    } + +    /** +     * Creates a `_.range` or `_.rangeRight` function. +     * +     * @private +     * @param {boolean} [fromRight] Specify iterating from right to left. +     * @returns {Function} Returns the new range function. +     */ +    function createRange(fromRight) { +      return function(start, end, step) { +        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { +          end = step = undefined; +        } +        // Ensure the sign of `-0` is preserved. +        start = toFinite(start); +        if (end === undefined) { +          end = start; +          start = 0; +        } else { +          end = toFinite(end); +        } +        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); +        return baseRange(start, end, step, fromRight); +      }; +    } + +    /** +     * Creates a function that performs a relational operation on two values. +     * +     * @private +     * @param {Function} operator The function to perform the operation. +     * @returns {Function} Returns the new relational operation function. +     */ +    function createRelationalOperation(operator) { +      return function(value, other) { +        if (!(typeof value == 'string' && typeof other == 'string')) { +          value = toNumber(value); +          other = toNumber(other); +        } +        return operator(value, other); +      }; +    } + +    /** +     * Creates a function that wraps `func` to continue currying. +     * +     * @private +     * @param {Function} func The function to wrap. +     * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +     * @param {Function} wrapFunc The function to create the `func` wrapper. +     * @param {*} placeholder The placeholder value. +     * @param {*} [thisArg] The `this` binding of `func`. +     * @param {Array} [partials] The arguments to prepend to those provided to +     *  the new function. +     * @param {Array} [holders] The `partials` placeholder indexes. +     * @param {Array} [argPos] The argument positions of the new function. +     * @param {number} [ary] The arity cap of `func`. +     * @param {number} [arity] The arity of `func`. +     * @returns {Function} Returns the new wrapped function. +     */ +    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { +      var isCurry = bitmask & WRAP_CURRY_FLAG, +          newHolders = isCurry ? holders : undefined, +          newHoldersRight = isCurry ? undefined : holders, +          newPartials = isCurry ? partials : undefined, +          newPartialsRight = isCurry ? undefined : partials; + +      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); +      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); + +      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { +        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); +      } +      var newData = [ +        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, +        newHoldersRight, argPos, ary, arity +      ]; + +      var result = wrapFunc.apply(undefined, newData); +      if (isLaziable(func)) { +        setData(result, newData); +      } +      result.placeholder = placeholder; +      return setWrapToString(result, func, bitmask); +    } + +    /** +     * Creates a function like `_.round`. +     * +     * @private +     * @param {string} methodName The name of the `Math` method to use when rounding. +     * @returns {Function} Returns the new round function. +     */ +    function createRound(methodName) { +      var func = Math[methodName]; +      return function(number, precision) { +        number = toNumber(number); +        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); +        if (precision && nativeIsFinite(number)) { +          // Shift with exponential notation to avoid floating-point issues. +          // See [MDN](https://mdn.io/round#Examples) for more details. +          var pair = (toString(number) + 'e').split('e'), +              value = func(pair[0] + 'e' + (+pair[1] + precision)); + +          pair = (toString(value) + 'e').split('e'); +          return +(pair[0] + 'e' + (+pair[1] - precision)); +        } +        return func(number); +      }; +    } + +    /** +     * Creates a set object of `values`. +     * +     * @private +     * @param {Array} values The values to add to the set. +     * @returns {Object} Returns the new set. +     */ +    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { +      return new Set(values); +    }; + +    /** +     * Creates a `_.toPairs` or `_.toPairsIn` function. +     * +     * @private +     * @param {Function} keysFunc The function to get the keys of a given object. +     * @returns {Function} Returns the new pairs function. +     */ +    function createToPairs(keysFunc) { +      return function(object) { +        var tag = getTag(object); +        if (tag == mapTag) { +          return mapToArray(object); +        } +        if (tag == setTag) { +          return setToPairs(object); +        } +        return baseToPairs(object, keysFunc(object)); +      }; +    } + +    /** +     * Creates a function that either curries or invokes `func` with optional +     * `this` binding and partially applied arguments. +     * +     * @private +     * @param {Function|string} func The function or method name to wrap. +     * @param {number} bitmask The bitmask flags. +     *    1 - `_.bind` +     *    2 - `_.bindKey` +     *    4 - `_.curry` or `_.curryRight` of a bound function +     *    8 - `_.curry` +     *   16 - `_.curryRight` +     *   32 - `_.partial` +     *   64 - `_.partialRight` +     *  128 - `_.rearg` +     *  256 - `_.ary` +     *  512 - `_.flip` +     * @param {*} [thisArg] The `this` binding of `func`. +     * @param {Array} [partials] The arguments to be partially applied. +     * @param {Array} [holders] The `partials` placeholder indexes. +     * @param {Array} [argPos] The argument positions of the new function. +     * @param {number} [ary] The arity cap of `func`. +     * @param {number} [arity] The arity of `func`. +     * @returns {Function} Returns the new wrapped function. +     */ +    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { +      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; +      if (!isBindKey && typeof func != 'function') { +        throw new TypeError(FUNC_ERROR_TEXT); +      } +      var length = partials ? partials.length : 0; +      if (!length) { +        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); +        partials = holders = undefined; +      } +      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); +      arity = arity === undefined ? arity : toInteger(arity); +      length -= holders ? holders.length : 0; + +      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { +        var partialsRight = partials, +            holdersRight = holders; + +        partials = holders = undefined; +      } +      var data = isBindKey ? undefined : getData(func); + +      var newData = [ +        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, +        argPos, ary, arity +      ]; + +      if (data) { +        mergeData(newData, data); +      } +      func = newData[0]; +      bitmask = newData[1]; +      thisArg = newData[2]; +      partials = newData[3]; +      holders = newData[4]; +      arity = newData[9] = newData[9] === undefined +        ? (isBindKey ? 0 : func.length) +        : nativeMax(newData[9] - length, 0); + +      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { +        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); +      } +      if (!bitmask || bitmask == WRAP_BIND_FLAG) { +        var result = createBind(func, bitmask, thisArg); +      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { +        result = createCurry(func, bitmask, arity); +      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { +        result = createPartial(func, bitmask, thisArg, partials); +      } else { +        result = createHybrid.apply(undefined, newData); +      } +      var setter = data ? baseSetData : setData; +      return setWrapToString(setter(result, newData), func, bitmask); +    } + +    /** +     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties +     * of source objects to the destination object for all destination properties +     * that resolve to `undefined`. +     * +     * @private +     * @param {*} objValue The destination value. +     * @param {*} srcValue The source value. +     * @param {string} key The key of the property to assign. +     * @param {Object} object The parent object of `objValue`. +     * @returns {*} Returns the value to assign. +     */ +    function customDefaultsAssignIn(objValue, srcValue, key, object) { +      if (objValue === undefined || +          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { +        return srcValue; +      } +      return objValue; +    } + +    /** +     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source +     * objects into destination objects that are passed thru. +     * +     * @private +     * @param {*} objValue The destination value. +     * @param {*} srcValue The source value. +     * @param {string} key The key of the property to merge. +     * @param {Object} object The parent object of `objValue`. +     * @param {Object} source The parent object of `srcValue`. +     * @param {Object} [stack] Tracks traversed source values and their merged +     *  counterparts. +     * @returns {*} Returns the value to assign. +     */ +    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { +      if (isObject(objValue) && isObject(srcValue)) { +        // Recursively merge objects and arrays (susceptible to call stack limits). +        stack.set(srcValue, objValue); +        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack); +        stack['delete'](srcValue); +      } +      return objValue; +    } + +    /** +     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain +     * objects. +     * +     * @private +     * @param {*} value The value to inspect. +     * @param {string} key The key of the property to inspect. +     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. +     */ +    function customOmitClone(value) { +      return isPlainObject(value) ? undefined : value; +    } + +    /** +     * A specialized version of `baseIsEqualDeep` for arrays with support for +     * partial deep comparisons. +     * +     * @private +     * @param {Array} array The array to compare. +     * @param {Array} other The other array to compare. +     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. +     * @param {Function} customizer The function to customize comparisons. +     * @param {Function} equalFunc The function to determine equivalents of values. +     * @param {Object} stack Tracks traversed `array` and `other` objects. +     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. +     */ +    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { +      var isPartial = bitmask & COMPARE_PARTIAL_FLAG, +          arrLength = array.length, +          othLength = other.length; + +      if (arrLength != othLength && !(isPartial && othLength > arrLength)) { +        return false; +      } +      // Check that cyclic values are equal. +      var arrStacked = stack.get(array); +      var othStacked = stack.get(other); +      if (arrStacked && othStacked) { +        return arrStacked == other && othStacked == array; +      } +      var index = -1, +          result = true, +          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; + +      stack.set(array, other); +      stack.set(other, array); + +      // Ignore non-index properties. +      while (++index < arrLength) { +        var arrValue = array[index], +            othValue = other[index]; + +        if (customizer) { +          var compared = isPartial +            ? customizer(othValue, arrValue, index, other, array, stack) +            : customizer(arrValue, othValue, index, array, other, stack); +        } +        if (compared !== undefined) { +          if (compared) { +            continue; +          } +          result = false; +          break; +        } +        // Recursively compare arrays (susceptible to call stack limits). +        if (seen) { +          if (!arraySome(other, function(othValue, othIndex) { +                if (!cacheHas(seen, othIndex) && +                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { +                  return seen.push(othIndex); +                } +              })) { +            result = false; +            break; +          } +        } else if (!( +              arrValue === othValue || +                equalFunc(arrValue, othValue, bitmask, customizer, stack) +            )) { +          result = false; +          break; +        } +      } +      stack['delete'](array); +      stack['delete'](other); +      return result; +    } + +    /** +     * A specialized version of `baseIsEqualDeep` for comparing objects of +     * the same `toStringTag`. +     * +     * **Note:** This function only supports comparing values with tags of +     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. +     * +     * @private +     * @param {Object} object The object to compare. +     * @param {Object} other The other object to compare. +     * @param {string} tag The `toStringTag` of the objects to compare. +     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. +     * @param {Function} customizer The function to customize comparisons. +     * @param {Function} equalFunc The function to determine equivalents of values. +     * @param {Object} stack Tracks traversed `object` and `other` objects. +     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. +     */ +    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { +      switch (tag) { +        case dataViewTag: +          if ((object.byteLength != other.byteLength) || +              (object.byteOffset != other.byteOffset)) { +            return false; +          } +          object = object.buffer; +          other = other.buffer; + +        case arrayBufferTag: +          if ((object.byteLength != other.byteLength) || +              !equalFunc(new Uint8Array(object), new Uint8Array(other))) { +            return false; +          } +          return true; + +        case boolTag: +        case dateTag: +        case numberTag: +          // Coerce booleans to `1` or `0` and dates to milliseconds. +          // Invalid dates are coerced to `NaN`. +          return eq(+object, +other); + +        case errorTag: +          return object.name == other.name && object.message == other.message; + +        case regexpTag: +        case stringTag: +          // Coerce regexes to strings and treat strings, primitives and objects, +          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring +          // for more details. +          return object == (other + ''); + +        case mapTag: +          var convert = mapToArray; + +        case setTag: +          var isPartial = bitmask & COMPARE_PARTIAL_FLAG; +          convert || (convert = setToArray); + +          if (object.size != other.size && !isPartial) { +            return false; +          } +          // Assume cyclic values are equal. +          var stacked = stack.get(object); +          if (stacked) { +            return stacked == other; +          } +          bitmask |= COMPARE_UNORDERED_FLAG; + +          // Recursively compare objects (susceptible to call stack limits). +          stack.set(object, other); +          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); +          stack['delete'](object); +          return result; + +        case symbolTag: +          if (symbolValueOf) { +            return symbolValueOf.call(object) == symbolValueOf.call(other); +          } +      } +      return false; +    } + +    /** +     * A specialized version of `baseIsEqualDeep` for objects with support for +     * partial deep comparisons. +     * +     * @private +     * @param {Object} object The object to compare. +     * @param {Object} other The other object to compare. +     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. +     * @param {Function} customizer The function to customize comparisons. +     * @param {Function} equalFunc The function to determine equivalents of values. +     * @param {Object} stack Tracks traversed `object` and `other` objects. +     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. +     */ +    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { +      var isPartial = bitmask & COMPARE_PARTIAL_FLAG, +          objProps = getAllKeys(object), +          objLength = objProps.length, +          othProps = getAllKeys(other), +          othLength = othProps.length; + +      if (objLength != othLength && !isPartial) { +        return false; +      } +      var index = objLength; +      while (index--) { +        var key = objProps[index]; +        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { +          return false; +        } +      } +      // Check that cyclic values are equal. +      var objStacked = stack.get(object); +      var othStacked = stack.get(other); +      if (objStacked && othStacked) { +        return objStacked == other && othStacked == object; +      } +      var result = true; +      stack.set(object, other); +      stack.set(other, object); + +      var skipCtor = isPartial; +      while (++index < objLength) { +        key = objProps[index]; +        var objValue = object[key], +            othValue = other[key]; + +        if (customizer) { +          var compared = isPartial +            ? customizer(othValue, objValue, key, other, object, stack) +            : customizer(objValue, othValue, key, object, other, stack); +        } +        // Recursively compare objects (susceptible to call stack limits). +        if (!(compared === undefined +              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) +              : compared +            )) { +          result = false; +          break; +        } +        skipCtor || (skipCtor = key == 'constructor'); +      } +      if (result && !skipCtor) { +        var objCtor = object.constructor, +            othCtor = other.constructor; + +        // Non `Object` object instances with different constructors are not equal. +        if (objCtor != othCtor && +            ('constructor' in object && 'constructor' in other) && +            !(typeof objCtor == 'function' && objCtor instanceof objCtor && +              typeof othCtor == 'function' && othCtor instanceof othCtor)) { +          result = false; +        } +      } +      stack['delete'](object); +      stack['delete'](other); +      return result; +    } + +    /** +     * A specialized version of `baseRest` which flattens the rest array. +     * +     * @private +     * @param {Function} func The function to apply a rest parameter to. +     * @returns {Function} Returns the new function. +     */ +    function flatRest(func) { +      return setToString(overRest(func, undefined, flatten), func + ''); +    } + +    /** +     * Creates an array of own enumerable property names and symbols of `object`. +     * +     * @private +     * @param {Object} object The object to query. +     * @returns {Array} Returns the array of property names and symbols. +     */ +    function getAllKeys(object) { +      return baseGetAllKeys(object, keys, getSymbols); +    } + +    /** +     * Creates an array of own and inherited enumerable property names and +     * symbols of `object`. +     * +     * @private +     * @param {Object} object The object to query. +     * @returns {Array} Returns the array of property names and symbols. +     */ +    function getAllKeysIn(object) { +      return baseGetAllKeys(object, keysIn, getSymbolsIn); +    } + +    /** +     * Gets metadata for `func`. +     * +     * @private +     * @param {Function} func The function to query. +     * @returns {*} Returns the metadata for `func`. +     */ +    var getData = !metaMap ? noop : function(func) { +      return metaMap.get(func); +    }; + +    /** +     * Gets the name of `func`. +     * +     * @private +     * @param {Function} func The function to query. +     * @returns {string} Returns the function name. +     */ +    function getFuncName(func) { +      var result = (func.name + ''), +          array = realNames[result], +          length = hasOwnProperty.call(realNames, result) ? array.length : 0; + +      while (length--) { +        var data = array[length], +            otherFunc = data.func; +        if (otherFunc == null || otherFunc == func) { +          return data.name; +        } +      } +      return result; +    } + +    /** +     * Gets the argument placeholder value for `func`. +     * +     * @private +     * @param {Function} func The function to inspect. +     * @returns {*} Returns the placeholder value. +     */ +    function getHolder(func) { +      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; +      return object.placeholder; +    } + +    /** +     * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, +     * this function returns the custom method, otherwise it returns `baseIteratee`. +     * If arguments are provided, the chosen function is invoked with them and +     * its result is returned. +     * +     * @private +     * @param {*} [value] The value to convert to an iteratee. +     * @param {number} [arity] The arity of the created iteratee. +     * @returns {Function} Returns the chosen function or its result. +     */ +    function getIteratee() { +      var result = lodash.iteratee || iteratee; +      result = result === iteratee ? baseIteratee : result; +      return arguments.length ? result(arguments[0], arguments[1]) : result; +    } + +    /** +     * Gets the data for `map`. +     * +     * @private +     * @param {Object} map The map to query. +     * @param {string} key The reference key. +     * @returns {*} Returns the map data. +     */ +    function getMapData(map, key) { +      var data = map.__data__; +      return isKeyable(key) +        ? data[typeof key == 'string' ? 'string' : 'hash'] +        : data.map; +    } + +    /** +     * Gets the property names, values, and compare flags of `object`. +     * +     * @private +     * @param {Object} object The object to query. +     * @returns {Array} Returns the match data of `object`. +     */ +    function getMatchData(object) { +      var result = keys(object), +          length = result.length; + +      while (length--) { +        var key = result[length], +            value = object[key]; + +        result[length] = [key, value, isStrictComparable(value)]; +      } +      return result; +    } + +    /** +     * Gets the native function at `key` of `object`. +     * +     * @private +     * @param {Object} object The object to query. +     * @param {string} key The key of the method to get. +     * @returns {*} Returns the function if it's native, else `undefined`. +     */ +    function getNative(object, key) { +      var value = getValue(object, key); +      return baseIsNative(value) ? value : undefined; +    } + +    /** +     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. +     * +     * @private +     * @param {*} value The value to query. +     * @returns {string} Returns the raw `toStringTag`. +     */ +    function getRawTag(value) { +      var isOwn = hasOwnProperty.call(value, symToStringTag), +          tag = value[symToStringTag]; + +      try { +        value[symToStringTag] = undefined; +        var unmasked = true; +      } catch (e) {} + +      var result = nativeObjectToString.call(value); +      if (unmasked) { +        if (isOwn) { +          value[symToStringTag] = tag; +        } else { +          delete value[symToStringTag]; +        } +      } +      return result; +    } + +    /** +     * Creates an array of the own enumerable symbols of `object`. +     * +     * @private +     * @param {Object} object The object to query. +     * @returns {Array} Returns the array of symbols. +     */ +    var getSymbols = !nativeGetSymbols ? stubArray : function(object) { +      if (object == null) { +        return []; +      } +      object = Object(object); +      return arrayFilter(nativeGetSymbols(object), function(symbol) { +        return propertyIsEnumerable.call(object, symbol); +      }); +    }; + +    /** +     * Creates an array of the own and inherited enumerable symbols of `object`. +     * +     * @private +     * @param {Object} object The object to query. +     * @returns {Array} Returns the array of symbols. +     */ +    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { +      var result = []; +      while (object) { +        arrayPush(result, getSymbols(object)); +        object = getPrototype(object); +      } +      return result; +    }; + +    /** +     * Gets the `toStringTag` of `value`. +     * +     * @private +     * @param {*} value The value to query. +     * @returns {string} Returns the `toStringTag`. +     */ +    var getTag = baseGetTag; + +    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. +    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || +        (Map && getTag(new Map) != mapTag) || +        (Promise && getTag(Promise.resolve()) != promiseTag) || +        (Set && getTag(new Set) != setTag) || +        (WeakMap && getTag(new WeakMap) != weakMapTag)) { +      getTag = function(value) { +        var result = baseGetTag(value), +            Ctor = result == objectTag ? value.constructor : undefined, +            ctorString = Ctor ? toSource(Ctor) : ''; + +        if (ctorString) { +          switch (ctorString) { +            case dataViewCtorString: return dataViewTag; +            case mapCtorString: return mapTag; +            case promiseCtorString: return promiseTag; +            case setCtorString: return setTag; +            case weakMapCtorString: return weakMapTag; +          } +        } +        return result; +      }; +    } + +    /** +     * Gets the view, applying any `transforms` to the `start` and `end` positions. +     * +     * @private +     * @param {number} start The start of the view. +     * @param {number} end The end of the view. +     * @param {Array} transforms The transformations to apply to the view. +     * @returns {Object} Returns an object containing the `start` and `end` +     *  positions of the view. +     */ +    function getView(start, end, transforms) { +      var index = -1, +          length = transforms.length; + +      while (++index < length) { +        var data = transforms[index], +            size = data.size; + +        switch (data.type) { +          case 'drop':      start += size; break; +          case 'dropRight': end -= size; break; +          case 'take':      end = nativeMin(end, start + size); break; +          case 'takeRight': start = nativeMax(start, end - size); break; +        } +      } +      return { 'start': start, 'end': end }; +    } + +    /** +     * Extracts wrapper details from the `source` body comment. +     * +     * @private +     * @param {string} source The source to inspect. +     * @returns {Array} Returns the wrapper details. +     */ +    function getWrapDetails(source) { +      var match = source.match(reWrapDetails); +      return match ? match[1].split(reSplitDetails) : []; +    } + +    /** +     * Checks if `path` exists on `object`. +     * +     * @private +     * @param {Object} object The object to query. +     * @param {Array|string} path The path to check. +     * @param {Function} hasFunc The function to check properties. +     * @returns {boolean} Returns `true` if `path` exists, else `false`. +     */ +    function hasPath(object, path, hasFunc) { +      path = castPath(path, object); + +      var index = -1, +          length = path.length, +          result = false; + +      while (++index < length) { +        var key = toKey(path[index]); +        if (!(result = object != null && hasFunc(object, key))) { +          break; +        } +        object = object[key]; +      } +      if (result || ++index != length) { +        return result; +      } +      length = object == null ? 0 : object.length; +      return !!length && isLength(length) && isIndex(key, length) && +        (isArray(object) || isArguments(object)); +    } + +    /** +     * Initializes an array clone. +     * +     * @private +     * @param {Array} array The array to clone. +     * @returns {Array} Returns the initialized clone. +     */ +    function initCloneArray(array) { +      var length = array.length, +          result = new array.constructor(length); + +      // Add properties assigned by `RegExp#exec`. +      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { +        result.index = array.index; +        result.input = array.input; +      } +      return result; +    } + +    /** +     * Initializes an object clone. +     * +     * @private +     * @param {Object} object The object to clone. +     * @returns {Object} Returns the initialized clone. +     */ +    function initCloneObject(object) { +      return (typeof object.constructor == 'function' && !isPrototype(object)) +        ? baseCreate(getPrototype(object)) +        : {}; +    } + +    /** +     * Initializes an object clone based on its `toStringTag`. +     * +     * **Note:** This function only supports cloning values with tags of +     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. +     * +     * @private +     * @param {Object} object The object to clone. +     * @param {string} tag The `toStringTag` of the object to clone. +     * @param {boolean} [isDeep] Specify a deep clone. +     * @returns {Object} Returns the initialized clone. +     */ +    function initCloneByTag(object, tag, isDeep) { +      var Ctor = object.constructor; +      switch (tag) { +        case arrayBufferTag: +          return cloneArrayBuffer(object); + +        case boolTag: +        case dateTag: +          return new Ctor(+object); + +        case dataViewTag: +          return cloneDataView(object, isDeep); + +        case float32Tag: case float64Tag: +        case int8Tag: case int16Tag: case int32Tag: +        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: +          return cloneTypedArray(object, isDeep); + +        case mapTag: +          return new Ctor; + +        case numberTag: +        case stringTag: +          return new Ctor(object); + +        case regexpTag: +          return cloneRegExp(object); + +        case setTag: +          return new Ctor; + +        case symbolTag: +          return cloneSymbol(object); +      } +    } + +    /** +     * Inserts wrapper `details` in a comment at the top of the `source` body. +     * +     * @private +     * @param {string} source The source to modify. +     * @returns {Array} details The details to insert. +     * @returns {string} Returns the modified source. +     */ +    function insertWrapDetails(source, details) { +      var length = details.length; +      if (!length) { +        return source; +      } +      var lastIndex = length - 1; +      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; +      details = details.join(length > 2 ? ', ' : ' '); +      return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); +    } + +    /** +     * Checks if `value` is a flattenable `arguments` object or array. +     * +     * @private +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. +     */ +    function isFlattenable(value) { +      return isArray(value) || isArguments(value) || +        !!(spreadableSymbol && value && value[spreadableSymbol]); +    } + +    /** +     * Checks if `value` is a valid array-like index. +     * +     * @private +     * @param {*} value The value to check. +     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. +     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. +     */ +    function isIndex(value, length) { +      var type = typeof value; +      length = length == null ? MAX_SAFE_INTEGER : length; + +      return !!length && +        (type == 'number' || +          (type != 'symbol' && reIsUint.test(value))) && +            (value > -1 && value % 1 == 0 && value < length); +    } + +    /** +     * Checks if the given arguments are from an iteratee call. +     * +     * @private +     * @param {*} value The potential iteratee value argument. +     * @param {*} index The potential iteratee index or key argument. +     * @param {*} object The potential iteratee object argument. +     * @returns {boolean} Returns `true` if the arguments are from an iteratee call, +     *  else `false`. +     */ +    function isIterateeCall(value, index, object) { +      if (!isObject(object)) { +        return false; +      } +      var type = typeof index; +      if (type == 'number' +            ? (isArrayLike(object) && isIndex(index, object.length)) +            : (type == 'string' && index in object) +          ) { +        return eq(object[index], value); +      } +      return false; +    } + +    /** +     * Checks if `value` is a property name and not a property path. +     * +     * @private +     * @param {*} value The value to check. +     * @param {Object} [object] The object to query keys on. +     * @returns {boolean} Returns `true` if `value` is a property name, else `false`. +     */ +    function isKey(value, object) { +      if (isArray(value)) { +        return false; +      } +      var type = typeof value; +      if (type == 'number' || type == 'symbol' || type == 'boolean' || +          value == null || isSymbol(value)) { +        return true; +      } +      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || +        (object != null && value in Object(object)); +    } + +    /** +     * Checks if `value` is suitable for use as unique object key. +     * +     * @private +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is suitable, else `false`. +     */ +    function isKeyable(value) { +      var type = typeof value; +      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') +        ? (value !== '__proto__') +        : (value === null); +    } + +    /** +     * Checks if `func` has a lazy counterpart. +     * +     * @private +     * @param {Function} func The function to check. +     * @returns {boolean} Returns `true` if `func` has a lazy counterpart, +     *  else `false`. +     */ +    function isLaziable(func) { +      var funcName = getFuncName(func), +          other = lodash[funcName]; + +      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { +        return false; +      } +      if (func === other) { +        return true; +      } +      var data = getData(other); +      return !!data && func === data[0]; +    } + +    /** +     * Checks if `func` has its source masked. +     * +     * @private +     * @param {Function} func The function to check. +     * @returns {boolean} Returns `true` if `func` is masked, else `false`. +     */ +    function isMasked(func) { +      return !!maskSrcKey && (maskSrcKey in func); +    } + +    /** +     * Checks if `func` is capable of being masked. +     * +     * @private +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `func` is maskable, else `false`. +     */ +    var isMaskable = coreJsData ? isFunction : stubFalse; + +    /** +     * Checks if `value` is likely a prototype object. +     * +     * @private +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. +     */ +    function isPrototype(value) { +      var Ctor = value && value.constructor, +          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + +      return value === proto; +    } + +    /** +     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. +     * +     * @private +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` if suitable for strict +     *  equality comparisons, else `false`. +     */ +    function isStrictComparable(value) { +      return value === value && !isObject(value); +    } + +    /** +     * A specialized version of `matchesProperty` for source values suitable +     * for strict equality comparisons, i.e. `===`. +     * +     * @private +     * @param {string} key The key of the property to get. +     * @param {*} srcValue The value to match. +     * @returns {Function} Returns the new spec function. +     */ +    function matchesStrictComparable(key, srcValue) { +      return function(object) { +        if (object == null) { +          return false; +        } +        return object[key] === srcValue && +          (srcValue !== undefined || (key in Object(object))); +      }; +    } + +    /** +     * A specialized version of `_.memoize` which clears the memoized function's +     * cache when it exceeds `MAX_MEMOIZE_SIZE`. +     * +     * @private +     * @param {Function} func The function to have its output memoized. +     * @returns {Function} Returns the new memoized function. +     */ +    function memoizeCapped(func) { +      var result = memoize(func, function(key) { +        if (cache.size === MAX_MEMOIZE_SIZE) { +          cache.clear(); +        } +        return key; +      }); + +      var cache = result.cache; +      return result; +    } + +    /** +     * Merges the function metadata of `source` into `data`. +     * +     * Merging metadata reduces the number of wrappers used to invoke a function. +     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` +     * may be applied regardless of execution order. Methods like `_.ary` and +     * `_.rearg` modify function arguments, making the order in which they are +     * executed important, preventing the merging of metadata. However, we make +     * an exception for a safe combined case where curried functions have `_.ary` +     * and or `_.rearg` applied. +     * +     * @private +     * @param {Array} data The destination metadata. +     * @param {Array} source The source metadata. +     * @returns {Array} Returns `data`. +     */ +    function mergeData(data, source) { +      var bitmask = data[1], +          srcBitmask = source[1], +          newBitmask = bitmask | srcBitmask, +          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); + +      var isCombo = +        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || +        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || +        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); + +      // Exit early if metadata can't be merged. +      if (!(isCommon || isCombo)) { +        return data; +      } +      // Use source `thisArg` if available. +      if (srcBitmask & WRAP_BIND_FLAG) { +        data[2] = source[2]; +        // Set when currying a bound function. +        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; +      } +      // Compose partial arguments. +      var value = source[3]; +      if (value) { +        var partials = data[3]; +        data[3] = partials ? composeArgs(partials, value, source[4]) : value; +        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; +      } +      // Compose partial right arguments. +      value = source[5]; +      if (value) { +        partials = data[5]; +        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; +        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; +      } +      // Use source `argPos` if available. +      value = source[7]; +      if (value) { +        data[7] = value; +      } +      // Use source `ary` if it's smaller. +      if (srcBitmask & WRAP_ARY_FLAG) { +        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); +      } +      // Use source `arity` if one is not provided. +      if (data[9] == null) { +        data[9] = source[9]; +      } +      // Use source `func` and merge bitmasks. +      data[0] = source[0]; +      data[1] = newBitmask; + +      return data; +    } + +    /** +     * This function is like +     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) +     * except that it includes inherited enumerable properties. +     * +     * @private +     * @param {Object} object The object to query. +     * @returns {Array} Returns the array of property names. +     */ +    function nativeKeysIn(object) { +      var result = []; +      if (object != null) { +        for (var key in Object(object)) { +          result.push(key); +        } +      } +      return result; +    } + +    /** +     * Converts `value` to a string using `Object.prototype.toString`. +     * +     * @private +     * @param {*} value The value to convert. +     * @returns {string} Returns the converted string. +     */ +    function objectToString(value) { +      return nativeObjectToString.call(value); +    } + +    /** +     * A specialized version of `baseRest` which transforms the rest array. +     * +     * @private +     * @param {Function} func The function to apply a rest parameter to. +     * @param {number} [start=func.length-1] The start position of the rest parameter. +     * @param {Function} transform The rest array transform. +     * @returns {Function} Returns the new function. +     */ +    function overRest(func, start, transform) { +      start = nativeMax(start === undefined ? (func.length - 1) : start, 0); +      return function() { +        var args = arguments, +            index = -1, +            length = nativeMax(args.length - start, 0), +            array = Array(length); + +        while (++index < length) { +          array[index] = args[start + index]; +        } +        index = -1; +        var otherArgs = Array(start + 1); +        while (++index < start) { +          otherArgs[index] = args[index]; +        } +        otherArgs[start] = transform(array); +        return apply(func, this, otherArgs); +      }; +    } + +    /** +     * Gets the parent value at `path` of `object`. +     * +     * @private +     * @param {Object} object The object to query. +     * @param {Array} path The path to get the parent value of. +     * @returns {*} Returns the parent value. +     */ +    function parent(object, path) { +      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); +    } + +    /** +     * Reorder `array` according to the specified indexes where the element at +     * the first index is assigned as the first element, the element at +     * the second index is assigned as the second element, and so on. +     * +     * @private +     * @param {Array} array The array to reorder. +     * @param {Array} indexes The arranged array indexes. +     * @returns {Array} Returns `array`. +     */ +    function reorder(array, indexes) { +      var arrLength = array.length, +          length = nativeMin(indexes.length, arrLength), +          oldArray = copyArray(array); + +      while (length--) { +        var index = indexes[length]; +        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; +      } +      return array; +    } + +    /** +     * Gets the value at `key`, unless `key` is "__proto__" or "constructor". +     * +     * @private +     * @param {Object} object The object to query. +     * @param {string} key The key of the property to get. +     * @returns {*} Returns the property value. +     */ +    function safeGet(object, key) { +      if (key === 'constructor' && typeof object[key] === 'function') { +        return; +      } + +      if (key == '__proto__') { +        return; +      } + +      return object[key]; +    } + +    /** +     * Sets metadata for `func`. +     * +     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short +     * period of time, it will trip its breaker and transition to an identity +     * function to avoid garbage collection pauses in V8. See +     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) +     * for more details. +     * +     * @private +     * @param {Function} func The function to associate metadata with. +     * @param {*} data The metadata. +     * @returns {Function} Returns `func`. +     */ +    var setData = shortOut(baseSetData); + +    /** +     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). +     * +     * @private +     * @param {Function} func The function to delay. +     * @param {number} wait The number of milliseconds to delay invocation. +     * @returns {number|Object} Returns the timer id or timeout object. +     */ +    var setTimeout = ctxSetTimeout || function(func, wait) { +      return root.setTimeout(func, wait); +    }; + +    /** +     * Sets the `toString` method of `func` to return `string`. +     * +     * @private +     * @param {Function} func The function to modify. +     * @param {Function} string The `toString` result. +     * @returns {Function} Returns `func`. +     */ +    var setToString = shortOut(baseSetToString); + +    /** +     * Sets the `toString` method of `wrapper` to mimic the source of `reference` +     * with wrapper details in a comment at the top of the source body. +     * +     * @private +     * @param {Function} wrapper The function to modify. +     * @param {Function} reference The reference function. +     * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +     * @returns {Function} Returns `wrapper`. +     */ +    function setWrapToString(wrapper, reference, bitmask) { +      var source = (reference + ''); +      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); +    } + +    /** +     * Creates a function that'll short out and invoke `identity` instead +     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` +     * milliseconds. +     * +     * @private +     * @param {Function} func The function to restrict. +     * @returns {Function} Returns the new shortable function. +     */ +    function shortOut(func) { +      var count = 0, +          lastCalled = 0; + +      return function() { +        var stamp = nativeNow(), +            remaining = HOT_SPAN - (stamp - lastCalled); + +        lastCalled = stamp; +        if (remaining > 0) { +          if (++count >= HOT_COUNT) { +            return arguments[0]; +          } +        } else { +          count = 0; +        } +        return func.apply(undefined, arguments); +      }; +    } + +    /** +     * A specialized version of `_.shuffle` which mutates and sets the size of `array`. +     * +     * @private +     * @param {Array} array The array to shuffle. +     * @param {number} [size=array.length] The size of `array`. +     * @returns {Array} Returns `array`. +     */ +    function shuffleSelf(array, size) { +      var index = -1, +          length = array.length, +          lastIndex = length - 1; + +      size = size === undefined ? length : size; +      while (++index < size) { +        var rand = baseRandom(index, lastIndex), +            value = array[rand]; + +        array[rand] = array[index]; +        array[index] = value; +      } +      array.length = size; +      return array; +    } + +    /** +     * Converts `string` to a property path array. +     * +     * @private +     * @param {string} string The string to convert. +     * @returns {Array} Returns the property path array. +     */ +    var stringToPath = memoizeCapped(function(string) { +      var result = []; +      if (string.charCodeAt(0) === 46 /* . */) { +        result.push(''); +      } +      string.replace(rePropName, function(match, number, quote, subString) { +        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); +      }); +      return result; +    }); + +    /** +     * Converts `value` to a string key if it's not a string or symbol. +     * +     * @private +     * @param {*} value The value to inspect. +     * @returns {string|symbol} Returns the key. +     */ +    function toKey(value) { +      if (typeof value == 'string' || isSymbol(value)) { +        return value; +      } +      var result = (value + ''); +      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +    } + +    /** +     * Converts `func` to its source code. +     * +     * @private +     * @param {Function} func The function to convert. +     * @returns {string} Returns the source code. +     */ +    function toSource(func) { +      if (func != null) { +        try { +          return funcToString.call(func); +        } catch (e) {} +        try { +          return (func + ''); +        } catch (e) {} +      } +      return ''; +    } + +    /** +     * Updates wrapper `details` based on `bitmask` flags. +     * +     * @private +     * @returns {Array} details The details to modify. +     * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +     * @returns {Array} Returns `details`. +     */ +    function updateWrapDetails(details, bitmask) { +      arrayEach(wrapFlags, function(pair) { +        var value = '_.' + pair[0]; +        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { +          details.push(value); +        } +      }); +      return details.sort(); +    } + +    /** +     * Creates a clone of `wrapper`. +     * +     * @private +     * @param {Object} wrapper The wrapper to clone. +     * @returns {Object} Returns the cloned wrapper. +     */ +    function wrapperClone(wrapper) { +      if (wrapper instanceof LazyWrapper) { +        return wrapper.clone(); +      } +      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); +      result.__actions__ = copyArray(wrapper.__actions__); +      result.__index__  = wrapper.__index__; +      result.__values__ = wrapper.__values__; +      return result; +    } + +    /*------------------------------------------------------------------------*/ + +    /** +     * Creates an array of elements split into groups the length of `size`. +     * If `array` can't be split evenly, the final chunk will be the remaining +     * elements. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Array +     * @param {Array} array The array to process. +     * @param {number} [size=1] The length of each chunk +     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +     * @returns {Array} Returns the new array of chunks. +     * @example +     * +     * _.chunk(['a', 'b', 'c', 'd'], 2); +     * // => [['a', 'b'], ['c', 'd']] +     * +     * _.chunk(['a', 'b', 'c', 'd'], 3); +     * // => [['a', 'b', 'c'], ['d']] +     */ +    function chunk(array, size, guard) { +      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { +        size = 1; +      } else { +        size = nativeMax(toInteger(size), 0); +      } +      var length = array == null ? 0 : array.length; +      if (!length || size < 1) { +        return []; +      } +      var index = 0, +          resIndex = 0, +          result = Array(nativeCeil(length / size)); + +      while (index < length) { +        result[resIndex++] = baseSlice(array, index, (index += size)); +      } +      return result; +    } + +    /** +     * Creates an array with all falsey values removed. The values `false`, `null`, +     * `0`, `""`, `undefined`, and `NaN` are falsey. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Array +     * @param {Array} array The array to compact. +     * @returns {Array} Returns the new array of filtered values. +     * @example +     * +     * _.compact([0, 1, false, 2, '', 3]); +     * // => [1, 2, 3] +     */ +    function compact(array) { +      var index = -1, +          length = array == null ? 0 : array.length, +          resIndex = 0, +          result = []; + +      while (++index < length) { +        var value = array[index]; +        if (value) { +          result[resIndex++] = value; +        } +      } +      return result; +    } + +    /** +     * Creates a new array concatenating `array` with any additional arrays +     * and/or values. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Array +     * @param {Array} array The array to concatenate. +     * @param {...*} [values] The values to concatenate. +     * @returns {Array} Returns the new concatenated array. +     * @example +     * +     * var array = [1]; +     * var other = _.concat(array, 2, [3], [[4]]); +     * +     * console.log(other); +     * // => [1, 2, 3, [4]] +     * +     * console.log(array); +     * // => [1] +     */ +    function concat() { +      var length = arguments.length; +      if (!length) { +        return []; +      } +      var args = Array(length - 1), +          array = arguments[0], +          index = length; + +      while (index--) { +        args[index - 1] = arguments[index]; +      } +      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); +    } + +    /** +     * Creates an array of `array` values not included in the other given arrays +     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +     * for equality comparisons. The order and references of result values are +     * determined by the first array. +     * +     * **Note:** Unlike `_.pullAll`, this method returns a new array. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Array +     * @param {Array} array The array to inspect. +     * @param {...Array} [values] The values to exclude. +     * @returns {Array} Returns the new array of filtered values. +     * @see _.without, _.xor +     * @example +     * +     * _.difference([2, 1], [2, 3]); +     * // => [1] +     */ +    var difference = baseRest(function(array, values) { +      return isArrayLikeObject(array) +        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) +        : []; +    }); + +    /** +     * This method is like `_.difference` except that it accepts `iteratee` which +     * is invoked for each element of `array` and `values` to generate the criterion +     * by which they're compared. The order and references of result values are +     * determined by the first array. The iteratee is invoked with one argument: +     * (value). +     * +     * **Note:** Unlike `_.pullAllBy`, this method returns a new array. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Array +     * @param {Array} array The array to inspect. +     * @param {...Array} [values] The values to exclude. +     * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +     * @returns {Array} Returns the new array of filtered values. +     * @example +     * +     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); +     * // => [1.2] +     * +     * // The `_.property` iteratee shorthand. +     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); +     * // => [{ 'x': 2 }] +     */ +    var differenceBy = baseRest(function(array, values) { +      var iteratee = last(values); +      if (isArrayLikeObject(iteratee)) { +        iteratee = undefined; +      } +      return isArrayLikeObject(array) +        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) +        : []; +    }); + +    /** +     * This method is like `_.difference` except that it accepts `comparator` +     * which is invoked to compare elements of `array` to `values`. The order and +     * references of result values are determined by the first array. The comparator +     * is invoked with two arguments: (arrVal, othVal). +     * +     * **Note:** Unlike `_.pullAllWith`, this method returns a new array. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Array +     * @param {Array} array The array to inspect. +     * @param {...Array} [values] The values to exclude. +     * @param {Function} [comparator] The comparator invoked per element. +     * @returns {Array} Returns the new array of filtered values. +     * @example +     * +     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; +     * +     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); +     * // => [{ 'x': 2, 'y': 1 }] +     */ +    var differenceWith = baseRest(function(array, values) { +      var comparator = last(values); +      if (isArrayLikeObject(comparator)) { +        comparator = undefined; +      } +      return isArrayLikeObject(array) +        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) +        : []; +    }); + +    /** +     * Creates a slice of `array` with `n` elements dropped from the beginning. +     * +     * @static +     * @memberOf _ +     * @since 0.5.0 +     * @category Array +     * @param {Array} array The array to query. +     * @param {number} [n=1] The number of elements to drop. +     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +     * @returns {Array} Returns the slice of `array`. +     * @example +     * +     * _.drop([1, 2, 3]); +     * // => [2, 3] +     * +     * _.drop([1, 2, 3], 2); +     * // => [3] +     * +     * _.drop([1, 2, 3], 5); +     * // => [] +     * +     * _.drop([1, 2, 3], 0); +     * // => [1, 2, 3] +     */ +    function drop(array, n, guard) { +      var length = array == null ? 0 : array.length; +      if (!length) { +        return []; +      } +      n = (guard || n === undefined) ? 1 : toInteger(n); +      return baseSlice(array, n < 0 ? 0 : n, length); +    } + +    /** +     * Creates a slice of `array` with `n` elements dropped from the end. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Array +     * @param {Array} array The array to query. +     * @param {number} [n=1] The number of elements to drop. +     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +     * @returns {Array} Returns the slice of `array`. +     * @example +     * +     * _.dropRight([1, 2, 3]); +     * // => [1, 2] +     * +     * _.dropRight([1, 2, 3], 2); +     * // => [1] +     * +     * _.dropRight([1, 2, 3], 5); +     * // => [] +     * +     * _.dropRight([1, 2, 3], 0); +     * // => [1, 2, 3] +     */ +    function dropRight(array, n, guard) { +      var length = array == null ? 0 : array.length; +      if (!length) { +        return []; +      } +      n = (guard || n === undefined) ? 1 : toInteger(n); +      n = length - n; +      return baseSlice(array, 0, n < 0 ? 0 : n); +    } + +    /** +     * Creates a slice of `array` excluding elements dropped from the end. +     * Elements are dropped until `predicate` returns falsey. The predicate is +     * invoked with three arguments: (value, index, array). +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Array +     * @param {Array} array The array to query. +     * @param {Function} [predicate=_.identity] The function invoked per iteration. +     * @returns {Array} Returns the slice of `array`. +     * @example +     * +     * var users = [ +     *   { 'user': 'barney',  'active': true }, +     *   { 'user': 'fred',    'active': false }, +     *   { 'user': 'pebbles', 'active': false } +     * ]; +     * +     * _.dropRightWhile(users, function(o) { return !o.active; }); +     * // => objects for ['barney'] +     * +     * // The `_.matches` iteratee shorthand. +     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); +     * // => objects for ['barney', 'fred'] +     * +     * // The `_.matchesProperty` iteratee shorthand. +     * _.dropRightWhile(users, ['active', false]); +     * // => objects for ['barney'] +     * +     * // The `_.property` iteratee shorthand. +     * _.dropRightWhile(users, 'active'); +     * // => objects for ['barney', 'fred', 'pebbles'] +     */ +    function dropRightWhile(array, predicate) { +      return (array && array.length) +        ? baseWhile(array, getIteratee(predicate, 3), true, true) +        : []; +    } + +    /** +     * Creates a slice of `array` excluding elements dropped from the beginning. +     * Elements are dropped until `predicate` returns falsey. The predicate is +     * invoked with three arguments: (value, index, array). +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Array +     * @param {Array} array The array to query. +     * @param {Function} [predicate=_.identity] The function invoked per iteration. +     * @returns {Array} Returns the slice of `array`. +     * @example +     * +     * var users = [ +     *   { 'user': 'barney',  'active': false }, +     *   { 'user': 'fred',    'active': false }, +     *   { 'user': 'pebbles', 'active': true } +     * ]; +     * +     * _.dropWhile(users, function(o) { return !o.active; }); +     * // => objects for ['pebbles'] +     * +     * // The `_.matches` iteratee shorthand. +     * _.dropWhile(users, { 'user': 'barney', 'active': false }); +     * // => objects for ['fred', 'pebbles'] +     * +     * // The `_.matchesProperty` iteratee shorthand. +     * _.dropWhile(users, ['active', false]); +     * // => objects for ['pebbles'] +     * +     * // The `_.property` iteratee shorthand. +     * _.dropWhile(users, 'active'); +     * // => objects for ['barney', 'fred', 'pebbles'] +     */ +    function dropWhile(array, predicate) { +      return (array && array.length) +        ? baseWhile(array, getIteratee(predicate, 3), true) +        : []; +    } + +    /** +     * Fills elements of `array` with `value` from `start` up to, but not +     * including, `end`. +     * +     * **Note:** This method mutates `array`. +     * +     * @static +     * @memberOf _ +     * @since 3.2.0 +     * @category Array +     * @param {Array} array The array to fill. +     * @param {*} value The value to fill `array` with. +     * @param {number} [start=0] The start position. +     * @param {number} [end=array.length] The end position. +     * @returns {Array} Returns `array`. +     * @example +     * +     * var array = [1, 2, 3]; +     * +     * _.fill(array, 'a'); +     * console.log(array); +     * // => ['a', 'a', 'a'] +     * +     * _.fill(Array(3), 2); +     * // => [2, 2, 2] +     * +     * _.fill([4, 6, 8, 10], '*', 1, 3); +     * // => [4, '*', '*', 10] +     */ +    function fill(array, value, start, end) { +      var length = array == null ? 0 : array.length; +      if (!length) { +        return []; +      } +      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { +        start = 0; +        end = length; +      } +      return baseFill(array, value, start, end); +    } + +    /** +     * This method is like `_.find` except that it returns the index of the first +     * element `predicate` returns truthy for instead of the element itself. +     * +     * @static +     * @memberOf _ +     * @since 1.1.0 +     * @category Array +     * @param {Array} array The array to inspect. +     * @param {Function} [predicate=_.identity] The function invoked per iteration. +     * @param {number} [fromIndex=0] The index to search from. +     * @returns {number} Returns the index of the found element, else `-1`. +     * @example +     * +     * var users = [ +     *   { 'user': 'barney',  'active': false }, +     *   { 'user': 'fred',    'active': false }, +     *   { 'user': 'pebbles', 'active': true } +     * ]; +     * +     * _.findIndex(users, function(o) { return o.user == 'barney'; }); +     * // => 0 +     * +     * // The `_.matches` iteratee shorthand. +     * _.findIndex(users, { 'user': 'fred', 'active': false }); +     * // => 1 +     * +     * // The `_.matchesProperty` iteratee shorthand. +     * _.findIndex(users, ['active', false]); +     * // => 0 +     * +     * // The `_.property` iteratee shorthand. +     * _.findIndex(users, 'active'); +     * // => 2 +     */ +    function findIndex(array, predicate, fromIndex) { +      var length = array == null ? 0 : array.length; +      if (!length) { +        return -1; +      } +      var index = fromIndex == null ? 0 : toInteger(fromIndex); +      if (index < 0) { +        index = nativeMax(length + index, 0); +      } +      return baseFindIndex(array, getIteratee(predicate, 3), index); +    } + +    /** +     * This method is like `_.findIndex` except that it iterates over elements +     * of `collection` from right to left. +     * +     * @static +     * @memberOf _ +     * @since 2.0.0 +     * @category Array +     * @param {Array} array The array to inspect. +     * @param {Function} [predicate=_.identity] The function invoked per iteration. +     * @param {number} [fromIndex=array.length-1] The index to search from. +     * @returns {number} Returns the index of the found element, else `-1`. +     * @example +     * +     * var users = [ +     *   { 'user': 'barney',  'active': true }, +     *   { 'user': 'fred',    'active': false }, +     *   { 'user': 'pebbles', 'active': false } +     * ]; +     * +     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); +     * // => 2 +     * +     * // The `_.matches` iteratee shorthand. +     * _.findLastIndex(users, { 'user': 'barney', 'active': true }); +     * // => 0 +     * +     * // The `_.matchesProperty` iteratee shorthand. +     * _.findLastIndex(users, ['active', false]); +     * // => 2 +     * +     * // The `_.property` iteratee shorthand. +     * _.findLastIndex(users, 'active'); +     * // => 0 +     */ +    function findLastIndex(array, predicate, fromIndex) { +      var length = array == null ? 0 : array.length; +      if (!length) { +        return -1; +      } +      var index = length - 1; +      if (fromIndex !== undefined) { +        index = toInteger(fromIndex); +        index = fromIndex < 0 +          ? nativeMax(length + index, 0) +          : nativeMin(index, length - 1); +      } +      return baseFindIndex(array, getIteratee(predicate, 3), index, true); +    } + +    /** +     * Flattens `array` a single level deep. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Array +     * @param {Array} array The array to flatten. +     * @returns {Array} Returns the new flattened array. +     * @example +     * +     * _.flatten([1, [2, [3, [4]], 5]]); +     * // => [1, 2, [3, [4]], 5] +     */ +    function flatten(array) { +      var length = array == null ? 0 : array.length; +      return length ? baseFlatten(array, 1) : []; +    } + +    /** +     * Recursively flattens `array`. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Array +     * @param {Array} array The array to flatten. +     * @returns {Array} Returns the new flattened array. +     * @example +     * +     * _.flattenDeep([1, [2, [3, [4]], 5]]); +     * // => [1, 2, 3, 4, 5] +     */ +    function flattenDeep(array) { +      var length = array == null ? 0 : array.length; +      return length ? baseFlatten(array, INFINITY) : []; +    } + +    /** +     * Recursively flatten `array` up to `depth` times. +     * +     * @static +     * @memberOf _ +     * @since 4.4.0 +     * @category Array +     * @param {Array} array The array to flatten. +     * @param {number} [depth=1] The maximum recursion depth. +     * @returns {Array} Returns the new flattened array. +     * @example +     * +     * var array = [1, [2, [3, [4]], 5]]; +     * +     * _.flattenDepth(array, 1); +     * // => [1, 2, [3, [4]], 5] +     * +     * _.flattenDepth(array, 2); +     * // => [1, 2, 3, [4], 5] +     */ +    function flattenDepth(array, depth) { +      var length = array == null ? 0 : array.length; +      if (!length) { +        return []; +      } +      depth = depth === undefined ? 1 : toInteger(depth); +      return baseFlatten(array, depth); +    } + +    /** +     * The inverse of `_.toPairs`; this method returns an object composed +     * from key-value `pairs`. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Array +     * @param {Array} pairs The key-value pairs. +     * @returns {Object} Returns the new object. +     * @example +     * +     * _.fromPairs([['a', 1], ['b', 2]]); +     * // => { 'a': 1, 'b': 2 } +     */ +    function fromPairs(pairs) { +      var index = -1, +          length = pairs == null ? 0 : pairs.length, +          result = {}; + +      while (++index < length) { +        var pair = pairs[index]; +        result[pair[0]] = pair[1]; +      } +      return result; +    } + +    /** +     * Gets the first element of `array`. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @alias first +     * @category Array +     * @param {Array} array The array to query. +     * @returns {*} Returns the first element of `array`. +     * @example +     * +     * _.head([1, 2, 3]); +     * // => 1 +     * +     * _.head([]); +     * // => undefined +     */ +    function head(array) { +      return (array && array.length) ? array[0] : undefined; +    } + +    /** +     * Gets the index at which the first occurrence of `value` is found in `array` +     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +     * for equality comparisons. If `fromIndex` is negative, it's used as the +     * offset from the end of `array`. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Array +     * @param {Array} array The array to inspect. +     * @param {*} value The value to search for. +     * @param {number} [fromIndex=0] The index to search from. +     * @returns {number} Returns the index of the matched value, else `-1`. +     * @example +     * +     * _.indexOf([1, 2, 1, 2], 2); +     * // => 1 +     * +     * // Search from the `fromIndex`. +     * _.indexOf([1, 2, 1, 2], 2, 2); +     * // => 3 +     */ +    function indexOf(array, value, fromIndex) { +      var length = array == null ? 0 : array.length; +      if (!length) { +        return -1; +      } +      var index = fromIndex == null ? 0 : toInteger(fromIndex); +      if (index < 0) { +        index = nativeMax(length + index, 0); +      } +      return baseIndexOf(array, value, index); +    } + +    /** +     * Gets all but the last element of `array`. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Array +     * @param {Array} array The array to query. +     * @returns {Array} Returns the slice of `array`. +     * @example +     * +     * _.initial([1, 2, 3]); +     * // => [1, 2] +     */ +    function initial(array) { +      var length = array == null ? 0 : array.length; +      return length ? baseSlice(array, 0, -1) : []; +    } + +    /** +     * Creates an array of unique values that are included in all given arrays +     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +     * for equality comparisons. The order and references of result values are +     * determined by the first array. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Array +     * @param {...Array} [arrays] The arrays to inspect. +     * @returns {Array} Returns the new array of intersecting values. +     * @example +     * +     * _.intersection([2, 1], [2, 3]); +     * // => [2] +     */ +    var intersection = baseRest(function(arrays) { +      var mapped = arrayMap(arrays, castArrayLikeObject); +      return (mapped.length && mapped[0] === arrays[0]) +        ? baseIntersection(mapped) +        : []; +    }); + +    /** +     * This method is like `_.intersection` except that it accepts `iteratee` +     * which is invoked for each element of each `arrays` to generate the criterion +     * by which they're compared. The order and references of result values are +     * determined by the first array. The iteratee is invoked with one argument: +     * (value). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Array +     * @param {...Array} [arrays] The arrays to inspect. +     * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +     * @returns {Array} Returns the new array of intersecting values. +     * @example +     * +     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); +     * // => [2.1] +     * +     * // The `_.property` iteratee shorthand. +     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); +     * // => [{ 'x': 1 }] +     */ +    var intersectionBy = baseRest(function(arrays) { +      var iteratee = last(arrays), +          mapped = arrayMap(arrays, castArrayLikeObject); + +      if (iteratee === last(mapped)) { +        iteratee = undefined; +      } else { +        mapped.pop(); +      } +      return (mapped.length && mapped[0] === arrays[0]) +        ? baseIntersection(mapped, getIteratee(iteratee, 2)) +        : []; +    }); + +    /** +     * This method is like `_.intersection` except that it accepts `comparator` +     * which is invoked to compare elements of `arrays`. The order and references +     * of result values are determined by the first array. The comparator is +     * invoked with two arguments: (arrVal, othVal). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Array +     * @param {...Array} [arrays] The arrays to inspect. +     * @param {Function} [comparator] The comparator invoked per element. +     * @returns {Array} Returns the new array of intersecting values. +     * @example +     * +     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; +     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; +     * +     * _.intersectionWith(objects, others, _.isEqual); +     * // => [{ 'x': 1, 'y': 2 }] +     */ +    var intersectionWith = baseRest(function(arrays) { +      var comparator = last(arrays), +          mapped = arrayMap(arrays, castArrayLikeObject); + +      comparator = typeof comparator == 'function' ? comparator : undefined; +      if (comparator) { +        mapped.pop(); +      } +      return (mapped.length && mapped[0] === arrays[0]) +        ? baseIntersection(mapped, undefined, comparator) +        : []; +    }); + +    /** +     * Converts all elements in `array` into a string separated by `separator`. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Array +     * @param {Array} array The array to convert. +     * @param {string} [separator=','] The element separator. +     * @returns {string} Returns the joined string. +     * @example +     * +     * _.join(['a', 'b', 'c'], '~'); +     * // => 'a~b~c' +     */ +    function join(array, separator) { +      return array == null ? '' : nativeJoin.call(array, separator); +    } + +    /** +     * Gets the last element of `array`. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Array +     * @param {Array} array The array to query. +     * @returns {*} Returns the last element of `array`. +     * @example +     * +     * _.last([1, 2, 3]); +     * // => 3 +     */ +    function last(array) { +      var length = array == null ? 0 : array.length; +      return length ? array[length - 1] : undefined; +    } + +    /** +     * This method is like `_.indexOf` except that it iterates over elements of +     * `array` from right to left. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Array +     * @param {Array} array The array to inspect. +     * @param {*} value The value to search for. +     * @param {number} [fromIndex=array.length-1] The index to search from. +     * @returns {number} Returns the index of the matched value, else `-1`. +     * @example +     * +     * _.lastIndexOf([1, 2, 1, 2], 2); +     * // => 3 +     * +     * // Search from the `fromIndex`. +     * _.lastIndexOf([1, 2, 1, 2], 2, 2); +     * // => 1 +     */ +    function lastIndexOf(array, value, fromIndex) { +      var length = array == null ? 0 : array.length; +      if (!length) { +        return -1; +      } +      var index = length; +      if (fromIndex !== undefined) { +        index = toInteger(fromIndex); +        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); +      } +      return value === value +        ? strictLastIndexOf(array, value, index) +        : baseFindIndex(array, baseIsNaN, index, true); +    } + +    /** +     * Gets the element at index `n` of `array`. If `n` is negative, the nth +     * element from the end is returned. +     * +     * @static +     * @memberOf _ +     * @since 4.11.0 +     * @category Array +     * @param {Array} array The array to query. +     * @param {number} [n=0] The index of the element to return. +     * @returns {*} Returns the nth element of `array`. +     * @example +     * +     * var array = ['a', 'b', 'c', 'd']; +     * +     * _.nth(array, 1); +     * // => 'b' +     * +     * _.nth(array, -2); +     * // => 'c'; +     */ +    function nth(array, n) { +      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; +    } + +    /** +     * Removes all given values from `array` using +     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +     * for equality comparisons. +     * +     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` +     * to remove elements from an array by predicate. +     * +     * @static +     * @memberOf _ +     * @since 2.0.0 +     * @category Array +     * @param {Array} array The array to modify. +     * @param {...*} [values] The values to remove. +     * @returns {Array} Returns `array`. +     * @example +     * +     * var array = ['a', 'b', 'c', 'a', 'b', 'c']; +     * +     * _.pull(array, 'a', 'c'); +     * console.log(array); +     * // => ['b', 'b'] +     */ +    var pull = baseRest(pullAll); + +    /** +     * This method is like `_.pull` except that it accepts an array of values to remove. +     * +     * **Note:** Unlike `_.difference`, this method mutates `array`. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Array +     * @param {Array} array The array to modify. +     * @param {Array} values The values to remove. +     * @returns {Array} Returns `array`. +     * @example +     * +     * var array = ['a', 'b', 'c', 'a', 'b', 'c']; +     * +     * _.pullAll(array, ['a', 'c']); +     * console.log(array); +     * // => ['b', 'b'] +     */ +    function pullAll(array, values) { +      return (array && array.length && values && values.length) +        ? basePullAll(array, values) +        : array; +    } + +    /** +     * This method is like `_.pullAll` except that it accepts `iteratee` which is +     * invoked for each element of `array` and `values` to generate the criterion +     * by which they're compared. The iteratee is invoked with one argument: (value). +     * +     * **Note:** Unlike `_.differenceBy`, this method mutates `array`. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Array +     * @param {Array} array The array to modify. +     * @param {Array} values The values to remove. +     * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +     * @returns {Array} Returns `array`. +     * @example +     * +     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; +     * +     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); +     * console.log(array); +     * // => [{ 'x': 2 }] +     */ +    function pullAllBy(array, values, iteratee) { +      return (array && array.length && values && values.length) +        ? basePullAll(array, values, getIteratee(iteratee, 2)) +        : array; +    } + +    /** +     * This method is like `_.pullAll` except that it accepts `comparator` which +     * is invoked to compare elements of `array` to `values`. The comparator is +     * invoked with two arguments: (arrVal, othVal). +     * +     * **Note:** Unlike `_.differenceWith`, this method mutates `array`. +     * +     * @static +     * @memberOf _ +     * @since 4.6.0 +     * @category Array +     * @param {Array} array The array to modify. +     * @param {Array} values The values to remove. +     * @param {Function} [comparator] The comparator invoked per element. +     * @returns {Array} Returns `array`. +     * @example +     * +     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; +     * +     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); +     * console.log(array); +     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] +     */ +    function pullAllWith(array, values, comparator) { +      return (array && array.length && values && values.length) +        ? basePullAll(array, values, undefined, comparator) +        : array; +    } + +    /** +     * Removes elements from `array` corresponding to `indexes` and returns an +     * array of removed elements. +     * +     * **Note:** Unlike `_.at`, this method mutates `array`. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Array +     * @param {Array} array The array to modify. +     * @param {...(number|number[])} [indexes] The indexes of elements to remove. +     * @returns {Array} Returns the new array of removed elements. +     * @example +     * +     * var array = ['a', 'b', 'c', 'd']; +     * var pulled = _.pullAt(array, [1, 3]); +     * +     * console.log(array); +     * // => ['a', 'c'] +     * +     * console.log(pulled); +     * // => ['b', 'd'] +     */ +    var pullAt = flatRest(function(array, indexes) { +      var length = array == null ? 0 : array.length, +          result = baseAt(array, indexes); + +      basePullAt(array, arrayMap(indexes, function(index) { +        return isIndex(index, length) ? +index : index; +      }).sort(compareAscending)); + +      return result; +    }); + +    /** +     * Removes all elements from `array` that `predicate` returns truthy for +     * and returns an array of the removed elements. The predicate is invoked +     * with three arguments: (value, index, array). +     * +     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` +     * to pull elements from an array by value. +     * +     * @static +     * @memberOf _ +     * @since 2.0.0 +     * @category Array +     * @param {Array} array The array to modify. +     * @param {Function} [predicate=_.identity] The function invoked per iteration. +     * @returns {Array} Returns the new array of removed elements. +     * @example +     * +     * var array = [1, 2, 3, 4]; +     * var evens = _.remove(array, function(n) { +     *   return n % 2 == 0; +     * }); +     * +     * console.log(array); +     * // => [1, 3] +     * +     * console.log(evens); +     * // => [2, 4] +     */ +    function remove(array, predicate) { +      var result = []; +      if (!(array && array.length)) { +        return result; +      } +      var index = -1, +          indexes = [], +          length = array.length; + +      predicate = getIteratee(predicate, 3); +      while (++index < length) { +        var value = array[index]; +        if (predicate(value, index, array)) { +          result.push(value); +          indexes.push(index); +        } +      } +      basePullAt(array, indexes); +      return result; +    } + +    /** +     * Reverses `array` so that the first element becomes the last, the second +     * element becomes the second to last, and so on. +     * +     * **Note:** This method mutates `array` and is based on +     * [`Array#reverse`](https://mdn.io/Array/reverse). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Array +     * @param {Array} array The array to modify. +     * @returns {Array} Returns `array`. +     * @example +     * +     * var array = [1, 2, 3]; +     * +     * _.reverse(array); +     * // => [3, 2, 1] +     * +     * console.log(array); +     * // => [3, 2, 1] +     */ +    function reverse(array) { +      return array == null ? array : nativeReverse.call(array); +    } + +    /** +     * Creates a slice of `array` from `start` up to, but not including, `end`. +     * +     * **Note:** This method is used instead of +     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are +     * returned. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Array +     * @param {Array} array The array to slice. +     * @param {number} [start=0] The start position. +     * @param {number} [end=array.length] The end position. +     * @returns {Array} Returns the slice of `array`. +     */ +    function slice(array, start, end) { +      var length = array == null ? 0 : array.length; +      if (!length) { +        return []; +      } +      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { +        start = 0; +        end = length; +      } +      else { +        start = start == null ? 0 : toInteger(start); +        end = end === undefined ? length : toInteger(end); +      } +      return baseSlice(array, start, end); +    } + +    /** +     * Uses a binary search to determine the lowest index at which `value` +     * should be inserted into `array` in order to maintain its sort order. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Array +     * @param {Array} array The sorted array to inspect. +     * @param {*} value The value to evaluate. +     * @returns {number} Returns the index at which `value` should be inserted +     *  into `array`. +     * @example +     * +     * _.sortedIndex([30, 50], 40); +     * // => 1 +     */ +    function sortedIndex(array, value) { +      return baseSortedIndex(array, value); +    } + +    /** +     * This method is like `_.sortedIndex` except that it accepts `iteratee` +     * which is invoked for `value` and each element of `array` to compute their +     * sort ranking. The iteratee is invoked with one argument: (value). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Array +     * @param {Array} array The sorted array to inspect. +     * @param {*} value The value to evaluate. +     * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +     * @returns {number} Returns the index at which `value` should be inserted +     *  into `array`. +     * @example +     * +     * var objects = [{ 'x': 4 }, { 'x': 5 }]; +     * +     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); +     * // => 0 +     * +     * // The `_.property` iteratee shorthand. +     * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); +     * // => 0 +     */ +    function sortedIndexBy(array, value, iteratee) { +      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)); +    } + +    /** +     * This method is like `_.indexOf` except that it performs a binary +     * search on a sorted `array`. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Array +     * @param {Array} array The array to inspect. +     * @param {*} value The value to search for. +     * @returns {number} Returns the index of the matched value, else `-1`. +     * @example +     * +     * _.sortedIndexOf([4, 5, 5, 5, 6], 5); +     * // => 1 +     */ +    function sortedIndexOf(array, value) { +      var length = array == null ? 0 : array.length; +      if (length) { +        var index = baseSortedIndex(array, value); +        if (index < length && eq(array[index], value)) { +          return index; +        } +      } +      return -1; +    } + +    /** +     * This method is like `_.sortedIndex` except that it returns the highest +     * index at which `value` should be inserted into `array` in order to +     * maintain its sort order. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Array +     * @param {Array} array The sorted array to inspect. +     * @param {*} value The value to evaluate. +     * @returns {number} Returns the index at which `value` should be inserted +     *  into `array`. +     * @example +     * +     * _.sortedLastIndex([4, 5, 5, 5, 6], 5); +     * // => 4 +     */ +    function sortedLastIndex(array, value) { +      return baseSortedIndex(array, value, true); +    } + +    /** +     * This method is like `_.sortedLastIndex` except that it accepts `iteratee` +     * which is invoked for `value` and each element of `array` to compute their +     * sort ranking. The iteratee is invoked with one argument: (value). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Array +     * @param {Array} array The sorted array to inspect. +     * @param {*} value The value to evaluate. +     * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +     * @returns {number} Returns the index at which `value` should be inserted +     *  into `array`. +     * @example +     * +     * var objects = [{ 'x': 4 }, { 'x': 5 }]; +     * +     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); +     * // => 1 +     * +     * // The `_.property` iteratee shorthand. +     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); +     * // => 1 +     */ +    function sortedLastIndexBy(array, value, iteratee) { +      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true); +    } + +    /** +     * This method is like `_.lastIndexOf` except that it performs a binary +     * search on a sorted `array`. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Array +     * @param {Array} array The array to inspect. +     * @param {*} value The value to search for. +     * @returns {number} Returns the index of the matched value, else `-1`. +     * @example +     * +     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); +     * // => 3 +     */ +    function sortedLastIndexOf(array, value) { +      var length = array == null ? 0 : array.length; +      if (length) { +        var index = baseSortedIndex(array, value, true) - 1; +        if (eq(array[index], value)) { +          return index; +        } +      } +      return -1; +    } + +    /** +     * This method is like `_.uniq` except that it's designed and optimized +     * for sorted arrays. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Array +     * @param {Array} array The array to inspect. +     * @returns {Array} Returns the new duplicate free array. +     * @example +     * +     * _.sortedUniq([1, 1, 2]); +     * // => [1, 2] +     */ +    function sortedUniq(array) { +      return (array && array.length) +        ? baseSortedUniq(array) +        : []; +    } + +    /** +     * This method is like `_.uniqBy` except that it's designed and optimized +     * for sorted arrays. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Array +     * @param {Array} array The array to inspect. +     * @param {Function} [iteratee] The iteratee invoked per element. +     * @returns {Array} Returns the new duplicate free array. +     * @example +     * +     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); +     * // => [1.1, 2.3] +     */ +    function sortedUniqBy(array, iteratee) { +      return (array && array.length) +        ? baseSortedUniq(array, getIteratee(iteratee, 2)) +        : []; +    } + +    /** +     * Gets all but the first element of `array`. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Array +     * @param {Array} array The array to query. +     * @returns {Array} Returns the slice of `array`. +     * @example +     * +     * _.tail([1, 2, 3]); +     * // => [2, 3] +     */ +    function tail(array) { +      var length = array == null ? 0 : array.length; +      return length ? baseSlice(array, 1, length) : []; +    } + +    /** +     * Creates a slice of `array` with `n` elements taken from the beginning. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Array +     * @param {Array} array The array to query. +     * @param {number} [n=1] The number of elements to take. +     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +     * @returns {Array} Returns the slice of `array`. +     * @example +     * +     * _.take([1, 2, 3]); +     * // => [1] +     * +     * _.take([1, 2, 3], 2); +     * // => [1, 2] +     * +     * _.take([1, 2, 3], 5); +     * // => [1, 2, 3] +     * +     * _.take([1, 2, 3], 0); +     * // => [] +     */ +    function take(array, n, guard) { +      if (!(array && array.length)) { +        return []; +      } +      n = (guard || n === undefined) ? 1 : toInteger(n); +      return baseSlice(array, 0, n < 0 ? 0 : n); +    } + +    /** +     * Creates a slice of `array` with `n` elements taken from the end. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Array +     * @param {Array} array The array to query. +     * @param {number} [n=1] The number of elements to take. +     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +     * @returns {Array} Returns the slice of `array`. +     * @example +     * +     * _.takeRight([1, 2, 3]); +     * // => [3] +     * +     * _.takeRight([1, 2, 3], 2); +     * // => [2, 3] +     * +     * _.takeRight([1, 2, 3], 5); +     * // => [1, 2, 3] +     * +     * _.takeRight([1, 2, 3], 0); +     * // => [] +     */ +    function takeRight(array, n, guard) { +      var length = array == null ? 0 : array.length; +      if (!length) { +        return []; +      } +      n = (guard || n === undefined) ? 1 : toInteger(n); +      n = length - n; +      return baseSlice(array, n < 0 ? 0 : n, length); +    } + +    /** +     * Creates a slice of `array` with elements taken from the end. Elements are +     * taken until `predicate` returns falsey. The predicate is invoked with +     * three arguments: (value, index, array). +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Array +     * @param {Array} array The array to query. +     * @param {Function} [predicate=_.identity] The function invoked per iteration. +     * @returns {Array} Returns the slice of `array`. +     * @example +     * +     * var users = [ +     *   { 'user': 'barney',  'active': true }, +     *   { 'user': 'fred',    'active': false }, +     *   { 'user': 'pebbles', 'active': false } +     * ]; +     * +     * _.takeRightWhile(users, function(o) { return !o.active; }); +     * // => objects for ['fred', 'pebbles'] +     * +     * // The `_.matches` iteratee shorthand. +     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); +     * // => objects for ['pebbles'] +     * +     * // The `_.matchesProperty` iteratee shorthand. +     * _.takeRightWhile(users, ['active', false]); +     * // => objects for ['fred', 'pebbles'] +     * +     * // The `_.property` iteratee shorthand. +     * _.takeRightWhile(users, 'active'); +     * // => [] +     */ +    function takeRightWhile(array, predicate) { +      return (array && array.length) +        ? baseWhile(array, getIteratee(predicate, 3), false, true) +        : []; +    } + +    /** +     * Creates a slice of `array` with elements taken from the beginning. Elements +     * are taken until `predicate` returns falsey. The predicate is invoked with +     * three arguments: (value, index, array). +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Array +     * @param {Array} array The array to query. +     * @param {Function} [predicate=_.identity] The function invoked per iteration. +     * @returns {Array} Returns the slice of `array`. +     * @example +     * +     * var users = [ +     *   { 'user': 'barney',  'active': false }, +     *   { 'user': 'fred',    'active': false }, +     *   { 'user': 'pebbles', 'active': true } +     * ]; +     * +     * _.takeWhile(users, function(o) { return !o.active; }); +     * // => objects for ['barney', 'fred'] +     * +     * // The `_.matches` iteratee shorthand. +     * _.takeWhile(users, { 'user': 'barney', 'active': false }); +     * // => objects for ['barney'] +     * +     * // The `_.matchesProperty` iteratee shorthand. +     * _.takeWhile(users, ['active', false]); +     * // => objects for ['barney', 'fred'] +     * +     * // The `_.property` iteratee shorthand. +     * _.takeWhile(users, 'active'); +     * // => [] +     */ +    function takeWhile(array, predicate) { +      return (array && array.length) +        ? baseWhile(array, getIteratee(predicate, 3)) +        : []; +    } + +    /** +     * Creates an array of unique values, in order, from all given arrays using +     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +     * for equality comparisons. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Array +     * @param {...Array} [arrays] The arrays to inspect. +     * @returns {Array} Returns the new array of combined values. +     * @example +     * +     * _.union([2], [1, 2]); +     * // => [2, 1] +     */ +    var union = baseRest(function(arrays) { +      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); +    }); + +    /** +     * This method is like `_.union` except that it accepts `iteratee` which is +     * invoked for each element of each `arrays` to generate the criterion by +     * which uniqueness is computed. Result values are chosen from the first +     * array in which the value occurs. The iteratee is invoked with one argument: +     * (value). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Array +     * @param {...Array} [arrays] The arrays to inspect. +     * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +     * @returns {Array} Returns the new array of combined values. +     * @example +     * +     * _.unionBy([2.1], [1.2, 2.3], Math.floor); +     * // => [2.1, 1.2] +     * +     * // The `_.property` iteratee shorthand. +     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); +     * // => [{ 'x': 1 }, { 'x': 2 }] +     */ +    var unionBy = baseRest(function(arrays) { +      var iteratee = last(arrays); +      if (isArrayLikeObject(iteratee)) { +        iteratee = undefined; +      } +      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)); +    }); + +    /** +     * This method is like `_.union` except that it accepts `comparator` which +     * is invoked to compare elements of `arrays`. Result values are chosen from +     * the first array in which the value occurs. The comparator is invoked +     * with two arguments: (arrVal, othVal). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Array +     * @param {...Array} [arrays] The arrays to inspect. +     * @param {Function} [comparator] The comparator invoked per element. +     * @returns {Array} Returns the new array of combined values. +     * @example +     * +     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; +     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; +     * +     * _.unionWith(objects, others, _.isEqual); +     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] +     */ +    var unionWith = baseRest(function(arrays) { +      var comparator = last(arrays); +      comparator = typeof comparator == 'function' ? comparator : undefined; +      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); +    }); + +    /** +     * Creates a duplicate-free version of an array, using +     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +     * for equality comparisons, in which only the first occurrence of each element +     * is kept. The order of result values is determined by the order they occur +     * in the array. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Array +     * @param {Array} array The array to inspect. +     * @returns {Array} Returns the new duplicate free array. +     * @example +     * +     * _.uniq([2, 1, 2]); +     * // => [2, 1] +     */ +    function uniq(array) { +      return (array && array.length) ? baseUniq(array) : []; +    } + +    /** +     * This method is like `_.uniq` except that it accepts `iteratee` which is +     * invoked for each element in `array` to generate the criterion by which +     * uniqueness is computed. The order of result values is determined by the +     * order they occur in the array. The iteratee is invoked with one argument: +     * (value). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Array +     * @param {Array} array The array to inspect. +     * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +     * @returns {Array} Returns the new duplicate free array. +     * @example +     * +     * _.uniqBy([2.1, 1.2, 2.3], Math.floor); +     * // => [2.1, 1.2] +     * +     * // The `_.property` iteratee shorthand. +     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); +     * // => [{ 'x': 1 }, { 'x': 2 }] +     */ +    function uniqBy(array, iteratee) { +      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : []; +    } + +    /** +     * This method is like `_.uniq` except that it accepts `comparator` which +     * is invoked to compare elements of `array`. The order of result values is +     * determined by the order they occur in the array.The comparator is invoked +     * with two arguments: (arrVal, othVal). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Array +     * @param {Array} array The array to inspect. +     * @param {Function} [comparator] The comparator invoked per element. +     * @returns {Array} Returns the new duplicate free array. +     * @example +     * +     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; +     * +     * _.uniqWith(objects, _.isEqual); +     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] +     */ +    function uniqWith(array, comparator) { +      comparator = typeof comparator == 'function' ? comparator : undefined; +      return (array && array.length) ? baseUniq(array, undefined, comparator) : []; +    } + +    /** +     * This method is like `_.zip` except that it accepts an array of grouped +     * elements and creates an array regrouping the elements to their pre-zip +     * configuration. +     * +     * @static +     * @memberOf _ +     * @since 1.2.0 +     * @category Array +     * @param {Array} array The array of grouped elements to process. +     * @returns {Array} Returns the new array of regrouped elements. +     * @example +     * +     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); +     * // => [['a', 1, true], ['b', 2, false]] +     * +     * _.unzip(zipped); +     * // => [['a', 'b'], [1, 2], [true, false]] +     */ +    function unzip(array) { +      if (!(array && array.length)) { +        return []; +      } +      var length = 0; +      array = arrayFilter(array, function(group) { +        if (isArrayLikeObject(group)) { +          length = nativeMax(group.length, length); +          return true; +        } +      }); +      return baseTimes(length, function(index) { +        return arrayMap(array, baseProperty(index)); +      }); +    } + +    /** +     * This method is like `_.unzip` except that it accepts `iteratee` to specify +     * how regrouped values should be combined. The iteratee is invoked with the +     * elements of each group: (...group). +     * +     * @static +     * @memberOf _ +     * @since 3.8.0 +     * @category Array +     * @param {Array} array The array of grouped elements to process. +     * @param {Function} [iteratee=_.identity] The function to combine +     *  regrouped values. +     * @returns {Array} Returns the new array of regrouped elements. +     * @example +     * +     * var zipped = _.zip([1, 2], [10, 20], [100, 200]); +     * // => [[1, 10, 100], [2, 20, 200]] +     * +     * _.unzipWith(zipped, _.add); +     * // => [3, 30, 300] +     */ +    function unzipWith(array, iteratee) { +      if (!(array && array.length)) { +        return []; +      } +      var result = unzip(array); +      if (iteratee == null) { +        return result; +      } +      return arrayMap(result, function(group) { +        return apply(iteratee, undefined, group); +      }); +    } + +    /** +     * Creates an array excluding all given values using +     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +     * for equality comparisons. +     * +     * **Note:** Unlike `_.pull`, this method returns a new array. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Array +     * @param {Array} array The array to inspect. +     * @param {...*} [values] The values to exclude. +     * @returns {Array} Returns the new array of filtered values. +     * @see _.difference, _.xor +     * @example +     * +     * _.without([2, 1, 2, 3], 1, 2); +     * // => [3] +     */ +    var without = baseRest(function(array, values) { +      return isArrayLikeObject(array) +        ? baseDifference(array, values) +        : []; +    }); + +    /** +     * Creates an array of unique values that is the +     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) +     * of the given arrays. The order of result values is determined by the order +     * they occur in the arrays. +     * +     * @static +     * @memberOf _ +     * @since 2.4.0 +     * @category Array +     * @param {...Array} [arrays] The arrays to inspect. +     * @returns {Array} Returns the new array of filtered values. +     * @see _.difference, _.without +     * @example +     * +     * _.xor([2, 1], [2, 3]); +     * // => [1, 3] +     */ +    var xor = baseRest(function(arrays) { +      return baseXor(arrayFilter(arrays, isArrayLikeObject)); +    }); + +    /** +     * This method is like `_.xor` except that it accepts `iteratee` which is +     * invoked for each element of each `arrays` to generate the criterion by +     * which by which they're compared. The order of result values is determined +     * by the order they occur in the arrays. The iteratee is invoked with one +     * argument: (value). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Array +     * @param {...Array} [arrays] The arrays to inspect. +     * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +     * @returns {Array} Returns the new array of filtered values. +     * @example +     * +     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); +     * // => [1.2, 3.4] +     * +     * // The `_.property` iteratee shorthand. +     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); +     * // => [{ 'x': 2 }] +     */ +    var xorBy = baseRest(function(arrays) { +      var iteratee = last(arrays); +      if (isArrayLikeObject(iteratee)) { +        iteratee = undefined; +      } +      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2)); +    }); + +    /** +     * This method is like `_.xor` except that it accepts `comparator` which is +     * invoked to compare elements of `arrays`. The order of result values is +     * determined by the order they occur in the arrays. The comparator is invoked +     * with two arguments: (arrVal, othVal). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Array +     * @param {...Array} [arrays] The arrays to inspect. +     * @param {Function} [comparator] The comparator invoked per element. +     * @returns {Array} Returns the new array of filtered values. +     * @example +     * +     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; +     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; +     * +     * _.xorWith(objects, others, _.isEqual); +     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] +     */ +    var xorWith = baseRest(function(arrays) { +      var comparator = last(arrays); +      comparator = typeof comparator == 'function' ? comparator : undefined; +      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); +    }); + +    /** +     * Creates an array of grouped elements, the first of which contains the +     * first elements of the given arrays, the second of which contains the +     * second elements of the given arrays, and so on. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Array +     * @param {...Array} [arrays] The arrays to process. +     * @returns {Array} Returns the new array of grouped elements. +     * @example +     * +     * _.zip(['a', 'b'], [1, 2], [true, false]); +     * // => [['a', 1, true], ['b', 2, false]] +     */ +    var zip = baseRest(unzip); + +    /** +     * This method is like `_.fromPairs` except that it accepts two arrays, +     * one of property identifiers and one of corresponding values. +     * +     * @static +     * @memberOf _ +     * @since 0.4.0 +     * @category Array +     * @param {Array} [props=[]] The property identifiers. +     * @param {Array} [values=[]] The property values. +     * @returns {Object} Returns the new object. +     * @example +     * +     * _.zipObject(['a', 'b'], [1, 2]); +     * // => { 'a': 1, 'b': 2 } +     */ +    function zipObject(props, values) { +      return baseZipObject(props || [], values || [], assignValue); +    } + +    /** +     * This method is like `_.zipObject` except that it supports property paths. +     * +     * @static +     * @memberOf _ +     * @since 4.1.0 +     * @category Array +     * @param {Array} [props=[]] The property identifiers. +     * @param {Array} [values=[]] The property values. +     * @returns {Object} Returns the new object. +     * @example +     * +     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); +     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } +     */ +    function zipObjectDeep(props, values) { +      return baseZipObject(props || [], values || [], baseSet); +    } + +    /** +     * This method is like `_.zip` except that it accepts `iteratee` to specify +     * how grouped values should be combined. The iteratee is invoked with the +     * elements of each group: (...group). +     * +     * @static +     * @memberOf _ +     * @since 3.8.0 +     * @category Array +     * @param {...Array} [arrays] The arrays to process. +     * @param {Function} [iteratee=_.identity] The function to combine +     *  grouped values. +     * @returns {Array} Returns the new array of grouped elements. +     * @example +     * +     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { +     *   return a + b + c; +     * }); +     * // => [111, 222] +     */ +    var zipWith = baseRest(function(arrays) { +      var length = arrays.length, +          iteratee = length > 1 ? arrays[length - 1] : undefined; + +      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; +      return unzipWith(arrays, iteratee); +    }); + +    /*------------------------------------------------------------------------*/ + +    /** +     * Creates a `lodash` wrapper instance that wraps `value` with explicit method +     * chain sequences enabled. The result of such sequences must be unwrapped +     * with `_#value`. +     * +     * @static +     * @memberOf _ +     * @since 1.3.0 +     * @category Seq +     * @param {*} value The value to wrap. +     * @returns {Object} Returns the new `lodash` wrapper instance. +     * @example +     * +     * var users = [ +     *   { 'user': 'barney',  'age': 36 }, +     *   { 'user': 'fred',    'age': 40 }, +     *   { 'user': 'pebbles', 'age': 1 } +     * ]; +     * +     * var youngest = _ +     *   .chain(users) +     *   .sortBy('age') +     *   .map(function(o) { +     *     return o.user + ' is ' + o.age; +     *   }) +     *   .head() +     *   .value(); +     * // => 'pebbles is 1' +     */ +    function chain(value) { +      var result = lodash(value); +      result.__chain__ = true; +      return result; +    } + +    /** +     * This method invokes `interceptor` and returns `value`. The interceptor +     * is invoked with one argument; (value). The purpose of this method is to +     * "tap into" a method chain sequence in order to modify intermediate results. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Seq +     * @param {*} value The value to provide to `interceptor`. +     * @param {Function} interceptor The function to invoke. +     * @returns {*} Returns `value`. +     * @example +     * +     * _([1, 2, 3]) +     *  .tap(function(array) { +     *    // Mutate input array. +     *    array.pop(); +     *  }) +     *  .reverse() +     *  .value(); +     * // => [2, 1] +     */ +    function tap(value, interceptor) { +      interceptor(value); +      return value; +    } + +    /** +     * This method is like `_.tap` except that it returns the result of `interceptor`. +     * The purpose of this method is to "pass thru" values replacing intermediate +     * results in a method chain sequence. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Seq +     * @param {*} value The value to provide to `interceptor`. +     * @param {Function} interceptor The function to invoke. +     * @returns {*} Returns the result of `interceptor`. +     * @example +     * +     * _('  abc  ') +     *  .chain() +     *  .trim() +     *  .thru(function(value) { +     *    return [value]; +     *  }) +     *  .value(); +     * // => ['abc'] +     */ +    function thru(value, interceptor) { +      return interceptor(value); +    } + +    /** +     * This method is the wrapper version of `_.at`. +     * +     * @name at +     * @memberOf _ +     * @since 1.0.0 +     * @category Seq +     * @param {...(string|string[])} [paths] The property paths to pick. +     * @returns {Object} Returns the new `lodash` wrapper instance. +     * @example +     * +     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; +     * +     * _(object).at(['a[0].b.c', 'a[1]']).value(); +     * // => [3, 4] +     */ +    var wrapperAt = flatRest(function(paths) { +      var length = paths.length, +          start = length ? paths[0] : 0, +          value = this.__wrapped__, +          interceptor = function(object) { return baseAt(object, paths); }; + +      if (length > 1 || this.__actions__.length || +          !(value instanceof LazyWrapper) || !isIndex(start)) { +        return this.thru(interceptor); +      } +      value = value.slice(start, +start + (length ? 1 : 0)); +      value.__actions__.push({ +        'func': thru, +        'args': [interceptor], +        'thisArg': undefined +      }); +      return new LodashWrapper(value, this.__chain__).thru(function(array) { +        if (length && !array.length) { +          array.push(undefined); +        } +        return array; +      }); +    }); + +    /** +     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. +     * +     * @name chain +     * @memberOf _ +     * @since 0.1.0 +     * @category Seq +     * @returns {Object} Returns the new `lodash` wrapper instance. +     * @example +     * +     * var users = [ +     *   { 'user': 'barney', 'age': 36 }, +     *   { 'user': 'fred',   'age': 40 } +     * ]; +     * +     * // A sequence without explicit chaining. +     * _(users).head(); +     * // => { 'user': 'barney', 'age': 36 } +     * +     * // A sequence with explicit chaining. +     * _(users) +     *   .chain() +     *   .head() +     *   .pick('user') +     *   .value(); +     * // => { 'user': 'barney' } +     */ +    function wrapperChain() { +      return chain(this); +    } + +    /** +     * Executes the chain sequence and returns the wrapped result. +     * +     * @name commit +     * @memberOf _ +     * @since 3.2.0 +     * @category Seq +     * @returns {Object} Returns the new `lodash` wrapper instance. +     * @example +     * +     * var array = [1, 2]; +     * var wrapped = _(array).push(3); +     * +     * console.log(array); +     * // => [1, 2] +     * +     * wrapped = wrapped.commit(); +     * console.log(array); +     * // => [1, 2, 3] +     * +     * wrapped.last(); +     * // => 3 +     * +     * console.log(array); +     * // => [1, 2, 3] +     */ +    function wrapperCommit() { +      return new LodashWrapper(this.value(), this.__chain__); +    } + +    /** +     * Gets the next value on a wrapped object following the +     * [iterator protocol](https://mdn.io/iteration_protocols#iterator). +     * +     * @name next +     * @memberOf _ +     * @since 4.0.0 +     * @category Seq +     * @returns {Object} Returns the next iterator value. +     * @example +     * +     * var wrapped = _([1, 2]); +     * +     * wrapped.next(); +     * // => { 'done': false, 'value': 1 } +     * +     * wrapped.next(); +     * // => { 'done': false, 'value': 2 } +     * +     * wrapped.next(); +     * // => { 'done': true, 'value': undefined } +     */ +    function wrapperNext() { +      if (this.__values__ === undefined) { +        this.__values__ = toArray(this.value()); +      } +      var done = this.__index__ >= this.__values__.length, +          value = done ? undefined : this.__values__[this.__index__++]; + +      return { 'done': done, 'value': value }; +    } + +    /** +     * Enables the wrapper to be iterable. +     * +     * @name Symbol.iterator +     * @memberOf _ +     * @since 4.0.0 +     * @category Seq +     * @returns {Object} Returns the wrapper object. +     * @example +     * +     * var wrapped = _([1, 2]); +     * +     * wrapped[Symbol.iterator]() === wrapped; +     * // => true +     * +     * Array.from(wrapped); +     * // => [1, 2] +     */ +    function wrapperToIterator() { +      return this; +    } + +    /** +     * Creates a clone of the chain sequence planting `value` as the wrapped value. +     * +     * @name plant +     * @memberOf _ +     * @since 3.2.0 +     * @category Seq +     * @param {*} value The value to plant. +     * @returns {Object} Returns the new `lodash` wrapper instance. +     * @example +     * +     * function square(n) { +     *   return n * n; +     * } +     * +     * var wrapped = _([1, 2]).map(square); +     * var other = wrapped.plant([3, 4]); +     * +     * other.value(); +     * // => [9, 16] +     * +     * wrapped.value(); +     * // => [1, 4] +     */ +    function wrapperPlant(value) { +      var result, +          parent = this; + +      while (parent instanceof baseLodash) { +        var clone = wrapperClone(parent); +        clone.__index__ = 0; +        clone.__values__ = undefined; +        if (result) { +          previous.__wrapped__ = clone; +        } else { +          result = clone; +        } +        var previous = clone; +        parent = parent.__wrapped__; +      } +      previous.__wrapped__ = value; +      return result; +    } + +    /** +     * This method is the wrapper version of `_.reverse`. +     * +     * **Note:** This method mutates the wrapped array. +     * +     * @name reverse +     * @memberOf _ +     * @since 0.1.0 +     * @category Seq +     * @returns {Object} Returns the new `lodash` wrapper instance. +     * @example +     * +     * var array = [1, 2, 3]; +     * +     * _(array).reverse().value() +     * // => [3, 2, 1] +     * +     * console.log(array); +     * // => [3, 2, 1] +     */ +    function wrapperReverse() { +      var value = this.__wrapped__; +      if (value instanceof LazyWrapper) { +        var wrapped = value; +        if (this.__actions__.length) { +          wrapped = new LazyWrapper(this); +        } +        wrapped = wrapped.reverse(); +        wrapped.__actions__.push({ +          'func': thru, +          'args': [reverse], +          'thisArg': undefined +        }); +        return new LodashWrapper(wrapped, this.__chain__); +      } +      return this.thru(reverse); +    } + +    /** +     * Executes the chain sequence to resolve the unwrapped value. +     * +     * @name value +     * @memberOf _ +     * @since 0.1.0 +     * @alias toJSON, valueOf +     * @category Seq +     * @returns {*} Returns the resolved unwrapped value. +     * @example +     * +     * _([1, 2, 3]).value(); +     * // => [1, 2, 3] +     */ +    function wrapperValue() { +      return baseWrapperValue(this.__wrapped__, this.__actions__); +    } + +    /*------------------------------------------------------------------------*/ + +    /** +     * Creates an object composed of keys generated from the results of running +     * each element of `collection` thru `iteratee`. The corresponding value of +     * each key is the number of times the key was returned by `iteratee`. The +     * iteratee is invoked with one argument: (value). +     * +     * @static +     * @memberOf _ +     * @since 0.5.0 +     * @category Collection +     * @param {Array|Object} collection The collection to iterate over. +     * @param {Function} [iteratee=_.identity] The iteratee to transform keys. +     * @returns {Object} Returns the composed aggregate object. +     * @example +     * +     * _.countBy([6.1, 4.2, 6.3], Math.floor); +     * // => { '4': 1, '6': 2 } +     * +     * // The `_.property` iteratee shorthand. +     * _.countBy(['one', 'two', 'three'], 'length'); +     * // => { '3': 2, '5': 1 } +     */ +    var countBy = createAggregator(function(result, value, key) { +      if (hasOwnProperty.call(result, key)) { +        ++result[key]; +      } else { +        baseAssignValue(result, key, 1); +      } +    }); + +    /** +     * Checks if `predicate` returns truthy for **all** elements of `collection`. +     * Iteration is stopped once `predicate` returns falsey. The predicate is +     * invoked with three arguments: (value, index|key, collection). +     * +     * **Note:** This method returns `true` for +     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because +     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of +     * elements of empty collections. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Collection +     * @param {Array|Object} collection The collection to iterate over. +     * @param {Function} [predicate=_.identity] The function invoked per iteration. +     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +     * @returns {boolean} Returns `true` if all elements pass the predicate check, +     *  else `false`. +     * @example +     * +     * _.every([true, 1, null, 'yes'], Boolean); +     * // => false +     * +     * var users = [ +     *   { 'user': 'barney', 'age': 36, 'active': false }, +     *   { 'user': 'fred',   'age': 40, 'active': false } +     * ]; +     * +     * // The `_.matches` iteratee shorthand. +     * _.every(users, { 'user': 'barney', 'active': false }); +     * // => false +     * +     * // The `_.matchesProperty` iteratee shorthand. +     * _.every(users, ['active', false]); +     * // => true +     * +     * // The `_.property` iteratee shorthand. +     * _.every(users, 'active'); +     * // => false +     */ +    function every(collection, predicate, guard) { +      var func = isArray(collection) ? arrayEvery : baseEvery; +      if (guard && isIterateeCall(collection, predicate, guard)) { +        predicate = undefined; +      } +      return func(collection, getIteratee(predicate, 3)); +    } + +    /** +     * Iterates over elements of `collection`, returning an array of all elements +     * `predicate` returns truthy for. The predicate is invoked with three +     * arguments: (value, index|key, collection). +     * +     * **Note:** Unlike `_.remove`, this method returns a new array. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Collection +     * @param {Array|Object} collection The collection to iterate over. +     * @param {Function} [predicate=_.identity] The function invoked per iteration. +     * @returns {Array} Returns the new filtered array. +     * @see _.reject +     * @example +     * +     * var users = [ +     *   { 'user': 'barney', 'age': 36, 'active': true }, +     *   { 'user': 'fred',   'age': 40, 'active': false } +     * ]; +     * +     * _.filter(users, function(o) { return !o.active; }); +     * // => objects for ['fred'] +     * +     * // The `_.matches` iteratee shorthand. +     * _.filter(users, { 'age': 36, 'active': true }); +     * // => objects for ['barney'] +     * +     * // The `_.matchesProperty` iteratee shorthand. +     * _.filter(users, ['active', false]); +     * // => objects for ['fred'] +     * +     * // The `_.property` iteratee shorthand. +     * _.filter(users, 'active'); +     * // => objects for ['barney'] +     * +     * // Combining several predicates using `_.overEvery` or `_.overSome`. +     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); +     * // => objects for ['fred', 'barney'] +     */ +    function filter(collection, predicate) { +      var func = isArray(collection) ? arrayFilter : baseFilter; +      return func(collection, getIteratee(predicate, 3)); +    } + +    /** +     * Iterates over elements of `collection`, returning the first element +     * `predicate` returns truthy for. The predicate is invoked with three +     * arguments: (value, index|key, collection). +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Collection +     * @param {Array|Object} collection The collection to inspect. +     * @param {Function} [predicate=_.identity] The function invoked per iteration. +     * @param {number} [fromIndex=0] The index to search from. +     * @returns {*} Returns the matched element, else `undefined`. +     * @example +     * +     * var users = [ +     *   { 'user': 'barney',  'age': 36, 'active': true }, +     *   { 'user': 'fred',    'age': 40, 'active': false }, +     *   { 'user': 'pebbles', 'age': 1,  'active': true } +     * ]; +     * +     * _.find(users, function(o) { return o.age < 40; }); +     * // => object for 'barney' +     * +     * // The `_.matches` iteratee shorthand. +     * _.find(users, { 'age': 1, 'active': true }); +     * // => object for 'pebbles' +     * +     * // The `_.matchesProperty` iteratee shorthand. +     * _.find(users, ['active', false]); +     * // => object for 'fred' +     * +     * // The `_.property` iteratee shorthand. +     * _.find(users, 'active'); +     * // => object for 'barney' +     */ +    var find = createFind(findIndex); + +    /** +     * This method is like `_.find` except that it iterates over elements of +     * `collection` from right to left. +     * +     * @static +     * @memberOf _ +     * @since 2.0.0 +     * @category Collection +     * @param {Array|Object} collection The collection to inspect. +     * @param {Function} [predicate=_.identity] The function invoked per iteration. +     * @param {number} [fromIndex=collection.length-1] The index to search from. +     * @returns {*} Returns the matched element, else `undefined`. +     * @example +     * +     * _.findLast([1, 2, 3, 4], function(n) { +     *   return n % 2 == 1; +     * }); +     * // => 3 +     */ +    var findLast = createFind(findLastIndex); + +    /** +     * Creates a flattened array of values by running each element in `collection` +     * thru `iteratee` and flattening the mapped results. The iteratee is invoked +     * with three arguments: (value, index|key, collection). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Collection +     * @param {Array|Object} collection The collection to iterate over. +     * @param {Function} [iteratee=_.identity] The function invoked per iteration. +     * @returns {Array} Returns the new flattened array. +     * @example +     * +     * function duplicate(n) { +     *   return [n, n]; +     * } +     * +     * _.flatMap([1, 2], duplicate); +     * // => [1, 1, 2, 2] +     */ +    function flatMap(collection, iteratee) { +      return baseFlatten(map(collection, iteratee), 1); +    } + +    /** +     * This method is like `_.flatMap` except that it recursively flattens the +     * mapped results. +     * +     * @static +     * @memberOf _ +     * @since 4.7.0 +     * @category Collection +     * @param {Array|Object} collection The collection to iterate over. +     * @param {Function} [iteratee=_.identity] The function invoked per iteration. +     * @returns {Array} Returns the new flattened array. +     * @example +     * +     * function duplicate(n) { +     *   return [[[n, n]]]; +     * } +     * +     * _.flatMapDeep([1, 2], duplicate); +     * // => [1, 1, 2, 2] +     */ +    function flatMapDeep(collection, iteratee) { +      return baseFlatten(map(collection, iteratee), INFINITY); +    } + +    /** +     * This method is like `_.flatMap` except that it recursively flattens the +     * mapped results up to `depth` times. +     * +     * @static +     * @memberOf _ +     * @since 4.7.0 +     * @category Collection +     * @param {Array|Object} collection The collection to iterate over. +     * @param {Function} [iteratee=_.identity] The function invoked per iteration. +     * @param {number} [depth=1] The maximum recursion depth. +     * @returns {Array} Returns the new flattened array. +     * @example +     * +     * function duplicate(n) { +     *   return [[[n, n]]]; +     * } +     * +     * _.flatMapDepth([1, 2], duplicate, 2); +     * // => [[1, 1], [2, 2]] +     */ +    function flatMapDepth(collection, iteratee, depth) { +      depth = depth === undefined ? 1 : toInteger(depth); +      return baseFlatten(map(collection, iteratee), depth); +    } + +    /** +     * Iterates over elements of `collection` and invokes `iteratee` for each element. +     * The iteratee is invoked with three arguments: (value, index|key, collection). +     * Iteratee functions may exit iteration early by explicitly returning `false`. +     * +     * **Note:** As with other "Collections" methods, objects with a "length" +     * property are iterated like arrays. To avoid this behavior use `_.forIn` +     * or `_.forOwn` for object iteration. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @alias each +     * @category Collection +     * @param {Array|Object} collection The collection to iterate over. +     * @param {Function} [iteratee=_.identity] The function invoked per iteration. +     * @returns {Array|Object} Returns `collection`. +     * @see _.forEachRight +     * @example +     * +     * _.forEach([1, 2], function(value) { +     *   console.log(value); +     * }); +     * // => Logs `1` then `2`. +     * +     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { +     *   console.log(key); +     * }); +     * // => Logs 'a' then 'b' (iteration order is not guaranteed). +     */ +    function forEach(collection, iteratee) { +      var func = isArray(collection) ? arrayEach : baseEach; +      return func(collection, getIteratee(iteratee, 3)); +    } + +    /** +     * This method is like `_.forEach` except that it iterates over elements of +     * `collection` from right to left. +     * +     * @static +     * @memberOf _ +     * @since 2.0.0 +     * @alias eachRight +     * @category Collection +     * @param {Array|Object} collection The collection to iterate over. +     * @param {Function} [iteratee=_.identity] The function invoked per iteration. +     * @returns {Array|Object} Returns `collection`. +     * @see _.forEach +     * @example +     * +     * _.forEachRight([1, 2], function(value) { +     *   console.log(value); +     * }); +     * // => Logs `2` then `1`. +     */ +    function forEachRight(collection, iteratee) { +      var func = isArray(collection) ? arrayEachRight : baseEachRight; +      return func(collection, getIteratee(iteratee, 3)); +    } + +    /** +     * Creates an object composed of keys generated from the results of running +     * each element of `collection` thru `iteratee`. The order of grouped values +     * is determined by the order they occur in `collection`. The corresponding +     * value of each key is an array of elements responsible for generating the +     * key. The iteratee is invoked with one argument: (value). +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Collection +     * @param {Array|Object} collection The collection to iterate over. +     * @param {Function} [iteratee=_.identity] The iteratee to transform keys. +     * @returns {Object} Returns the composed aggregate object. +     * @example +     * +     * _.groupBy([6.1, 4.2, 6.3], Math.floor); +     * // => { '4': [4.2], '6': [6.1, 6.3] } +     * +     * // The `_.property` iteratee shorthand. +     * _.groupBy(['one', 'two', 'three'], 'length'); +     * // => { '3': ['one', 'two'], '5': ['three'] } +     */ +    var groupBy = createAggregator(function(result, value, key) { +      if (hasOwnProperty.call(result, key)) { +        result[key].push(value); +      } else { +        baseAssignValue(result, key, [value]); +      } +    }); + +    /** +     * Checks if `value` is in `collection`. If `collection` is a string, it's +     * checked for a substring of `value`, otherwise +     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +     * is used for equality comparisons. If `fromIndex` is negative, it's used as +     * the offset from the end of `collection`. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Collection +     * @param {Array|Object|string} collection The collection to inspect. +     * @param {*} value The value to search for. +     * @param {number} [fromIndex=0] The index to search from. +     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. +     * @returns {boolean} Returns `true` if `value` is found, else `false`. +     * @example +     * +     * _.includes([1, 2, 3], 1); +     * // => true +     * +     * _.includes([1, 2, 3], 1, 2); +     * // => false +     * +     * _.includes({ 'a': 1, 'b': 2 }, 1); +     * // => true +     * +     * _.includes('abcd', 'bc'); +     * // => true +     */ +    function includes(collection, value, fromIndex, guard) { +      collection = isArrayLike(collection) ? collection : values(collection); +      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; + +      var length = collection.length; +      if (fromIndex < 0) { +        fromIndex = nativeMax(length + fromIndex, 0); +      } +      return isString(collection) +        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) +        : (!!length && baseIndexOf(collection, value, fromIndex) > -1); +    } + +    /** +     * Invokes the method at `path` of each element in `collection`, returning +     * an array of the results of each invoked method. Any additional arguments +     * are provided to each invoked method. If `path` is a function, it's invoked +     * for, and `this` bound to, each element in `collection`. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Collection +     * @param {Array|Object} collection The collection to iterate over. +     * @param {Array|Function|string} path The path of the method to invoke or +     *  the function invoked per iteration. +     * @param {...*} [args] The arguments to invoke each method with. +     * @returns {Array} Returns the array of results. +     * @example +     * +     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); +     * // => [[1, 5, 7], [1, 2, 3]] +     * +     * _.invokeMap([123, 456], String.prototype.split, ''); +     * // => [['1', '2', '3'], ['4', '5', '6']] +     */ +    var invokeMap = baseRest(function(collection, path, args) { +      var index = -1, +          isFunc = typeof path == 'function', +          result = isArrayLike(collection) ? Array(collection.length) : []; + +      baseEach(collection, function(value) { +        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); +      }); +      return result; +    }); + +    /** +     * Creates an object composed of keys generated from the results of running +     * each element of `collection` thru `iteratee`. The corresponding value of +     * each key is the last element responsible for generating the key. The +     * iteratee is invoked with one argument: (value). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Collection +     * @param {Array|Object} collection The collection to iterate over. +     * @param {Function} [iteratee=_.identity] The iteratee to transform keys. +     * @returns {Object} Returns the composed aggregate object. +     * @example +     * +     * var array = [ +     *   { 'dir': 'left', 'code': 97 }, +     *   { 'dir': 'right', 'code': 100 } +     * ]; +     * +     * _.keyBy(array, function(o) { +     *   return String.fromCharCode(o.code); +     * }); +     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } +     * +     * _.keyBy(array, 'dir'); +     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } +     */ +    var keyBy = createAggregator(function(result, value, key) { +      baseAssignValue(result, key, value); +    }); + +    /** +     * Creates an array of values by running each element in `collection` thru +     * `iteratee`. The iteratee is invoked with three arguments: +     * (value, index|key, collection). +     * +     * Many lodash methods are guarded to work as iteratees for methods like +     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. +     * +     * The guarded methods are: +     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, +     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, +     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, +     * `template`, `trim`, `trimEnd`, `trimStart`, and `words` +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Collection +     * @param {Array|Object} collection The collection to iterate over. +     * @param {Function} [iteratee=_.identity] The function invoked per iteration. +     * @returns {Array} Returns the new mapped array. +     * @example +     * +     * function square(n) { +     *   return n * n; +     * } +     * +     * _.map([4, 8], square); +     * // => [16, 64] +     * +     * _.map({ 'a': 4, 'b': 8 }, square); +     * // => [16, 64] (iteration order is not guaranteed) +     * +     * var users = [ +     *   { 'user': 'barney' }, +     *   { 'user': 'fred' } +     * ]; +     * +     * // The `_.property` iteratee shorthand. +     * _.map(users, 'user'); +     * // => ['barney', 'fred'] +     */ +    function map(collection, iteratee) { +      var func = isArray(collection) ? arrayMap : baseMap; +      return func(collection, getIteratee(iteratee, 3)); +    } + +    /** +     * This method is like `_.sortBy` except that it allows specifying the sort +     * orders of the iteratees to sort by. If `orders` is unspecified, all values +     * are sorted in ascending order. Otherwise, specify an order of "desc" for +     * descending or "asc" for ascending sort order of corresponding values. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Collection +     * @param {Array|Object} collection The collection to iterate over. +     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] +     *  The iteratees to sort by. +     * @param {string[]} [orders] The sort orders of `iteratees`. +     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. +     * @returns {Array} Returns the new sorted array. +     * @example +     * +     * var users = [ +     *   { 'user': 'fred',   'age': 48 }, +     *   { 'user': 'barney', 'age': 34 }, +     *   { 'user': 'fred',   'age': 40 }, +     *   { 'user': 'barney', 'age': 36 } +     * ]; +     * +     * // Sort by `user` in ascending order and by `age` in descending order. +     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); +     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] +     */ +    function orderBy(collection, iteratees, orders, guard) { +      if (collection == null) { +        return []; +      } +      if (!isArray(iteratees)) { +        iteratees = iteratees == null ? [] : [iteratees]; +      } +      orders = guard ? undefined : orders; +      if (!isArray(orders)) { +        orders = orders == null ? [] : [orders]; +      } +      return baseOrderBy(collection, iteratees, orders); +    } + +    /** +     * Creates an array of elements split into two groups, the first of which +     * contains elements `predicate` returns truthy for, the second of which +     * contains elements `predicate` returns falsey for. The predicate is +     * invoked with one argument: (value). +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Collection +     * @param {Array|Object} collection The collection to iterate over. +     * @param {Function} [predicate=_.identity] The function invoked per iteration. +     * @returns {Array} Returns the array of grouped elements. +     * @example +     * +     * var users = [ +     *   { 'user': 'barney',  'age': 36, 'active': false }, +     *   { 'user': 'fred',    'age': 40, 'active': true }, +     *   { 'user': 'pebbles', 'age': 1,  'active': false } +     * ]; +     * +     * _.partition(users, function(o) { return o.active; }); +     * // => objects for [['fred'], ['barney', 'pebbles']] +     * +     * // The `_.matches` iteratee shorthand. +     * _.partition(users, { 'age': 1, 'active': false }); +     * // => objects for [['pebbles'], ['barney', 'fred']] +     * +     * // The `_.matchesProperty` iteratee shorthand. +     * _.partition(users, ['active', false]); +     * // => objects for [['barney', 'pebbles'], ['fred']] +     * +     * // The `_.property` iteratee shorthand. +     * _.partition(users, 'active'); +     * // => objects for [['fred'], ['barney', 'pebbles']] +     */ +    var partition = createAggregator(function(result, value, key) { +      result[key ? 0 : 1].push(value); +    }, function() { return [[], []]; }); + +    /** +     * Reduces `collection` to a value which is the accumulated result of running +     * each element in `collection` thru `iteratee`, where each successive +     * invocation is supplied the return value of the previous. If `accumulator` +     * is not given, the first element of `collection` is used as the initial +     * value. The iteratee is invoked with four arguments: +     * (accumulator, value, index|key, collection). +     * +     * Many lodash methods are guarded to work as iteratees for methods like +     * `_.reduce`, `_.reduceRight`, and `_.transform`. +     * +     * The guarded methods are: +     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, +     * and `sortBy` +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Collection +     * @param {Array|Object} collection The collection to iterate over. +     * @param {Function} [iteratee=_.identity] The function invoked per iteration. +     * @param {*} [accumulator] The initial value. +     * @returns {*} Returns the accumulated value. +     * @see _.reduceRight +     * @example +     * +     * _.reduce([1, 2], function(sum, n) { +     *   return sum + n; +     * }, 0); +     * // => 3 +     * +     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { +     *   (result[value] || (result[value] = [])).push(key); +     *   return result; +     * }, {}); +     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) +     */ +    function reduce(collection, iteratee, accumulator) { +      var func = isArray(collection) ? arrayReduce : baseReduce, +          initAccum = arguments.length < 3; + +      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); +    } + +    /** +     * This method is like `_.reduce` except that it iterates over elements of +     * `collection` from right to left. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Collection +     * @param {Array|Object} collection The collection to iterate over. +     * @param {Function} [iteratee=_.identity] The function invoked per iteration. +     * @param {*} [accumulator] The initial value. +     * @returns {*} Returns the accumulated value. +     * @see _.reduce +     * @example +     * +     * var array = [[0, 1], [2, 3], [4, 5]]; +     * +     * _.reduceRight(array, function(flattened, other) { +     *   return flattened.concat(other); +     * }, []); +     * // => [4, 5, 2, 3, 0, 1] +     */ +    function reduceRight(collection, iteratee, accumulator) { +      var func = isArray(collection) ? arrayReduceRight : baseReduce, +          initAccum = arguments.length < 3; + +      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); +    } + +    /** +     * The opposite of `_.filter`; this method returns the elements of `collection` +     * that `predicate` does **not** return truthy for. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Collection +     * @param {Array|Object} collection The collection to iterate over. +     * @param {Function} [predicate=_.identity] The function invoked per iteration. +     * @returns {Array} Returns the new filtered array. +     * @see _.filter +     * @example +     * +     * var users = [ +     *   { 'user': 'barney', 'age': 36, 'active': false }, +     *   { 'user': 'fred',   'age': 40, 'active': true } +     * ]; +     * +     * _.reject(users, function(o) { return !o.active; }); +     * // => objects for ['fred'] +     * +     * // The `_.matches` iteratee shorthand. +     * _.reject(users, { 'age': 40, 'active': true }); +     * // => objects for ['barney'] +     * +     * // The `_.matchesProperty` iteratee shorthand. +     * _.reject(users, ['active', false]); +     * // => objects for ['fred'] +     * +     * // The `_.property` iteratee shorthand. +     * _.reject(users, 'active'); +     * // => objects for ['barney'] +     */ +    function reject(collection, predicate) { +      var func = isArray(collection) ? arrayFilter : baseFilter; +      return func(collection, negate(getIteratee(predicate, 3))); +    } + +    /** +     * Gets a random element from `collection`. +     * +     * @static +     * @memberOf _ +     * @since 2.0.0 +     * @category Collection +     * @param {Array|Object} collection The collection to sample. +     * @returns {*} Returns the random element. +     * @example +     * +     * _.sample([1, 2, 3, 4]); +     * // => 2 +     */ +    function sample(collection) { +      var func = isArray(collection) ? arraySample : baseSample; +      return func(collection); +    } + +    /** +     * Gets `n` random elements at unique keys from `collection` up to the +     * size of `collection`. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Collection +     * @param {Array|Object} collection The collection to sample. +     * @param {number} [n=1] The number of elements to sample. +     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +     * @returns {Array} Returns the random elements. +     * @example +     * +     * _.sampleSize([1, 2, 3], 2); +     * // => [3, 1] +     * +     * _.sampleSize([1, 2, 3], 4); +     * // => [2, 3, 1] +     */ +    function sampleSize(collection, n, guard) { +      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { +        n = 1; +      } else { +        n = toInteger(n); +      } +      var func = isArray(collection) ? arraySampleSize : baseSampleSize; +      return func(collection, n); +    } + +    /** +     * Creates an array of shuffled values, using a version of the +     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Collection +     * @param {Array|Object} collection The collection to shuffle. +     * @returns {Array} Returns the new shuffled array. +     * @example +     * +     * _.shuffle([1, 2, 3, 4]); +     * // => [4, 1, 3, 2] +     */ +    function shuffle(collection) { +      var func = isArray(collection) ? arrayShuffle : baseShuffle; +      return func(collection); +    } + +    /** +     * Gets the size of `collection` by returning its length for array-like +     * values or the number of own enumerable string keyed properties for objects. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Collection +     * @param {Array|Object|string} collection The collection to inspect. +     * @returns {number} Returns the collection size. +     * @example +     * +     * _.size([1, 2, 3]); +     * // => 3 +     * +     * _.size({ 'a': 1, 'b': 2 }); +     * // => 2 +     * +     * _.size('pebbles'); +     * // => 7 +     */ +    function size(collection) { +      if (collection == null) { +        return 0; +      } +      if (isArrayLike(collection)) { +        return isString(collection) ? stringSize(collection) : collection.length; +      } +      var tag = getTag(collection); +      if (tag == mapTag || tag == setTag) { +        return collection.size; +      } +      return baseKeys(collection).length; +    } + +    /** +     * Checks if `predicate` returns truthy for **any** element of `collection`. +     * Iteration is stopped once `predicate` returns truthy. The predicate is +     * invoked with three arguments: (value, index|key, collection). +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Collection +     * @param {Array|Object} collection The collection to iterate over. +     * @param {Function} [predicate=_.identity] The function invoked per iteration. +     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +     * @returns {boolean} Returns `true` if any element passes the predicate check, +     *  else `false`. +     * @example +     * +     * _.some([null, 0, 'yes', false], Boolean); +     * // => true +     * +     * var users = [ +     *   { 'user': 'barney', 'active': true }, +     *   { 'user': 'fred',   'active': false } +     * ]; +     * +     * // The `_.matches` iteratee shorthand. +     * _.some(users, { 'user': 'barney', 'active': false }); +     * // => false +     * +     * // The `_.matchesProperty` iteratee shorthand. +     * _.some(users, ['active', false]); +     * // => true +     * +     * // The `_.property` iteratee shorthand. +     * _.some(users, 'active'); +     * // => true +     */ +    function some(collection, predicate, guard) { +      var func = isArray(collection) ? arraySome : baseSome; +      if (guard && isIterateeCall(collection, predicate, guard)) { +        predicate = undefined; +      } +      return func(collection, getIteratee(predicate, 3)); +    } + +    /** +     * Creates an array of elements, sorted in ascending order by the results of +     * running each element in a collection thru each iteratee. This method +     * performs a stable sort, that is, it preserves the original sort order of +     * equal elements. The iteratees are invoked with one argument: (value). +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Collection +     * @param {Array|Object} collection The collection to iterate over. +     * @param {...(Function|Function[])} [iteratees=[_.identity]] +     *  The iteratees to sort by. +     * @returns {Array} Returns the new sorted array. +     * @example +     * +     * var users = [ +     *   { 'user': 'fred',   'age': 48 }, +     *   { 'user': 'barney', 'age': 36 }, +     *   { 'user': 'fred',   'age': 30 }, +     *   { 'user': 'barney', 'age': 34 } +     * ]; +     * +     * _.sortBy(users, [function(o) { return o.user; }]); +     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] +     * +     * _.sortBy(users, ['user', 'age']); +     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] +     */ +    var sortBy = baseRest(function(collection, iteratees) { +      if (collection == null) { +        return []; +      } +      var length = iteratees.length; +      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { +        iteratees = []; +      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { +        iteratees = [iteratees[0]]; +      } +      return baseOrderBy(collection, baseFlatten(iteratees, 1), []); +    }); + +    /*------------------------------------------------------------------------*/ + +    /** +     * Gets the timestamp of the number of milliseconds that have elapsed since +     * the Unix epoch (1 January 1970 00:00:00 UTC). +     * +     * @static +     * @memberOf _ +     * @since 2.4.0 +     * @category Date +     * @returns {number} Returns the timestamp. +     * @example +     * +     * _.defer(function(stamp) { +     *   console.log(_.now() - stamp); +     * }, _.now()); +     * // => Logs the number of milliseconds it took for the deferred invocation. +     */ +    var now = ctxNow || function() { +      return root.Date.now(); +    }; + +    /*------------------------------------------------------------------------*/ + +    /** +     * The opposite of `_.before`; this method creates a function that invokes +     * `func` once it's called `n` or more times. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Function +     * @param {number} n The number of calls before `func` is invoked. +     * @param {Function} func The function to restrict. +     * @returns {Function} Returns the new restricted function. +     * @example +     * +     * var saves = ['profile', 'settings']; +     * +     * var done = _.after(saves.length, function() { +     *   console.log('done saving!'); +     * }); +     * +     * _.forEach(saves, function(type) { +     *   asyncSave({ 'type': type, 'complete': done }); +     * }); +     * // => Logs 'done saving!' after the two async saves have completed. +     */ +    function after(n, func) { +      if (typeof func != 'function') { +        throw new TypeError(FUNC_ERROR_TEXT); +      } +      n = toInteger(n); +      return function() { +        if (--n < 1) { +          return func.apply(this, arguments); +        } +      }; +    } + +    /** +     * Creates a function that invokes `func`, with up to `n` arguments, +     * ignoring any additional arguments. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Function +     * @param {Function} func The function to cap arguments for. +     * @param {number} [n=func.length] The arity cap. +     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +     * @returns {Function} Returns the new capped function. +     * @example +     * +     * _.map(['6', '8', '10'], _.ary(parseInt, 1)); +     * // => [6, 8, 10] +     */ +    function ary(func, n, guard) { +      n = guard ? undefined : n; +      n = (func && n == null) ? func.length : n; +      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n); +    } + +    /** +     * Creates a function that invokes `func`, with the `this` binding and arguments +     * of the created function, while it's called less than `n` times. Subsequent +     * calls to the created function return the result of the last `func` invocation. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Function +     * @param {number} n The number of calls at which `func` is no longer invoked. +     * @param {Function} func The function to restrict. +     * @returns {Function} Returns the new restricted function. +     * @example +     * +     * jQuery(element).on('click', _.before(5, addContactToList)); +     * // => Allows adding up to 4 contacts to the list. +     */ +    function before(n, func) { +      var result; +      if (typeof func != 'function') { +        throw new TypeError(FUNC_ERROR_TEXT); +      } +      n = toInteger(n); +      return function() { +        if (--n > 0) { +          result = func.apply(this, arguments); +        } +        if (n <= 1) { +          func = undefined; +        } +        return result; +      }; +    } + +    /** +     * Creates a function that invokes `func` with the `this` binding of `thisArg` +     * and `partials` prepended to the arguments it receives. +     * +     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, +     * may be used as a placeholder for partially applied arguments. +     * +     * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" +     * property of bound functions. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Function +     * @param {Function} func The function to bind. +     * @param {*} thisArg The `this` binding of `func`. +     * @param {...*} [partials] The arguments to be partially applied. +     * @returns {Function} Returns the new bound function. +     * @example +     * +     * function greet(greeting, punctuation) { +     *   return greeting + ' ' + this.user + punctuation; +     * } +     * +     * var object = { 'user': 'fred' }; +     * +     * var bound = _.bind(greet, object, 'hi'); +     * bound('!'); +     * // => 'hi fred!' +     * +     * // Bound with placeholders. +     * var bound = _.bind(greet, object, _, '!'); +     * bound('hi'); +     * // => 'hi fred!' +     */ +    var bind = baseRest(function(func, thisArg, partials) { +      var bitmask = WRAP_BIND_FLAG; +      if (partials.length) { +        var holders = replaceHolders(partials, getHolder(bind)); +        bitmask |= WRAP_PARTIAL_FLAG; +      } +      return createWrap(func, bitmask, thisArg, partials, holders); +    }); + +    /** +     * Creates a function that invokes the method at `object[key]` with `partials` +     * prepended to the arguments it receives. +     * +     * This method differs from `_.bind` by allowing bound functions to reference +     * methods that may be redefined or don't yet exist. See +     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) +     * for more details. +     * +     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic +     * builds, may be used as a placeholder for partially applied arguments. +     * +     * @static +     * @memberOf _ +     * @since 0.10.0 +     * @category Function +     * @param {Object} object The object to invoke the method on. +     * @param {string} key The key of the method. +     * @param {...*} [partials] The arguments to be partially applied. +     * @returns {Function} Returns the new bound function. +     * @example +     * +     * var object = { +     *   'user': 'fred', +     *   'greet': function(greeting, punctuation) { +     *     return greeting + ' ' + this.user + punctuation; +     *   } +     * }; +     * +     * var bound = _.bindKey(object, 'greet', 'hi'); +     * bound('!'); +     * // => 'hi fred!' +     * +     * object.greet = function(greeting, punctuation) { +     *   return greeting + 'ya ' + this.user + punctuation; +     * }; +     * +     * bound('!'); +     * // => 'hiya fred!' +     * +     * // Bound with placeholders. +     * var bound = _.bindKey(object, 'greet', _, '!'); +     * bound('hi'); +     * // => 'hiya fred!' +     */ +    var bindKey = baseRest(function(object, key, partials) { +      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; +      if (partials.length) { +        var holders = replaceHolders(partials, getHolder(bindKey)); +        bitmask |= WRAP_PARTIAL_FLAG; +      } +      return createWrap(key, bitmask, object, partials, holders); +    }); + +    /** +     * Creates a function that accepts arguments of `func` and either invokes +     * `func` returning its result, if at least `arity` number of arguments have +     * been provided, or returns a function that accepts the remaining `func` +     * arguments, and so on. The arity of `func` may be specified if `func.length` +     * is not sufficient. +     * +     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, +     * may be used as a placeholder for provided arguments. +     * +     * **Note:** This method doesn't set the "length" property of curried functions. +     * +     * @static +     * @memberOf _ +     * @since 2.0.0 +     * @category Function +     * @param {Function} func The function to curry. +     * @param {number} [arity=func.length] The arity of `func`. +     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +     * @returns {Function} Returns the new curried function. +     * @example +     * +     * var abc = function(a, b, c) { +     *   return [a, b, c]; +     * }; +     * +     * var curried = _.curry(abc); +     * +     * curried(1)(2)(3); +     * // => [1, 2, 3] +     * +     * curried(1, 2)(3); +     * // => [1, 2, 3] +     * +     * curried(1, 2, 3); +     * // => [1, 2, 3] +     * +     * // Curried with placeholders. +     * curried(1)(_, 3)(2); +     * // => [1, 2, 3] +     */ +    function curry(func, arity, guard) { +      arity = guard ? undefined : arity; +      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); +      result.placeholder = curry.placeholder; +      return result; +    } + +    /** +     * This method is like `_.curry` except that arguments are applied to `func` +     * in the manner of `_.partialRight` instead of `_.partial`. +     * +     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic +     * builds, may be used as a placeholder for provided arguments. +     * +     * **Note:** This method doesn't set the "length" property of curried functions. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Function +     * @param {Function} func The function to curry. +     * @param {number} [arity=func.length] The arity of `func`. +     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +     * @returns {Function} Returns the new curried function. +     * @example +     * +     * var abc = function(a, b, c) { +     *   return [a, b, c]; +     * }; +     * +     * var curried = _.curryRight(abc); +     * +     * curried(3)(2)(1); +     * // => [1, 2, 3] +     * +     * curried(2, 3)(1); +     * // => [1, 2, 3] +     * +     * curried(1, 2, 3); +     * // => [1, 2, 3] +     * +     * // Curried with placeholders. +     * curried(3)(1, _)(2); +     * // => [1, 2, 3] +     */ +    function curryRight(func, arity, guard) { +      arity = guard ? undefined : arity; +      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); +      result.placeholder = curryRight.placeholder; +      return result; +    } + +    /** +     * Creates a debounced function that delays invoking `func` until after `wait` +     * milliseconds have elapsed since the last time the debounced function was +     * invoked. The debounced function comes with a `cancel` method to cancel +     * delayed `func` invocations and a `flush` method to immediately invoke them. +     * Provide `options` to indicate whether `func` should be invoked on the +     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked +     * with the last arguments provided to the debounced function. Subsequent +     * calls to the debounced function return the result of the last `func` +     * invocation. +     * +     * **Note:** If `leading` and `trailing` options are `true`, `func` is +     * invoked on the trailing edge of the timeout only if the debounced function +     * is invoked more than once during the `wait` timeout. +     * +     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred +     * until to the next tick, similar to `setTimeout` with a timeout of `0`. +     * +     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) +     * for details over the differences between `_.debounce` and `_.throttle`. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Function +     * @param {Function} func The function to debounce. +     * @param {number} [wait=0] The number of milliseconds to delay. +     * @param {Object} [options={}] The options object. +     * @param {boolean} [options.leading=false] +     *  Specify invoking on the leading edge of the timeout. +     * @param {number} [options.maxWait] +     *  The maximum time `func` is allowed to be delayed before it's invoked. +     * @param {boolean} [options.trailing=true] +     *  Specify invoking on the trailing edge of the timeout. +     * @returns {Function} Returns the new debounced function. +     * @example +     * +     * // Avoid costly calculations while the window size is in flux. +     * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); +     * +     * // Invoke `sendMail` when clicked, debouncing subsequent calls. +     * jQuery(element).on('click', _.debounce(sendMail, 300, { +     *   'leading': true, +     *   'trailing': false +     * })); +     * +     * // Ensure `batchLog` is invoked once after 1 second of debounced calls. +     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); +     * var source = new EventSource('/stream'); +     * jQuery(source).on('message', debounced); +     * +     * // Cancel the trailing debounced invocation. +     * jQuery(window).on('popstate', debounced.cancel); +     */ +    function debounce(func, wait, options) { +      var lastArgs, +          lastThis, +          maxWait, +          result, +          timerId, +          lastCallTime, +          lastInvokeTime = 0, +          leading = false, +          maxing = false, +          trailing = true; + +      if (typeof func != 'function') { +        throw new TypeError(FUNC_ERROR_TEXT); +      } +      wait = toNumber(wait) || 0; +      if (isObject(options)) { +        leading = !!options.leading; +        maxing = 'maxWait' in options; +        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; +        trailing = 'trailing' in options ? !!options.trailing : trailing; +      } + +      function invokeFunc(time) { +        var args = lastArgs, +            thisArg = lastThis; + +        lastArgs = lastThis = undefined; +        lastInvokeTime = time; +        result = func.apply(thisArg, args); +        return result; +      } + +      function leadingEdge(time) { +        // Reset any `maxWait` timer. +        lastInvokeTime = time; +        // Start the timer for the trailing edge. +        timerId = setTimeout(timerExpired, wait); +        // Invoke the leading edge. +        return leading ? invokeFunc(time) : result; +      } + +      function remainingWait(time) { +        var timeSinceLastCall = time - lastCallTime, +            timeSinceLastInvoke = time - lastInvokeTime, +            timeWaiting = wait - timeSinceLastCall; + +        return maxing +          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) +          : timeWaiting; +      } + +      function shouldInvoke(time) { +        var timeSinceLastCall = time - lastCallTime, +            timeSinceLastInvoke = time - lastInvokeTime; + +        // Either this is the first call, activity has stopped and we're at the +        // trailing edge, the system time has gone backwards and we're treating +        // it as the trailing edge, or we've hit the `maxWait` limit. +        return (lastCallTime === undefined || (timeSinceLastCall >= wait) || +          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); +      } + +      function timerExpired() { +        var time = now(); +        if (shouldInvoke(time)) { +          return trailingEdge(time); +        } +        // Restart the timer. +        timerId = setTimeout(timerExpired, remainingWait(time)); +      } + +      function trailingEdge(time) { +        timerId = undefined; + +        // Only invoke if we have `lastArgs` which means `func` has been +        // debounced at least once. +        if (trailing && lastArgs) { +          return invokeFunc(time); +        } +        lastArgs = lastThis = undefined; +        return result; +      } + +      function cancel() { +        if (timerId !== undefined) { +          clearTimeout(timerId); +        } +        lastInvokeTime = 0; +        lastArgs = lastCallTime = lastThis = timerId = undefined; +      } + +      function flush() { +        return timerId === undefined ? result : trailingEdge(now()); +      } + +      function debounced() { +        var time = now(), +            isInvoking = shouldInvoke(time); + +        lastArgs = arguments; +        lastThis = this; +        lastCallTime = time; + +        if (isInvoking) { +          if (timerId === undefined) { +            return leadingEdge(lastCallTime); +          } +          if (maxing) { +            // Handle invocations in a tight loop. +            clearTimeout(timerId); +            timerId = setTimeout(timerExpired, wait); +            return invokeFunc(lastCallTime); +          } +        } +        if (timerId === undefined) { +          timerId = setTimeout(timerExpired, wait); +        } +        return result; +      } +      debounced.cancel = cancel; +      debounced.flush = flush; +      return debounced; +    } + +    /** +     * Defers invoking the `func` until the current call stack has cleared. Any +     * additional arguments are provided to `func` when it's invoked. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Function +     * @param {Function} func The function to defer. +     * @param {...*} [args] The arguments to invoke `func` with. +     * @returns {number} Returns the timer id. +     * @example +     * +     * _.defer(function(text) { +     *   console.log(text); +     * }, 'deferred'); +     * // => Logs 'deferred' after one millisecond. +     */ +    var defer = baseRest(function(func, args) { +      return baseDelay(func, 1, args); +    }); + +    /** +     * Invokes `func` after `wait` milliseconds. Any additional arguments are +     * provided to `func` when it's invoked. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Function +     * @param {Function} func The function to delay. +     * @param {number} wait The number of milliseconds to delay invocation. +     * @param {...*} [args] The arguments to invoke `func` with. +     * @returns {number} Returns the timer id. +     * @example +     * +     * _.delay(function(text) { +     *   console.log(text); +     * }, 1000, 'later'); +     * // => Logs 'later' after one second. +     */ +    var delay = baseRest(function(func, wait, args) { +      return baseDelay(func, toNumber(wait) || 0, args); +    }); + +    /** +     * Creates a function that invokes `func` with arguments reversed. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Function +     * @param {Function} func The function to flip arguments for. +     * @returns {Function} Returns the new flipped function. +     * @example +     * +     * var flipped = _.flip(function() { +     *   return _.toArray(arguments); +     * }); +     * +     * flipped('a', 'b', 'c', 'd'); +     * // => ['d', 'c', 'b', 'a'] +     */ +    function flip(func) { +      return createWrap(func, WRAP_FLIP_FLAG); +    } + +    /** +     * Creates a function that memoizes the result of `func`. If `resolver` is +     * provided, it determines the cache key for storing the result based on the +     * arguments provided to the memoized function. By default, the first argument +     * provided to the memoized function is used as the map cache key. The `func` +     * is invoked with the `this` binding of the memoized function. +     * +     * **Note:** The cache is exposed as the `cache` property on the memoized +     * function. Its creation may be customized by replacing the `_.memoize.Cache` +     * constructor with one whose instances implement the +     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) +     * method interface of `clear`, `delete`, `get`, `has`, and `set`. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Function +     * @param {Function} func The function to have its output memoized. +     * @param {Function} [resolver] The function to resolve the cache key. +     * @returns {Function} Returns the new memoized function. +     * @example +     * +     * var object = { 'a': 1, 'b': 2 }; +     * var other = { 'c': 3, 'd': 4 }; +     * +     * var values = _.memoize(_.values); +     * values(object); +     * // => [1, 2] +     * +     * values(other); +     * // => [3, 4] +     * +     * object.a = 2; +     * values(object); +     * // => [1, 2] +     * +     * // Modify the result cache. +     * values.cache.set(object, ['a', 'b']); +     * values(object); +     * // => ['a', 'b'] +     * +     * // Replace `_.memoize.Cache`. +     * _.memoize.Cache = WeakMap; +     */ +    function memoize(func, resolver) { +      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { +        throw new TypeError(FUNC_ERROR_TEXT); +      } +      var memoized = function() { +        var args = arguments, +            key = resolver ? resolver.apply(this, args) : args[0], +            cache = memoized.cache; + +        if (cache.has(key)) { +          return cache.get(key); +        } +        var result = func.apply(this, args); +        memoized.cache = cache.set(key, result) || cache; +        return result; +      }; +      memoized.cache = new (memoize.Cache || MapCache); +      return memoized; +    } + +    // Expose `MapCache`. +    memoize.Cache = MapCache; + +    /** +     * Creates a function that negates the result of the predicate `func`. The +     * `func` predicate is invoked with the `this` binding and arguments of the +     * created function. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Function +     * @param {Function} predicate The predicate to negate. +     * @returns {Function} Returns the new negated function. +     * @example +     * +     * function isEven(n) { +     *   return n % 2 == 0; +     * } +     * +     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); +     * // => [1, 3, 5] +     */ +    function negate(predicate) { +      if (typeof predicate != 'function') { +        throw new TypeError(FUNC_ERROR_TEXT); +      } +      return function() { +        var args = arguments; +        switch (args.length) { +          case 0: return !predicate.call(this); +          case 1: return !predicate.call(this, args[0]); +          case 2: return !predicate.call(this, args[0], args[1]); +          case 3: return !predicate.call(this, args[0], args[1], args[2]); +        } +        return !predicate.apply(this, args); +      }; +    } + +    /** +     * Creates a function that is restricted to invoking `func` once. Repeat calls +     * to the function return the value of the first invocation. The `func` is +     * invoked with the `this` binding and arguments of the created function. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Function +     * @param {Function} func The function to restrict. +     * @returns {Function} Returns the new restricted function. +     * @example +     * +     * var initialize = _.once(createApplication); +     * initialize(); +     * initialize(); +     * // => `createApplication` is invoked once +     */ +    function once(func) { +      return before(2, func); +    } + +    /** +     * Creates a function that invokes `func` with its arguments transformed. +     * +     * @static +     * @since 4.0.0 +     * @memberOf _ +     * @category Function +     * @param {Function} func The function to wrap. +     * @param {...(Function|Function[])} [transforms=[_.identity]] +     *  The argument transforms. +     * @returns {Function} Returns the new function. +     * @example +     * +     * function doubled(n) { +     *   return n * 2; +     * } +     * +     * function square(n) { +     *   return n * n; +     * } +     * +     * var func = _.overArgs(function(x, y) { +     *   return [x, y]; +     * }, [square, doubled]); +     * +     * func(9, 3); +     * // => [81, 6] +     * +     * func(10, 5); +     * // => [100, 10] +     */ +    var overArgs = castRest(function(func, transforms) { +      transforms = (transforms.length == 1 && isArray(transforms[0])) +        ? arrayMap(transforms[0], baseUnary(getIteratee())) +        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); + +      var funcsLength = transforms.length; +      return baseRest(function(args) { +        var index = -1, +            length = nativeMin(args.length, funcsLength); + +        while (++index < length) { +          args[index] = transforms[index].call(this, args[index]); +        } +        return apply(func, this, args); +      }); +    }); + +    /** +     * Creates a function that invokes `func` with `partials` prepended to the +     * arguments it receives. This method is like `_.bind` except it does **not** +     * alter the `this` binding. +     * +     * The `_.partial.placeholder` value, which defaults to `_` in monolithic +     * builds, may be used as a placeholder for partially applied arguments. +     * +     * **Note:** This method doesn't set the "length" property of partially +     * applied functions. +     * +     * @static +     * @memberOf _ +     * @since 0.2.0 +     * @category Function +     * @param {Function} func The function to partially apply arguments to. +     * @param {...*} [partials] The arguments to be partially applied. +     * @returns {Function} Returns the new partially applied function. +     * @example +     * +     * function greet(greeting, name) { +     *   return greeting + ' ' + name; +     * } +     * +     * var sayHelloTo = _.partial(greet, 'hello'); +     * sayHelloTo('fred'); +     * // => 'hello fred' +     * +     * // Partially applied with placeholders. +     * var greetFred = _.partial(greet, _, 'fred'); +     * greetFred('hi'); +     * // => 'hi fred' +     */ +    var partial = baseRest(function(func, partials) { +      var holders = replaceHolders(partials, getHolder(partial)); +      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders); +    }); + +    /** +     * This method is like `_.partial` except that partially applied arguments +     * are appended to the arguments it receives. +     * +     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic +     * builds, may be used as a placeholder for partially applied arguments. +     * +     * **Note:** This method doesn't set the "length" property of partially +     * applied functions. +     * +     * @static +     * @memberOf _ +     * @since 1.0.0 +     * @category Function +     * @param {Function} func The function to partially apply arguments to. +     * @param {...*} [partials] The arguments to be partially applied. +     * @returns {Function} Returns the new partially applied function. +     * @example +     * +     * function greet(greeting, name) { +     *   return greeting + ' ' + name; +     * } +     * +     * var greetFred = _.partialRight(greet, 'fred'); +     * greetFred('hi'); +     * // => 'hi fred' +     * +     * // Partially applied with placeholders. +     * var sayHelloTo = _.partialRight(greet, 'hello', _); +     * sayHelloTo('fred'); +     * // => 'hello fred' +     */ +    var partialRight = baseRest(function(func, partials) { +      var holders = replaceHolders(partials, getHolder(partialRight)); +      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders); +    }); + +    /** +     * Creates a function that invokes `func` with arguments arranged according +     * to the specified `indexes` where the argument value at the first index is +     * provided as the first argument, the argument value at the second index is +     * provided as the second argument, and so on. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Function +     * @param {Function} func The function to rearrange arguments for. +     * @param {...(number|number[])} indexes The arranged argument indexes. +     * @returns {Function} Returns the new function. +     * @example +     * +     * var rearged = _.rearg(function(a, b, c) { +     *   return [a, b, c]; +     * }, [2, 0, 1]); +     * +     * rearged('b', 'c', 'a') +     * // => ['a', 'b', 'c'] +     */ +    var rearg = flatRest(function(func, indexes) { +      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes); +    }); + +    /** +     * Creates a function that invokes `func` with the `this` binding of the +     * created function and arguments from `start` and beyond provided as +     * an array. +     * +     * **Note:** This method is based on the +     * [rest parameter](https://mdn.io/rest_parameters). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Function +     * @param {Function} func The function to apply a rest parameter to. +     * @param {number} [start=func.length-1] The start position of the rest parameter. +     * @returns {Function} Returns the new function. +     * @example +     * +     * var say = _.rest(function(what, names) { +     *   return what + ' ' + _.initial(names).join(', ') + +     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names); +     * }); +     * +     * say('hello', 'fred', 'barney', 'pebbles'); +     * // => 'hello fred, barney, & pebbles' +     */ +    function rest(func, start) { +      if (typeof func != 'function') { +        throw new TypeError(FUNC_ERROR_TEXT); +      } +      start = start === undefined ? start : toInteger(start); +      return baseRest(func, start); +    } + +    /** +     * Creates a function that invokes `func` with the `this` binding of the +     * create function and an array of arguments much like +     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). +     * +     * **Note:** This method is based on the +     * [spread operator](https://mdn.io/spread_operator). +     * +     * @static +     * @memberOf _ +     * @since 3.2.0 +     * @category Function +     * @param {Function} func The function to spread arguments over. +     * @param {number} [start=0] The start position of the spread. +     * @returns {Function} Returns the new function. +     * @example +     * +     * var say = _.spread(function(who, what) { +     *   return who + ' says ' + what; +     * }); +     * +     * say(['fred', 'hello']); +     * // => 'fred says hello' +     * +     * var numbers = Promise.all([ +     *   Promise.resolve(40), +     *   Promise.resolve(36) +     * ]); +     * +     * numbers.then(_.spread(function(x, y) { +     *   return x + y; +     * })); +     * // => a Promise of 76 +     */ +    function spread(func, start) { +      if (typeof func != 'function') { +        throw new TypeError(FUNC_ERROR_TEXT); +      } +      start = start == null ? 0 : nativeMax(toInteger(start), 0); +      return baseRest(function(args) { +        var array = args[start], +            otherArgs = castSlice(args, 0, start); + +        if (array) { +          arrayPush(otherArgs, array); +        } +        return apply(func, this, otherArgs); +      }); +    } + +    /** +     * Creates a throttled function that only invokes `func` at most once per +     * every `wait` milliseconds. The throttled function comes with a `cancel` +     * method to cancel delayed `func` invocations and a `flush` method to +     * immediately invoke them. Provide `options` to indicate whether `func` +     * should be invoked on the leading and/or trailing edge of the `wait` +     * timeout. The `func` is invoked with the last arguments provided to the +     * throttled function. Subsequent calls to the throttled function return the +     * result of the last `func` invocation. +     * +     * **Note:** If `leading` and `trailing` options are `true`, `func` is +     * invoked on the trailing edge of the timeout only if the throttled function +     * is invoked more than once during the `wait` timeout. +     * +     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred +     * until to the next tick, similar to `setTimeout` with a timeout of `0`. +     * +     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) +     * for details over the differences between `_.throttle` and `_.debounce`. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Function +     * @param {Function} func The function to throttle. +     * @param {number} [wait=0] The number of milliseconds to throttle invocations to. +     * @param {Object} [options={}] The options object. +     * @param {boolean} [options.leading=true] +     *  Specify invoking on the leading edge of the timeout. +     * @param {boolean} [options.trailing=true] +     *  Specify invoking on the trailing edge of the timeout. +     * @returns {Function} Returns the new throttled function. +     * @example +     * +     * // Avoid excessively updating the position while scrolling. +     * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); +     * +     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. +     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); +     * jQuery(element).on('click', throttled); +     * +     * // Cancel the trailing throttled invocation. +     * jQuery(window).on('popstate', throttled.cancel); +     */ +    function throttle(func, wait, options) { +      var leading = true, +          trailing = true; + +      if (typeof func != 'function') { +        throw new TypeError(FUNC_ERROR_TEXT); +      } +      if (isObject(options)) { +        leading = 'leading' in options ? !!options.leading : leading; +        trailing = 'trailing' in options ? !!options.trailing : trailing; +      } +      return debounce(func, wait, { +        'leading': leading, +        'maxWait': wait, +        'trailing': trailing +      }); +    } + +    /** +     * Creates a function that accepts up to one argument, ignoring any +     * additional arguments. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Function +     * @param {Function} func The function to cap arguments for. +     * @returns {Function} Returns the new capped function. +     * @example +     * +     * _.map(['6', '8', '10'], _.unary(parseInt)); +     * // => [6, 8, 10] +     */ +    function unary(func) { +      return ary(func, 1); +    } + +    /** +     * Creates a function that provides `value` to `wrapper` as its first +     * argument. Any additional arguments provided to the function are appended +     * to those provided to the `wrapper`. The wrapper is invoked with the `this` +     * binding of the created function. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Function +     * @param {*} value The value to wrap. +     * @param {Function} [wrapper=identity] The wrapper function. +     * @returns {Function} Returns the new function. +     * @example +     * +     * var p = _.wrap(_.escape, function(func, text) { +     *   return '<p>' + func(text) + '</p>'; +     * }); +     * +     * p('fred, barney, & pebbles'); +     * // => '<p>fred, barney, & pebbles</p>' +     */ +    function wrap(value, wrapper) { +      return partial(castFunction(wrapper), value); +    } + +    /*------------------------------------------------------------------------*/ + +    /** +     * Casts `value` as an array if it's not one. +     * +     * @static +     * @memberOf _ +     * @since 4.4.0 +     * @category Lang +     * @param {*} value The value to inspect. +     * @returns {Array} Returns the cast array. +     * @example +     * +     * _.castArray(1); +     * // => [1] +     * +     * _.castArray({ 'a': 1 }); +     * // => [{ 'a': 1 }] +     * +     * _.castArray('abc'); +     * // => ['abc'] +     * +     * _.castArray(null); +     * // => [null] +     * +     * _.castArray(undefined); +     * // => [undefined] +     * +     * _.castArray(); +     * // => [] +     * +     * var array = [1, 2, 3]; +     * console.log(_.castArray(array) === array); +     * // => true +     */ +    function castArray() { +      if (!arguments.length) { +        return []; +      } +      var value = arguments[0]; +      return isArray(value) ? value : [value]; +    } + +    /** +     * Creates a shallow clone of `value`. +     * +     * **Note:** This method is loosely based on the +     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) +     * and supports cloning arrays, array buffers, booleans, date objects, maps, +     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed +     * arrays. The own enumerable properties of `arguments` objects are cloned +     * as plain objects. An empty object is returned for uncloneable values such +     * as error objects, functions, DOM nodes, and WeakMaps. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Lang +     * @param {*} value The value to clone. +     * @returns {*} Returns the cloned value. +     * @see _.cloneDeep +     * @example +     * +     * var objects = [{ 'a': 1 }, { 'b': 2 }]; +     * +     * var shallow = _.clone(objects); +     * console.log(shallow[0] === objects[0]); +     * // => true +     */ +    function clone(value) { +      return baseClone(value, CLONE_SYMBOLS_FLAG); +    } + +    /** +     * This method is like `_.clone` except that it accepts `customizer` which +     * is invoked to produce the cloned value. If `customizer` returns `undefined`, +     * cloning is handled by the method instead. The `customizer` is invoked with +     * up to four arguments; (value [, index|key, object, stack]). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Lang +     * @param {*} value The value to clone. +     * @param {Function} [customizer] The function to customize cloning. +     * @returns {*} Returns the cloned value. +     * @see _.cloneDeepWith +     * @example +     * +     * function customizer(value) { +     *   if (_.isElement(value)) { +     *     return value.cloneNode(false); +     *   } +     * } +     * +     * var el = _.cloneWith(document.body, customizer); +     * +     * console.log(el === document.body); +     * // => false +     * console.log(el.nodeName); +     * // => 'BODY' +     * console.log(el.childNodes.length); +     * // => 0 +     */ +    function cloneWith(value, customizer) { +      customizer = typeof customizer == 'function' ? customizer : undefined; +      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); +    } + +    /** +     * This method is like `_.clone` except that it recursively clones `value`. +     * +     * @static +     * @memberOf _ +     * @since 1.0.0 +     * @category Lang +     * @param {*} value The value to recursively clone. +     * @returns {*} Returns the deep cloned value. +     * @see _.clone +     * @example +     * +     * var objects = [{ 'a': 1 }, { 'b': 2 }]; +     * +     * var deep = _.cloneDeep(objects); +     * console.log(deep[0] === objects[0]); +     * // => false +     */ +    function cloneDeep(value) { +      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +    } + +    /** +     * This method is like `_.cloneWith` except that it recursively clones `value`. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Lang +     * @param {*} value The value to recursively clone. +     * @param {Function} [customizer] The function to customize cloning. +     * @returns {*} Returns the deep cloned value. +     * @see _.cloneWith +     * @example +     * +     * function customizer(value) { +     *   if (_.isElement(value)) { +     *     return value.cloneNode(true); +     *   } +     * } +     * +     * var el = _.cloneDeepWith(document.body, customizer); +     * +     * console.log(el === document.body); +     * // => false +     * console.log(el.nodeName); +     * // => 'BODY' +     * console.log(el.childNodes.length); +     * // => 20 +     */ +    function cloneDeepWith(value, customizer) { +      customizer = typeof customizer == 'function' ? customizer : undefined; +      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); +    } + +    /** +     * Checks if `object` conforms to `source` by invoking the predicate +     * properties of `source` with the corresponding property values of `object`. +     * +     * **Note:** This method is equivalent to `_.conforms` when `source` is +     * partially applied. +     * +     * @static +     * @memberOf _ +     * @since 4.14.0 +     * @category Lang +     * @param {Object} object The object to inspect. +     * @param {Object} source The object of property predicates to conform to. +     * @returns {boolean} Returns `true` if `object` conforms, else `false`. +     * @example +     * +     * var object = { 'a': 1, 'b': 2 }; +     * +     * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); +     * // => true +     * +     * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); +     * // => false +     */ +    function conformsTo(object, source) { +      return source == null || baseConformsTo(object, source, keys(source)); +    } + +    /** +     * Performs a +     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +     * comparison between two values to determine if they are equivalent. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Lang +     * @param {*} value The value to compare. +     * @param {*} other The other value to compare. +     * @returns {boolean} Returns `true` if the values are equivalent, else `false`. +     * @example +     * +     * var object = { 'a': 1 }; +     * var other = { 'a': 1 }; +     * +     * _.eq(object, object); +     * // => true +     * +     * _.eq(object, other); +     * // => false +     * +     * _.eq('a', 'a'); +     * // => true +     * +     * _.eq('a', Object('a')); +     * // => false +     * +     * _.eq(NaN, NaN); +     * // => true +     */ +    function eq(value, other) { +      return value === other || (value !== value && other !== other); +    } + +    /** +     * Checks if `value` is greater than `other`. +     * +     * @static +     * @memberOf _ +     * @since 3.9.0 +     * @category Lang +     * @param {*} value The value to compare. +     * @param {*} other The other value to compare. +     * @returns {boolean} Returns `true` if `value` is greater than `other`, +     *  else `false`. +     * @see _.lt +     * @example +     * +     * _.gt(3, 1); +     * // => true +     * +     * _.gt(3, 3); +     * // => false +     * +     * _.gt(1, 3); +     * // => false +     */ +    var gt = createRelationalOperation(baseGt); + +    /** +     * Checks if `value` is greater than or equal to `other`. +     * +     * @static +     * @memberOf _ +     * @since 3.9.0 +     * @category Lang +     * @param {*} value The value to compare. +     * @param {*} other The other value to compare. +     * @returns {boolean} Returns `true` if `value` is greater than or equal to +     *  `other`, else `false`. +     * @see _.lte +     * @example +     * +     * _.gte(3, 1); +     * // => true +     * +     * _.gte(3, 3); +     * // => true +     * +     * _.gte(1, 3); +     * // => false +     */ +    var gte = createRelationalOperation(function(value, other) { +      return value >= other; +    }); + +    /** +     * Checks if `value` is likely an `arguments` object. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is an `arguments` object, +     *  else `false`. +     * @example +     * +     * _.isArguments(function() { return arguments; }()); +     * // => true +     * +     * _.isArguments([1, 2, 3]); +     * // => false +     */ +    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { +      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && +        !propertyIsEnumerable.call(value, 'callee'); +    }; + +    /** +     * Checks if `value` is classified as an `Array` object. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is an array, else `false`. +     * @example +     * +     * _.isArray([1, 2, 3]); +     * // => true +     * +     * _.isArray(document.body.children); +     * // => false +     * +     * _.isArray('abc'); +     * // => false +     * +     * _.isArray(_.noop); +     * // => false +     */ +    var isArray = Array.isArray; + +    /** +     * Checks if `value` is classified as an `ArrayBuffer` object. +     * +     * @static +     * @memberOf _ +     * @since 4.3.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. +     * @example +     * +     * _.isArrayBuffer(new ArrayBuffer(2)); +     * // => true +     * +     * _.isArrayBuffer(new Array(2)); +     * // => false +     */ +    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; + +    /** +     * Checks if `value` is array-like. A value is considered array-like if it's +     * not a function and has a `value.length` that's an integer greater than or +     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is array-like, else `false`. +     * @example +     * +     * _.isArrayLike([1, 2, 3]); +     * // => true +     * +     * _.isArrayLike(document.body.children); +     * // => true +     * +     * _.isArrayLike('abc'); +     * // => true +     * +     * _.isArrayLike(_.noop); +     * // => false +     */ +    function isArrayLike(value) { +      return value != null && isLength(value.length) && !isFunction(value); +    } + +    /** +     * This method is like `_.isArrayLike` except that it also checks if `value` +     * is an object. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is an array-like object, +     *  else `false`. +     * @example +     * +     * _.isArrayLikeObject([1, 2, 3]); +     * // => true +     * +     * _.isArrayLikeObject(document.body.children); +     * // => true +     * +     * _.isArrayLikeObject('abc'); +     * // => false +     * +     * _.isArrayLikeObject(_.noop); +     * // => false +     */ +    function isArrayLikeObject(value) { +      return isObjectLike(value) && isArrayLike(value); +    } + +    /** +     * Checks if `value` is classified as a boolean primitive or object. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. +     * @example +     * +     * _.isBoolean(false); +     * // => true +     * +     * _.isBoolean(null); +     * // => false +     */ +    function isBoolean(value) { +      return value === true || value === false || +        (isObjectLike(value) && baseGetTag(value) == boolTag); +    } + +    /** +     * Checks if `value` is a buffer. +     * +     * @static +     * @memberOf _ +     * @since 4.3.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. +     * @example +     * +     * _.isBuffer(new Buffer(2)); +     * // => true +     * +     * _.isBuffer(new Uint8Array(2)); +     * // => false +     */ +    var isBuffer = nativeIsBuffer || stubFalse; + +    /** +     * Checks if `value` is classified as a `Date` object. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is a date object, else `false`. +     * @example +     * +     * _.isDate(new Date); +     * // => true +     * +     * _.isDate('Mon April 23 2012'); +     * // => false +     */ +    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; + +    /** +     * Checks if `value` is likely a DOM element. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. +     * @example +     * +     * _.isElement(document.body); +     * // => true +     * +     * _.isElement('<body>'); +     * // => false +     */ +    function isElement(value) { +      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); +    } + +    /** +     * Checks if `value` is an empty object, collection, map, or set. +     * +     * Objects are considered empty if they have no own enumerable string keyed +     * properties. +     * +     * Array-like values such as `arguments` objects, arrays, buffers, strings, or +     * jQuery-like collections are considered empty if they have a `length` of `0`. +     * Similarly, maps and sets are considered empty if they have a `size` of `0`. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is empty, else `false`. +     * @example +     * +     * _.isEmpty(null); +     * // => true +     * +     * _.isEmpty(true); +     * // => true +     * +     * _.isEmpty(1); +     * // => true +     * +     * _.isEmpty([1, 2, 3]); +     * // => false +     * +     * _.isEmpty({ 'a': 1 }); +     * // => false +     */ +    function isEmpty(value) { +      if (value == null) { +        return true; +      } +      if (isArrayLike(value) && +          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || +            isBuffer(value) || isTypedArray(value) || isArguments(value))) { +        return !value.length; +      } +      var tag = getTag(value); +      if (tag == mapTag || tag == setTag) { +        return !value.size; +      } +      if (isPrototype(value)) { +        return !baseKeys(value).length; +      } +      for (var key in value) { +        if (hasOwnProperty.call(value, key)) { +          return false; +        } +      } +      return true; +    } + +    /** +     * Performs a deep comparison between two values to determine if they are +     * equivalent. +     * +     * **Note:** This method supports comparing arrays, array buffers, booleans, +     * date objects, error objects, maps, numbers, `Object` objects, regexes, +     * sets, strings, symbols, and typed arrays. `Object` objects are compared +     * by their own, not inherited, enumerable properties. Functions and DOM +     * nodes are compared by strict equality, i.e. `===`. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Lang +     * @param {*} value The value to compare. +     * @param {*} other The other value to compare. +     * @returns {boolean} Returns `true` if the values are equivalent, else `false`. +     * @example +     * +     * var object = { 'a': 1 }; +     * var other = { 'a': 1 }; +     * +     * _.isEqual(object, other); +     * // => true +     * +     * object === other; +     * // => false +     */ +    function isEqual(value, other) { +      return baseIsEqual(value, other); +    } + +    /** +     * This method is like `_.isEqual` except that it accepts `customizer` which +     * is invoked to compare values. If `customizer` returns `undefined`, comparisons +     * are handled by the method instead. The `customizer` is invoked with up to +     * six arguments: (objValue, othValue [, index|key, object, other, stack]). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Lang +     * @param {*} value The value to compare. +     * @param {*} other The other value to compare. +     * @param {Function} [customizer] The function to customize comparisons. +     * @returns {boolean} Returns `true` if the values are equivalent, else `false`. +     * @example +     * +     * function isGreeting(value) { +     *   return /^h(?:i|ello)$/.test(value); +     * } +     * +     * function customizer(objValue, othValue) { +     *   if (isGreeting(objValue) && isGreeting(othValue)) { +     *     return true; +     *   } +     * } +     * +     * var array = ['hello', 'goodbye']; +     * var other = ['hi', 'goodbye']; +     * +     * _.isEqualWith(array, other, customizer); +     * // => true +     */ +    function isEqualWith(value, other, customizer) { +      customizer = typeof customizer == 'function' ? customizer : undefined; +      var result = customizer ? customizer(value, other) : undefined; +      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result; +    } + +    /** +     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, +     * `SyntaxError`, `TypeError`, or `URIError` object. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is an error object, else `false`. +     * @example +     * +     * _.isError(new Error); +     * // => true +     * +     * _.isError(Error); +     * // => false +     */ +    function isError(value) { +      if (!isObjectLike(value)) { +        return false; +      } +      var tag = baseGetTag(value); +      return tag == errorTag || tag == domExcTag || +        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); +    } + +    /** +     * Checks if `value` is a finite primitive number. +     * +     * **Note:** This method is based on +     * [`Number.isFinite`](https://mdn.io/Number/isFinite). +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. +     * @example +     * +     * _.isFinite(3); +     * // => true +     * +     * _.isFinite(Number.MIN_VALUE); +     * // => true +     * +     * _.isFinite(Infinity); +     * // => false +     * +     * _.isFinite('3'); +     * // => false +     */ +    function isFinite(value) { +      return typeof value == 'number' && nativeIsFinite(value); +    } + +    /** +     * Checks if `value` is classified as a `Function` object. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is a function, else `false`. +     * @example +     * +     * _.isFunction(_); +     * // => true +     * +     * _.isFunction(/abc/); +     * // => false +     */ +    function isFunction(value) { +      if (!isObject(value)) { +        return false; +      } +      // The use of `Object#toString` avoids issues with the `typeof` operator +      // in Safari 9 which returns 'object' for typed arrays and other constructors. +      var tag = baseGetTag(value); +      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +    } + +    /** +     * Checks if `value` is an integer. +     * +     * **Note:** This method is based on +     * [`Number.isInteger`](https://mdn.io/Number/isInteger). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is an integer, else `false`. +     * @example +     * +     * _.isInteger(3); +     * // => true +     * +     * _.isInteger(Number.MIN_VALUE); +     * // => false +     * +     * _.isInteger(Infinity); +     * // => false +     * +     * _.isInteger('3'); +     * // => false +     */ +    function isInteger(value) { +      return typeof value == 'number' && value == toInteger(value); +    } + +    /** +     * Checks if `value` is a valid array-like length. +     * +     * **Note:** This method is loosely based on +     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. +     * @example +     * +     * _.isLength(3); +     * // => true +     * +     * _.isLength(Number.MIN_VALUE); +     * // => false +     * +     * _.isLength(Infinity); +     * // => false +     * +     * _.isLength('3'); +     * // => false +     */ +    function isLength(value) { +      return typeof value == 'number' && +        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +    } + +    /** +     * Checks if `value` is the +     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) +     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is an object, else `false`. +     * @example +     * +     * _.isObject({}); +     * // => true +     * +     * _.isObject([1, 2, 3]); +     * // => true +     * +     * _.isObject(_.noop); +     * // => true +     * +     * _.isObject(null); +     * // => false +     */ +    function isObject(value) { +      var type = typeof value; +      return value != null && (type == 'object' || type == 'function'); +    } + +    /** +     * Checks if `value` is object-like. A value is object-like if it's not `null` +     * and has a `typeof` result of "object". +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is object-like, else `false`. +     * @example +     * +     * _.isObjectLike({}); +     * // => true +     * +     * _.isObjectLike([1, 2, 3]); +     * // => true +     * +     * _.isObjectLike(_.noop); +     * // => false +     * +     * _.isObjectLike(null); +     * // => false +     */ +    function isObjectLike(value) { +      return value != null && typeof value == 'object'; +    } + +    /** +     * Checks if `value` is classified as a `Map` object. +     * +     * @static +     * @memberOf _ +     * @since 4.3.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is a map, else `false`. +     * @example +     * +     * _.isMap(new Map); +     * // => true +     * +     * _.isMap(new WeakMap); +     * // => false +     */ +    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; + +    /** +     * Performs a partial deep comparison between `object` and `source` to +     * determine if `object` contains equivalent property values. +     * +     * **Note:** This method is equivalent to `_.matches` when `source` is +     * partially applied. +     * +     * Partial comparisons will match empty array and empty object `source` +     * values against any array or object value, respectively. See `_.isEqual` +     * for a list of supported value comparisons. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Lang +     * @param {Object} object The object to inspect. +     * @param {Object} source The object of property values to match. +     * @returns {boolean} Returns `true` if `object` is a match, else `false`. +     * @example +     * +     * var object = { 'a': 1, 'b': 2 }; +     * +     * _.isMatch(object, { 'b': 2 }); +     * // => true +     * +     * _.isMatch(object, { 'b': 1 }); +     * // => false +     */ +    function isMatch(object, source) { +      return object === source || baseIsMatch(object, source, getMatchData(source)); +    } + +    /** +     * This method is like `_.isMatch` except that it accepts `customizer` which +     * is invoked to compare values. If `customizer` returns `undefined`, comparisons +     * are handled by the method instead. The `customizer` is invoked with five +     * arguments: (objValue, srcValue, index|key, object, source). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Lang +     * @param {Object} object The object to inspect. +     * @param {Object} source The object of property values to match. +     * @param {Function} [customizer] The function to customize comparisons. +     * @returns {boolean} Returns `true` if `object` is a match, else `false`. +     * @example +     * +     * function isGreeting(value) { +     *   return /^h(?:i|ello)$/.test(value); +     * } +     * +     * function customizer(objValue, srcValue) { +     *   if (isGreeting(objValue) && isGreeting(srcValue)) { +     *     return true; +     *   } +     * } +     * +     * var object = { 'greeting': 'hello' }; +     * var source = { 'greeting': 'hi' }; +     * +     * _.isMatchWith(object, source, customizer); +     * // => true +     */ +    function isMatchWith(object, source, customizer) { +      customizer = typeof customizer == 'function' ? customizer : undefined; +      return baseIsMatch(object, source, getMatchData(source), customizer); +    } + +    /** +     * Checks if `value` is `NaN`. +     * +     * **Note:** This method is based on +     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as +     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for +     * `undefined` and other non-number values. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. +     * @example +     * +     * _.isNaN(NaN); +     * // => true +     * +     * _.isNaN(new Number(NaN)); +     * // => true +     * +     * isNaN(undefined); +     * // => true +     * +     * _.isNaN(undefined); +     * // => false +     */ +    function isNaN(value) { +      // An `NaN` primitive is the only value that is not equal to itself. +      // Perform the `toStringTag` check first to avoid errors with some +      // ActiveX objects in IE. +      return isNumber(value) && value != +value; +    } + +    /** +     * Checks if `value` is a pristine native function. +     * +     * **Note:** This method can't reliably detect native functions in the presence +     * of the core-js package because core-js circumvents this kind of detection. +     * Despite multiple requests, the core-js maintainer has made it clear: any +     * attempt to fix the detection will be obstructed. As a result, we're left +     * with little choice but to throw an error. Unfortunately, this also affects +     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), +     * which rely on core-js. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is a native function, +     *  else `false`. +     * @example +     * +     * _.isNative(Array.prototype.push); +     * // => true +     * +     * _.isNative(_); +     * // => false +     */ +    function isNative(value) { +      if (isMaskable(value)) { +        throw new Error(CORE_ERROR_TEXT); +      } +      return baseIsNative(value); +    } + +    /** +     * Checks if `value` is `null`. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is `null`, else `false`. +     * @example +     * +     * _.isNull(null); +     * // => true +     * +     * _.isNull(void 0); +     * // => false +     */ +    function isNull(value) { +      return value === null; +    } + +    /** +     * Checks if `value` is `null` or `undefined`. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is nullish, else `false`. +     * @example +     * +     * _.isNil(null); +     * // => true +     * +     * _.isNil(void 0); +     * // => true +     * +     * _.isNil(NaN); +     * // => false +     */ +    function isNil(value) { +      return value == null; +    } + +    /** +     * Checks if `value` is classified as a `Number` primitive or object. +     * +     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are +     * classified as numbers, use the `_.isFinite` method. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is a number, else `false`. +     * @example +     * +     * _.isNumber(3); +     * // => true +     * +     * _.isNumber(Number.MIN_VALUE); +     * // => true +     * +     * _.isNumber(Infinity); +     * // => true +     * +     * _.isNumber('3'); +     * // => false +     */ +    function isNumber(value) { +      return typeof value == 'number' || +        (isObjectLike(value) && baseGetTag(value) == numberTag); +    } + +    /** +     * Checks if `value` is a plain object, that is, an object created by the +     * `Object` constructor or one with a `[[Prototype]]` of `null`. +     * +     * @static +     * @memberOf _ +     * @since 0.8.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. +     * @example +     * +     * function Foo() { +     *   this.a = 1; +     * } +     * +     * _.isPlainObject(new Foo); +     * // => false +     * +     * _.isPlainObject([1, 2, 3]); +     * // => false +     * +     * _.isPlainObject({ 'x': 0, 'y': 0 }); +     * // => true +     * +     * _.isPlainObject(Object.create(null)); +     * // => true +     */ +    function isPlainObject(value) { +      if (!isObjectLike(value) || baseGetTag(value) != objectTag) { +        return false; +      } +      var proto = getPrototype(value); +      if (proto === null) { +        return true; +      } +      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; +      return typeof Ctor == 'function' && Ctor instanceof Ctor && +        funcToString.call(Ctor) == objectCtorString; +    } + +    /** +     * Checks if `value` is classified as a `RegExp` object. +     * +     * @static +     * @memberOf _ +     * @since 0.1.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. +     * @example +     * +     * _.isRegExp(/abc/); +     * // => true +     * +     * _.isRegExp('/abc/'); +     * // => false +     */ +    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; + +    /** +     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 +     * double precision number which isn't the result of a rounded unsafe integer. +     * +     * **Note:** This method is based on +     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. +     * @example +     * +     * _.isSafeInteger(3); +     * // => true +     * +     * _.isSafeInteger(Number.MIN_VALUE); +     * // => false +     * +     * _.isSafeInteger(Infinity); +     * // => false +     * +     * _.isSafeInteger('3'); +     * // => false +     */ +    function isSafeInteger(value) { +      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; +    } + +    /** +     * Checks if `value` is classified as a `Set` object. +     * +     * @static +     * @memberOf _ +     * @since 4.3.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is a set, else `false`. +     * @example +     * +     * _.isSet(new Set); +     * // => true +     * +     * _.isSet(new WeakSet); +     * // => false +     */ +    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; + +    /** +     * Checks if `value` is classified as a `String` primitive or object. +     * +     * @static +     * @since 0.1.0 +     * @memberOf _ +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is a string, else `false`. +     * @example +     * +     * _.isString('abc'); +     * // => true +     * +     * _.isString(1); +     * // => false +     */ +    function isString(value) { +      return typeof value == 'string' || +        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); +    } + +    /** +     * Checks if `value` is classified as a `Symbol` primitive or object. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. +     * @example +     * +     * _.isSymbol(Symbol.iterator); +     * // => true +     * +     * _.isSymbol('abc'); +     * // => false +     */ +    function isSymbol(value) { +      return typeof value == 'symbol' || +        (isObjectLike(value) && baseGetTag(value) == symbolTag); +    } + +    /** +     * Checks if `value` is classified as a typed array. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. +     * @example +     * +     * _.isTypedArray(new Uint8Array); +     * // => true +     * +     * _.isTypedArray([]); +     * // => false +     */ +    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + +    /** +     * Checks if `value` is `undefined`. +     * +     * @static +     * @since 0.1.0 +     * @memberOf _ +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. +     * @example +     * +     * _.isUndefined(void 0); +     * // => true +     * +     * _.isUndefined(null); +     * // => false +     */ +    function isUndefined(value) { +      return value === undefined; +    } + +    /** +     * Checks if `value` is classified as a `WeakMap` object. +     * +     * @static +     * @memberOf _ +     * @since 4.3.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. +     * @example +     * +     * _.isWeakMap(new WeakMap); +     * // => true +     * +     * _.isWeakMap(new Map); +     * // => false +     */ +    function isWeakMap(value) { +      return isObjectLike(value) && getTag(value) == weakMapTag; +    } + +    /** +     * Checks if `value` is classified as a `WeakSet` object. +     * +     * @static +     * @memberOf _ +     * @since 4.3.0 +     * @category Lang +     * @param {*} value The value to check. +     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. +     * @example +     * +     * _.isWeakSet(new WeakSet); +     * // => true +     * +     * _.isWeakSet(new Set); +     * // => false +     */ +    function isWeakSet(value) { +      return isObjectLike(value) && baseGetTag(value) == weakSetTag; +    } + +    /** +     * Checks if `value` is less than `other`. +     * +     * @static +     * @memberOf _ +     * @since 3.9.0 +     * @category Lang +     * @param {*} value The value to compare. +     * @param {*} other The other value to compare. +     * @returns {boolean} Returns `true` if `value` is less than `other`, +     *  else `false`. +     * @see _.gt +     * @example +     * +     * _.lt(1, 3); +     * // => true +     * +     * _.lt(3, 3); +     * // => false +     * +     * _.lt(3, 1); +     * // => false +     */ +    var lt = createRelationalOperation(baseLt); + +    /** +     * Checks if `value` is less than or equal to `other`. +     * +     * @static +     * @memberOf _ +     * @since 3.9.0 +     * @category Lang +     * @param {*} value The value to compare. +     * @param {*} other The other value to compare. +     * @returns {boolean} Returns `true` if `value` is less than or equal to +     *  `other`, else `false`. +     * @see _.gte +     * @example +     * +     * _.lte(1, 3); +     * // => true +     * +     * _.lte(3, 3); +     * // => true +     * +     * _.lte(3, 1); +     * // => false +     */ +    var lte = createRelationalOperation(function(value, other) { +      return value <= other; +    }); + +    /** +     * Converts `value` to an array. +     * +     * @static +     * @since 0.1.0 +     * @memberOf _ +     * @category Lang +     * @param {*} value The value to convert. +     * @returns {Array} Returns the converted array. +     * @example +     * +     * _.toArray({ 'a': 1, 'b': 2 }); +     * // => [1, 2] +     * +     * _.toArray('abc'); +     * // => ['a', 'b', 'c'] +     * +     * _.toArray(1); +     * // => [] +     * +     * _.toArray(null); +     * // => [] +     */ +    function toArray(value) { +      if (!value) { +        return []; +      } +      if (isArrayLike(value)) { +        return isString(value) ? stringToArray(value) : copyArray(value); +      } +      if (symIterator && value[symIterator]) { +        return iteratorToArray(value[symIterator]()); +      } +      var tag = getTag(value), +          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); + +      return func(value); +    } + +    /** +     * Converts `value` to a finite number. +     * +     * @static +     * @memberOf _ +     * @since 4.12.0 +     * @category Lang +     * @param {*} value The value to convert. +     * @returns {number} Returns the converted number. +     * @example +     * +     * _.toFinite(3.2); +     * // => 3.2 +     * +     * _.toFinite(Number.MIN_VALUE); +     * // => 5e-324 +     * +     * _.toFinite(Infinity); +     * // => 1.7976931348623157e+308 +     * +     * _.toFinite('3.2'); +     * // => 3.2 +     */ +    function toFinite(value) { +      if (!value) { +        return value === 0 ? value : 0; +      } +      value = toNumber(value); +      if (value === INFINITY || value === -INFINITY) { +        var sign = (value < 0 ? -1 : 1); +        return sign * MAX_INTEGER; +      } +      return value === value ? value : 0; +    } + +    /** +     * Converts `value` to an integer. +     * +     * **Note:** This method is loosely based on +     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Lang +     * @param {*} value The value to convert. +     * @returns {number} Returns the converted integer. +     * @example +     * +     * _.toInteger(3.2); +     * // => 3 +     * +     * _.toInteger(Number.MIN_VALUE); +     * // => 0 +     * +     * _.toInteger(Infinity); +     * // => 1.7976931348623157e+308 +     * +     * _.toInteger('3.2'); +     * // => 3 +     */ +    function toInteger(value) { +      var result = toFinite(value), +          remainder = result % 1; + +      return result === result ? (remainder ? result - remainder : result) : 0; +    } + +    /** +     * Converts `value` to an integer suitable for use as the length of an +     * array-like object. +     * +     * **Note:** This method is based on +     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Lang +     * @param {*} value The value to convert. +     * @returns {number} Returns the converted integer. +     * @example +     * +     * _.toLength(3.2); +     * // => 3 +     * +     * _.toLength(Number.MIN_VALUE); +     * // => 0 +     * +     * _.toLength(Infinity); +     * // => 4294967295 +     * +     * _.toLength('3.2'); +     * // => 3 +     */ +    function toLength(value) { +      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; +    } + +    /** +     * Converts `value` to a number. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Lang +     * @param {*} value The value to process. +     * @returns {number} Returns the number. +     * @example +     * +     * _.toNumber(3.2); +     * // => 3.2 +     * +     * _.toNumber(Number.MIN_VALUE); +     * // => 5e-324 +     * +     * _.toNumber(Infinity); +     * // => Infinity +     * +     * _.toNumber('3.2'); +     * // => 3.2 +     */ +    function toNumber(value) { +      if (typeof value == 'number') { +        return value; +      } +      if (isSymbol(value)) { +        return NAN; +      } +      if (isObject(value)) { +        var other = typeof value.valueOf == 'function' ? value.valueOf() : value; +        value = isObject(other) ? (other + '') : other; +      } +      if (typeof value != 'string') { +        return value === 0 ? value : +value; +      } +      value = baseTrim(value); +      var isBinary = reIsBinary.test(value); +      return (isBinary || reIsOctal.test(value)) +        ? freeParseInt(value.slice(2), isBinary ? 2 : 8) +        : (reIsBadHex.test(value) ? NAN : +value); +    } + +    /** +     * Converts `value` to a plain object flattening inherited enumerable string +     * keyed properties of `value` to own properties of the plain object. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Lang +     * @param {*} value The value to convert. +     * @returns {Object} Returns the converted plain object. +     * @example +     * +     * function Foo() { +     *   this.b = 2; +     * } +     * +     * Foo.prototype.c = 3; +     * +     * _.assign({ 'a': 1 }, new Foo); +     * // => { 'a': 1, 'b': 2 } +     * +     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); +     * // => { 'a': 1, 'b': 2, 'c': 3 } +     */ +    function toPlainObject(value) { +      return copyObject(value, keysIn(value)); +    } + +    /** +     * Converts `value` to a safe integer. A safe integer can be compared and +     * represented correctly. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Lang +     * @param {*} value The value to convert. +     * @returns {number} Returns the converted integer. +     * @example +     * +     * _.toSafeInteger(3.2); +     * // => 3 +     * +     * _.toSafeInteger(Number.MIN_VALUE); +     * // => 0 +     * +     * _.toSafeInteger(Infinity); +     * // => 9007199254740991 +     * +     * _.toSafeInteger('3.2'); +     * // => 3 +     */ +    function toSafeInteger(value) { +      return value +        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) +        : (value === 0 ? value : 0); +    } + +    /** +     * Converts `value` to a string. An empty string is returned for `null` +     * and `undefined` values. The sign of `-0` is preserved. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Lang +     * @param {*} value The value to convert. +     * @returns {string} Returns the converted string. +     * @example +     * +     * _.toString(null); +     * // => '' +     * +     * _.toString(-0); +     * // => '-0' +     * +     * _.toString([1, 2, 3]); +     * // => '1,2,3' +     */ +    function toString(value) { +      return value == null ? '' : baseToString(value); +    } + +    /*------------------------------------------------------------------------*/ + +    /** +     * Assigns own enumerable string keyed properties of source objects to the +     * destination object. Source objects are applied from left to right. +     * Subsequent sources overwrite property assignments of previous sources. +     * +     * **Note:** This method mutates `object` and is loosely based on +     * [`Object.assign`](https://mdn.io/Object/assign). +     * +     * @static +     * @memberOf _ +     * @since 0.10.0 +     * @category Object +     * @param {Object} object The destination object. +     * @param {...Object} [sources] The source objects. +     * @returns {Object} Returns `object`. +     * @see _.assignIn +     * @example +     * +     * function Foo() { +     *   this.a = 1; +     * } +     * +     * function Bar() { +     *   this.c = 3; +     * } +     * +     * Foo.prototype.b = 2; +     * Bar.prototype.d = 4; +     * +     * _.assign({ 'a': 0 }, new Foo, new Bar); +     * // => { 'a': 1, 'c': 3 } +     */ +    var assign = createAssigner(function(object, source) { +      if (isPrototype(source) || isArrayLike(source)) { +        copyObject(source, keys(source), object); +        return; +      } +      for (var key in source) { +        if (hasOwnProperty.call(source, key)) { +          assignValue(object, key, source[key]); +        } +      } +    }); + +    /** +     * This method is like `_.assign` except that it iterates over own and +     * inherited source properties. +     * +     * **Note:** This method mutates `object`. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @alias extend +     * @category Object +     * @param {Object} object The destination object. +     * @param {...Object} [sources] The source objects. +     * @returns {Object} Returns `object`. +     * @see _.assign +     * @example +     * +     * function Foo() { +     *   this.a = 1; +     * } +     * +     * function Bar() { +     *   this.c = 3; +     * } +     * +     * Foo.prototype.b = 2; +     * Bar.prototype.d = 4; +     * +     * _.assignIn({ 'a': 0 }, new Foo, new Bar); +     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } +     */ +    var assignIn = createAssigner(function(object, source) { +      copyObject(source, keysIn(source), object); +    }); + +    /** +     * This method is like `_.assignIn` except that it accepts `customizer` +     * which is invoked to produce the assigned values. If `customizer` returns +     * `undefined`, assignment is handled by the method instead. The `customizer` +     * is invoked with five arguments: (objValue, srcValue, key, object, source). +     * +     * **Note:** This method mutates `object`. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @alias extendWith +     * @category Object +     * @param {Object} object The destination object. +     * @param {...Object} sources The source objects. +     * @param {Function} [customizer] The function to customize assigned values. +     * @returns {Object} Returns `object`. +     * @see _.assignWith +     * @example +     * +     * function customizer(objValue, srcValue) { +     *   return _.isUndefined(objValue) ? srcValue : objValue; +     * } +     * +     * var defaults = _.partialRight(_.assignInWith, customizer); +     * +     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); +     * // => { 'a': 1, 'b': 2 } +     */ +    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { +      copyObject(source, keysIn(source), object, customizer); +    }); + +    /** +     * This method is like `_.assign` except that it accepts `customizer` +     * which is invoked to produce the assigned values. If `customizer` returns +     * `undefined`, assignment is handled by the method instead. The `customizer` +     * is invoked with five arguments: (objValue, srcValue, key, object, source). +     * +     * **Note:** This method mutates `object`. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Object +     * @param {Object} object The destination object. +     * @param {...Object} sources The source objects. +     * @param {Function} [customizer] The function to customize assigned values. +     * @returns {Object} Returns `object`. +     * @see _.assignInWith +     * @example +     * +     * function customizer(objValue, srcValue) { +     *   return _.isUndefined(objValue) ? srcValue : objValue; +     * } +     * +     * var defaults = _.partialRight(_.assignWith, customizer); +     * +     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); +     * // => { 'a': 1, 'b': 2 } +     */ +    var assignWith = createAssigner(function(object, source, srcIndex, customizer) { +      copyObject(source, keys(source), object, customizer); +    }); + +    /** +     * Creates an array of values corresponding to `paths` of `object`. +     * +     * @static +     * @memberOf _ +     * @since 1.0.0 +     * @category Object +     * @param {Object} object The object to iterate over. +     * @param {...(string|string[])} [paths] The property paths to pick. +     * @returns {Array} Returns the picked values. +     * @example +     * +     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; +     * +     * _.at(object, ['a[0].b.c', 'a[1]']); +     * // => [3, 4] +     */ +    var at = flatRest(baseAt); + +    /** +     * Creates an object that inherits from the `prototype` object. If a +     * `properties` object is given, its own enumerable string keyed properties +     * are assigned to the created object. +     * +     * @static +     * @memberOf _ +     * @since 2.3.0 +     * @category Object +     * @param {Object} prototype The object to inherit from. +     * @param {Object} [properties] The properties to assign to the object. +     * @returns {Object} Returns the new object. +     * @example +     * +     * function Shape() { +     *   this.x = 0; +     *   this.y = 0; +     * } +     * +     * function Circle() { +     *   Shape.call(this); +     * } +     * +     * Circle.prototype = _.create(Shape.prototype, { +     *   'constructor': Circle +     * }); +     * +     * var circle = new Circle; +     * circle instanceof Circle; +     * // => true +     * +     * circle instanceof Shape; +     * // => true +     */ +    function create(prototype, properties) { +      var result = baseCreate(prototype); +      return properties == null ? result : baseAssign(result, properties); +    } + +    /** +     * Assigns own and inherited enumerable string keyed properties of source +     * objects to the destination object for all destination properties that +     * resolve to `undefined`. Source objects are applied from left to right. +     * Once a property is set, additional values of the same property are ignored. +     * +     * **Note:** This method mutates `object`. +     * +     * @static +     * @since 0.1.0 +     * @memberOf _ +     * @category Object +     * @param {Object} object The destination object. +     * @param {...Object} [sources] The source objects. +     * @returns {Object} Returns `object`. +     * @see _.defaultsDeep +     * @example +     * +     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); +     * // => { 'a': 1, 'b': 2 } +     */ +    var defaults = baseRest(function(object, sources) { +      object = Object(object); + +      var index = -1; +      var length = sources.length; +      var guard = length > 2 ? sources[2] : undefined; + +      if (guard && isIterateeCall(sources[0], sources[1], guard)) { +        length = 1; +      } + +      while (++index < length) { +        var source = sources[index]; +        var props = keysIn(source); +        var propsIndex = -1; +        var propsLength = props.length; + +        while (++propsIndex < propsLength) { +          var key = props[propsIndex]; +          var value = object[key]; + +          if (value === undefined || +              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { +            object[key] = source[key]; +          } +        } +      } + +      return object; +    }); + +    /** +     * This method is like `_.defaults` except that it recursively assigns +     * default properties. +     * +     * **Note:** This method mutates `object`. +     * +     * @static +     * @memberOf _ +     * @since 3.10.0 +     * @category Object +     * @param {Object} object The destination object. +     * @param {...Object} [sources] The source objects. +     * @returns {Object} Returns `object`. +     * @see _.defaults +     * @example +     * +     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); +     * // => { 'a': { 'b': 2, 'c': 3 } } +     */ +    var defaultsDeep = baseRest(function(args) { +      args.push(undefined, customDefaultsMerge); +      return apply(mergeWith, undefined, args); +    }); + +    /** +     * This method is like `_.find` except that it returns the key of the first +     * element `predicate` returns truthy for instead of the element itself. +     * +     * @static +     * @memberOf _ +     * @since 1.1.0 +     * @category Object +     * @param {Object} object The object to inspect. +     * @param {Function} [predicate=_.identity] The function invoked per iteration. +     * @returns {string|undefined} Returns the key of the matched element, +     *  else `undefined`. +     * @example +     * +     * var users = { +     *   'barney':  { 'age': 36, 'active': true }, +     *   'fred':    { 'age': 40, 'active': false }, +     *   'pebbles': { 'age': 1,  'active': true } +     * }; +     * +     * _.findKey(users, function(o) { return o.age < 40; }); +     * // => 'barney' (iteration order is not guaranteed) +     * +     * // The `_.matches` iteratee shorthand. +     * _.findKey(users, { 'age': 1, 'active': true }); +     * // => 'pebbles' +     * +     * // The `_.matchesProperty` iteratee shorthand. +     * _.findKey(users, ['active', false]); +     * // => 'fred' +     * +     * // The `_.property` iteratee shorthand. +     * _.findKey(users, 'active'); +     * // => 'barney' +     */ +    function findKey(object, predicate) { +      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); +    } + +    /** +     * This method is like `_.findKey` except that it iterates over elements of +     * a collection in the opposite order. +     * +     * @static +     * @memberOf _ +     * @since 2.0.0 +     * @category Object +     * @param {Object} object The object to inspect. +     * @param {Function} [predicate=_.identity] The function invoked per iteration. +     * @returns {string|undefined} Returns the key of the matched element, +     *  else `undefined`. +     * @example +     * +     * var users = { +     *   'barney':  { 'age': 36, 'active': true }, +     *   'fred':    { 'age': 40, 'active': false }, +     *   'pebbles': { 'age': 1,  'active': true } +     * }; +     * +     * _.findLastKey(users, function(o) { return o.age < 40; }); +     * // => returns 'pebbles' assuming `_.findKey` returns 'barney' +     * +     * // The `_.matches` iteratee shorthand. +     * _.findLastKey(users, { 'age': 36, 'active': true }); +     * // => 'barney' +     * +     * // The `_.matchesProperty` iteratee shorthand. +     * _.findLastKey(users, ['active', false]); +     * // => 'fred' +     * +     * // The `_.property` iteratee shorthand. +     * _.findLastKey(users, 'active'); +     * // => 'pebbles' +     */ +    function findLastKey(object, predicate) { +      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); +    } + +    /** +     * Iterates over own and inherited enumerable string keyed properties of an +     * object and invokes `iteratee` for each property. The iteratee is invoked +     * with three arguments: (value, key, object). Iteratee functions may exit +     * iteration early by explicitly returning `false`. +     * +     * @static +     * @memberOf _ +     * @since 0.3.0 +     * @category Object +     * @param {Object} object The object to iterate over. +     * @param {Function} [iteratee=_.identity] The function invoked per iteration. +     * @returns {Object} Returns `object`. +     * @see _.forInRight +     * @example +     * +     * function Foo() { +     *   this.a = 1; +     *   this.b = 2; +     * } +     * +     * Foo.prototype.c = 3; +     * +     * _.forIn(new Foo, function(value, key) { +     *   console.log(key); +     * }); +     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). +     */ +    function forIn(object, iteratee) { +      return object == null +        ? object +        : baseFor(object, getIteratee(iteratee, 3), keysIn); +    } + +    /** +     * This method is like `_.forIn` except that it iterates over properties of +     * `object` in the opposite order. +     * +     * @static +     * @memberOf _ +     * @since 2.0.0 +     * @category Object +     * @param {Object} object The object to iterate over. +     * @param {Function} [iteratee=_.identity] The function invoked per iteration. +     * @returns {Object} Returns `object`. +     * @see _.forIn +     * @example +     * +     * function Foo() { +     *   this.a = 1; +     *   this.b = 2; +     * } +     * +     * Foo.prototype.c = 3; +     * +     * _.forInRight(new Foo, function(value, key) { +     *   console.log(key); +     * }); +     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. +     */ +    function forInRight(object, iteratee) { +      return object == null +        ? object +        : baseForRight(object, getIteratee(iteratee, 3), keysIn); +    } + +    /** +     * Iterates over own enumerable string keyed properties of an object and +     * invokes `iteratee` for each property. The iteratee is invoked with three +     * arguments: (value, key, object). Iteratee functions may exit iteration +     * early by explicitly returning `false`. +     * +     * @static +     * @memberOf _ +     * @since 0.3.0 +     * @category Object +     * @param {Object} object The object to iterate over. +     * @param {Function} [iteratee=_.identity] The function invoked per iteration. +     * @returns {Object} Returns `object`. +     * @see _.forOwnRight +     * @example +     * +     * function Foo() { +     *   this.a = 1; +     *   this.b = 2; +     * } +     * +     * Foo.prototype.c = 3; +     * +     * _.forOwn(new Foo, function(value, key) { +     *   console.log(key); +     * }); +     * // => Logs 'a' then 'b' (iteration order is not guaranteed). +     */ +    function forOwn(object, iteratee) { +      return object && baseForOwn(object, getIteratee(iteratee, 3)); +    } + +    /** +     * This method is like `_.forOwn` except that it iterates over properties of +     * `object` in the opposite order. +     * +     * @static +     * @memberOf _ +     * @since 2.0.0 +     * @category Object +     * @param {Object} object The object to iterate over. +     * @param {Function} [iteratee=_.identity] The function invoked per iteration. +     * @returns {Object} Returns `object`. +     * @see _.forOwn +     * @example +     * +     * function Foo() { +     *   this.a = 1; +     *   this.b = 2; +     * } +     * +     * Foo.prototype.c = 3; +     * +     * _.forOwnRight(new Foo, function(value, key) { +     *   console.log(key); +     * }); +     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. +     */ +    function forOwnRight(object, iteratee) { +      return object && baseForOwnRight(object, getIteratee(iteratee, 3)); +    } + +    /** +     * Creates an array of function property names from own enumerable properties +     * of `object`. +     * +     * @static +     * @since 0.1.0 +     * @memberOf _ +     * @category Object +     * @param {Object} object The object to inspect. +     * @returns {Array} Returns the function names. +     * @see _.functionsIn +     * @example +     * +     * function Foo() { +     *   this.a = _.constant('a'); +     *   this.b = _.constant('b'); +     * } +     * +     * Foo.prototype.c = _.constant('c'); +     * +     * _.functions(new Foo); +     * // => ['a', 'b'] +     */ +    function functions(object) { +      return object == null ? [] : baseFunctions(object, keys(object)); +    } + +    /** +     * Creates an array of function property names from own and inherited +     * enumerable properties of `object`. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Object +     * @param {Object} object The object to inspect. +     * @returns {Array} Returns the function names. +     * @see _.functions +     * @example +     * +     * function Foo() { +     *   this.a = _.constant('a'); +     *   this.b = _.constant('b'); +     * } +     * +     * Foo.prototype.c = _.constant('c'); +     * +     * _.functionsIn(new Foo); +     * // => ['a', 'b', 'c'] +     */ +    function functionsIn(object) { +      return object == null ? [] : baseFunctions(object, keysIn(object)); +    } + +    /** +     * Gets the value at `path` of `object`. If the resolved value is +     * `undefined`, the `defaultValue` is returned in its place. +     * +     * @static +     * @memberOf _ +     * @since 3.7.0 +     * @category Object +     * @param {Object} object The object to query. +     * @param {Array|string} path The path of the property to get. +     * @param {*} [defaultValue] The value returned for `undefined` resolved values. +     * @returns {*} Returns the resolved value. +     * @example +     * +     * var object = { 'a': [{ 'b': { 'c': 3 } }] }; +     * +     * _.get(object, 'a[0].b.c'); +     * // => 3 +     * +     * _.get(object, ['a', '0', 'b', 'c']); +     * // => 3 +     * +     * _.get(object, 'a.b.c', 'default'); +     * // => 'default' +     */ +    function get(object, path, defaultValue) { +      var result = object == null ? undefined : baseGet(object, path); +      return result === undefined ? defaultValue : result; +    } + +    /** +     * Checks if `path` is a direct property of `object`. +     * +     * @static +     * @since 0.1.0 +     * @memberOf _ +     * @category Object +     * @param {Object} object The object to query. +     * @param {Array|string} path The path to check. +     * @returns {boolean} Returns `true` if `path` exists, else `false`. +     * @example +     * +     * var object = { 'a': { 'b': 2 } }; +     * var other = _.create({ 'a': _.create({ 'b': 2 }) }); +     * +     * _.has(object, 'a'); +     * // => true +     * +     * _.has(object, 'a.b'); +     * // => true +     * +     * _.has(object, ['a', 'b']); +     * // => true +     * +     * _.has(other, 'a'); +     * // => false +     */ +    function has(object, path) { +      return object != null && hasPath(object, path, baseHas); +    } + +    /** +     * Checks if `path` is a direct or inherited property of `object`. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Object +     * @param {Object} object The object to query. +     * @param {Array|string} path The path to check. +     * @returns {boolean} Returns `true` if `path` exists, else `false`. +     * @example +     * +     * var object = _.create({ 'a': _.create({ 'b': 2 }) }); +     * +     * _.hasIn(object, 'a'); +     * // => true +     * +     * _.hasIn(object, 'a.b'); +     * // => true +     * +     * _.hasIn(object, ['a', 'b']); +     * // => true +     * +     * _.hasIn(object, 'b'); +     * // => false +     */ +    function hasIn(object, path) { +      return object != null && hasPath(object, path, baseHasIn); +    } + +    /** +     * Creates an object composed of the inverted keys and values of `object`. +     * If `object` contains duplicate values, subsequent values overwrite +     * property assignments of previous values. +     * +     * @static +     * @memberOf _ +     * @since 0.7.0 +     * @category Object +     * @param {Object} object The object to invert. +     * @returns {Object} Returns the new inverted object. +     * @example +     * +     * var object = { 'a': 1, 'b': 2, 'c': 1 }; +     * +     * _.invert(object); +     * // => { '1': 'c', '2': 'b' } +     */ +    var invert = createInverter(function(result, value, key) { +      if (value != null && +          typeof value.toString != 'function') { +        value = nativeObjectToString.call(value); +      } + +      result[value] = key; +    }, constant(identity)); + +    /** +     * This method is like `_.invert` except that the inverted object is generated +     * from the results of running each element of `object` thru `iteratee`. The +     * corresponding inverted value of each inverted key is an array of keys +     * responsible for generating the inverted value. The iteratee is invoked +     * with one argument: (value). +     * +     * @static +     * @memberOf _ +     * @since 4.1.0 +     * @category Object +     * @param {Object} object The object to invert. +     * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +     * @returns {Object} Returns the new inverted object. +     * @example +     * +     * var object = { 'a': 1, 'b': 2, 'c': 1 }; +     * +     * _.invertBy(object); +     * // => { '1': ['a', 'c'], '2': ['b'] } +     * +     * _.invertBy(object, function(value) { +     *   return 'group' + value; +     * }); +     * // => { 'group1': ['a', 'c'], 'group2': ['b'] } +     */ +    var invertBy = createInverter(function(result, value, key) { +      if (value != null && +          typeof value.toString != 'function') { +        value = nativeObjectToString.call(value); +      } + +      if (hasOwnProperty.call(result, value)) { +        result[value].push(key); +      } else { +        result[value] = [key]; +      } +    }, getIteratee); + +    /** +     * Invokes the method at `path` of `object`. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Object +     * @param {Object} object The object to query. +     * @param {Array|string} path The path of the method to invoke. +     * @param {...*} [args] The arguments to invoke the method with. +     * @returns {*} Returns the result of the invoked method. +     * @example +     * +     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; +     * +     * _.invoke(object, 'a[0].b.c.slice', 1, 3); +     * // => [2, 3] +     */ +    var invoke = baseRest(baseInvoke); + +    /** +     * Creates an array of the own enumerable property names of `object`. +     * +     * **Note:** Non-object values are coerced to objects. See the +     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) +     * for more details. +     * +     * @static +     * @since 0.1.0 +     * @memberOf _ +     * @category Object +     * @param {Object} object The object to query. +     * @returns {Array} Returns the array of property names. +     * @example +     * +     * function Foo() { +     *   this.a = 1; +     *   this.b = 2; +     * } +     * +     * Foo.prototype.c = 3; +     * +     * _.keys(new Foo); +     * // => ['a', 'b'] (iteration order is not guaranteed) +     * +     * _.keys('hi'); +     * // => ['0', '1'] +     */ +    function keys(object) { +      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +    } + +    /** +     * Creates an array of the own and inherited enumerable property names of `object`. +     * +     * **Note:** Non-object values are coerced to objects. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Object +     * @param {Object} object The object to query. +     * @returns {Array} Returns the array of property names. +     * @example +     * +     * function Foo() { +     *   this.a = 1; +     *   this.b = 2; +     * } +     * +     * Foo.prototype.c = 3; +     * +     * _.keysIn(new Foo); +     * // => ['a', 'b', 'c'] (iteration order is not guaranteed) +     */ +    function keysIn(object) { +      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); +    } + +    /** +     * The opposite of `_.mapValues`; this method creates an object with the +     * same values as `object` and keys generated by running each own enumerable +     * string keyed property of `object` thru `iteratee`. The iteratee is invoked +     * with three arguments: (value, key, object). +     * +     * @static +     * @memberOf _ +     * @since 3.8.0 +     * @category Object +     * @param {Object} object The object to iterate over. +     * @param {Function} [iteratee=_.identity] The function invoked per iteration. +     * @returns {Object} Returns the new mapped object. +     * @see _.mapValues +     * @example +     * +     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { +     *   return key + value; +     * }); +     * // => { 'a1': 1, 'b2': 2 } +     */ +    function mapKeys(object, iteratee) { +      var result = {}; +      iteratee = getIteratee(iteratee, 3); + +      baseForOwn(object, function(value, key, object) { +        baseAssignValue(result, iteratee(value, key, object), value); +      }); +      return result; +    } + +    /** +     * Creates an object with the same keys as `object` and values generated +     * by running each own enumerable string keyed property of `object` thru +     * `iteratee`. The iteratee is invoked with three arguments: +     * (value, key, object). +     * +     * @static +     * @memberOf _ +     * @since 2.4.0 +     * @category Object +     * @param {Object} object The object to iterate over. +     * @param {Function} [iteratee=_.identity] The function invoked per iteration. +     * @returns {Object} Returns the new mapped object. +     * @see _.mapKeys +     * @example +     * +     * var users = { +     *   'fred':    { 'user': 'fred',    'age': 40 }, +     *   'pebbles': { 'user': 'pebbles', 'age': 1 } +     * }; +     * +     * _.mapValues(users, function(o) { return o.age; }); +     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) +     * +     * // The `_.property` iteratee shorthand. +     * _.mapValues(users, 'age'); +     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) +     */ +    function mapValues(object, iteratee) { +      var result = {}; +      iteratee = getIteratee(iteratee, 3); + +      baseForOwn(object, function(value, key, object) { +        baseAssignValue(result, key, iteratee(value, key, object)); +      }); +      return result; +    } + +    /** +     * This method is like `_.assign` except that it recursively merges own and +     * inherited enumerable string keyed properties of source objects into the +     * destination object. Source properties that resolve to `undefined` are +     * skipped if a destination value exists. Array and plain object properties +     * are merged recursively. Other objects and value types are overridden by +     * assignment. Source objects are applied from left to right. Subsequent +     * sources overwrite property assignments of previous sources. +     * +     * **Note:** This method mutates `object`. +     * +     * @static +     * @memberOf _ +     * @since 0.5.0 +     * @category Object +     * @param {Object} object The destination object. +     * @param {...Object} [sources] The source objects. +     * @returns {Object} Returns `object`. +     * @example +     * +     * var object = { +     *   'a': [{ 'b': 2 }, { 'd': 4 }] +     * }; +     * +     * var other = { +     *   'a': [{ 'c': 3 }, { 'e': 5 }] +     * }; +     * +     * _.merge(object, other); +     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } +     */ +    var merge = createAssigner(function(object, source, srcIndex) { +      baseMerge(object, source, srcIndex); +    }); + +    /** +     * This method is like `_.merge` except that it accepts `customizer` which +     * is invoked to produce the merged values of the destination and source +     * properties. If `customizer` returns `undefined`, merging is handled by the +     * method instead. The `customizer` is invoked with six arguments: +     * (objValue, srcValue, key, object, source, stack). +     * +     * **Note:** This method mutates `object`. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Object +     * @param {Object} object The destination object. +     * @param {...Object} sources The source objects. +     * @param {Function} customizer The function to customize assigned values. +     * @returns {Object} Returns `object`. +     * @example +     * +     * function customizer(objValue, srcValue) { +     *   if (_.isArray(objValue)) { +     *     return objValue.concat(srcValue); +     *   } +     * } +     * +     * var object = { 'a': [1], 'b': [2] }; +     * var other = { 'a': [3], 'b': [4] }; +     * +     * _.mergeWith(object, other, customizer); +     * // => { 'a': [1, 3], 'b': [2, 4] } +     */ +    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { +      baseMerge(object, source, srcIndex, customizer); +    }); + +    /** +     * The opposite of `_.pick`; this method creates an object composed of the +     * own and inherited enumerable property paths of `object` that are not omitted. +     * +     * **Note:** This method is considerably slower than `_.pick`. +     * +     * @static +     * @since 0.1.0 +     * @memberOf _ +     * @category Object +     * @param {Object} object The source object. +     * @param {...(string|string[])} [paths] The property paths to omit. +     * @returns {Object} Returns the new object. +     * @example +     * +     * var object = { 'a': 1, 'b': '2', 'c': 3 }; +     * +     * _.omit(object, ['a', 'c']); +     * // => { 'b': '2' } +     */ +    var omit = flatRest(function(object, paths) { +      var result = {}; +      if (object == null) { +        return result; +      } +      var isDeep = false; +      paths = arrayMap(paths, function(path) { +        path = castPath(path, object); +        isDeep || (isDeep = path.length > 1); +        return path; +      }); +      copyObject(object, getAllKeysIn(object), result); +      if (isDeep) { +        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); +      } +      var length = paths.length; +      while (length--) { +        baseUnset(result, paths[length]); +      } +      return result; +    }); + +    /** +     * The opposite of `_.pickBy`; this method creates an object composed of +     * the own and inherited enumerable string keyed properties of `object` that +     * `predicate` doesn't return truthy for. The predicate is invoked with two +     * arguments: (value, key). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Object +     * @param {Object} object The source object. +     * @param {Function} [predicate=_.identity] The function invoked per property. +     * @returns {Object} Returns the new object. +     * @example +     * +     * var object = { 'a': 1, 'b': '2', 'c': 3 }; +     * +     * _.omitBy(object, _.isNumber); +     * // => { 'b': '2' } +     */ +    function omitBy(object, predicate) { +      return pickBy(object, negate(getIteratee(predicate))); +    } + +    /** +     * Creates an object composed of the picked `object` properties. +     * +     * @static +     * @since 0.1.0 +     * @memberOf _ +     * @category Object +     * @param {Object} object The source object. +     * @param {...(string|string[])} [paths] The property paths to pick. +     * @returns {Object} Returns the new object. +     * @example +     * +     * var object = { 'a': 1, 'b': '2', 'c': 3 }; +     * +     * _.pick(object, ['a', 'c']); +     * // => { 'a': 1, 'c': 3 } +     */ +    var pick = flatRest(function(object, paths) { +      return object == null ? {} : basePick(object, paths); +    }); + +    /** +     * Creates an object composed of the `object` properties `predicate` returns +     * truthy for. The predicate is invoked with two arguments: (value, key). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Object +     * @param {Object} object The source object. +     * @param {Function} [predicate=_.identity] The function invoked per property. +     * @returns {Object} Returns the new object. +     * @example +     * +     * var object = { 'a': 1, 'b': '2', 'c': 3 }; +     * +     * _.pickBy(object, _.isNumber); +     * // => { 'a': 1, 'c': 3 } +     */ +    function pickBy(object, predicate) { +      if (object == null) { +        return {}; +      } +      var props = arrayMap(getAllKeysIn(object), function(prop) { +        return [prop]; +      }); +      predicate = getIteratee(predicate); +      return basePickBy(object, props, function(value, path) { +        return predicate(value, path[0]); +      }); +    } + +    /** +     * This method is like `_.get` except that if the resolved value is a +     * function it's invoked with the `this` binding of its parent object and +     * its result is returned. +     * +     * @static +     * @since 0.1.0 +     * @memberOf _ +     * @category Object +     * @param {Object} object The object to query. +     * @param {Array|string} path The path of the property to resolve. +     * @param {*} [defaultValue] The value returned for `undefined` resolved values. +     * @returns {*} Returns the resolved value. +     * @example +     * +     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; +     * +     * _.result(object, 'a[0].b.c1'); +     * // => 3 +     * +     * _.result(object, 'a[0].b.c2'); +     * // => 4 +     * +     * _.result(object, 'a[0].b.c3', 'default'); +     * // => 'default' +     * +     * _.result(object, 'a[0].b.c3', _.constant('default')); +     * // => 'default' +     */ +    function result(object, path, defaultValue) { +      path = castPath(path, object); + +      var index = -1, +          length = path.length; + +      // Ensure the loop is entered when path is empty. +      if (!length) { +        length = 1; +        object = undefined; +      } +      while (++index < length) { +        var value = object == null ? undefined : object[toKey(path[index])]; +        if (value === undefined) { +          index = length; +          value = defaultValue; +        } +        object = isFunction(value) ? value.call(object) : value; +      } +      return object; +    } + +    /** +     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, +     * it's created. Arrays are created for missing index properties while objects +     * are created for all other missing properties. Use `_.setWith` to customize +     * `path` creation. +     * +     * **Note:** This method mutates `object`. +     * +     * @static +     * @memberOf _ +     * @since 3.7.0 +     * @category Object +     * @param {Object} object The object to modify. +     * @param {Array|string} path The path of the property to set. +     * @param {*} value The value to set. +     * @returns {Object} Returns `object`. +     * @example +     * +     * var object = { 'a': [{ 'b': { 'c': 3 } }] }; +     * +     * _.set(object, 'a[0].b.c', 4); +     * console.log(object.a[0].b.c); +     * // => 4 +     * +     * _.set(object, ['x', '0', 'y', 'z'], 5); +     * console.log(object.x[0].y.z); +     * // => 5 +     */ +    function set(object, path, value) { +      return object == null ? object : baseSet(object, path, value); +    } + +    /** +     * This method is like `_.set` except that it accepts `customizer` which is +     * invoked to produce the objects of `path`.  If `customizer` returns `undefined` +     * path creation is handled by the method instead. The `customizer` is invoked +     * with three arguments: (nsValue, key, nsObject). +     * +     * **Note:** This method mutates `object`. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Object +     * @param {Object} object The object to modify. +     * @param {Array|string} path The path of the property to set. +     * @param {*} value The value to set. +     * @param {Function} [customizer] The function to customize assigned values. +     * @returns {Object} Returns `object`. +     * @example +     * +     * var object = {}; +     * +     * _.setWith(object, '[0][1]', 'a', Object); +     * // => { '0': { '1': 'a' } } +     */ +    function setWith(object, path, value, customizer) { +      customizer = typeof customizer == 'function' ? customizer : undefined; +      return object == null ? object : baseSet(object, path, value, customizer); +    } + +    /** +     * Creates an array of own enumerable string keyed-value pairs for `object` +     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its +     * entries are returned. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @alias entries +     * @category Object +     * @param {Object} object The object to query. +     * @returns {Array} Returns the key-value pairs. +     * @example +     * +     * function Foo() { +     *   this.a = 1; +     *   this.b = 2; +     * } +     * +     * Foo.prototype.c = 3; +     * +     * _.toPairs(new Foo); +     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) +     */ +    var toPairs = createToPairs(keys); + +    /** +     * Creates an array of own and inherited enumerable string keyed-value pairs +     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map +     * or set, its entries are returned. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @alias entriesIn +     * @category Object +     * @param {Object} object The object to query. +     * @returns {Array} Returns the key-value pairs. +     * @example +     * +     * function Foo() { +     *   this.a = 1; +     *   this.b = 2; +     * } +     * +     * Foo.prototype.c = 3; +     * +     * _.toPairsIn(new Foo); +     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) +     */ +    var toPairsIn = createToPairs(keysIn); + +    /** +     * An alternative to `_.reduce`; this method transforms `object` to a new +     * `accumulator` object which is the result of running each of its own +     * enumerable string keyed properties thru `iteratee`, with each invocation +     * potentially mutating the `accumulator` object. If `accumulator` is not +     * provided, a new object with the same `[[Prototype]]` will be used. The +     * iteratee is invoked with four arguments: (accumulator, value, key, object). +     * Iteratee functions may exit iteration early by explicitly returning `false`. +     * +     * @static +     * @memberOf _ +     * @since 1.3.0 +     * @category Object +     * @param {Object} object The object to iterate over. +     * @param {Function} [iteratee=_.identity] The function invoked per iteration. +     * @param {*} [accumulator] The custom accumulator value. +     * @returns {*} Returns the accumulated value. +     * @example +     * +     * _.transform([2, 3, 4], function(result, n) { +     *   result.push(n *= n); +     *   return n % 2 == 0; +     * }, []); +     * // => [4, 9] +     * +     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { +     *   (result[value] || (result[value] = [])).push(key); +     * }, {}); +     * // => { '1': ['a', 'c'], '2': ['b'] } +     */ +    function transform(object, iteratee, accumulator) { +      var isArr = isArray(object), +          isArrLike = isArr || isBuffer(object) || isTypedArray(object); + +      iteratee = getIteratee(iteratee, 4); +      if (accumulator == null) { +        var Ctor = object && object.constructor; +        if (isArrLike) { +          accumulator = isArr ? new Ctor : []; +        } +        else if (isObject(object)) { +          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; +        } +        else { +          accumulator = {}; +        } +      } +      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { +        return iteratee(accumulator, value, index, object); +      }); +      return accumulator; +    } + +    /** +     * Removes the property at `path` of `object`. +     * +     * **Note:** This method mutates `object`. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Object +     * @param {Object} object The object to modify. +     * @param {Array|string} path The path of the property to unset. +     * @returns {boolean} Returns `true` if the property is deleted, else `false`. +     * @example +     * +     * var object = { 'a': [{ 'b': { 'c': 7 } }] }; +     * _.unset(object, 'a[0].b.c'); +     * // => true +     * +     * console.log(object); +     * // => { 'a': [{ 'b': {} }] }; +     * +     * _.unset(object, ['a', '0', 'b', 'c']); +     * // => true +     * +     * console.log(object); +     * // => { 'a': [{ 'b': {} }] }; +     */ +    function unset(object, path) { +      return object == null ? true : baseUnset(object, path); +    } + +    /** +     * This method is like `_.set` except that accepts `updater` to produce the +     * value to set. Use `_.updateWith` to customize `path` creation. The `updater` +     * is invoked with one argument: (value). +     * +     * **Note:** This method mutates `object`. +     * +     * @static +     * @memberOf _ +     * @since 4.6.0 +     * @category Object +     * @param {Object} object The object to modify. +     * @param {Array|string} path The path of the property to set. +     * @param {Function} updater The function to produce the updated value. +     * @returns {Object} Returns `object`. +     * @example +     * +     * var object = { 'a': [{ 'b': { 'c': 3 } }] }; +     * +     * _.update(object, 'a[0].b.c', function(n) { return n * n; }); +     * console.log(object.a[0].b.c); +     * // => 9 +     * +     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); +     * console.log(object.x[0].y.z); +     * // => 0 +     */ +    function update(object, path, updater) { +      return object == null ? object : baseUpdate(object, path, castFunction(updater)); +    } + +    /** +     * This method is like `_.update` except that it accepts `customizer` which is +     * invoked to produce the objects of `path`.  If `customizer` returns `undefined` +     * path creation is handled by the method instead. The `customizer` is invoked +     * with three arguments: (nsValue, key, nsObject). +     * +     * **Note:** This method mutates `object`. +     * +     * @static +     * @memberOf _ +     * @since 4.6.0 +     * @category Object +     * @param {Object} object The object to modify. +     * @param {Array|string} path The path of the property to set. +     * @param {Function} updater The function to produce the updated value. +     * @param {Function} [customizer] The function to customize assigned values. +     * @returns {Object} Returns `object`. +     * @example +     * +     * var object = {}; +     * +     * _.updateWith(object, '[0][1]', _.constant('a'), Object); +     * // => { '0': { '1': 'a' } } +     */ +    function updateWith(object, path, updater, customizer) { +      customizer = typeof customizer == 'function' ? customizer : undefined; +      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); +    } + +    /** +     * Creates an array of the own enumerable string keyed property values of `object`. +     * +     * **Note:** Non-object values are coerced to objects. +     * +     * @static +     * @since 0.1.0 +     * @memberOf _ +     * @category Object +     * @param {Object} object The object to query. +     * @returns {Array} Returns the array of property values. +     * @example +     * +     * function Foo() { +     *   this.a = 1; +     *   this.b = 2; +     * } +     * +     * Foo.prototype.c = 3; +     * +     * _.values(new Foo); +     * // => [1, 2] (iteration order is not guaranteed) +     * +     * _.values('hi'); +     * // => ['h', 'i'] +     */ +    function values(object) { +      return object == null ? [] : baseValues(object, keys(object)); +    } + +    /** +     * Creates an array of the own and inherited enumerable string keyed property +     * values of `object`. +     * +     * **Note:** Non-object values are coerced to objects. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Object +     * @param {Object} object The object to query. +     * @returns {Array} Returns the array of property values. +     * @example +     * +     * function Foo() { +     *   this.a = 1; +     *   this.b = 2; +     * } +     * +     * Foo.prototype.c = 3; +     * +     * _.valuesIn(new Foo); +     * // => [1, 2, 3] (iteration order is not guaranteed) +     */ +    function valuesIn(object) { +      return object == null ? [] : baseValues(object, keysIn(object)); +    } + +    /*------------------------------------------------------------------------*/ + +    /** +     * Clamps `number` within the inclusive `lower` and `upper` bounds. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Number +     * @param {number} number The number to clamp. +     * @param {number} [lower] The lower bound. +     * @param {number} upper The upper bound. +     * @returns {number} Returns the clamped number. +     * @example +     * +     * _.clamp(-10, -5, 5); +     * // => -5 +     * +     * _.clamp(10, -5, 5); +     * // => 5 +     */ +    function clamp(number, lower, upper) { +      if (upper === undefined) { +        upper = lower; +        lower = undefined; +      } +      if (upper !== undefined) { +        upper = toNumber(upper); +        upper = upper === upper ? upper : 0; +      } +      if (lower !== undefined) { +        lower = toNumber(lower); +        lower = lower === lower ? lower : 0; +      } +      return baseClamp(toNumber(number), lower, upper); +    } + +    /** +     * Checks if `n` is between `start` and up to, but not including, `end`. If +     * `end` is not specified, it's set to `start` with `start` then set to `0`. +     * If `start` is greater than `end` the params are swapped to support +     * negative ranges. +     * +     * @static +     * @memberOf _ +     * @since 3.3.0 +     * @category Number +     * @param {number} number The number to check. +     * @param {number} [start=0] The start of the range. +     * @param {number} end The end of the range. +     * @returns {boolean} Returns `true` if `number` is in the range, else `false`. +     * @see _.range, _.rangeRight +     * @example +     * +     * _.inRange(3, 2, 4); +     * // => true +     * +     * _.inRange(4, 8); +     * // => true +     * +     * _.inRange(4, 2); +     * // => false +     * +     * _.inRange(2, 2); +     * // => false +     * +     * _.inRange(1.2, 2); +     * // => true +     * +     * _.inRange(5.2, 4); +     * // => false +     * +     * _.inRange(-3, -2, -6); +     * // => true +     */ +    function inRange(number, start, end) { +      start = toFinite(start); +      if (end === undefined) { +        end = start; +        start = 0; +      } else { +        end = toFinite(end); +      } +      number = toNumber(number); +      return baseInRange(number, start, end); +    } + +    /** +     * Produces a random number between the inclusive `lower` and `upper` bounds. +     * If only one argument is provided a number between `0` and the given number +     * is returned. If `floating` is `true`, or either `lower` or `upper` are +     * floats, a floating-point number is returned instead of an integer. +     * +     * **Note:** JavaScript follows the IEEE-754 standard for resolving +     * floating-point values which can produce unexpected results. +     * +     * @static +     * @memberOf _ +     * @since 0.7.0 +     * @category Number +     * @param {number} [lower=0] The lower bound. +     * @param {number} [upper=1] The upper bound. +     * @param {boolean} [floating] Specify returning a floating-point number. +     * @returns {number} Returns the random number. +     * @example +     * +     * _.random(0, 5); +     * // => an integer between 0 and 5 +     * +     * _.random(5); +     * // => also an integer between 0 and 5 +     * +     * _.random(5, true); +     * // => a floating-point number between 0 and 5 +     * +     * _.random(1.2, 5.2); +     * // => a floating-point number between 1.2 and 5.2 +     */ +    function random(lower, upper, floating) { +      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { +        upper = floating = undefined; +      } +      if (floating === undefined) { +        if (typeof upper == 'boolean') { +          floating = upper; +          upper = undefined; +        } +        else if (typeof lower == 'boolean') { +          floating = lower; +          lower = undefined; +        } +      } +      if (lower === undefined && upper === undefined) { +        lower = 0; +        upper = 1; +      } +      else { +        lower = toFinite(lower); +        if (upper === undefined) { +          upper = lower; +          lower = 0; +        } else { +          upper = toFinite(upper); +        } +      } +      if (lower > upper) { +        var temp = lower; +        lower = upper; +        upper = temp; +      } +      if (floating || lower % 1 || upper % 1) { +        var rand = nativeRandom(); +        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); +      } +      return baseRandom(lower, upper); +    } + +    /*------------------------------------------------------------------------*/ + +    /** +     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category String +     * @param {string} [string=''] The string to convert. +     * @returns {string} Returns the camel cased string. +     * @example +     * +     * _.camelCase('Foo Bar'); +     * // => 'fooBar' +     * +     * _.camelCase('--foo-bar--'); +     * // => 'fooBar' +     * +     * _.camelCase('__FOO_BAR__'); +     * // => 'fooBar' +     */ +    var camelCase = createCompounder(function(result, word, index) { +      word = word.toLowerCase(); +      return result + (index ? capitalize(word) : word); +    }); + +    /** +     * Converts the first character of `string` to upper case and the remaining +     * to lower case. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category String +     * @param {string} [string=''] The string to capitalize. +     * @returns {string} Returns the capitalized string. +     * @example +     * +     * _.capitalize('FRED'); +     * // => 'Fred' +     */ +    function capitalize(string) { +      return upperFirst(toString(string).toLowerCase()); +    } + +    /** +     * Deburrs `string` by converting +     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) +     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) +     * letters to basic Latin letters and removing +     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category String +     * @param {string} [string=''] The string to deburr. +     * @returns {string} Returns the deburred string. +     * @example +     * +     * _.deburr('déjà vu'); +     * // => 'deja vu' +     */ +    function deburr(string) { +      string = toString(string); +      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); +    } + +    /** +     * Checks if `string` ends with the given target string. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category String +     * @param {string} [string=''] The string to inspect. +     * @param {string} [target] The string to search for. +     * @param {number} [position=string.length] The position to search up to. +     * @returns {boolean} Returns `true` if `string` ends with `target`, +     *  else `false`. +     * @example +     * +     * _.endsWith('abc', 'c'); +     * // => true +     * +     * _.endsWith('abc', 'b'); +     * // => false +     * +     * _.endsWith('abc', 'b', 2); +     * // => true +     */ +    function endsWith(string, target, position) { +      string = toString(string); +      target = baseToString(target); + +      var length = string.length; +      position = position === undefined +        ? length +        : baseClamp(toInteger(position), 0, length); + +      var end = position; +      position -= target.length; +      return position >= 0 && string.slice(position, end) == target; +    } + +    /** +     * Converts the characters "&", "<", ">", '"', and "'" in `string` to their +     * corresponding HTML entities. +     * +     * **Note:** No other characters are escaped. To escape additional +     * characters use a third-party library like [_he_](https://mths.be/he). +     * +     * Though the ">" character is escaped for symmetry, characters like +     * ">" and "/" don't need escaping in HTML and have no special meaning +     * unless they're part of a tag or unquoted attribute value. See +     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) +     * (under "semi-related fun fact") for more details. +     * +     * When working with HTML you should always +     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce +     * XSS vectors. +     * +     * @static +     * @since 0.1.0 +     * @memberOf _ +     * @category String +     * @param {string} [string=''] The string to escape. +     * @returns {string} Returns the escaped string. +     * @example +     * +     * _.escape('fred, barney, & pebbles'); +     * // => 'fred, barney, & pebbles' +     */ +    function escape(string) { +      string = toString(string); +      return (string && reHasUnescapedHtml.test(string)) +        ? string.replace(reUnescapedHtml, escapeHtmlChar) +        : string; +    } + +    /** +     * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", +     * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category String +     * @param {string} [string=''] The string to escape. +     * @returns {string} Returns the escaped string. +     * @example +     * +     * _.escapeRegExp('[lodash](https://lodash.com/)'); +     * // => '\[lodash\]\(https://lodash\.com/\)' +     */ +    function escapeRegExp(string) { +      string = toString(string); +      return (string && reHasRegExpChar.test(string)) +        ? string.replace(reRegExpChar, '\\$&') +        : string; +    } + +    /** +     * Converts `string` to +     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category String +     * @param {string} [string=''] The string to convert. +     * @returns {string} Returns the kebab cased string. +     * @example +     * +     * _.kebabCase('Foo Bar'); +     * // => 'foo-bar' +     * +     * _.kebabCase('fooBar'); +     * // => 'foo-bar' +     * +     * _.kebabCase('__FOO_BAR__'); +     * // => 'foo-bar' +     */ +    var kebabCase = createCompounder(function(result, word, index) { +      return result + (index ? '-' : '') + word.toLowerCase(); +    }); + +    /** +     * Converts `string`, as space separated words, to lower case. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category String +     * @param {string} [string=''] The string to convert. +     * @returns {string} Returns the lower cased string. +     * @example +     * +     * _.lowerCase('--Foo-Bar--'); +     * // => 'foo bar' +     * +     * _.lowerCase('fooBar'); +     * // => 'foo bar' +     * +     * _.lowerCase('__FOO_BAR__'); +     * // => 'foo bar' +     */ +    var lowerCase = createCompounder(function(result, word, index) { +      return result + (index ? ' ' : '') + word.toLowerCase(); +    }); + +    /** +     * Converts the first character of `string` to lower case. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category String +     * @param {string} [string=''] The string to convert. +     * @returns {string} Returns the converted string. +     * @example +     * +     * _.lowerFirst('Fred'); +     * // => 'fred' +     * +     * _.lowerFirst('FRED'); +     * // => 'fRED' +     */ +    var lowerFirst = createCaseFirst('toLowerCase'); + +    /** +     * Pads `string` on the left and right sides if it's shorter than `length`. +     * Padding characters are truncated if they can't be evenly divided by `length`. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category String +     * @param {string} [string=''] The string to pad. +     * @param {number} [length=0] The padding length. +     * @param {string} [chars=' '] The string used as padding. +     * @returns {string} Returns the padded string. +     * @example +     * +     * _.pad('abc', 8); +     * // => '  abc   ' +     * +     * _.pad('abc', 8, '_-'); +     * // => '_-abc_-_' +     * +     * _.pad('abc', 3); +     * // => 'abc' +     */ +    function pad(string, length, chars) { +      string = toString(string); +      length = toInteger(length); + +      var strLength = length ? stringSize(string) : 0; +      if (!length || strLength >= length) { +        return string; +      } +      var mid = (length - strLength) / 2; +      return ( +        createPadding(nativeFloor(mid), chars) + +        string + +        createPadding(nativeCeil(mid), chars) +      ); +    } + +    /** +     * Pads `string` on the right side if it's shorter than `length`. Padding +     * characters are truncated if they exceed `length`. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category String +     * @param {string} [string=''] The string to pad. +     * @param {number} [length=0] The padding length. +     * @param {string} [chars=' '] The string used as padding. +     * @returns {string} Returns the padded string. +     * @example +     * +     * _.padEnd('abc', 6); +     * // => 'abc   ' +     * +     * _.padEnd('abc', 6, '_-'); +     * // => 'abc_-_' +     * +     * _.padEnd('abc', 3); +     * // => 'abc' +     */ +    function padEnd(string, length, chars) { +      string = toString(string); +      length = toInteger(length); + +      var strLength = length ? stringSize(string) : 0; +      return (length && strLength < length) +        ? (string + createPadding(length - strLength, chars)) +        : string; +    } + +    /** +     * Pads `string` on the left side if it's shorter than `length`. Padding +     * characters are truncated if they exceed `length`. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category String +     * @param {string} [string=''] The string to pad. +     * @param {number} [length=0] The padding length. +     * @param {string} [chars=' '] The string used as padding. +     * @returns {string} Returns the padded string. +     * @example +     * +     * _.padStart('abc', 6); +     * // => '   abc' +     * +     * _.padStart('abc', 6, '_-'); +     * // => '_-_abc' +     * +     * _.padStart('abc', 3); +     * // => 'abc' +     */ +    function padStart(string, length, chars) { +      string = toString(string); +      length = toInteger(length); + +      var strLength = length ? stringSize(string) : 0; +      return (length && strLength < length) +        ? (createPadding(length - strLength, chars) + string) +        : string; +    } + +    /** +     * Converts `string` to an integer of the specified radix. If `radix` is +     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a +     * hexadecimal, in which case a `radix` of `16` is used. +     * +     * **Note:** This method aligns with the +     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. +     * +     * @static +     * @memberOf _ +     * @since 1.1.0 +     * @category String +     * @param {string} string The string to convert. +     * @param {number} [radix=10] The radix to interpret `value` by. +     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +     * @returns {number} Returns the converted integer. +     * @example +     * +     * _.parseInt('08'); +     * // => 8 +     * +     * _.map(['6', '08', '10'], _.parseInt); +     * // => [6, 8, 10] +     */ +    function parseInt(string, radix, guard) { +      if (guard || radix == null) { +        radix = 0; +      } else if (radix) { +        radix = +radix; +      } +      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); +    } + +    /** +     * Repeats the given string `n` times. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category String +     * @param {string} [string=''] The string to repeat. +     * @param {number} [n=1] The number of times to repeat the string. +     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +     * @returns {string} Returns the repeated string. +     * @example +     * +     * _.repeat('*', 3); +     * // => '***' +     * +     * _.repeat('abc', 2); +     * // => 'abcabc' +     * +     * _.repeat('abc', 0); +     * // => '' +     */ +    function repeat(string, n, guard) { +      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { +        n = 1; +      } else { +        n = toInteger(n); +      } +      return baseRepeat(toString(string), n); +    } + +    /** +     * Replaces matches for `pattern` in `string` with `replacement`. +     * +     * **Note:** This method is based on +     * [`String#replace`](https://mdn.io/String/replace). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category String +     * @param {string} [string=''] The string to modify. +     * @param {RegExp|string} pattern The pattern to replace. +     * @param {Function|string} replacement The match replacement. +     * @returns {string} Returns the modified string. +     * @example +     * +     * _.replace('Hi Fred', 'Fred', 'Barney'); +     * // => 'Hi Barney' +     */ +    function replace() { +      var args = arguments, +          string = toString(args[0]); + +      return args.length < 3 ? string : string.replace(args[1], args[2]); +    } + +    /** +     * Converts `string` to +     * [snake case](https://en.wikipedia.org/wiki/Snake_case). +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category String +     * @param {string} [string=''] The string to convert. +     * @returns {string} Returns the snake cased string. +     * @example +     * +     * _.snakeCase('Foo Bar'); +     * // => 'foo_bar' +     * +     * _.snakeCase('fooBar'); +     * // => 'foo_bar' +     * +     * _.snakeCase('--FOO-BAR--'); +     * // => 'foo_bar' +     */ +    var snakeCase = createCompounder(function(result, word, index) { +      return result + (index ? '_' : '') + word.toLowerCase(); +    }); + +    /** +     * Splits `string` by `separator`. +     * +     * **Note:** This method is based on +     * [`String#split`](https://mdn.io/String/split). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category String +     * @param {string} [string=''] The string to split. +     * @param {RegExp|string} separator The separator pattern to split by. +     * @param {number} [limit] The length to truncate results to. +     * @returns {Array} Returns the string segments. +     * @example +     * +     * _.split('a-b-c', '-', 2); +     * // => ['a', 'b'] +     */ +    function split(string, separator, limit) { +      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { +        separator = limit = undefined; +      } +      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; +      if (!limit) { +        return []; +      } +      string = toString(string); +      if (string && ( +            typeof separator == 'string' || +            (separator != null && !isRegExp(separator)) +          )) { +        separator = baseToString(separator); +        if (!separator && hasUnicode(string)) { +          return castSlice(stringToArray(string), 0, limit); +        } +      } +      return string.split(separator, limit); +    } + +    /** +     * Converts `string` to +     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). +     * +     * @static +     * @memberOf _ +     * @since 3.1.0 +     * @category String +     * @param {string} [string=''] The string to convert. +     * @returns {string} Returns the start cased string. +     * @example +     * +     * _.startCase('--foo-bar--'); +     * // => 'Foo Bar' +     * +     * _.startCase('fooBar'); +     * // => 'Foo Bar' +     * +     * _.startCase('__FOO_BAR__'); +     * // => 'FOO BAR' +     */ +    var startCase = createCompounder(function(result, word, index) { +      return result + (index ? ' ' : '') + upperFirst(word); +    }); + +    /** +     * Checks if `string` starts with the given target string. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category String +     * @param {string} [string=''] The string to inspect. +     * @param {string} [target] The string to search for. +     * @param {number} [position=0] The position to search from. +     * @returns {boolean} Returns `true` if `string` starts with `target`, +     *  else `false`. +     * @example +     * +     * _.startsWith('abc', 'a'); +     * // => true +     * +     * _.startsWith('abc', 'b'); +     * // => false +     * +     * _.startsWith('abc', 'b', 1); +     * // => true +     */ +    function startsWith(string, target, position) { +      string = toString(string); +      position = position == null +        ? 0 +        : baseClamp(toInteger(position), 0, string.length); + +      target = baseToString(target); +      return string.slice(position, position + target.length) == target; +    } + +    /** +     * Creates a compiled template function that can interpolate data properties +     * in "interpolate" delimiters, HTML-escape interpolated data properties in +     * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data +     * properties may be accessed as free variables in the template. If a setting +     * object is given, it takes precedence over `_.templateSettings` values. +     * +     * **Note:** In the development build `_.template` utilizes +     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) +     * for easier debugging. +     * +     * For more information on precompiling templates see +     * [lodash's custom builds documentation](https://lodash.com/custom-builds). +     * +     * For more information on Chrome extension sandboxes see +     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). +     * +     * @static +     * @since 0.1.0 +     * @memberOf _ +     * @category String +     * @param {string} [string=''] The template string. +     * @param {Object} [options={}] The options object. +     * @param {RegExp} [options.escape=_.templateSettings.escape] +     *  The HTML "escape" delimiter. +     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] +     *  The "evaluate" delimiter. +     * @param {Object} [options.imports=_.templateSettings.imports] +     *  An object to import into the template as free variables. +     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] +     *  The "interpolate" delimiter. +     * @param {string} [options.sourceURL='lodash.templateSources[n]'] +     *  The sourceURL of the compiled template. +     * @param {string} [options.variable='obj'] +     *  The data object variable name. +     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +     * @returns {Function} Returns the compiled template function. +     * @example +     * +     * // Use the "interpolate" delimiter to create a compiled template. +     * var compiled = _.template('hello <%= user %>!'); +     * compiled({ 'user': 'fred' }); +     * // => 'hello fred!' +     * +     * // Use the HTML "escape" delimiter to escape data property values. +     * var compiled = _.template('<b><%- value %></b>'); +     * compiled({ 'value': '<script>' }); +     * // => '<b><script></b>' +     * +     * // Use the "evaluate" delimiter to execute JavaScript and generate HTML. +     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>'); +     * compiled({ 'users': ['fred', 'barney'] }); +     * // => '<li>fred</li><li>barney</li>' +     * +     * // Use the internal `print` function in "evaluate" delimiters. +     * var compiled = _.template('<% print("hello " + user); %>!'); +     * compiled({ 'user': 'barney' }); +     * // => 'hello barney!' +     * +     * // Use the ES template literal delimiter as an "interpolate" delimiter. +     * // Disable support by replacing the "interpolate" delimiter. +     * var compiled = _.template('hello ${ user }!'); +     * compiled({ 'user': 'pebbles' }); +     * // => 'hello pebbles!' +     * +     * // Use backslashes to treat delimiters as plain text. +     * var compiled = _.template('<%= "\\<%- value %\\>" %>'); +     * compiled({ 'value': 'ignored' }); +     * // => '<%- value %>' +     * +     * // Use the `imports` option to import `jQuery` as `jq`. +     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>'; +     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } }); +     * compiled({ 'users': ['fred', 'barney'] }); +     * // => '<li>fred</li><li>barney</li>' +     * +     * // Use the `sourceURL` option to specify a custom sourceURL for the template. +     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' }); +     * compiled(data); +     * // => Find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector. +     * +     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template. +     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' }); +     * compiled.source; +     * // => function(data) { +     * //   var __t, __p = ''; +     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!'; +     * //   return __p; +     * // } +     * +     * // Use custom template delimiters. +     * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g; +     * var compiled = _.template('hello {{ user }}!'); +     * compiled({ 'user': 'mustache' }); +     * // => 'hello mustache!' +     * +     * // Use the `source` property to inline compiled templates for meaningful +     * // line numbers in error messages and stack traces. +     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\ +     *   var JST = {\ +     *     "main": ' + _.template(mainText).source + '\ +     *   };\ +     * '); +     */ +    function template(string, options, guard) { +      // Based on John Resig's `tmpl` implementation +      // (http://ejohn.org/blog/javascript-micro-templating/) +      // and Laura Doktorova's doT.js (https://github.com/olado/doT). +      var settings = lodash.templateSettings; + +      if (guard && isIterateeCall(string, options, guard)) { +        options = undefined; +      } +      string = toString(string); +      options = assignInWith({}, options, settings, customDefaultsAssignIn); + +      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn), +          importsKeys = keys(imports), +          importsValues = baseValues(imports, importsKeys); + +      var isEscaping, +          isEvaluating, +          index = 0, +          interpolate = options.interpolate || reNoMatch, +          source = "__p += '"; + +      // Compile the regexp to match each delimiter. +      var reDelimiters = RegExp( +        (options.escape || reNoMatch).source + '|' + +        interpolate.source + '|' + +        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' + +        (options.evaluate || reNoMatch).source + '|$' +      , 'g'); + +      // Use a sourceURL for easier debugging. +      // The sourceURL gets injected into the source that's eval-ed, so be careful +      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in +      // and escape the comment, thus injecting code that gets evaled. +      var sourceURL = '//# sourceURL=' + +        (hasOwnProperty.call(options, 'sourceURL') +          ? (options.sourceURL + '').replace(/\s/g, ' ') +          : ('lodash.templateSources[' + (++templateCounter) + ']') +        ) + '\n'; + +      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) { +        interpolateValue || (interpolateValue = esTemplateValue); + +        // Escape characters that can't be included in string literals. +        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar); + +        // Replace delimiters with snippets. +        if (escapeValue) { +          isEscaping = true; +          source += "' +\n__e(" + escapeValue + ") +\n'"; +        } +        if (evaluateValue) { +          isEvaluating = true; +          source += "';\n" + evaluateValue + ";\n__p += '"; +        } +        if (interpolateValue) { +          source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'"; +        } +        index = offset + match.length; + +        // The JS engine embedded in Adobe products needs `match` returned in +        // order to produce the correct `offset` value. +        return match; +      }); + +      source += "';\n"; + +      // If `variable` is not specified wrap a with-statement around the generated +      // code to add the data object to the top of the scope chain. +      var variable = hasOwnProperty.call(options, 'variable') && options.variable; +      if (!variable) { +        source = 'with (obj) {\n' + source + '\n}\n'; +      } +      // Throw an error if a forbidden character was found in `variable`, to prevent +      // potential command injection attacks. +      else if (reForbiddenIdentifierChars.test(variable)) { +        throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT); +      } + +      // Cleanup code by stripping empty strings. +      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source) +        .replace(reEmptyStringMiddle, '$1') +        .replace(reEmptyStringTrailing, '$1;'); + +      // Frame code as the function body. +      source = 'function(' + (variable || 'obj') + ') {\n' + +        (variable +          ? '' +          : 'obj || (obj = {});\n' +        ) + +        "var __t, __p = ''" + +        (isEscaping +           ? ', __e = _.escape' +           : '' +        ) + +        (isEvaluating +          ? ', __j = Array.prototype.join;\n' + +            "function print() { __p += __j.call(arguments, '') }\n" +          : ';\n' +        ) + +        source + +        'return __p\n}'; + +      var result = attempt(function() { +        return Function(importsKeys, sourceURL + 'return ' + source) +          .apply(undefined, importsValues); +      }); + +      // Provide the compiled function's source by its `toString` method or +      // the `source` property as a convenience for inlining compiled templates. +      result.source = source; +      if (isError(result)) { +        throw result; +      } +      return result; +    } + +    /** +     * Converts `string`, as a whole, to lower case just like +     * [String#toLowerCase](https://mdn.io/toLowerCase). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category String +     * @param {string} [string=''] The string to convert. +     * @returns {string} Returns the lower cased string. +     * @example +     * +     * _.toLower('--Foo-Bar--'); +     * // => '--foo-bar--' +     * +     * _.toLower('fooBar'); +     * // => 'foobar' +     * +     * _.toLower('__FOO_BAR__'); +     * // => '__foo_bar__' +     */ +    function toLower(value) { +      return toString(value).toLowerCase(); +    } + +    /** +     * Converts `string`, as a whole, to upper case just like +     * [String#toUpperCase](https://mdn.io/toUpperCase). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category String +     * @param {string} [string=''] The string to convert. +     * @returns {string} Returns the upper cased string. +     * @example +     * +     * _.toUpper('--foo-bar--'); +     * // => '--FOO-BAR--' +     * +     * _.toUpper('fooBar'); +     * // => 'FOOBAR' +     * +     * _.toUpper('__foo_bar__'); +     * // => '__FOO_BAR__' +     */ +    function toUpper(value) { +      return toString(value).toUpperCase(); +    } + +    /** +     * Removes leading and trailing whitespace or specified characters from `string`. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category String +     * @param {string} [string=''] The string to trim. +     * @param {string} [chars=whitespace] The characters to trim. +     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +     * @returns {string} Returns the trimmed string. +     * @example +     * +     * _.trim('  abc  '); +     * // => 'abc' +     * +     * _.trim('-_-abc-_-', '_-'); +     * // => 'abc' +     * +     * _.map(['  foo  ', '  bar  '], _.trim); +     * // => ['foo', 'bar'] +     */ +    function trim(string, chars, guard) { +      string = toString(string); +      if (string && (guard || chars === undefined)) { +        return baseTrim(string); +      } +      if (!string || !(chars = baseToString(chars))) { +        return string; +      } +      var strSymbols = stringToArray(string), +          chrSymbols = stringToArray(chars), +          start = charsStartIndex(strSymbols, chrSymbols), +          end = charsEndIndex(strSymbols, chrSymbols) + 1; + +      return castSlice(strSymbols, start, end).join(''); +    } + +    /** +     * Removes trailing whitespace or specified characters from `string`. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category String +     * @param {string} [string=''] The string to trim. +     * @param {string} [chars=whitespace] The characters to trim. +     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +     * @returns {string} Returns the trimmed string. +     * @example +     * +     * _.trimEnd('  abc  '); +     * // => '  abc' +     * +     * _.trimEnd('-_-abc-_-', '_-'); +     * // => '-_-abc' +     */ +    function trimEnd(string, chars, guard) { +      string = toString(string); +      if (string && (guard || chars === undefined)) { +        return string.slice(0, trimmedEndIndex(string) + 1); +      } +      if (!string || !(chars = baseToString(chars))) { +        return string; +      } +      var strSymbols = stringToArray(string), +          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1; + +      return castSlice(strSymbols, 0, end).join(''); +    } + +    /** +     * Removes leading whitespace or specified characters from `string`. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category String +     * @param {string} [string=''] The string to trim. +     * @param {string} [chars=whitespace] The characters to trim. +     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +     * @returns {string} Returns the trimmed string. +     * @example +     * +     * _.trimStart('  abc  '); +     * // => 'abc  ' +     * +     * _.trimStart('-_-abc-_-', '_-'); +     * // => 'abc-_-' +     */ +    function trimStart(string, chars, guard) { +      string = toString(string); +      if (string && (guard || chars === undefined)) { +        return string.replace(reTrimStart, ''); +      } +      if (!string || !(chars = baseToString(chars))) { +        return string; +      } +      var strSymbols = stringToArray(string), +          start = charsStartIndex(strSymbols, stringToArray(chars)); + +      return castSlice(strSymbols, start).join(''); +    } + +    /** +     * Truncates `string` if it's longer than the given maximum string length. +     * The last characters of the truncated string are replaced with the omission +     * string which defaults to "...". +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category String +     * @param {string} [string=''] The string to truncate. +     * @param {Object} [options={}] The options object. +     * @param {number} [options.length=30] The maximum string length. +     * @param {string} [options.omission='...'] The string to indicate text is omitted. +     * @param {RegExp|string} [options.separator] The separator pattern to truncate to. +     * @returns {string} Returns the truncated string. +     * @example +     * +     * _.truncate('hi-diddly-ho there, neighborino'); +     * // => 'hi-diddly-ho there, neighbo...' +     * +     * _.truncate('hi-diddly-ho there, neighborino', { +     *   'length': 24, +     *   'separator': ' ' +     * }); +     * // => 'hi-diddly-ho there,...' +     * +     * _.truncate('hi-diddly-ho there, neighborino', { +     *   'length': 24, +     *   'separator': /,? +/ +     * }); +     * // => 'hi-diddly-ho there...' +     * +     * _.truncate('hi-diddly-ho there, neighborino', { +     *   'omission': ' [...]' +     * }); +     * // => 'hi-diddly-ho there, neig [...]' +     */ +    function truncate(string, options) { +      var length = DEFAULT_TRUNC_LENGTH, +          omission = DEFAULT_TRUNC_OMISSION; + +      if (isObject(options)) { +        var separator = 'separator' in options ? options.separator : separator; +        length = 'length' in options ? toInteger(options.length) : length; +        omission = 'omission' in options ? baseToString(options.omission) : omission; +      } +      string = toString(string); + +      var strLength = string.length; +      if (hasUnicode(string)) { +        var strSymbols = stringToArray(string); +        strLength = strSymbols.length; +      } +      if (length >= strLength) { +        return string; +      } +      var end = length - stringSize(omission); +      if (end < 1) { +        return omission; +      } +      var result = strSymbols +        ? castSlice(strSymbols, 0, end).join('') +        : string.slice(0, end); + +      if (separator === undefined) { +        return result + omission; +      } +      if (strSymbols) { +        end += (result.length - end); +      } +      if (isRegExp(separator)) { +        if (string.slice(end).search(separator)) { +          var match, +              substring = result; + +          if (!separator.global) { +            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g'); +          } +          separator.lastIndex = 0; +          while ((match = separator.exec(substring))) { +            var newEnd = match.index; +          } +          result = result.slice(0, newEnd === undefined ? end : newEnd); +        } +      } else if (string.indexOf(baseToString(separator), end) != end) { +        var index = result.lastIndexOf(separator); +        if (index > -1) { +          result = result.slice(0, index); +        } +      } +      return result + omission; +    } + +    /** +     * The inverse of `_.escape`; this method converts the HTML entities +     * `&`, `<`, `>`, `"`, and `'` in `string` to +     * their corresponding characters. +     * +     * **Note:** No other HTML entities are unescaped. To unescape additional +     * HTML entities use a third-party library like [_he_](https://mths.be/he). +     * +     * @static +     * @memberOf _ +     * @since 0.6.0 +     * @category String +     * @param {string} [string=''] The string to unescape. +     * @returns {string} Returns the unescaped string. +     * @example +     * +     * _.unescape('fred, barney, & pebbles'); +     * // => 'fred, barney, & pebbles' +     */ +    function unescape(string) { +      string = toString(string); +      return (string && reHasEscapedHtml.test(string)) +        ? string.replace(reEscapedHtml, unescapeHtmlChar) +        : string; +    } + +    /** +     * Converts `string`, as space separated words, to upper case. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category String +     * @param {string} [string=''] The string to convert. +     * @returns {string} Returns the upper cased string. +     * @example +     * +     * _.upperCase('--foo-bar'); +     * // => 'FOO BAR' +     * +     * _.upperCase('fooBar'); +     * // => 'FOO BAR' +     * +     * _.upperCase('__foo_bar__'); +     * // => 'FOO BAR' +     */ +    var upperCase = createCompounder(function(result, word, index) { +      return result + (index ? ' ' : '') + word.toUpperCase(); +    }); + +    /** +     * Converts the first character of `string` to upper case. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category String +     * @param {string} [string=''] The string to convert. +     * @returns {string} Returns the converted string. +     * @example +     * +     * _.upperFirst('fred'); +     * // => 'Fred' +     * +     * _.upperFirst('FRED'); +     * // => 'FRED' +     */ +    var upperFirst = createCaseFirst('toUpperCase'); + +    /** +     * Splits `string` into an array of its words. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category String +     * @param {string} [string=''] The string to inspect. +     * @param {RegExp|string} [pattern] The pattern to match words. +     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +     * @returns {Array} Returns the words of `string`. +     * @example +     * +     * _.words('fred, barney, & pebbles'); +     * // => ['fred', 'barney', 'pebbles'] +     * +     * _.words('fred, barney, & pebbles', /[^, ]+/g); +     * // => ['fred', 'barney', '&', 'pebbles'] +     */ +    function words(string, pattern, guard) { +      string = toString(string); +      pattern = guard ? undefined : pattern; + +      if (pattern === undefined) { +        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string); +      } +      return string.match(pattern) || []; +    } + +    /*------------------------------------------------------------------------*/ + +    /** +     * Attempts to invoke `func`, returning either the result or the caught error +     * object. Any additional arguments are provided to `func` when it's invoked. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Util +     * @param {Function} func The function to attempt. +     * @param {...*} [args] The arguments to invoke `func` with. +     * @returns {*} Returns the `func` result or error object. +     * @example +     * +     * // Avoid throwing errors for invalid selectors. +     * var elements = _.attempt(function(selector) { +     *   return document.querySelectorAll(selector); +     * }, '>_>'); +     * +     * if (_.isError(elements)) { +     *   elements = []; +     * } +     */ +    var attempt = baseRest(function(func, args) { +      try { +        return apply(func, undefined, args); +      } catch (e) { +        return isError(e) ? e : new Error(e); +      } +    }); + +    /** +     * Binds methods of an object to the object itself, overwriting the existing +     * method. +     * +     * **Note:** This method doesn't set the "length" property of bound functions. +     * +     * @static +     * @since 0.1.0 +     * @memberOf _ +     * @category Util +     * @param {Object} object The object to bind and assign the bound methods to. +     * @param {...(string|string[])} methodNames The object method names to bind. +     * @returns {Object} Returns `object`. +     * @example +     * +     * var view = { +     *   'label': 'docs', +     *   'click': function() { +     *     console.log('clicked ' + this.label); +     *   } +     * }; +     * +     * _.bindAll(view, ['click']); +     * jQuery(element).on('click', view.click); +     * // => Logs 'clicked docs' when clicked. +     */ +    var bindAll = flatRest(function(object, methodNames) { +      arrayEach(methodNames, function(key) { +        key = toKey(key); +        baseAssignValue(object, key, bind(object[key], object)); +      }); +      return object; +    }); + +    /** +     * Creates a function that iterates over `pairs` and invokes the corresponding +     * function of the first predicate to return truthy. The predicate-function +     * pairs are invoked with the `this` binding and arguments of the created +     * function. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Util +     * @param {Array} pairs The predicate-function pairs. +     * @returns {Function} Returns the new composite function. +     * @example +     * +     * var func = _.cond([ +     *   [_.matches({ 'a': 1 }),           _.constant('matches A')], +     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')], +     *   [_.stubTrue,                      _.constant('no match')] +     * ]); +     * +     * func({ 'a': 1, 'b': 2 }); +     * // => 'matches A' +     * +     * func({ 'a': 0, 'b': 1 }); +     * // => 'matches B' +     * +     * func({ 'a': '1', 'b': '2' }); +     * // => 'no match' +     */ +    function cond(pairs) { +      var length = pairs == null ? 0 : pairs.length, +          toIteratee = getIteratee(); + +      pairs = !length ? [] : arrayMap(pairs, function(pair) { +        if (typeof pair[1] != 'function') { +          throw new TypeError(FUNC_ERROR_TEXT); +        } +        return [toIteratee(pair[0]), pair[1]]; +      }); + +      return baseRest(function(args) { +        var index = -1; +        while (++index < length) { +          var pair = pairs[index]; +          if (apply(pair[0], this, args)) { +            return apply(pair[1], this, args); +          } +        } +      }); +    } + +    /** +     * Creates a function that invokes the predicate properties of `source` with +     * the corresponding property values of a given object, returning `true` if +     * all predicates return truthy, else `false`. +     * +     * **Note:** The created function is equivalent to `_.conformsTo` with +     * `source` partially applied. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Util +     * @param {Object} source The object of property predicates to conform to. +     * @returns {Function} Returns the new spec function. +     * @example +     * +     * var objects = [ +     *   { 'a': 2, 'b': 1 }, +     *   { 'a': 1, 'b': 2 } +     * ]; +     * +     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } })); +     * // => [{ 'a': 1, 'b': 2 }] +     */ +    function conforms(source) { +      return baseConforms(baseClone(source, CLONE_DEEP_FLAG)); +    } + +    /** +     * Creates a function that returns `value`. +     * +     * @static +     * @memberOf _ +     * @since 2.4.0 +     * @category Util +     * @param {*} value The value to return from the new function. +     * @returns {Function} Returns the new constant function. +     * @example +     * +     * var objects = _.times(2, _.constant({ 'a': 1 })); +     * +     * console.log(objects); +     * // => [{ 'a': 1 }, { 'a': 1 }] +     * +     * console.log(objects[0] === objects[1]); +     * // => true +     */ +    function constant(value) { +      return function() { +        return value; +      }; +    } + +    /** +     * Checks `value` to determine whether a default value should be returned in +     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`, +     * or `undefined`. +     * +     * @static +     * @memberOf _ +     * @since 4.14.0 +     * @category Util +     * @param {*} value The value to check. +     * @param {*} defaultValue The default value. +     * @returns {*} Returns the resolved value. +     * @example +     * +     * _.defaultTo(1, 10); +     * // => 1 +     * +     * _.defaultTo(undefined, 10); +     * // => 10 +     */ +    function defaultTo(value, defaultValue) { +      return (value == null || value !== value) ? defaultValue : value; +    } + +    /** +     * Creates a function that returns the result of invoking the given functions +     * with the `this` binding of the created function, where each successive +     * invocation is supplied the return value of the previous. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Util +     * @param {...(Function|Function[])} [funcs] The functions to invoke. +     * @returns {Function} Returns the new composite function. +     * @see _.flowRight +     * @example +     * +     * function square(n) { +     *   return n * n; +     * } +     * +     * var addSquare = _.flow([_.add, square]); +     * addSquare(1, 2); +     * // => 9 +     */ +    var flow = createFlow(); + +    /** +     * This method is like `_.flow` except that it creates a function that +     * invokes the given functions from right to left. +     * +     * @static +     * @since 3.0.0 +     * @memberOf _ +     * @category Util +     * @param {...(Function|Function[])} [funcs] The functions to invoke. +     * @returns {Function} Returns the new composite function. +     * @see _.flow +     * @example +     * +     * function square(n) { +     *   return n * n; +     * } +     * +     * var addSquare = _.flowRight([square, _.add]); +     * addSquare(1, 2); +     * // => 9 +     */ +    var flowRight = createFlow(true); + +    /** +     * This method returns the first argument it receives. +     * +     * @static +     * @since 0.1.0 +     * @memberOf _ +     * @category Util +     * @param {*} value Any value. +     * @returns {*} Returns `value`. +     * @example +     * +     * var object = { 'a': 1 }; +     * +     * console.log(_.identity(object) === object); +     * // => true +     */ +    function identity(value) { +      return value; +    } + +    /** +     * Creates a function that invokes `func` with the arguments of the created +     * function. If `func` is a property name, the created function returns the +     * property value for a given element. If `func` is an array or object, the +     * created function returns `true` for elements that contain the equivalent +     * source properties, otherwise it returns `false`. +     * +     * @static +     * @since 4.0.0 +     * @memberOf _ +     * @category Util +     * @param {*} [func=_.identity] The value to convert to a callback. +     * @returns {Function} Returns the callback. +     * @example +     * +     * var users = [ +     *   { 'user': 'barney', 'age': 36, 'active': true }, +     *   { 'user': 'fred',   'age': 40, 'active': false } +     * ]; +     * +     * // The `_.matches` iteratee shorthand. +     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); +     * // => [{ 'user': 'barney', 'age': 36, 'active': true }] +     * +     * // The `_.matchesProperty` iteratee shorthand. +     * _.filter(users, _.iteratee(['user', 'fred'])); +     * // => [{ 'user': 'fred', 'age': 40 }] +     * +     * // The `_.property` iteratee shorthand. +     * _.map(users, _.iteratee('user')); +     * // => ['barney', 'fred'] +     * +     * // Create custom iteratee shorthands. +     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { +     *   return !_.isRegExp(func) ? iteratee(func) : function(string) { +     *     return func.test(string); +     *   }; +     * }); +     * +     * _.filter(['abc', 'def'], /ef/); +     * // => ['def'] +     */ +    function iteratee(func) { +      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG)); +    } + +    /** +     * Creates a function that performs a partial deep comparison between a given +     * object and `source`, returning `true` if the given object has equivalent +     * property values, else `false`. +     * +     * **Note:** The created function is equivalent to `_.isMatch` with `source` +     * partially applied. +     * +     * Partial comparisons will match empty array and empty object `source` +     * values against any array or object value, respectively. See `_.isEqual` +     * for a list of supported value comparisons. +     * +     * **Note:** Multiple values can be checked by combining several matchers +     * using `_.overSome` +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Util +     * @param {Object} source The object of property values to match. +     * @returns {Function} Returns the new spec function. +     * @example +     * +     * var objects = [ +     *   { 'a': 1, 'b': 2, 'c': 3 }, +     *   { 'a': 4, 'b': 5, 'c': 6 } +     * ]; +     * +     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 })); +     * // => [{ 'a': 4, 'b': 5, 'c': 6 }] +     * +     * // Checking for several possible values +     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })])); +     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }] +     */ +    function matches(source) { +      return baseMatches(baseClone(source, CLONE_DEEP_FLAG)); +    } + +    /** +     * Creates a function that performs a partial deep comparison between the +     * value at `path` of a given object to `srcValue`, returning `true` if the +     * object value is equivalent, else `false`. +     * +     * **Note:** Partial comparisons will match empty array and empty object +     * `srcValue` values against any array or object value, respectively. See +     * `_.isEqual` for a list of supported value comparisons. +     * +     * **Note:** Multiple values can be checked by combining several matchers +     * using `_.overSome` +     * +     * @static +     * @memberOf _ +     * @since 3.2.0 +     * @category Util +     * @param {Array|string} path The path of the property to get. +     * @param {*} srcValue The value to match. +     * @returns {Function} Returns the new spec function. +     * @example +     * +     * var objects = [ +     *   { 'a': 1, 'b': 2, 'c': 3 }, +     *   { 'a': 4, 'b': 5, 'c': 6 } +     * ]; +     * +     * _.find(objects, _.matchesProperty('a', 4)); +     * // => { 'a': 4, 'b': 5, 'c': 6 } +     * +     * // Checking for several possible values +     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)])); +     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }] +     */ +    function matchesProperty(path, srcValue) { +      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG)); +    } + +    /** +     * Creates a function that invokes the method at `path` of a given object. +     * Any additional arguments are provided to the invoked method. +     * +     * @static +     * @memberOf _ +     * @since 3.7.0 +     * @category Util +     * @param {Array|string} path The path of the method to invoke. +     * @param {...*} [args] The arguments to invoke the method with. +     * @returns {Function} Returns the new invoker function. +     * @example +     * +     * var objects = [ +     *   { 'a': { 'b': _.constant(2) } }, +     *   { 'a': { 'b': _.constant(1) } } +     * ]; +     * +     * _.map(objects, _.method('a.b')); +     * // => [2, 1] +     * +     * _.map(objects, _.method(['a', 'b'])); +     * // => [2, 1] +     */ +    var method = baseRest(function(path, args) { +      return function(object) { +        return baseInvoke(object, path, args); +      }; +    }); + +    /** +     * The opposite of `_.method`; this method creates a function that invokes +     * the method at a given path of `object`. Any additional arguments are +     * provided to the invoked method. +     * +     * @static +     * @memberOf _ +     * @since 3.7.0 +     * @category Util +     * @param {Object} object The object to query. +     * @param {...*} [args] The arguments to invoke the method with. +     * @returns {Function} Returns the new invoker function. +     * @example +     * +     * var array = _.times(3, _.constant), +     *     object = { 'a': array, 'b': array, 'c': array }; +     * +     * _.map(['a[2]', 'c[0]'], _.methodOf(object)); +     * // => [2, 0] +     * +     * _.map([['a', '2'], ['c', '0']], _.methodOf(object)); +     * // => [2, 0] +     */ +    var methodOf = baseRest(function(object, args) { +      return function(path) { +        return baseInvoke(object, path, args); +      }; +    }); + +    /** +     * Adds all own enumerable string keyed function properties of a source +     * object to the destination object. If `object` is a function, then methods +     * are added to its prototype as well. +     * +     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to +     * avoid conflicts caused by modifying the original. +     * +     * @static +     * @since 0.1.0 +     * @memberOf _ +     * @category Util +     * @param {Function|Object} [object=lodash] The destination object. +     * @param {Object} source The object of functions to add. +     * @param {Object} [options={}] The options object. +     * @param {boolean} [options.chain=true] Specify whether mixins are chainable. +     * @returns {Function|Object} Returns `object`. +     * @example +     * +     * function vowels(string) { +     *   return _.filter(string, function(v) { +     *     return /[aeiou]/i.test(v); +     *   }); +     * } +     * +     * _.mixin({ 'vowels': vowels }); +     * _.vowels('fred'); +     * // => ['e'] +     * +     * _('fred').vowels().value(); +     * // => ['e'] +     * +     * _.mixin({ 'vowels': vowels }, { 'chain': false }); +     * _('fred').vowels(); +     * // => ['e'] +     */ +    function mixin(object, source, options) { +      var props = keys(source), +          methodNames = baseFunctions(source, props); + +      if (options == null && +          !(isObject(source) && (methodNames.length || !props.length))) { +        options = source; +        source = object; +        object = this; +        methodNames = baseFunctions(source, keys(source)); +      } +      var chain = !(isObject(options) && 'chain' in options) || !!options.chain, +          isFunc = isFunction(object); + +      arrayEach(methodNames, function(methodName) { +        var func = source[methodName]; +        object[methodName] = func; +        if (isFunc) { +          object.prototype[methodName] = function() { +            var chainAll = this.__chain__; +            if (chain || chainAll) { +              var result = object(this.__wrapped__), +                  actions = result.__actions__ = copyArray(this.__actions__); + +              actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); +              result.__chain__ = chainAll; +              return result; +            } +            return func.apply(object, arrayPush([this.value()], arguments)); +          }; +        } +      }); + +      return object; +    } + +    /** +     * Reverts the `_` variable to its previous value and returns a reference to +     * the `lodash` function. +     * +     * @static +     * @since 0.1.0 +     * @memberOf _ +     * @category Util +     * @returns {Function} Returns the `lodash` function. +     * @example +     * +     * var lodash = _.noConflict(); +     */ +    function noConflict() { +      if (root._ === this) { +        root._ = oldDash; +      } +      return this; +    } + +    /** +     * This method returns `undefined`. +     * +     * @static +     * @memberOf _ +     * @since 2.3.0 +     * @category Util +     * @example +     * +     * _.times(2, _.noop); +     * // => [undefined, undefined] +     */ +    function noop() { +      // No operation performed. +    } + +    /** +     * Creates a function that gets the argument at index `n`. If `n` is negative, +     * the nth argument from the end is returned. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Util +     * @param {number} [n=0] The index of the argument to return. +     * @returns {Function} Returns the new pass-thru function. +     * @example +     * +     * var func = _.nthArg(1); +     * func('a', 'b', 'c', 'd'); +     * // => 'b' +     * +     * var func = _.nthArg(-2); +     * func('a', 'b', 'c', 'd'); +     * // => 'c' +     */ +    function nthArg(n) { +      n = toInteger(n); +      return baseRest(function(args) { +        return baseNth(args, n); +      }); +    } + +    /** +     * Creates a function that invokes `iteratees` with the arguments it receives +     * and returns their results. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Util +     * @param {...(Function|Function[])} [iteratees=[_.identity]] +     *  The iteratees to invoke. +     * @returns {Function} Returns the new function. +     * @example +     * +     * var func = _.over([Math.max, Math.min]); +     * +     * func(1, 2, 3, 4); +     * // => [4, 1] +     */ +    var over = createOver(arrayMap); + +    /** +     * Creates a function that checks if **all** of the `predicates` return +     * truthy when invoked with the arguments it receives. +     * +     * Following shorthands are possible for providing predicates. +     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate. +     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Util +     * @param {...(Function|Function[])} [predicates=[_.identity]] +     *  The predicates to check. +     * @returns {Function} Returns the new function. +     * @example +     * +     * var func = _.overEvery([Boolean, isFinite]); +     * +     * func('1'); +     * // => true +     * +     * func(null); +     * // => false +     * +     * func(NaN); +     * // => false +     */ +    var overEvery = createOver(arrayEvery); + +    /** +     * Creates a function that checks if **any** of the `predicates` return +     * truthy when invoked with the arguments it receives. +     * +     * Following shorthands are possible for providing predicates. +     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate. +     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Util +     * @param {...(Function|Function[])} [predicates=[_.identity]] +     *  The predicates to check. +     * @returns {Function} Returns the new function. +     * @example +     * +     * var func = _.overSome([Boolean, isFinite]); +     * +     * func('1'); +     * // => true +     * +     * func(null); +     * // => true +     * +     * func(NaN); +     * // => false +     * +     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }]) +     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]]) +     */ +    var overSome = createOver(arraySome); + +    /** +     * Creates a function that returns the value at `path` of a given object. +     * +     * @static +     * @memberOf _ +     * @since 2.4.0 +     * @category Util +     * @param {Array|string} path The path of the property to get. +     * @returns {Function} Returns the new accessor function. +     * @example +     * +     * var objects = [ +     *   { 'a': { 'b': 2 } }, +     *   { 'a': { 'b': 1 } } +     * ]; +     * +     * _.map(objects, _.property('a.b')); +     * // => [2, 1] +     * +     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); +     * // => [1, 2] +     */ +    function property(path) { +      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); +    } + +    /** +     * The opposite of `_.property`; this method creates a function that returns +     * the value at a given path of `object`. +     * +     * @static +     * @memberOf _ +     * @since 3.0.0 +     * @category Util +     * @param {Object} object The object to query. +     * @returns {Function} Returns the new accessor function. +     * @example +     * +     * var array = [0, 1, 2], +     *     object = { 'a': array, 'b': array, 'c': array }; +     * +     * _.map(['a[2]', 'c[0]'], _.propertyOf(object)); +     * // => [2, 0] +     * +     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object)); +     * // => [2, 0] +     */ +    function propertyOf(object) { +      return function(path) { +        return object == null ? undefined : baseGet(object, path); +      }; +    } + +    /** +     * Creates an array of numbers (positive and/or negative) progressing from +     * `start` up to, but not including, `end`. A step of `-1` is used if a negative +     * `start` is specified without an `end` or `step`. If `end` is not specified, +     * it's set to `start` with `start` then set to `0`. +     * +     * **Note:** JavaScript follows the IEEE-754 standard for resolving +     * floating-point values which can produce unexpected results. +     * +     * @static +     * @since 0.1.0 +     * @memberOf _ +     * @category Util +     * @param {number} [start=0] The start of the range. +     * @param {number} end The end of the range. +     * @param {number} [step=1] The value to increment or decrement by. +     * @returns {Array} Returns the range of numbers. +     * @see _.inRange, _.rangeRight +     * @example +     * +     * _.range(4); +     * // => [0, 1, 2, 3] +     * +     * _.range(-4); +     * // => [0, -1, -2, -3] +     * +     * _.range(1, 5); +     * // => [1, 2, 3, 4] +     * +     * _.range(0, 20, 5); +     * // => [0, 5, 10, 15] +     * +     * _.range(0, -4, -1); +     * // => [0, -1, -2, -3] +     * +     * _.range(1, 4, 0); +     * // => [1, 1, 1] +     * +     * _.range(0); +     * // => [] +     */ +    var range = createRange(); + +    /** +     * This method is like `_.range` except that it populates values in +     * descending order. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Util +     * @param {number} [start=0] The start of the range. +     * @param {number} end The end of the range. +     * @param {number} [step=1] The value to increment or decrement by. +     * @returns {Array} Returns the range of numbers. +     * @see _.inRange, _.range +     * @example +     * +     * _.rangeRight(4); +     * // => [3, 2, 1, 0] +     * +     * _.rangeRight(-4); +     * // => [-3, -2, -1, 0] +     * +     * _.rangeRight(1, 5); +     * // => [4, 3, 2, 1] +     * +     * _.rangeRight(0, 20, 5); +     * // => [15, 10, 5, 0] +     * +     * _.rangeRight(0, -4, -1); +     * // => [-3, -2, -1, 0] +     * +     * _.rangeRight(1, 4, 0); +     * // => [1, 1, 1] +     * +     * _.rangeRight(0); +     * // => [] +     */ +    var rangeRight = createRange(true); + +    /** +     * This method returns a new empty array. +     * +     * @static +     * @memberOf _ +     * @since 4.13.0 +     * @category Util +     * @returns {Array} Returns the new empty array. +     * @example +     * +     * var arrays = _.times(2, _.stubArray); +     * +     * console.log(arrays); +     * // => [[], []] +     * +     * console.log(arrays[0] === arrays[1]); +     * // => false +     */ +    function stubArray() { +      return []; +    } + +    /** +     * This method returns `false`. +     * +     * @static +     * @memberOf _ +     * @since 4.13.0 +     * @category Util +     * @returns {boolean} Returns `false`. +     * @example +     * +     * _.times(2, _.stubFalse); +     * // => [false, false] +     */ +    function stubFalse() { +      return false; +    } + +    /** +     * This method returns a new empty object. +     * +     * @static +     * @memberOf _ +     * @since 4.13.0 +     * @category Util +     * @returns {Object} Returns the new empty object. +     * @example +     * +     * var objects = _.times(2, _.stubObject); +     * +     * console.log(objects); +     * // => [{}, {}] +     * +     * console.log(objects[0] === objects[1]); +     * // => false +     */ +    function stubObject() { +      return {}; +    } + +    /** +     * This method returns an empty string. +     * +     * @static +     * @memberOf _ +     * @since 4.13.0 +     * @category Util +     * @returns {string} Returns the empty string. +     * @example +     * +     * _.times(2, _.stubString); +     * // => ['', ''] +     */ +    function stubString() { +      return ''; +    } + +    /** +     * This method returns `true`. +     * +     * @static +     * @memberOf _ +     * @since 4.13.0 +     * @category Util +     * @returns {boolean} Returns `true`. +     * @example +     * +     * _.times(2, _.stubTrue); +     * // => [true, true] +     */ +    function stubTrue() { +      return true; +    } + +    /** +     * Invokes the iteratee `n` times, returning an array of the results of +     * each invocation. The iteratee is invoked with one argument; (index). +     * +     * @static +     * @since 0.1.0 +     * @memberOf _ +     * @category Util +     * @param {number} n The number of times to invoke `iteratee`. +     * @param {Function} [iteratee=_.identity] The function invoked per iteration. +     * @returns {Array} Returns the array of results. +     * @example +     * +     * _.times(3, String); +     * // => ['0', '1', '2'] +     * +     *  _.times(4, _.constant(0)); +     * // => [0, 0, 0, 0] +     */ +    function times(n, iteratee) { +      n = toInteger(n); +      if (n < 1 || n > MAX_SAFE_INTEGER) { +        return []; +      } +      var index = MAX_ARRAY_LENGTH, +          length = nativeMin(n, MAX_ARRAY_LENGTH); + +      iteratee = getIteratee(iteratee); +      n -= MAX_ARRAY_LENGTH; + +      var result = baseTimes(length, iteratee); +      while (++index < n) { +        iteratee(index); +      } +      return result; +    } + +    /** +     * Converts `value` to a property path array. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Util +     * @param {*} value The value to convert. +     * @returns {Array} Returns the new property path array. +     * @example +     * +     * _.toPath('a.b.c'); +     * // => ['a', 'b', 'c'] +     * +     * _.toPath('a[0].b.c'); +     * // => ['a', '0', 'b', 'c'] +     */ +    function toPath(value) { +      if (isArray(value)) { +        return arrayMap(value, toKey); +      } +      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value))); +    } + +    /** +     * Generates a unique ID. If `prefix` is given, the ID is appended to it. +     * +     * @static +     * @since 0.1.0 +     * @memberOf _ +     * @category Util +     * @param {string} [prefix=''] The value to prefix the ID with. +     * @returns {string} Returns the unique ID. +     * @example +     * +     * _.uniqueId('contact_'); +     * // => 'contact_104' +     * +     * _.uniqueId(); +     * // => '105' +     */ +    function uniqueId(prefix) { +      var id = ++idCounter; +      return toString(prefix) + id; +    } + +    /*------------------------------------------------------------------------*/ + +    /** +     * Adds two numbers. +     * +     * @static +     * @memberOf _ +     * @since 3.4.0 +     * @category Math +     * @param {number} augend The first number in an addition. +     * @param {number} addend The second number in an addition. +     * @returns {number} Returns the total. +     * @example +     * +     * _.add(6, 4); +     * // => 10 +     */ +    var add = createMathOperation(function(augend, addend) { +      return augend + addend; +    }, 0); + +    /** +     * Computes `number` rounded up to `precision`. +     * +     * @static +     * @memberOf _ +     * @since 3.10.0 +     * @category Math +     * @param {number} number The number to round up. +     * @param {number} [precision=0] The precision to round up to. +     * @returns {number} Returns the rounded up number. +     * @example +     * +     * _.ceil(4.006); +     * // => 5 +     * +     * _.ceil(6.004, 2); +     * // => 6.01 +     * +     * _.ceil(6040, -2); +     * // => 6100 +     */ +    var ceil = createRound('ceil'); + +    /** +     * Divide two numbers. +     * +     * @static +     * @memberOf _ +     * @since 4.7.0 +     * @category Math +     * @param {number} dividend The first number in a division. +     * @param {number} divisor The second number in a division. +     * @returns {number} Returns the quotient. +     * @example +     * +     * _.divide(6, 4); +     * // => 1.5 +     */ +    var divide = createMathOperation(function(dividend, divisor) { +      return dividend / divisor; +    }, 1); + +    /** +     * Computes `number` rounded down to `precision`. +     * +     * @static +     * @memberOf _ +     * @since 3.10.0 +     * @category Math +     * @param {number} number The number to round down. +     * @param {number} [precision=0] The precision to round down to. +     * @returns {number} Returns the rounded down number. +     * @example +     * +     * _.floor(4.006); +     * // => 4 +     * +     * _.floor(0.046, 2); +     * // => 0.04 +     * +     * _.floor(4060, -2); +     * // => 4000 +     */ +    var floor = createRound('floor'); + +    /** +     * Computes the maximum value of `array`. If `array` is empty or falsey, +     * `undefined` is returned. +     * +     * @static +     * @since 0.1.0 +     * @memberOf _ +     * @category Math +     * @param {Array} array The array to iterate over. +     * @returns {*} Returns the maximum value. +     * @example +     * +     * _.max([4, 2, 8, 6]); +     * // => 8 +     * +     * _.max([]); +     * // => undefined +     */ +    function max(array) { +      return (array && array.length) +        ? baseExtremum(array, identity, baseGt) +        : undefined; +    } + +    /** +     * This method is like `_.max` except that it accepts `iteratee` which is +     * invoked for each element in `array` to generate the criterion by which +     * the value is ranked. The iteratee is invoked with one argument: (value). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Math +     * @param {Array} array The array to iterate over. +     * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +     * @returns {*} Returns the maximum value. +     * @example +     * +     * var objects = [{ 'n': 1 }, { 'n': 2 }]; +     * +     * _.maxBy(objects, function(o) { return o.n; }); +     * // => { 'n': 2 } +     * +     * // The `_.property` iteratee shorthand. +     * _.maxBy(objects, 'n'); +     * // => { 'n': 2 } +     */ +    function maxBy(array, iteratee) { +      return (array && array.length) +        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt) +        : undefined; +    } + +    /** +     * Computes the mean of the values in `array`. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Math +     * @param {Array} array The array to iterate over. +     * @returns {number} Returns the mean. +     * @example +     * +     * _.mean([4, 2, 8, 6]); +     * // => 5 +     */ +    function mean(array) { +      return baseMean(array, identity); +    } + +    /** +     * This method is like `_.mean` except that it accepts `iteratee` which is +     * invoked for each element in `array` to generate the value to be averaged. +     * The iteratee is invoked with one argument: (value). +     * +     * @static +     * @memberOf _ +     * @since 4.7.0 +     * @category Math +     * @param {Array} array The array to iterate over. +     * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +     * @returns {number} Returns the mean. +     * @example +     * +     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }]; +     * +     * _.meanBy(objects, function(o) { return o.n; }); +     * // => 5 +     * +     * // The `_.property` iteratee shorthand. +     * _.meanBy(objects, 'n'); +     * // => 5 +     */ +    function meanBy(array, iteratee) { +      return baseMean(array, getIteratee(iteratee, 2)); +    } + +    /** +     * Computes the minimum value of `array`. If `array` is empty or falsey, +     * `undefined` is returned. +     * +     * @static +     * @since 0.1.0 +     * @memberOf _ +     * @category Math +     * @param {Array} array The array to iterate over. +     * @returns {*} Returns the minimum value. +     * @example +     * +     * _.min([4, 2, 8, 6]); +     * // => 2 +     * +     * _.min([]); +     * // => undefined +     */ +    function min(array) { +      return (array && array.length) +        ? baseExtremum(array, identity, baseLt) +        : undefined; +    } + +    /** +     * This method is like `_.min` except that it accepts `iteratee` which is +     * invoked for each element in `array` to generate the criterion by which +     * the value is ranked. The iteratee is invoked with one argument: (value). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Math +     * @param {Array} array The array to iterate over. +     * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +     * @returns {*} Returns the minimum value. +     * @example +     * +     * var objects = [{ 'n': 1 }, { 'n': 2 }]; +     * +     * _.minBy(objects, function(o) { return o.n; }); +     * // => { 'n': 1 } +     * +     * // The `_.property` iteratee shorthand. +     * _.minBy(objects, 'n'); +     * // => { 'n': 1 } +     */ +    function minBy(array, iteratee) { +      return (array && array.length) +        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt) +        : undefined; +    } + +    /** +     * Multiply two numbers. +     * +     * @static +     * @memberOf _ +     * @since 4.7.0 +     * @category Math +     * @param {number} multiplier The first number in a multiplication. +     * @param {number} multiplicand The second number in a multiplication. +     * @returns {number} Returns the product. +     * @example +     * +     * _.multiply(6, 4); +     * // => 24 +     */ +    var multiply = createMathOperation(function(multiplier, multiplicand) { +      return multiplier * multiplicand; +    }, 1); + +    /** +     * Computes `number` rounded to `precision`. +     * +     * @static +     * @memberOf _ +     * @since 3.10.0 +     * @category Math +     * @param {number} number The number to round. +     * @param {number} [precision=0] The precision to round to. +     * @returns {number} Returns the rounded number. +     * @example +     * +     * _.round(4.006); +     * // => 4 +     * +     * _.round(4.006, 2); +     * // => 4.01 +     * +     * _.round(4060, -2); +     * // => 4100 +     */ +    var round = createRound('round'); + +    /** +     * Subtract two numbers. +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Math +     * @param {number} minuend The first number in a subtraction. +     * @param {number} subtrahend The second number in a subtraction. +     * @returns {number} Returns the difference. +     * @example +     * +     * _.subtract(6, 4); +     * // => 2 +     */ +    var subtract = createMathOperation(function(minuend, subtrahend) { +      return minuend - subtrahend; +    }, 0); + +    /** +     * Computes the sum of the values in `array`. +     * +     * @static +     * @memberOf _ +     * @since 3.4.0 +     * @category Math +     * @param {Array} array The array to iterate over. +     * @returns {number} Returns the sum. +     * @example +     * +     * _.sum([4, 2, 8, 6]); +     * // => 20 +     */ +    function sum(array) { +      return (array && array.length) +        ? baseSum(array, identity) +        : 0; +    } + +    /** +     * This method is like `_.sum` except that it accepts `iteratee` which is +     * invoked for each element in `array` to generate the value to be summed. +     * The iteratee is invoked with one argument: (value). +     * +     * @static +     * @memberOf _ +     * @since 4.0.0 +     * @category Math +     * @param {Array} array The array to iterate over. +     * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +     * @returns {number} Returns the sum. +     * @example +     * +     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }]; +     * +     * _.sumBy(objects, function(o) { return o.n; }); +     * // => 20 +     * +     * // The `_.property` iteratee shorthand. +     * _.sumBy(objects, 'n'); +     * // => 20 +     */ +    function sumBy(array, iteratee) { +      return (array && array.length) +        ? baseSum(array, getIteratee(iteratee, 2)) +        : 0; +    } + +    /*------------------------------------------------------------------------*/ + +    // Add methods that return wrapped values in chain sequences. +    lodash.after = after; +    lodash.ary = ary; +    lodash.assign = assign; +    lodash.assignIn = assignIn; +    lodash.assignInWith = assignInWith; +    lodash.assignWith = assignWith; +    lodash.at = at; +    lodash.before = before; +    lodash.bind = bind; +    lodash.bindAll = bindAll; +    lodash.bindKey = bindKey; +    lodash.castArray = castArray; +    lodash.chain = chain; +    lodash.chunk = chunk; +    lodash.compact = compact; +    lodash.concat = concat; +    lodash.cond = cond; +    lodash.conforms = conforms; +    lodash.constant = constant; +    lodash.countBy = countBy; +    lodash.create = create; +    lodash.curry = curry; +    lodash.curryRight = curryRight; +    lodash.debounce = debounce; +    lodash.defaults = defaults; +    lodash.defaultsDeep = defaultsDeep; +    lodash.defer = defer; +    lodash.delay = delay; +    lodash.difference = difference; +    lodash.differenceBy = differenceBy; +    lodash.differenceWith = differenceWith; +    lodash.drop = drop; +    lodash.dropRight = dropRight; +    lodash.dropRightWhile = dropRightWhile; +    lodash.dropWhile = dropWhile; +    lodash.fill = fill; +    lodash.filter = filter; +    lodash.flatMap = flatMap; +    lodash.flatMapDeep = flatMapDeep; +    lodash.flatMapDepth = flatMapDepth; +    lodash.flatten = flatten; +    lodash.flattenDeep = flattenDeep; +    lodash.flattenDepth = flattenDepth; +    lodash.flip = flip; +    lodash.flow = flow; +    lodash.flowRight = flowRight; +    lodash.fromPairs = fromPairs; +    lodash.functions = functions; +    lodash.functionsIn = functionsIn; +    lodash.groupBy = groupBy; +    lodash.initial = initial; +    lodash.intersection = intersection; +    lodash.intersectionBy = intersectionBy; +    lodash.intersectionWith = intersectionWith; +    lodash.invert = invert; +    lodash.invertBy = invertBy; +    lodash.invokeMap = invokeMap; +    lodash.iteratee = iteratee; +    lodash.keyBy = keyBy; +    lodash.keys = keys; +    lodash.keysIn = keysIn; +    lodash.map = map; +    lodash.mapKeys = mapKeys; +    lodash.mapValues = mapValues; +    lodash.matches = matches; +    lodash.matchesProperty = matchesProperty; +    lodash.memoize = memoize; +    lodash.merge = merge; +    lodash.mergeWith = mergeWith; +    lodash.method = method; +    lodash.methodOf = methodOf; +    lodash.mixin = mixin; +    lodash.negate = negate; +    lodash.nthArg = nthArg; +    lodash.omit = omit; +    lodash.omitBy = omitBy; +    lodash.once = once; +    lodash.orderBy = orderBy; +    lodash.over = over; +    lodash.overArgs = overArgs; +    lodash.overEvery = overEvery; +    lodash.overSome = overSome; +    lodash.partial = partial; +    lodash.partialRight = partialRight; +    lodash.partition = partition; +    lodash.pick = pick; +    lodash.pickBy = pickBy; +    lodash.property = property; +    lodash.propertyOf = propertyOf; +    lodash.pull = pull; +    lodash.pullAll = pullAll; +    lodash.pullAllBy = pullAllBy; +    lodash.pullAllWith = pullAllWith; +    lodash.pullAt = pullAt; +    lodash.range = range; +    lodash.rangeRight = rangeRight; +    lodash.rearg = rearg; +    lodash.reject = reject; +    lodash.remove = remove; +    lodash.rest = rest; +    lodash.reverse = reverse; +    lodash.sampleSize = sampleSize; +    lodash.set = set; +    lodash.setWith = setWith; +    lodash.shuffle = shuffle; +    lodash.slice = slice; +    lodash.sortBy = sortBy; +    lodash.sortedUniq = sortedUniq; +    lodash.sortedUniqBy = sortedUniqBy; +    lodash.split = split; +    lodash.spread = spread; +    lodash.tail = tail; +    lodash.take = take; +    lodash.takeRight = takeRight; +    lodash.takeRightWhile = takeRightWhile; +    lodash.takeWhile = takeWhile; +    lodash.tap = tap; +    lodash.throttle = throttle; +    lodash.thru = thru; +    lodash.toArray = toArray; +    lodash.toPairs = toPairs; +    lodash.toPairsIn = toPairsIn; +    lodash.toPath = toPath; +    lodash.toPlainObject = toPlainObject; +    lodash.transform = transform; +    lodash.unary = unary; +    lodash.union = union; +    lodash.unionBy = unionBy; +    lodash.unionWith = unionWith; +    lodash.uniq = uniq; +    lodash.uniqBy = uniqBy; +    lodash.uniqWith = uniqWith; +    lodash.unset = unset; +    lodash.unzip = unzip; +    lodash.unzipWith = unzipWith; +    lodash.update = update; +    lodash.updateWith = updateWith; +    lodash.values = values; +    lodash.valuesIn = valuesIn; +    lodash.without = without; +    lodash.words = words; +    lodash.wrap = wrap; +    lodash.xor = xor; +    lodash.xorBy = xorBy; +    lodash.xorWith = xorWith; +    lodash.zip = zip; +    lodash.zipObject = zipObject; +    lodash.zipObjectDeep = zipObjectDeep; +    lodash.zipWith = zipWith; + +    // Add aliases. +    lodash.entries = toPairs; +    lodash.entriesIn = toPairsIn; +    lodash.extend = assignIn; +    lodash.extendWith = assignInWith; + +    // Add methods to `lodash.prototype`. +    mixin(lodash, lodash); + +    /*------------------------------------------------------------------------*/ + +    // Add methods that return unwrapped values in chain sequences. +    lodash.add = add; +    lodash.attempt = attempt; +    lodash.camelCase = camelCase; +    lodash.capitalize = capitalize; +    lodash.ceil = ceil; +    lodash.clamp = clamp; +    lodash.clone = clone; +    lodash.cloneDeep = cloneDeep; +    lodash.cloneDeepWith = cloneDeepWith; +    lodash.cloneWith = cloneWith; +    lodash.conformsTo = conformsTo; +    lodash.deburr = deburr; +    lodash.defaultTo = defaultTo; +    lodash.divide = divide; +    lodash.endsWith = endsWith; +    lodash.eq = eq; +    lodash.escape = escape; +    lodash.escapeRegExp = escapeRegExp; +    lodash.every = every; +    lodash.find = find; +    lodash.findIndex = findIndex; +    lodash.findKey = findKey; +    lodash.findLast = findLast; +    lodash.findLastIndex = findLastIndex; +    lodash.findLastKey = findLastKey; +    lodash.floor = floor; +    lodash.forEach = forEach; +    lodash.forEachRight = forEachRight; +    lodash.forIn = forIn; +    lodash.forInRight = forInRight; +    lodash.forOwn = forOwn; +    lodash.forOwnRight = forOwnRight; +    lodash.get = get; +    lodash.gt = gt; +    lodash.gte = gte; +    lodash.has = has; +    lodash.hasIn = hasIn; +    lodash.head = head; +    lodash.identity = identity; +    lodash.includes = includes; +    lodash.indexOf = indexOf; +    lodash.inRange = inRange; +    lodash.invoke = invoke; +    lodash.isArguments = isArguments; +    lodash.isArray = isArray; +    lodash.isArrayBuffer = isArrayBuffer; +    lodash.isArrayLike = isArrayLike; +    lodash.isArrayLikeObject = isArrayLikeObject; +    lodash.isBoolean = isBoolean; +    lodash.isBuffer = isBuffer; +    lodash.isDate = isDate; +    lodash.isElement = isElement; +    lodash.isEmpty = isEmpty; +    lodash.isEqual = isEqual; +    lodash.isEqualWith = isEqualWith; +    lodash.isError = isError; +    lodash.isFinite = isFinite; +    lodash.isFunction = isFunction; +    lodash.isInteger = isInteger; +    lodash.isLength = isLength; +    lodash.isMap = isMap; +    lodash.isMatch = isMatch; +    lodash.isMatchWith = isMatchWith; +    lodash.isNaN = isNaN; +    lodash.isNative = isNative; +    lodash.isNil = isNil; +    lodash.isNull = isNull; +    lodash.isNumber = isNumber; +    lodash.isObject = isObject; +    lodash.isObjectLike = isObjectLike; +    lodash.isPlainObject = isPlainObject; +    lodash.isRegExp = isRegExp; +    lodash.isSafeInteger = isSafeInteger; +    lodash.isSet = isSet; +    lodash.isString = isString; +    lodash.isSymbol = isSymbol; +    lodash.isTypedArray = isTypedArray; +    lodash.isUndefined = isUndefined; +    lodash.isWeakMap = isWeakMap; +    lodash.isWeakSet = isWeakSet; +    lodash.join = join; +    lodash.kebabCase = kebabCase; +    lodash.last = last; +    lodash.lastIndexOf = lastIndexOf; +    lodash.lowerCase = lowerCase; +    lodash.lowerFirst = lowerFirst; +    lodash.lt = lt; +    lodash.lte = lte; +    lodash.max = max; +    lodash.maxBy = maxBy; +    lodash.mean = mean; +    lodash.meanBy = meanBy; +    lodash.min = min; +    lodash.minBy = minBy; +    lodash.stubArray = stubArray; +    lodash.stubFalse = stubFalse; +    lodash.stubObject = stubObject; +    lodash.stubString = stubString; +    lodash.stubTrue = stubTrue; +    lodash.multiply = multiply; +    lodash.nth = nth; +    lodash.noConflict = noConflict; +    lodash.noop = noop; +    lodash.now = now; +    lodash.pad = pad; +    lodash.padEnd = padEnd; +    lodash.padStart = padStart; +    lodash.parseInt = parseInt; +    lodash.random = random; +    lodash.reduce = reduce; +    lodash.reduceRight = reduceRight; +    lodash.repeat = repeat; +    lodash.replace = replace; +    lodash.result = result; +    lodash.round = round; +    lodash.runInContext = runInContext; +    lodash.sample = sample; +    lodash.size = size; +    lodash.snakeCase = snakeCase; +    lodash.some = some; +    lodash.sortedIndex = sortedIndex; +    lodash.sortedIndexBy = sortedIndexBy; +    lodash.sortedIndexOf = sortedIndexOf; +    lodash.sortedLastIndex = sortedLastIndex; +    lodash.sortedLastIndexBy = sortedLastIndexBy; +    lodash.sortedLastIndexOf = sortedLastIndexOf; +    lodash.startCase = startCase; +    lodash.startsWith = startsWith; +    lodash.subtract = subtract; +    lodash.sum = sum; +    lodash.sumBy = sumBy; +    lodash.template = template; +    lodash.times = times; +    lodash.toFinite = toFinite; +    lodash.toInteger = toInteger; +    lodash.toLength = toLength; +    lodash.toLower = toLower; +    lodash.toNumber = toNumber; +    lodash.toSafeInteger = toSafeInteger; +    lodash.toString = toString; +    lodash.toUpper = toUpper; +    lodash.trim = trim; +    lodash.trimEnd = trimEnd; +    lodash.trimStart = trimStart; +    lodash.truncate = truncate; +    lodash.unescape = unescape; +    lodash.uniqueId = uniqueId; +    lodash.upperCase = upperCase; +    lodash.upperFirst = upperFirst; + +    // Add aliases. +    lodash.each = forEach; +    lodash.eachRight = forEachRight; +    lodash.first = head; + +    mixin(lodash, (function() { +      var source = {}; +      baseForOwn(lodash, function(func, methodName) { +        if (!hasOwnProperty.call(lodash.prototype, methodName)) { +          source[methodName] = func; +        } +      }); +      return source; +    }()), { 'chain': false }); + +    /*------------------------------------------------------------------------*/ + +    /** +     * The semantic version number. +     * +     * @static +     * @memberOf _ +     * @type {string} +     */ +    lodash.VERSION = VERSION; + +    // Assign default placeholders. +    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) { +      lodash[methodName].placeholder = lodash; +    }); + +    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants. +    arrayEach(['drop', 'take'], function(methodName, index) { +      LazyWrapper.prototype[methodName] = function(n) { +        n = n === undefined ? 1 : nativeMax(toInteger(n), 0); + +        var result = (this.__filtered__ && !index) +          ? new LazyWrapper(this) +          : this.clone(); + +        if (result.__filtered__) { +          result.__takeCount__ = nativeMin(n, result.__takeCount__); +        } else { +          result.__views__.push({ +            'size': nativeMin(n, MAX_ARRAY_LENGTH), +            'type': methodName + (result.__dir__ < 0 ? 'Right' : '') +          }); +        } +        return result; +      }; + +      LazyWrapper.prototype[methodName + 'Right'] = function(n) { +        return this.reverse()[methodName](n).reverse(); +      }; +    }); + +    // Add `LazyWrapper` methods that accept an `iteratee` value. +    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) { +      var type = index + 1, +          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG; + +      LazyWrapper.prototype[methodName] = function(iteratee) { +        var result = this.clone(); +        result.__iteratees__.push({ +          'iteratee': getIteratee(iteratee, 3), +          'type': type +        }); +        result.__filtered__ = result.__filtered__ || isFilter; +        return result; +      }; +    }); + +    // Add `LazyWrapper` methods for `_.head` and `_.last`. +    arrayEach(['head', 'last'], function(methodName, index) { +      var takeName = 'take' + (index ? 'Right' : ''); + +      LazyWrapper.prototype[methodName] = function() { +        return this[takeName](1).value()[0]; +      }; +    }); + +    // Add `LazyWrapper` methods for `_.initial` and `_.tail`. +    arrayEach(['initial', 'tail'], function(methodName, index) { +      var dropName = 'drop' + (index ? '' : 'Right'); + +      LazyWrapper.prototype[methodName] = function() { +        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1); +      }; +    }); + +    LazyWrapper.prototype.compact = function() { +      return this.filter(identity); +    }; + +    LazyWrapper.prototype.find = function(predicate) { +      return this.filter(predicate).head(); +    }; + +    LazyWrapper.prototype.findLast = function(predicate) { +      return this.reverse().find(predicate); +    }; + +    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) { +      if (typeof path == 'function') { +        return new LazyWrapper(this); +      } +      return this.map(function(value) { +        return baseInvoke(value, path, args); +      }); +    }); + +    LazyWrapper.prototype.reject = function(predicate) { +      return this.filter(negate(getIteratee(predicate))); +    }; + +    LazyWrapper.prototype.slice = function(start, end) { +      start = toInteger(start); + +      var result = this; +      if (result.__filtered__ && (start > 0 || end < 0)) { +        return new LazyWrapper(result); +      } +      if (start < 0) { +        result = result.takeRight(-start); +      } else if (start) { +        result = result.drop(start); +      } +      if (end !== undefined) { +        end = toInteger(end); +        result = end < 0 ? result.dropRight(-end) : result.take(end - start); +      } +      return result; +    }; + +    LazyWrapper.prototype.takeRightWhile = function(predicate) { +      return this.reverse().takeWhile(predicate).reverse(); +    }; + +    LazyWrapper.prototype.toArray = function() { +      return this.take(MAX_ARRAY_LENGTH); +    }; + +    // Add `LazyWrapper` methods to `lodash.prototype`. +    baseForOwn(LazyWrapper.prototype, function(func, methodName) { +      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName), +          isTaker = /^(?:head|last)$/.test(methodName), +          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName], +          retUnwrapped = isTaker || /^find/.test(methodName); + +      if (!lodashFunc) { +        return; +      } +      lodash.prototype[methodName] = function() { +        var value = this.__wrapped__, +            args = isTaker ? [1] : arguments, +            isLazy = value instanceof LazyWrapper, +            iteratee = args[0], +            useLazy = isLazy || isArray(value); + +        var interceptor = function(value) { +          var result = lodashFunc.apply(lodash, arrayPush([value], args)); +          return (isTaker && chainAll) ? result[0] : result; +        }; + +        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) { +          // Avoid lazy use if the iteratee has a "length" value other than `1`. +          isLazy = useLazy = false; +        } +        var chainAll = this.__chain__, +            isHybrid = !!this.__actions__.length, +            isUnwrapped = retUnwrapped && !chainAll, +            onlyLazy = isLazy && !isHybrid; + +        if (!retUnwrapped && useLazy) { +          value = onlyLazy ? value : new LazyWrapper(this); +          var result = func.apply(value, args); +          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined }); +          return new LodashWrapper(result, chainAll); +        } +        if (isUnwrapped && onlyLazy) { +          return func.apply(this, args); +        } +        result = this.thru(interceptor); +        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result; +      }; +    }); + +    // Add `Array` methods to `lodash.prototype`. +    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { +      var func = arrayProto[methodName], +          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', +          retUnwrapped = /^(?:pop|shift)$/.test(methodName); + +      lodash.prototype[methodName] = function() { +        var args = arguments; +        if (retUnwrapped && !this.__chain__) { +          var value = this.value(); +          return func.apply(isArray(value) ? value : [], args); +        } +        return this[chainName](function(value) { +          return func.apply(isArray(value) ? value : [], args); +        }); +      }; +    }); + +    // Map minified method names to their real names. +    baseForOwn(LazyWrapper.prototype, function(func, methodName) { +      var lodashFunc = lodash[methodName]; +      if (lodashFunc) { +        var key = lodashFunc.name + ''; +        if (!hasOwnProperty.call(realNames, key)) { +          realNames[key] = []; +        } +        realNames[key].push({ 'name': methodName, 'func': lodashFunc }); +      } +    }); + +    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{ +      'name': 'wrapper', +      'func': undefined +    }]; + +    // Add methods to `LazyWrapper`. +    LazyWrapper.prototype.clone = lazyClone; +    LazyWrapper.prototype.reverse = lazyReverse; +    LazyWrapper.prototype.value = lazyValue; + +    // Add chain sequence methods to the `lodash` wrapper. +    lodash.prototype.at = wrapperAt; +    lodash.prototype.chain = wrapperChain; +    lodash.prototype.commit = wrapperCommit; +    lodash.prototype.next = wrapperNext; +    lodash.prototype.plant = wrapperPlant; +    lodash.prototype.reverse = wrapperReverse; +    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; + +    // Add lazy aliases. +    lodash.prototype.first = lodash.prototype.head; + +    if (symIterator) { +      lodash.prototype[symIterator] = wrapperToIterator; +    } +    return lodash; +  }); + +  /*--------------------------------------------------------------------------*/ + +  // Export lodash. +  var _ = runInContext(); + +  // Some AMD build optimizers, like r.js, check for condition patterns like: +  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { +    // Expose Lodash on the global object to prevent errors when Lodash is +    // loaded by a script tag in the presence of an AMD loader. +    // See http://requirejs.org/docs/errors.html#mismatch for more details. +    // Use `_.noConflict` to remove Lodash from the global object. +    root._ = _; + +    // Define as an anonymous module so, through path mapping, it can be +    // referenced as the "underscore" module. +    define(function() { +      return _; +    }); +  } +  // Check for `exports` after `define` in case a build optimizer adds it. +  else if (freeModule) { +    // Export for Node.js. +    (freeModule.exports = _)._ = _; +    // Export for CommonJS support. +    freeExports._ = _; +  } +  else { +    // Export to the global object. +    root._ = _; +  } +}.call(this)); diff --git a/node_modules/lodash/lodash.min.js b/node_modules/lodash/lodash.min.js new file mode 100644 index 0000000..4219da7 --- /dev/null +++ b/node_modules/lodash/lodash.min.js @@ -0,0 +1,140 @@ +/** + * @license + * Lodash <https://lodash.com/> + * Copyright OpenJS Foundation and other contributors <https://openjsf.org/> + * Released under MIT license <https://lodash.com/license> + * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ +(function(){function n(n,t,r){switch(r.length){case 0:return n.call(t);case 1:return n.call(t,r[0]);case 2:return n.call(t,r[0],r[1]);case 3:return n.call(t,r[0],r[1],r[2])}return n.apply(t,r)}function t(n,t,r,e){for(var u=-1,i=null==n?0:n.length;++u<i;){var o=n[u];t(e,o,r(o),n)}return e}function r(n,t){for(var r=-1,e=null==n?0:n.length;++r<e&&t(n[r],r,n)!==!1;);return n}function e(n,t){for(var r=null==n?0:n.length;r--&&t(n[r],r,n)!==!1;);return n}function u(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(!t(n[r],r,n))return!1; +return!0}function i(n,t){for(var r=-1,e=null==n?0:n.length,u=0,i=[];++r<e;){var o=n[r];t(o,r,n)&&(i[u++]=o)}return i}function o(n,t){return!!(null==n?0:n.length)&&y(n,t,0)>-1}function f(n,t,r){for(var e=-1,u=null==n?0:n.length;++e<u;)if(r(t,n[e]))return!0;return!1}function c(n,t){for(var r=-1,e=null==n?0:n.length,u=Array(e);++r<e;)u[r]=t(n[r],r,n);return u}function a(n,t){for(var r=-1,e=t.length,u=n.length;++r<e;)n[u+r]=t[r];return n}function l(n,t,r,e){var u=-1,i=null==n?0:n.length;for(e&&i&&(r=n[++u]);++u<i;)r=t(r,n[u],u,n); +return r}function s(n,t,r,e){var u=null==n?0:n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);return r}function h(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(t(n[r],r,n))return!0;return!1}function p(n){return n.split("")}function _(n){return n.match($t)||[]}function v(n,t,r){var e;return r(n,function(n,r,u){if(t(n,r,u))return e=r,!1}),e}function g(n,t,r,e){for(var u=n.length,i=r+(e?1:-1);e?i--:++i<u;)if(t(n[i],i,n))return i;return-1}function y(n,t,r){return t===t?Z(n,t,r):g(n,b,r)}function d(n,t,r,e){ +for(var u=r-1,i=n.length;++u<i;)if(e(n[u],t))return u;return-1}function b(n){return n!==n}function w(n,t){var r=null==n?0:n.length;return r?k(n,t)/r:Cn}function m(n){return function(t){return null==t?X:t[n]}}function x(n){return function(t){return null==n?X:n[t]}}function j(n,t,r,e,u){return u(n,function(n,u,i){r=e?(e=!1,n):t(r,n,u,i)}),r}function A(n,t){var r=n.length;for(n.sort(t);r--;)n[r]=n[r].value;return n}function k(n,t){for(var r,e=-1,u=n.length;++e<u;){var i=t(n[e]);i!==X&&(r=r===X?i:r+i); +}return r}function O(n,t){for(var r=-1,e=Array(n);++r<n;)e[r]=t(r);return e}function I(n,t){return c(t,function(t){return[t,n[t]]})}function R(n){return n?n.slice(0,H(n)+1).replace(Lt,""):n}function z(n){return function(t){return n(t)}}function E(n,t){return c(t,function(t){return n[t]})}function S(n,t){return n.has(t)}function W(n,t){for(var r=-1,e=n.length;++r<e&&y(t,n[r],0)>-1;);return r}function L(n,t){for(var r=n.length;r--&&y(t,n[r],0)>-1;);return r}function C(n,t){for(var r=n.length,e=0;r--;)n[r]===t&&++e; +return e}function U(n){return"\\"+Yr[n]}function B(n,t){return null==n?X:n[t]}function T(n){return Nr.test(n)}function $(n){return Pr.test(n)}function D(n){for(var t,r=[];!(t=n.next()).done;)r.push(t.value);return r}function M(n){var t=-1,r=Array(n.size);return n.forEach(function(n,e){r[++t]=[e,n]}),r}function F(n,t){return function(r){return n(t(r))}}function N(n,t){for(var r=-1,e=n.length,u=0,i=[];++r<e;){var o=n[r];o!==t&&o!==cn||(n[r]=cn,i[u++]=r)}return i}function P(n){var t=-1,r=Array(n.size); +return n.forEach(function(n){r[++t]=n}),r}function q(n){var t=-1,r=Array(n.size);return n.forEach(function(n){r[++t]=[n,n]}),r}function Z(n,t,r){for(var e=r-1,u=n.length;++e<u;)if(n[e]===t)return e;return-1}function K(n,t,r){for(var e=r+1;e--;)if(n[e]===t)return e;return e}function V(n){return T(n)?J(n):_e(n)}function G(n){return T(n)?Y(n):p(n)}function H(n){for(var t=n.length;t--&&Ct.test(n.charAt(t)););return t}function J(n){for(var t=Mr.lastIndex=0;Mr.test(n);)++t;return t}function Y(n){return n.match(Mr)||[]; +}function Q(n){return n.match(Fr)||[]}var X,nn="4.17.21",tn=200,rn="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",en="Expected a function",un="Invalid `variable` option passed into `_.template`",on="__lodash_hash_undefined__",fn=500,cn="__lodash_placeholder__",an=1,ln=2,sn=4,hn=1,pn=2,_n=1,vn=2,gn=4,yn=8,dn=16,bn=32,wn=64,mn=128,xn=256,jn=512,An=30,kn="...",On=800,In=16,Rn=1,zn=2,En=3,Sn=1/0,Wn=9007199254740991,Ln=1.7976931348623157e308,Cn=NaN,Un=4294967295,Bn=Un-1,Tn=Un>>>1,$n=[["ary",mn],["bind",_n],["bindKey",vn],["curry",yn],["curryRight",dn],["flip",jn],["partial",bn],["partialRight",wn],["rearg",xn]],Dn="[object Arguments]",Mn="[object Array]",Fn="[object AsyncFunction]",Nn="[object Boolean]",Pn="[object Date]",qn="[object DOMException]",Zn="[object Error]",Kn="[object Function]",Vn="[object GeneratorFunction]",Gn="[object Map]",Hn="[object Number]",Jn="[object Null]",Yn="[object Object]",Qn="[object Promise]",Xn="[object Proxy]",nt="[object RegExp]",tt="[object Set]",rt="[object String]",et="[object Symbol]",ut="[object Undefined]",it="[object WeakMap]",ot="[object WeakSet]",ft="[object ArrayBuffer]",ct="[object DataView]",at="[object Float32Array]",lt="[object Float64Array]",st="[object Int8Array]",ht="[object Int16Array]",pt="[object Int32Array]",_t="[object Uint8Array]",vt="[object Uint8ClampedArray]",gt="[object Uint16Array]",yt="[object Uint32Array]",dt=/\b__p \+= '';/g,bt=/\b(__p \+=) '' \+/g,wt=/(__e\(.*?\)|\b__t\)) \+\n'';/g,mt=/&(?:amp|lt|gt|quot|#39);/g,xt=/[&<>"']/g,jt=RegExp(mt.source),At=RegExp(xt.source),kt=/<%-([\s\S]+?)%>/g,Ot=/<%([\s\S]+?)%>/g,It=/<%=([\s\S]+?)%>/g,Rt=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,zt=/^\w*$/,Et=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,St=/[\\^$.*+?()[\]{}|]/g,Wt=RegExp(St.source),Lt=/^\s+/,Ct=/\s/,Ut=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Bt=/\{\n\/\* \[wrapped with (.+)\] \*/,Tt=/,? & /,$t=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Dt=/[()=,{}\[\]\/\s]/,Mt=/\\(\\)?/g,Ft=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Nt=/\w*$/,Pt=/^[-+]0x[0-9a-f]+$/i,qt=/^0b[01]+$/i,Zt=/^\[object .+?Constructor\]$/,Kt=/^0o[0-7]+$/i,Vt=/^(?:0|[1-9]\d*)$/,Gt=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Ht=/($^)/,Jt=/['\n\r\u2028\u2029\\]/g,Yt="\\ud800-\\udfff",Qt="\\u0300-\\u036f",Xt="\\ufe20-\\ufe2f",nr="\\u20d0-\\u20ff",tr=Qt+Xt+nr,rr="\\u2700-\\u27bf",er="a-z\\xdf-\\xf6\\xf8-\\xff",ur="\\xac\\xb1\\xd7\\xf7",ir="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",or="\\u2000-\\u206f",fr=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",cr="A-Z\\xc0-\\xd6\\xd8-\\xde",ar="\\ufe0e\\ufe0f",lr=ur+ir+or+fr,sr="['\u2019]",hr="["+Yt+"]",pr="["+lr+"]",_r="["+tr+"]",vr="\\d+",gr="["+rr+"]",yr="["+er+"]",dr="[^"+Yt+lr+vr+rr+er+cr+"]",br="\\ud83c[\\udffb-\\udfff]",wr="(?:"+_r+"|"+br+")",mr="[^"+Yt+"]",xr="(?:\\ud83c[\\udde6-\\uddff]){2}",jr="[\\ud800-\\udbff][\\udc00-\\udfff]",Ar="["+cr+"]",kr="\\u200d",Or="(?:"+yr+"|"+dr+")",Ir="(?:"+Ar+"|"+dr+")",Rr="(?:"+sr+"(?:d|ll|m|re|s|t|ve))?",zr="(?:"+sr+"(?:D|LL|M|RE|S|T|VE))?",Er=wr+"?",Sr="["+ar+"]?",Wr="(?:"+kr+"(?:"+[mr,xr,jr].join("|")+")"+Sr+Er+")*",Lr="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Cr="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",Ur=Sr+Er+Wr,Br="(?:"+[gr,xr,jr].join("|")+")"+Ur,Tr="(?:"+[mr+_r+"?",_r,xr,jr,hr].join("|")+")",$r=RegExp(sr,"g"),Dr=RegExp(_r,"g"),Mr=RegExp(br+"(?="+br+")|"+Tr+Ur,"g"),Fr=RegExp([Ar+"?"+yr+"+"+Rr+"(?="+[pr,Ar,"$"].join("|")+")",Ir+"+"+zr+"(?="+[pr,Ar+Or,"$"].join("|")+")",Ar+"?"+Or+"+"+Rr,Ar+"+"+zr,Cr,Lr,vr,Br].join("|"),"g"),Nr=RegExp("["+kr+Yt+tr+ar+"]"),Pr=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,qr=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Zr=-1,Kr={}; +Kr[at]=Kr[lt]=Kr[st]=Kr[ht]=Kr[pt]=Kr[_t]=Kr[vt]=Kr[gt]=Kr[yt]=!0,Kr[Dn]=Kr[Mn]=Kr[ft]=Kr[Nn]=Kr[ct]=Kr[Pn]=Kr[Zn]=Kr[Kn]=Kr[Gn]=Kr[Hn]=Kr[Yn]=Kr[nt]=Kr[tt]=Kr[rt]=Kr[it]=!1;var Vr={};Vr[Dn]=Vr[Mn]=Vr[ft]=Vr[ct]=Vr[Nn]=Vr[Pn]=Vr[at]=Vr[lt]=Vr[st]=Vr[ht]=Vr[pt]=Vr[Gn]=Vr[Hn]=Vr[Yn]=Vr[nt]=Vr[tt]=Vr[rt]=Vr[et]=Vr[_t]=Vr[vt]=Vr[gt]=Vr[yt]=!0,Vr[Zn]=Vr[Kn]=Vr[it]=!1;var Gr={"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a", +"\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae", +"\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss","\u0100":"A","\u0102":"A","\u0104":"A","\u0101":"a","\u0103":"a","\u0105":"a","\u0106":"C","\u0108":"C","\u010a":"C","\u010c":"C","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\u010e":"D","\u0110":"D","\u010f":"d","\u0111":"d","\u0112":"E","\u0114":"E","\u0116":"E","\u0118":"E","\u011a":"E","\u0113":"e","\u0115":"e","\u0117":"e","\u0119":"e","\u011b":"e","\u011c":"G","\u011e":"G","\u0120":"G","\u0122":"G","\u011d":"g","\u011f":"g","\u0121":"g", +"\u0123":"g","\u0124":"H","\u0126":"H","\u0125":"h","\u0127":"h","\u0128":"I","\u012a":"I","\u012c":"I","\u012e":"I","\u0130":"I","\u0129":"i","\u012b":"i","\u012d":"i","\u012f":"i","\u0131":"i","\u0134":"J","\u0135":"j","\u0136":"K","\u0137":"k","\u0138":"k","\u0139":"L","\u013b":"L","\u013d":"L","\u013f":"L","\u0141":"L","\u013a":"l","\u013c":"l","\u013e":"l","\u0140":"l","\u0142":"l","\u0143":"N","\u0145":"N","\u0147":"N","\u014a":"N","\u0144":"n","\u0146":"n","\u0148":"n","\u014b":"n","\u014c":"O", +"\u014e":"O","\u0150":"O","\u014d":"o","\u014f":"o","\u0151":"o","\u0154":"R","\u0156":"R","\u0158":"R","\u0155":"r","\u0157":"r","\u0159":"r","\u015a":"S","\u015c":"S","\u015e":"S","\u0160":"S","\u015b":"s","\u015d":"s","\u015f":"s","\u0161":"s","\u0162":"T","\u0164":"T","\u0166":"T","\u0163":"t","\u0165":"t","\u0167":"t","\u0168":"U","\u016a":"U","\u016c":"U","\u016e":"U","\u0170":"U","\u0172":"U","\u0169":"u","\u016b":"u","\u016d":"u","\u016f":"u","\u0171":"u","\u0173":"u","\u0174":"W","\u0175":"w", +"\u0176":"Y","\u0177":"y","\u0178":"Y","\u0179":"Z","\u017b":"Z","\u017d":"Z","\u017a":"z","\u017c":"z","\u017e":"z","\u0132":"IJ","\u0133":"ij","\u0152":"Oe","\u0153":"oe","\u0149":"'n","\u017f":"s"},Hr={"&":"&","<":"<",">":">",'"':""","'":"'"},Jr={"&":"&","<":"<",">":">",""":'"',"'":"'"},Yr={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Qr=parseFloat,Xr=parseInt,ne="object"==typeof global&&global&&global.Object===Object&&global,te="object"==typeof self&&self&&self.Object===Object&&self,re=ne||te||Function("return this")(),ee="object"==typeof exports&&exports&&!exports.nodeType&&exports,ue=ee&&"object"==typeof module&&module&&!module.nodeType&&module,ie=ue&&ue.exports===ee,oe=ie&&ne.process,fe=function(){ +try{var n=ue&&ue.require&&ue.require("util").types;return n?n:oe&&oe.binding&&oe.binding("util")}catch(n){}}(),ce=fe&&fe.isArrayBuffer,ae=fe&&fe.isDate,le=fe&&fe.isMap,se=fe&&fe.isRegExp,he=fe&&fe.isSet,pe=fe&&fe.isTypedArray,_e=m("length"),ve=x(Gr),ge=x(Hr),ye=x(Jr),de=function p(x){function Z(n){if(cc(n)&&!bh(n)&&!(n instanceof Ct)){if(n instanceof Y)return n;if(bl.call(n,"__wrapped__"))return eo(n)}return new Y(n)}function J(){}function Y(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t, +this.__index__=0,this.__values__=X}function Ct(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=Un,this.__views__=[]}function $t(){var n=new Ct(this.__wrapped__);return n.__actions__=Tu(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=Tu(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=Tu(this.__views__),n}function Yt(){if(this.__filtered__){var n=new Ct(this);n.__dir__=-1, +n.__filtered__=!0}else n=this.clone(),n.__dir__*=-1;return n}function Qt(){var n=this.__wrapped__.value(),t=this.__dir__,r=bh(n),e=t<0,u=r?n.length:0,i=Oi(0,u,this.__views__),o=i.start,f=i.end,c=f-o,a=e?f:o-1,l=this.__iteratees__,s=l.length,h=0,p=Hl(c,this.__takeCount__);if(!r||!e&&u==c&&p==c)return wu(n,this.__actions__);var _=[];n:for(;c--&&h<p;){a+=t;for(var v=-1,g=n[a];++v<s;){var y=l[v],d=y.iteratee,b=y.type,w=d(g);if(b==zn)g=w;else if(!w){if(b==Rn)continue n;break n}}_[h++]=g}return _}function Xt(n){ +var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function nr(){this.__data__=is?is(null):{},this.size=0}function tr(n){var t=this.has(n)&&delete this.__data__[n];return this.size-=t?1:0,t}function rr(n){var t=this.__data__;if(is){var r=t[n];return r===on?X:r}return bl.call(t,n)?t[n]:X}function er(n){var t=this.__data__;return is?t[n]!==X:bl.call(t,n)}function ur(n,t){var r=this.__data__;return this.size+=this.has(n)?0:1,r[n]=is&&t===X?on:t,this}function ir(n){ +var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function or(){this.__data__=[],this.size=0}function fr(n){var t=this.__data__,r=Wr(t,n);return!(r<0)&&(r==t.length-1?t.pop():Ll.call(t,r,1),--this.size,!0)}function cr(n){var t=this.__data__,r=Wr(t,n);return r<0?X:t[r][1]}function ar(n){return Wr(this.__data__,n)>-1}function lr(n,t){var r=this.__data__,e=Wr(r,n);return e<0?(++this.size,r.push([n,t])):r[e][1]=t,this}function sr(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){ +var e=n[t];this.set(e[0],e[1])}}function hr(){this.size=0,this.__data__={hash:new Xt,map:new(ts||ir),string:new Xt}}function pr(n){var t=xi(this,n).delete(n);return this.size-=t?1:0,t}function _r(n){return xi(this,n).get(n)}function vr(n){return xi(this,n).has(n)}function gr(n,t){var r=xi(this,n),e=r.size;return r.set(n,t),this.size+=r.size==e?0:1,this}function yr(n){var t=-1,r=null==n?0:n.length;for(this.__data__=new sr;++t<r;)this.add(n[t])}function dr(n){return this.__data__.set(n,on),this}function br(n){ +return this.__data__.has(n)}function wr(n){this.size=(this.__data__=new ir(n)).size}function mr(){this.__data__=new ir,this.size=0}function xr(n){var t=this.__data__,r=t.delete(n);return this.size=t.size,r}function jr(n){return this.__data__.get(n)}function Ar(n){return this.__data__.has(n)}function kr(n,t){var r=this.__data__;if(r instanceof ir){var e=r.__data__;if(!ts||e.length<tn-1)return e.push([n,t]),this.size=++r.size,this;r=this.__data__=new sr(e)}return r.set(n,t),this.size=r.size,this}function Or(n,t){ +var r=bh(n),e=!r&&dh(n),u=!r&&!e&&mh(n),i=!r&&!e&&!u&&Oh(n),o=r||e||u||i,f=o?O(n.length,hl):[],c=f.length;for(var a in n)!t&&!bl.call(n,a)||o&&("length"==a||u&&("offset"==a||"parent"==a)||i&&("buffer"==a||"byteLength"==a||"byteOffset"==a)||Ci(a,c))||f.push(a);return f}function Ir(n){var t=n.length;return t?n[tu(0,t-1)]:X}function Rr(n,t){return Xi(Tu(n),Mr(t,0,n.length))}function zr(n){return Xi(Tu(n))}function Er(n,t,r){(r===X||Gf(n[t],r))&&(r!==X||t in n)||Br(n,t,r)}function Sr(n,t,r){var e=n[t]; +bl.call(n,t)&&Gf(e,r)&&(r!==X||t in n)||Br(n,t,r)}function Wr(n,t){for(var r=n.length;r--;)if(Gf(n[r][0],t))return r;return-1}function Lr(n,t,r,e){return ys(n,function(n,u,i){t(e,n,r(n),i)}),e}function Cr(n,t){return n&&$u(t,Pc(t),n)}function Ur(n,t){return n&&$u(t,qc(t),n)}function Br(n,t,r){"__proto__"==t&&Tl?Tl(n,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):n[t]=r}function Tr(n,t){for(var r=-1,e=t.length,u=il(e),i=null==n;++r<e;)u[r]=i?X:Mc(n,t[r]);return u}function Mr(n,t,r){return n===n&&(r!==X&&(n=n<=r?n:r), +t!==X&&(n=n>=t?n:t)),n}function Fr(n,t,e,u,i,o){var f,c=t&an,a=t&ln,l=t&sn;if(e&&(f=i?e(n,u,i,o):e(n)),f!==X)return f;if(!fc(n))return n;var s=bh(n);if(s){if(f=zi(n),!c)return Tu(n,f)}else{var h=zs(n),p=h==Kn||h==Vn;if(mh(n))return Iu(n,c);if(h==Yn||h==Dn||p&&!i){if(f=a||p?{}:Ei(n),!c)return a?Mu(n,Ur(f,n)):Du(n,Cr(f,n))}else{if(!Vr[h])return i?n:{};f=Si(n,h,c)}}o||(o=new wr);var _=o.get(n);if(_)return _;o.set(n,f),kh(n)?n.forEach(function(r){f.add(Fr(r,t,e,r,n,o))}):jh(n)&&n.forEach(function(r,u){ +f.set(u,Fr(r,t,e,u,n,o))});var v=l?a?di:yi:a?qc:Pc,g=s?X:v(n);return r(g||n,function(r,u){g&&(u=r,r=n[u]),Sr(f,u,Fr(r,t,e,u,n,o))}),f}function Nr(n){var t=Pc(n);return function(r){return Pr(r,n,t)}}function Pr(n,t,r){var e=r.length;if(null==n)return!e;for(n=ll(n);e--;){var u=r[e],i=t[u],o=n[u];if(o===X&&!(u in n)||!i(o))return!1}return!0}function Gr(n,t,r){if("function"!=typeof n)throw new pl(en);return Ws(function(){n.apply(X,r)},t)}function Hr(n,t,r,e){var u=-1,i=o,a=!0,l=n.length,s=[],h=t.length; +if(!l)return s;r&&(t=c(t,z(r))),e?(i=f,a=!1):t.length>=tn&&(i=S,a=!1,t=new yr(t));n:for(;++u<l;){var p=n[u],_=null==r?p:r(p);if(p=e||0!==p?p:0,a&&_===_){for(var v=h;v--;)if(t[v]===_)continue n;s.push(p)}else i(t,_,e)||s.push(p)}return s}function Jr(n,t){var r=!0;return ys(n,function(n,e,u){return r=!!t(n,e,u)}),r}function Yr(n,t,r){for(var e=-1,u=n.length;++e<u;){var i=n[e],o=t(i);if(null!=o&&(f===X?o===o&&!bc(o):r(o,f)))var f=o,c=i}return c}function ne(n,t,r,e){var u=n.length;for(r=kc(r),r<0&&(r=-r>u?0:u+r), +e=e===X||e>u?u:kc(e),e<0&&(e+=u),e=r>e?0:Oc(e);r<e;)n[r++]=t;return n}function te(n,t){var r=[];return ys(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function ee(n,t,r,e,u){var i=-1,o=n.length;for(r||(r=Li),u||(u=[]);++i<o;){var f=n[i];t>0&&r(f)?t>1?ee(f,t-1,r,e,u):a(u,f):e||(u[u.length]=f)}return u}function ue(n,t){return n&&bs(n,t,Pc)}function oe(n,t){return n&&ws(n,t,Pc)}function fe(n,t){return i(t,function(t){return uc(n[t])})}function _e(n,t){t=ku(t,n);for(var r=0,e=t.length;null!=n&&r<e;)n=n[no(t[r++])]; +return r&&r==e?n:X}function de(n,t,r){var e=t(n);return bh(n)?e:a(e,r(n))}function we(n){return null==n?n===X?ut:Jn:Bl&&Bl in ll(n)?ki(n):Ki(n)}function me(n,t){return n>t}function xe(n,t){return null!=n&&bl.call(n,t)}function je(n,t){return null!=n&&t in ll(n)}function Ae(n,t,r){return n>=Hl(t,r)&&n<Gl(t,r)}function ke(n,t,r){for(var e=r?f:o,u=n[0].length,i=n.length,a=i,l=il(i),s=1/0,h=[];a--;){var p=n[a];a&&t&&(p=c(p,z(t))),s=Hl(p.length,s),l[a]=!r&&(t||u>=120&&p.length>=120)?new yr(a&&p):X}p=n[0]; +var _=-1,v=l[0];n:for(;++_<u&&h.length<s;){var g=p[_],y=t?t(g):g;if(g=r||0!==g?g:0,!(v?S(v,y):e(h,y,r))){for(a=i;--a;){var d=l[a];if(!(d?S(d,y):e(n[a],y,r)))continue n}v&&v.push(y),h.push(g)}}return h}function Oe(n,t,r,e){return ue(n,function(n,u,i){t(e,r(n),u,i)}),e}function Ie(t,r,e){r=ku(r,t),t=Gi(t,r);var u=null==t?t:t[no(jo(r))];return null==u?X:n(u,t,e)}function Re(n){return cc(n)&&we(n)==Dn}function ze(n){return cc(n)&&we(n)==ft}function Ee(n){return cc(n)&&we(n)==Pn}function Se(n,t,r,e,u){ +return n===t||(null==n||null==t||!cc(n)&&!cc(t)?n!==n&&t!==t:We(n,t,r,e,Se,u))}function We(n,t,r,e,u,i){var o=bh(n),f=bh(t),c=o?Mn:zs(n),a=f?Mn:zs(t);c=c==Dn?Yn:c,a=a==Dn?Yn:a;var l=c==Yn,s=a==Yn,h=c==a;if(h&&mh(n)){if(!mh(t))return!1;o=!0,l=!1}if(h&&!l)return i||(i=new wr),o||Oh(n)?pi(n,t,r,e,u,i):_i(n,t,c,r,e,u,i);if(!(r&hn)){var p=l&&bl.call(n,"__wrapped__"),_=s&&bl.call(t,"__wrapped__");if(p||_){var v=p?n.value():n,g=_?t.value():t;return i||(i=new wr),u(v,g,r,e,i)}}return!!h&&(i||(i=new wr),vi(n,t,r,e,u,i)); +}function Le(n){return cc(n)&&zs(n)==Gn}function Ce(n,t,r,e){var u=r.length,i=u,o=!e;if(null==n)return!i;for(n=ll(n);u--;){var f=r[u];if(o&&f[2]?f[1]!==n[f[0]]:!(f[0]in n))return!1}for(;++u<i;){f=r[u];var c=f[0],a=n[c],l=f[1];if(o&&f[2]){if(a===X&&!(c in n))return!1}else{var s=new wr;if(e)var h=e(a,l,c,n,t,s);if(!(h===X?Se(l,a,hn|pn,e,s):h))return!1}}return!0}function Ue(n){return!(!fc(n)||Di(n))&&(uc(n)?kl:Zt).test(to(n))}function Be(n){return cc(n)&&we(n)==nt}function Te(n){return cc(n)&&zs(n)==tt; +}function $e(n){return cc(n)&&oc(n.length)&&!!Kr[we(n)]}function De(n){return"function"==typeof n?n:null==n?La:"object"==typeof n?bh(n)?Ze(n[0],n[1]):qe(n):Fa(n)}function Me(n){if(!Mi(n))return Vl(n);var t=[];for(var r in ll(n))bl.call(n,r)&&"constructor"!=r&&t.push(r);return t}function Fe(n){if(!fc(n))return Zi(n);var t=Mi(n),r=[];for(var e in n)("constructor"!=e||!t&&bl.call(n,e))&&r.push(e);return r}function Ne(n,t){return n<t}function Pe(n,t){var r=-1,e=Hf(n)?il(n.length):[];return ys(n,function(n,u,i){ +e[++r]=t(n,u,i)}),e}function qe(n){var t=ji(n);return 1==t.length&&t[0][2]?Ni(t[0][0],t[0][1]):function(r){return r===n||Ce(r,n,t)}}function Ze(n,t){return Bi(n)&&Fi(t)?Ni(no(n),t):function(r){var e=Mc(r,n);return e===X&&e===t?Nc(r,n):Se(t,e,hn|pn)}}function Ke(n,t,r,e,u){n!==t&&bs(t,function(i,o){if(u||(u=new wr),fc(i))Ve(n,t,o,r,Ke,e,u);else{var f=e?e(Ji(n,o),i,o+"",n,t,u):X;f===X&&(f=i),Er(n,o,f)}},qc)}function Ve(n,t,r,e,u,i,o){var f=Ji(n,r),c=Ji(t,r),a=o.get(c);if(a)return Er(n,r,a),X;var l=i?i(f,c,r+"",n,t,o):X,s=l===X; +if(s){var h=bh(c),p=!h&&mh(c),_=!h&&!p&&Oh(c);l=c,h||p||_?bh(f)?l=f:Jf(f)?l=Tu(f):p?(s=!1,l=Iu(c,!0)):_?(s=!1,l=Wu(c,!0)):l=[]:gc(c)||dh(c)?(l=f,dh(f)?l=Rc(f):fc(f)&&!uc(f)||(l=Ei(c))):s=!1}s&&(o.set(c,l),u(l,c,e,i,o),o.delete(c)),Er(n,r,l)}function Ge(n,t){var r=n.length;if(r)return t+=t<0?r:0,Ci(t,r)?n[t]:X}function He(n,t,r){t=t.length?c(t,function(n){return bh(n)?function(t){return _e(t,1===n.length?n[0]:n)}:n}):[La];var e=-1;return t=c(t,z(mi())),A(Pe(n,function(n,r,u){return{criteria:c(t,function(t){ +return t(n)}),index:++e,value:n}}),function(n,t){return Cu(n,t,r)})}function Je(n,t){return Ye(n,t,function(t,r){return Nc(n,r)})}function Ye(n,t,r){for(var e=-1,u=t.length,i={};++e<u;){var o=t[e],f=_e(n,o);r(f,o)&&fu(i,ku(o,n),f)}return i}function Qe(n){return function(t){return _e(t,n)}}function Xe(n,t,r,e){var u=e?d:y,i=-1,o=t.length,f=n;for(n===t&&(t=Tu(t)),r&&(f=c(n,z(r)));++i<o;)for(var a=0,l=t[i],s=r?r(l):l;(a=u(f,s,a,e))>-1;)f!==n&&Ll.call(f,a,1),Ll.call(n,a,1);return n}function nu(n,t){for(var r=n?t.length:0,e=r-1;r--;){ +var u=t[r];if(r==e||u!==i){var i=u;Ci(u)?Ll.call(n,u,1):yu(n,u)}}return n}function tu(n,t){return n+Nl(Ql()*(t-n+1))}function ru(n,t,r,e){for(var u=-1,i=Gl(Fl((t-n)/(r||1)),0),o=il(i);i--;)o[e?i:++u]=n,n+=r;return o}function eu(n,t){var r="";if(!n||t<1||t>Wn)return r;do t%2&&(r+=n),t=Nl(t/2),t&&(n+=n);while(t);return r}function uu(n,t){return Ls(Vi(n,t,La),n+"")}function iu(n){return Ir(ra(n))}function ou(n,t){var r=ra(n);return Xi(r,Mr(t,0,r.length))}function fu(n,t,r,e){if(!fc(n))return n;t=ku(t,n); +for(var u=-1,i=t.length,o=i-1,f=n;null!=f&&++u<i;){var c=no(t[u]),a=r;if("__proto__"===c||"constructor"===c||"prototype"===c)return n;if(u!=o){var l=f[c];a=e?e(l,c,f):X,a===X&&(a=fc(l)?l:Ci(t[u+1])?[]:{})}Sr(f,c,a),f=f[c]}return n}function cu(n){return Xi(ra(n))}function au(n,t,r){var e=-1,u=n.length;t<0&&(t=-t>u?0:u+t),r=r>u?u:r,r<0&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0;for(var i=il(u);++e<u;)i[e]=n[e+t];return i}function lu(n,t){var r;return ys(n,function(n,e,u){return r=t(n,e,u),!r}),!!r}function su(n,t,r){ +var e=0,u=null==n?e:n.length;if("number"==typeof t&&t===t&&u<=Tn){for(;e<u;){var i=e+u>>>1,o=n[i];null!==o&&!bc(o)&&(r?o<=t:o<t)?e=i+1:u=i}return u}return hu(n,t,La,r)}function hu(n,t,r,e){var u=0,i=null==n?0:n.length;if(0===i)return 0;t=r(t);for(var o=t!==t,f=null===t,c=bc(t),a=t===X;u<i;){var l=Nl((u+i)/2),s=r(n[l]),h=s!==X,p=null===s,_=s===s,v=bc(s);if(o)var g=e||_;else g=a?_&&(e||h):f?_&&h&&(e||!p):c?_&&h&&!p&&(e||!v):!p&&!v&&(e?s<=t:s<t);g?u=l+1:i=l}return Hl(i,Bn)}function pu(n,t){for(var r=-1,e=n.length,u=0,i=[];++r<e;){ +var o=n[r],f=t?t(o):o;if(!r||!Gf(f,c)){var c=f;i[u++]=0===o?0:o}}return i}function _u(n){return"number"==typeof n?n:bc(n)?Cn:+n}function vu(n){if("string"==typeof n)return n;if(bh(n))return c(n,vu)+"";if(bc(n))return vs?vs.call(n):"";var t=n+"";return"0"==t&&1/n==-Sn?"-0":t}function gu(n,t,r){var e=-1,u=o,i=n.length,c=!0,a=[],l=a;if(r)c=!1,u=f;else if(i>=tn){var s=t?null:ks(n);if(s)return P(s);c=!1,u=S,l=new yr}else l=t?[]:a;n:for(;++e<i;){var h=n[e],p=t?t(h):h;if(h=r||0!==h?h:0,c&&p===p){for(var _=l.length;_--;)if(l[_]===p)continue n; +t&&l.push(p),a.push(h)}else u(l,p,r)||(l!==a&&l.push(p),a.push(h))}return a}function yu(n,t){return t=ku(t,n),n=Gi(n,t),null==n||delete n[no(jo(t))]}function du(n,t,r,e){return fu(n,t,r(_e(n,t)),e)}function bu(n,t,r,e){for(var u=n.length,i=e?u:-1;(e?i--:++i<u)&&t(n[i],i,n););return r?au(n,e?0:i,e?i+1:u):au(n,e?i+1:0,e?u:i)}function wu(n,t){var r=n;return r instanceof Ct&&(r=r.value()),l(t,function(n,t){return t.func.apply(t.thisArg,a([n],t.args))},r)}function mu(n,t,r){var e=n.length;if(e<2)return e?gu(n[0]):[]; +for(var u=-1,i=il(e);++u<e;)for(var o=n[u],f=-1;++f<e;)f!=u&&(i[u]=Hr(i[u]||o,n[f],t,r));return gu(ee(i,1),t,r)}function xu(n,t,r){for(var e=-1,u=n.length,i=t.length,o={};++e<u;){r(o,n[e],e<i?t[e]:X)}return o}function ju(n){return Jf(n)?n:[]}function Au(n){return"function"==typeof n?n:La}function ku(n,t){return bh(n)?n:Bi(n,t)?[n]:Cs(Ec(n))}function Ou(n,t,r){var e=n.length;return r=r===X?e:r,!t&&r>=e?n:au(n,t,r)}function Iu(n,t){if(t)return n.slice();var r=n.length,e=zl?zl(r):new n.constructor(r); +return n.copy(e),e}function Ru(n){var t=new n.constructor(n.byteLength);return new Rl(t).set(new Rl(n)),t}function zu(n,t){return new n.constructor(t?Ru(n.buffer):n.buffer,n.byteOffset,n.byteLength)}function Eu(n){var t=new n.constructor(n.source,Nt.exec(n));return t.lastIndex=n.lastIndex,t}function Su(n){return _s?ll(_s.call(n)):{}}function Wu(n,t){return new n.constructor(t?Ru(n.buffer):n.buffer,n.byteOffset,n.length)}function Lu(n,t){if(n!==t){var r=n!==X,e=null===n,u=n===n,i=bc(n),o=t!==X,f=null===t,c=t===t,a=bc(t); +if(!f&&!a&&!i&&n>t||i&&o&&c&&!f&&!a||e&&o&&c||!r&&c||!u)return 1;if(!e&&!i&&!a&&n<t||a&&r&&u&&!e&&!i||f&&r&&u||!o&&u||!c)return-1}return 0}function Cu(n,t,r){for(var e=-1,u=n.criteria,i=t.criteria,o=u.length,f=r.length;++e<o;){var c=Lu(u[e],i[e]);if(c){if(e>=f)return c;return c*("desc"==r[e]?-1:1)}}return n.index-t.index}function Uu(n,t,r,e){for(var u=-1,i=n.length,o=r.length,f=-1,c=t.length,a=Gl(i-o,0),l=il(c+a),s=!e;++f<c;)l[f]=t[f];for(;++u<o;)(s||u<i)&&(l[r[u]]=n[u]);for(;a--;)l[f++]=n[u++];return l; +}function Bu(n,t,r,e){for(var u=-1,i=n.length,o=-1,f=r.length,c=-1,a=t.length,l=Gl(i-f,0),s=il(l+a),h=!e;++u<l;)s[u]=n[u];for(var p=u;++c<a;)s[p+c]=t[c];for(;++o<f;)(h||u<i)&&(s[p+r[o]]=n[u++]);return s}function Tu(n,t){var r=-1,e=n.length;for(t||(t=il(e));++r<e;)t[r]=n[r];return t}function $u(n,t,r,e){var u=!r;r||(r={});for(var i=-1,o=t.length;++i<o;){var f=t[i],c=e?e(r[f],n[f],f,r,n):X;c===X&&(c=n[f]),u?Br(r,f,c):Sr(r,f,c)}return r}function Du(n,t){return $u(n,Is(n),t)}function Mu(n,t){return $u(n,Rs(n),t); +}function Fu(n,r){return function(e,u){var i=bh(e)?t:Lr,o=r?r():{};return i(e,n,mi(u,2),o)}}function Nu(n){return uu(function(t,r){var e=-1,u=r.length,i=u>1?r[u-1]:X,o=u>2?r[2]:X;for(i=n.length>3&&"function"==typeof i?(u--,i):X,o&&Ui(r[0],r[1],o)&&(i=u<3?X:i,u=1),t=ll(t);++e<u;){var f=r[e];f&&n(t,f,e,i)}return t})}function Pu(n,t){return function(r,e){if(null==r)return r;if(!Hf(r))return n(r,e);for(var u=r.length,i=t?u:-1,o=ll(r);(t?i--:++i<u)&&e(o[i],i,o)!==!1;);return r}}function qu(n){return function(t,r,e){ +for(var u=-1,i=ll(t),o=e(t),f=o.length;f--;){var c=o[n?f:++u];if(r(i[c],c,i)===!1)break}return t}}function Zu(n,t,r){function e(){return(this&&this!==re&&this instanceof e?i:n).apply(u?r:this,arguments)}var u=t&_n,i=Gu(n);return e}function Ku(n){return function(t){t=Ec(t);var r=T(t)?G(t):X,e=r?r[0]:t.charAt(0),u=r?Ou(r,1).join(""):t.slice(1);return e[n]()+u}}function Vu(n){return function(t){return l(Ra(ca(t).replace($r,"")),n,"")}}function Gu(n){return function(){var t=arguments;switch(t.length){ +case 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3:return new n(t[0],t[1],t[2]);case 4:return new n(t[0],t[1],t[2],t[3]);case 5:return new n(t[0],t[1],t[2],t[3],t[4]);case 6:return new n(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new n(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=gs(n.prototype),e=n.apply(r,t);return fc(e)?e:r}}function Hu(t,r,e){function u(){for(var o=arguments.length,f=il(o),c=o,a=wi(u);c--;)f[c]=arguments[c];var l=o<3&&f[0]!==a&&f[o-1]!==a?[]:N(f,a); +return o-=l.length,o<e?oi(t,r,Qu,u.placeholder,X,f,l,X,X,e-o):n(this&&this!==re&&this instanceof u?i:t,this,f)}var i=Gu(t);return u}function Ju(n){return function(t,r,e){var u=ll(t);if(!Hf(t)){var i=mi(r,3);t=Pc(t),r=function(n){return i(u[n],n,u)}}var o=n(t,r,e);return o>-1?u[i?t[o]:o]:X}}function Yu(n){return gi(function(t){var r=t.length,e=r,u=Y.prototype.thru;for(n&&t.reverse();e--;){var i=t[e];if("function"!=typeof i)throw new pl(en);if(u&&!o&&"wrapper"==bi(i))var o=new Y([],!0)}for(e=o?e:r;++e<r;){ +i=t[e];var f=bi(i),c="wrapper"==f?Os(i):X;o=c&&$i(c[0])&&c[1]==(mn|yn|bn|xn)&&!c[4].length&&1==c[9]?o[bi(c[0])].apply(o,c[3]):1==i.length&&$i(i)?o[f]():o.thru(i)}return function(){var n=arguments,e=n[0];if(o&&1==n.length&&bh(e))return o.plant(e).value();for(var u=0,i=r?t[u].apply(this,n):e;++u<r;)i=t[u].call(this,i);return i}})}function Qu(n,t,r,e,u,i,o,f,c,a){function l(){for(var y=arguments.length,d=il(y),b=y;b--;)d[b]=arguments[b];if(_)var w=wi(l),m=C(d,w);if(e&&(d=Uu(d,e,u,_)),i&&(d=Bu(d,i,o,_)), +y-=m,_&&y<a){return oi(n,t,Qu,l.placeholder,r,d,N(d,w),f,c,a-y)}var x=h?r:this,j=p?x[n]:n;return y=d.length,f?d=Hi(d,f):v&&y>1&&d.reverse(),s&&c<y&&(d.length=c),this&&this!==re&&this instanceof l&&(j=g||Gu(j)),j.apply(x,d)}var s=t&mn,h=t&_n,p=t&vn,_=t&(yn|dn),v=t&jn,g=p?X:Gu(n);return l}function Xu(n,t){return function(r,e){return Oe(r,n,t(e),{})}}function ni(n,t){return function(r,e){var u;if(r===X&&e===X)return t;if(r!==X&&(u=r),e!==X){if(u===X)return e;"string"==typeof r||"string"==typeof e?(r=vu(r), +e=vu(e)):(r=_u(r),e=_u(e)),u=n(r,e)}return u}}function ti(t){return gi(function(r){return r=c(r,z(mi())),uu(function(e){var u=this;return t(r,function(t){return n(t,u,e)})})})}function ri(n,t){t=t===X?" ":vu(t);var r=t.length;if(r<2)return r?eu(t,n):t;var e=eu(t,Fl(n/V(t)));return T(t)?Ou(G(e),0,n).join(""):e.slice(0,n)}function ei(t,r,e,u){function i(){for(var r=-1,c=arguments.length,a=-1,l=u.length,s=il(l+c),h=this&&this!==re&&this instanceof i?f:t;++a<l;)s[a]=u[a];for(;c--;)s[a++]=arguments[++r]; +return n(h,o?e:this,s)}var o=r&_n,f=Gu(t);return i}function ui(n){return function(t,r,e){return e&&"number"!=typeof e&&Ui(t,r,e)&&(r=e=X),t=Ac(t),r===X?(r=t,t=0):r=Ac(r),e=e===X?t<r?1:-1:Ac(e),ru(t,r,e,n)}}function ii(n){return function(t,r){return"string"==typeof t&&"string"==typeof r||(t=Ic(t),r=Ic(r)),n(t,r)}}function oi(n,t,r,e,u,i,o,f,c,a){var l=t&yn,s=l?o:X,h=l?X:o,p=l?i:X,_=l?X:i;t|=l?bn:wn,t&=~(l?wn:bn),t&gn||(t&=~(_n|vn));var v=[n,t,u,p,s,_,h,f,c,a],g=r.apply(X,v);return $i(n)&&Ss(g,v),g.placeholder=e, +Yi(g,n,t)}function fi(n){var t=al[n];return function(n,r){if(n=Ic(n),r=null==r?0:Hl(kc(r),292),r&&Zl(n)){var e=(Ec(n)+"e").split("e");return e=(Ec(t(e[0]+"e"+(+e[1]+r)))+"e").split("e"),+(e[0]+"e"+(+e[1]-r))}return t(n)}}function ci(n){return function(t){var r=zs(t);return r==Gn?M(t):r==tt?q(t):I(t,n(t))}}function ai(n,t,r,e,u,i,o,f){var c=t&vn;if(!c&&"function"!=typeof n)throw new pl(en);var a=e?e.length:0;if(a||(t&=~(bn|wn),e=u=X),o=o===X?o:Gl(kc(o),0),f=f===X?f:kc(f),a-=u?u.length:0,t&wn){var l=e,s=u; +e=u=X}var h=c?X:Os(n),p=[n,t,r,e,u,l,s,i,o,f];if(h&&qi(p,h),n=p[0],t=p[1],r=p[2],e=p[3],u=p[4],f=p[9]=p[9]===X?c?0:n.length:Gl(p[9]-a,0),!f&&t&(yn|dn)&&(t&=~(yn|dn)),t&&t!=_n)_=t==yn||t==dn?Hu(n,t,f):t!=bn&&t!=(_n|bn)||u.length?Qu.apply(X,p):ei(n,t,r,e);else var _=Zu(n,t,r);return Yi((h?ms:Ss)(_,p),n,t)}function li(n,t,r,e){return n===X||Gf(n,gl[r])&&!bl.call(e,r)?t:n}function si(n,t,r,e,u,i){return fc(n)&&fc(t)&&(i.set(t,n),Ke(n,t,X,si,i),i.delete(t)),n}function hi(n){return gc(n)?X:n}function pi(n,t,r,e,u,i){ +var o=r&hn,f=n.length,c=t.length;if(f!=c&&!(o&&c>f))return!1;var a=i.get(n),l=i.get(t);if(a&&l)return a==t&&l==n;var s=-1,p=!0,_=r&pn?new yr:X;for(i.set(n,t),i.set(t,n);++s<f;){var v=n[s],g=t[s];if(e)var y=o?e(g,v,s,t,n,i):e(v,g,s,n,t,i);if(y!==X){if(y)continue;p=!1;break}if(_){if(!h(t,function(n,t){if(!S(_,t)&&(v===n||u(v,n,r,e,i)))return _.push(t)})){p=!1;break}}else if(v!==g&&!u(v,g,r,e,i)){p=!1;break}}return i.delete(n),i.delete(t),p}function _i(n,t,r,e,u,i,o){switch(r){case ct:if(n.byteLength!=t.byteLength||n.byteOffset!=t.byteOffset)return!1; +n=n.buffer,t=t.buffer;case ft:return!(n.byteLength!=t.byteLength||!i(new Rl(n),new Rl(t)));case Nn:case Pn:case Hn:return Gf(+n,+t);case Zn:return n.name==t.name&&n.message==t.message;case nt:case rt:return n==t+"";case Gn:var f=M;case tt:var c=e&hn;if(f||(f=P),n.size!=t.size&&!c)return!1;var a=o.get(n);if(a)return a==t;e|=pn,o.set(n,t);var l=pi(f(n),f(t),e,u,i,o);return o.delete(n),l;case et:if(_s)return _s.call(n)==_s.call(t)}return!1}function vi(n,t,r,e,u,i){var o=r&hn,f=yi(n),c=f.length;if(c!=yi(t).length&&!o)return!1; +for(var a=c;a--;){var l=f[a];if(!(o?l in t:bl.call(t,l)))return!1}var s=i.get(n),h=i.get(t);if(s&&h)return s==t&&h==n;var p=!0;i.set(n,t),i.set(t,n);for(var _=o;++a<c;){l=f[a];var v=n[l],g=t[l];if(e)var y=o?e(g,v,l,t,n,i):e(v,g,l,n,t,i);if(!(y===X?v===g||u(v,g,r,e,i):y)){p=!1;break}_||(_="constructor"==l)}if(p&&!_){var d=n.constructor,b=t.constructor;d!=b&&"constructor"in n&&"constructor"in t&&!("function"==typeof d&&d instanceof d&&"function"==typeof b&&b instanceof b)&&(p=!1)}return i.delete(n), +i.delete(t),p}function gi(n){return Ls(Vi(n,X,_o),n+"")}function yi(n){return de(n,Pc,Is)}function di(n){return de(n,qc,Rs)}function bi(n){for(var t=n.name+"",r=fs[t],e=bl.call(fs,t)?r.length:0;e--;){var u=r[e],i=u.func;if(null==i||i==n)return u.name}return t}function wi(n){return(bl.call(Z,"placeholder")?Z:n).placeholder}function mi(){var n=Z.iteratee||Ca;return n=n===Ca?De:n,arguments.length?n(arguments[0],arguments[1]):n}function xi(n,t){var r=n.__data__;return Ti(t)?r["string"==typeof t?"string":"hash"]:r.map; +}function ji(n){for(var t=Pc(n),r=t.length;r--;){var e=t[r],u=n[e];t[r]=[e,u,Fi(u)]}return t}function Ai(n,t){var r=B(n,t);return Ue(r)?r:X}function ki(n){var t=bl.call(n,Bl),r=n[Bl];try{n[Bl]=X;var e=!0}catch(n){}var u=xl.call(n);return e&&(t?n[Bl]=r:delete n[Bl]),u}function Oi(n,t,r){for(var e=-1,u=r.length;++e<u;){var i=r[e],o=i.size;switch(i.type){case"drop":n+=o;break;case"dropRight":t-=o;break;case"take":t=Hl(t,n+o);break;case"takeRight":n=Gl(n,t-o)}}return{start:n,end:t}}function Ii(n){var t=n.match(Bt); +return t?t[1].split(Tt):[]}function Ri(n,t,r){t=ku(t,n);for(var e=-1,u=t.length,i=!1;++e<u;){var o=no(t[e]);if(!(i=null!=n&&r(n,o)))break;n=n[o]}return i||++e!=u?i:(u=null==n?0:n.length,!!u&&oc(u)&&Ci(o,u)&&(bh(n)||dh(n)))}function zi(n){var t=n.length,r=new n.constructor(t);return t&&"string"==typeof n[0]&&bl.call(n,"index")&&(r.index=n.index,r.input=n.input),r}function Ei(n){return"function"!=typeof n.constructor||Mi(n)?{}:gs(El(n))}function Si(n,t,r){var e=n.constructor;switch(t){case ft:return Ru(n); +case Nn:case Pn:return new e(+n);case ct:return zu(n,r);case at:case lt:case st:case ht:case pt:case _t:case vt:case gt:case yt:return Wu(n,r);case Gn:return new e;case Hn:case rt:return new e(n);case nt:return Eu(n);case tt:return new e;case et:return Su(n)}}function Wi(n,t){var r=t.length;if(!r)return n;var e=r-1;return t[e]=(r>1?"& ":"")+t[e],t=t.join(r>2?", ":" "),n.replace(Ut,"{\n/* [wrapped with "+t+"] */\n")}function Li(n){return bh(n)||dh(n)||!!(Cl&&n&&n[Cl])}function Ci(n,t){var r=typeof n; +return t=null==t?Wn:t,!!t&&("number"==r||"symbol"!=r&&Vt.test(n))&&n>-1&&n%1==0&&n<t}function Ui(n,t,r){if(!fc(r))return!1;var e=typeof t;return!!("number"==e?Hf(r)&&Ci(t,r.length):"string"==e&&t in r)&&Gf(r[t],n)}function Bi(n,t){if(bh(n))return!1;var r=typeof n;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=n&&!bc(n))||(zt.test(n)||!Rt.test(n)||null!=t&&n in ll(t))}function Ti(n){var t=typeof n;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==n:null===n}function $i(n){ +var t=bi(n),r=Z[t];if("function"!=typeof r||!(t in Ct.prototype))return!1;if(n===r)return!0;var e=Os(r);return!!e&&n===e[0]}function Di(n){return!!ml&&ml in n}function Mi(n){var t=n&&n.constructor;return n===("function"==typeof t&&t.prototype||gl)}function Fi(n){return n===n&&!fc(n)}function Ni(n,t){return function(r){return null!=r&&(r[n]===t&&(t!==X||n in ll(r)))}}function Pi(n){var t=Cf(n,function(n){return r.size===fn&&r.clear(),n}),r=t.cache;return t}function qi(n,t){var r=n[1],e=t[1],u=r|e,i=u<(_n|vn|mn),o=e==mn&&r==yn||e==mn&&r==xn&&n[7].length<=t[8]||e==(mn|xn)&&t[7].length<=t[8]&&r==yn; +if(!i&&!o)return n;e&_n&&(n[2]=t[2],u|=r&_n?0:gn);var f=t[3];if(f){var c=n[3];n[3]=c?Uu(c,f,t[4]):f,n[4]=c?N(n[3],cn):t[4]}return f=t[5],f&&(c=n[5],n[5]=c?Bu(c,f,t[6]):f,n[6]=c?N(n[5],cn):t[6]),f=t[7],f&&(n[7]=f),e&mn&&(n[8]=null==n[8]?t[8]:Hl(n[8],t[8])),null==n[9]&&(n[9]=t[9]),n[0]=t[0],n[1]=u,n}function Zi(n){var t=[];if(null!=n)for(var r in ll(n))t.push(r);return t}function Ki(n){return xl.call(n)}function Vi(t,r,e){return r=Gl(r===X?t.length-1:r,0),function(){for(var u=arguments,i=-1,o=Gl(u.length-r,0),f=il(o);++i<o;)f[i]=u[r+i]; +i=-1;for(var c=il(r+1);++i<r;)c[i]=u[i];return c[r]=e(f),n(t,this,c)}}function Gi(n,t){return t.length<2?n:_e(n,au(t,0,-1))}function Hi(n,t){for(var r=n.length,e=Hl(t.length,r),u=Tu(n);e--;){var i=t[e];n[e]=Ci(i,r)?u[i]:X}return n}function Ji(n,t){if(("constructor"!==t||"function"!=typeof n[t])&&"__proto__"!=t)return n[t]}function Yi(n,t,r){var e=t+"";return Ls(n,Wi(e,ro(Ii(e),r)))}function Qi(n){var t=0,r=0;return function(){var e=Jl(),u=In-(e-r);if(r=e,u>0){if(++t>=On)return arguments[0]}else t=0; +return n.apply(X,arguments)}}function Xi(n,t){var r=-1,e=n.length,u=e-1;for(t=t===X?e:t;++r<t;){var i=tu(r,u),o=n[i];n[i]=n[r],n[r]=o}return n.length=t,n}function no(n){if("string"==typeof n||bc(n))return n;var t=n+"";return"0"==t&&1/n==-Sn?"-0":t}function to(n){if(null!=n){try{return dl.call(n)}catch(n){}try{return n+""}catch(n){}}return""}function ro(n,t){return r($n,function(r){var e="_."+r[0];t&r[1]&&!o(n,e)&&n.push(e)}),n.sort()}function eo(n){if(n instanceof Ct)return n.clone();var t=new Y(n.__wrapped__,n.__chain__); +return t.__actions__=Tu(n.__actions__),t.__index__=n.__index__,t.__values__=n.__values__,t}function uo(n,t,r){t=(r?Ui(n,t,r):t===X)?1:Gl(kc(t),0);var e=null==n?0:n.length;if(!e||t<1)return[];for(var u=0,i=0,o=il(Fl(e/t));u<e;)o[i++]=au(n,u,u+=t);return o}function io(n){for(var t=-1,r=null==n?0:n.length,e=0,u=[];++t<r;){var i=n[t];i&&(u[e++]=i)}return u}function oo(){var n=arguments.length;if(!n)return[];for(var t=il(n-1),r=arguments[0],e=n;e--;)t[e-1]=arguments[e];return a(bh(r)?Tu(r):[r],ee(t,1)); +}function fo(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===X?1:kc(t),au(n,t<0?0:t,e)):[]}function co(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===X?1:kc(t),t=e-t,au(n,0,t<0?0:t)):[]}function ao(n,t){return n&&n.length?bu(n,mi(t,3),!0,!0):[]}function lo(n,t){return n&&n.length?bu(n,mi(t,3),!0):[]}function so(n,t,r,e){var u=null==n?0:n.length;return u?(r&&"number"!=typeof r&&Ui(n,t,r)&&(r=0,e=u),ne(n,t,r,e)):[]}function ho(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=null==r?0:kc(r); +return u<0&&(u=Gl(e+u,0)),g(n,mi(t,3),u)}function po(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=e-1;return r!==X&&(u=kc(r),u=r<0?Gl(e+u,0):Hl(u,e-1)),g(n,mi(t,3),u,!0)}function _o(n){return(null==n?0:n.length)?ee(n,1):[]}function vo(n){return(null==n?0:n.length)?ee(n,Sn):[]}function go(n,t){return(null==n?0:n.length)?(t=t===X?1:kc(t),ee(n,t)):[]}function yo(n){for(var t=-1,r=null==n?0:n.length,e={};++t<r;){var u=n[t];e[u[0]]=u[1]}return e}function bo(n){return n&&n.length?n[0]:X}function wo(n,t,r){ +var e=null==n?0:n.length;if(!e)return-1;var u=null==r?0:kc(r);return u<0&&(u=Gl(e+u,0)),y(n,t,u)}function mo(n){return(null==n?0:n.length)?au(n,0,-1):[]}function xo(n,t){return null==n?"":Kl.call(n,t)}function jo(n){var t=null==n?0:n.length;return t?n[t-1]:X}function Ao(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=e;return r!==X&&(u=kc(r),u=u<0?Gl(e+u,0):Hl(u,e-1)),t===t?K(n,t,u):g(n,b,u,!0)}function ko(n,t){return n&&n.length?Ge(n,kc(t)):X}function Oo(n,t){return n&&n.length&&t&&t.length?Xe(n,t):n; +}function Io(n,t,r){return n&&n.length&&t&&t.length?Xe(n,t,mi(r,2)):n}function Ro(n,t,r){return n&&n.length&&t&&t.length?Xe(n,t,X,r):n}function zo(n,t){var r=[];if(!n||!n.length)return r;var e=-1,u=[],i=n.length;for(t=mi(t,3);++e<i;){var o=n[e];t(o,e,n)&&(r.push(o),u.push(e))}return nu(n,u),r}function Eo(n){return null==n?n:Xl.call(n)}function So(n,t,r){var e=null==n?0:n.length;return e?(r&&"number"!=typeof r&&Ui(n,t,r)?(t=0,r=e):(t=null==t?0:kc(t),r=r===X?e:kc(r)),au(n,t,r)):[]}function Wo(n,t){ +return su(n,t)}function Lo(n,t,r){return hu(n,t,mi(r,2))}function Co(n,t){var r=null==n?0:n.length;if(r){var e=su(n,t);if(e<r&&Gf(n[e],t))return e}return-1}function Uo(n,t){return su(n,t,!0)}function Bo(n,t,r){return hu(n,t,mi(r,2),!0)}function To(n,t){if(null==n?0:n.length){var r=su(n,t,!0)-1;if(Gf(n[r],t))return r}return-1}function $o(n){return n&&n.length?pu(n):[]}function Do(n,t){return n&&n.length?pu(n,mi(t,2)):[]}function Mo(n){var t=null==n?0:n.length;return t?au(n,1,t):[]}function Fo(n,t,r){ +return n&&n.length?(t=r||t===X?1:kc(t),au(n,0,t<0?0:t)):[]}function No(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===X?1:kc(t),t=e-t,au(n,t<0?0:t,e)):[]}function Po(n,t){return n&&n.length?bu(n,mi(t,3),!1,!0):[]}function qo(n,t){return n&&n.length?bu(n,mi(t,3)):[]}function Zo(n){return n&&n.length?gu(n):[]}function Ko(n,t){return n&&n.length?gu(n,mi(t,2)):[]}function Vo(n,t){return t="function"==typeof t?t:X,n&&n.length?gu(n,X,t):[]}function Go(n){if(!n||!n.length)return[];var t=0;return n=i(n,function(n){ +if(Jf(n))return t=Gl(n.length,t),!0}),O(t,function(t){return c(n,m(t))})}function Ho(t,r){if(!t||!t.length)return[];var e=Go(t);return null==r?e:c(e,function(t){return n(r,X,t)})}function Jo(n,t){return xu(n||[],t||[],Sr)}function Yo(n,t){return xu(n||[],t||[],fu)}function Qo(n){var t=Z(n);return t.__chain__=!0,t}function Xo(n,t){return t(n),n}function nf(n,t){return t(n)}function tf(){return Qo(this)}function rf(){return new Y(this.value(),this.__chain__)}function ef(){this.__values__===X&&(this.__values__=jc(this.value())); +var n=this.__index__>=this.__values__.length;return{done:n,value:n?X:this.__values__[this.__index__++]}}function uf(){return this}function of(n){for(var t,r=this;r instanceof J;){var e=eo(r);e.__index__=0,e.__values__=X,t?u.__wrapped__=e:t=e;var u=e;r=r.__wrapped__}return u.__wrapped__=n,t}function ff(){var n=this.__wrapped__;if(n instanceof Ct){var t=n;return this.__actions__.length&&(t=new Ct(this)),t=t.reverse(),t.__actions__.push({func:nf,args:[Eo],thisArg:X}),new Y(t,this.__chain__)}return this.thru(Eo); +}function cf(){return wu(this.__wrapped__,this.__actions__)}function af(n,t,r){var e=bh(n)?u:Jr;return r&&Ui(n,t,r)&&(t=X),e(n,mi(t,3))}function lf(n,t){return(bh(n)?i:te)(n,mi(t,3))}function sf(n,t){return ee(yf(n,t),1)}function hf(n,t){return ee(yf(n,t),Sn)}function pf(n,t,r){return r=r===X?1:kc(r),ee(yf(n,t),r)}function _f(n,t){return(bh(n)?r:ys)(n,mi(t,3))}function vf(n,t){return(bh(n)?e:ds)(n,mi(t,3))}function gf(n,t,r,e){n=Hf(n)?n:ra(n),r=r&&!e?kc(r):0;var u=n.length;return r<0&&(r=Gl(u+r,0)), +dc(n)?r<=u&&n.indexOf(t,r)>-1:!!u&&y(n,t,r)>-1}function yf(n,t){return(bh(n)?c:Pe)(n,mi(t,3))}function df(n,t,r,e){return null==n?[]:(bh(t)||(t=null==t?[]:[t]),r=e?X:r,bh(r)||(r=null==r?[]:[r]),He(n,t,r))}function bf(n,t,r){var e=bh(n)?l:j,u=arguments.length<3;return e(n,mi(t,4),r,u,ys)}function wf(n,t,r){var e=bh(n)?s:j,u=arguments.length<3;return e(n,mi(t,4),r,u,ds)}function mf(n,t){return(bh(n)?i:te)(n,Uf(mi(t,3)))}function xf(n){return(bh(n)?Ir:iu)(n)}function jf(n,t,r){return t=(r?Ui(n,t,r):t===X)?1:kc(t), +(bh(n)?Rr:ou)(n,t)}function Af(n){return(bh(n)?zr:cu)(n)}function kf(n){if(null==n)return 0;if(Hf(n))return dc(n)?V(n):n.length;var t=zs(n);return t==Gn||t==tt?n.size:Me(n).length}function Of(n,t,r){var e=bh(n)?h:lu;return r&&Ui(n,t,r)&&(t=X),e(n,mi(t,3))}function If(n,t){if("function"!=typeof t)throw new pl(en);return n=kc(n),function(){if(--n<1)return t.apply(this,arguments)}}function Rf(n,t,r){return t=r?X:t,t=n&&null==t?n.length:t,ai(n,mn,X,X,X,X,t)}function zf(n,t){var r;if("function"!=typeof t)throw new pl(en); +return n=kc(n),function(){return--n>0&&(r=t.apply(this,arguments)),n<=1&&(t=X),r}}function Ef(n,t,r){t=r?X:t;var e=ai(n,yn,X,X,X,X,X,t);return e.placeholder=Ef.placeholder,e}function Sf(n,t,r){t=r?X:t;var e=ai(n,dn,X,X,X,X,X,t);return e.placeholder=Sf.placeholder,e}function Wf(n,t,r){function e(t){var r=h,e=p;return h=p=X,d=t,v=n.apply(e,r)}function u(n){return d=n,g=Ws(f,t),b?e(n):v}function i(n){var r=n-y,e=n-d,u=t-r;return w?Hl(u,_-e):u}function o(n){var r=n-y,e=n-d;return y===X||r>=t||r<0||w&&e>=_; +}function f(){var n=fh();return o(n)?c(n):(g=Ws(f,i(n)),X)}function c(n){return g=X,m&&h?e(n):(h=p=X,v)}function a(){g!==X&&As(g),d=0,h=y=p=g=X}function l(){return g===X?v:c(fh())}function s(){var n=fh(),r=o(n);if(h=arguments,p=this,y=n,r){if(g===X)return u(y);if(w)return As(g),g=Ws(f,t),e(y)}return g===X&&(g=Ws(f,t)),v}var h,p,_,v,g,y,d=0,b=!1,w=!1,m=!0;if("function"!=typeof n)throw new pl(en);return t=Ic(t)||0,fc(r)&&(b=!!r.leading,w="maxWait"in r,_=w?Gl(Ic(r.maxWait)||0,t):_,m="trailing"in r?!!r.trailing:m), +s.cancel=a,s.flush=l,s}function Lf(n){return ai(n,jn)}function Cf(n,t){if("function"!=typeof n||null!=t&&"function"!=typeof t)throw new pl(en);var r=function(){var e=arguments,u=t?t.apply(this,e):e[0],i=r.cache;if(i.has(u))return i.get(u);var o=n.apply(this,e);return r.cache=i.set(u,o)||i,o};return r.cache=new(Cf.Cache||sr),r}function Uf(n){if("function"!=typeof n)throw new pl(en);return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2: +return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}function Bf(n){return zf(2,n)}function Tf(n,t){if("function"!=typeof n)throw new pl(en);return t=t===X?t:kc(t),uu(n,t)}function $f(t,r){if("function"!=typeof t)throw new pl(en);return r=null==r?0:Gl(kc(r),0),uu(function(e){var u=e[r],i=Ou(e,0,r);return u&&a(i,u),n(t,this,i)})}function Df(n,t,r){var e=!0,u=!0;if("function"!=typeof n)throw new pl(en);return fc(r)&&(e="leading"in r?!!r.leading:e,u="trailing"in r?!!r.trailing:u), +Wf(n,t,{leading:e,maxWait:t,trailing:u})}function Mf(n){return Rf(n,1)}function Ff(n,t){return ph(Au(t),n)}function Nf(){if(!arguments.length)return[];var n=arguments[0];return bh(n)?n:[n]}function Pf(n){return Fr(n,sn)}function qf(n,t){return t="function"==typeof t?t:X,Fr(n,sn,t)}function Zf(n){return Fr(n,an|sn)}function Kf(n,t){return t="function"==typeof t?t:X,Fr(n,an|sn,t)}function Vf(n,t){return null==t||Pr(n,t,Pc(t))}function Gf(n,t){return n===t||n!==n&&t!==t}function Hf(n){return null!=n&&oc(n.length)&&!uc(n); +}function Jf(n){return cc(n)&&Hf(n)}function Yf(n){return n===!0||n===!1||cc(n)&&we(n)==Nn}function Qf(n){return cc(n)&&1===n.nodeType&&!gc(n)}function Xf(n){if(null==n)return!0;if(Hf(n)&&(bh(n)||"string"==typeof n||"function"==typeof n.splice||mh(n)||Oh(n)||dh(n)))return!n.length;var t=zs(n);if(t==Gn||t==tt)return!n.size;if(Mi(n))return!Me(n).length;for(var r in n)if(bl.call(n,r))return!1;return!0}function nc(n,t){return Se(n,t)}function tc(n,t,r){r="function"==typeof r?r:X;var e=r?r(n,t):X;return e===X?Se(n,t,X,r):!!e; +}function rc(n){if(!cc(n))return!1;var t=we(n);return t==Zn||t==qn||"string"==typeof n.message&&"string"==typeof n.name&&!gc(n)}function ec(n){return"number"==typeof n&&Zl(n)}function uc(n){if(!fc(n))return!1;var t=we(n);return t==Kn||t==Vn||t==Fn||t==Xn}function ic(n){return"number"==typeof n&&n==kc(n)}function oc(n){return"number"==typeof n&&n>-1&&n%1==0&&n<=Wn}function fc(n){var t=typeof n;return null!=n&&("object"==t||"function"==t)}function cc(n){return null!=n&&"object"==typeof n}function ac(n,t){ +return n===t||Ce(n,t,ji(t))}function lc(n,t,r){return r="function"==typeof r?r:X,Ce(n,t,ji(t),r)}function sc(n){return vc(n)&&n!=+n}function hc(n){if(Es(n))throw new fl(rn);return Ue(n)}function pc(n){return null===n}function _c(n){return null==n}function vc(n){return"number"==typeof n||cc(n)&&we(n)==Hn}function gc(n){if(!cc(n)||we(n)!=Yn)return!1;var t=El(n);if(null===t)return!0;var r=bl.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&dl.call(r)==jl}function yc(n){ +return ic(n)&&n>=-Wn&&n<=Wn}function dc(n){return"string"==typeof n||!bh(n)&&cc(n)&&we(n)==rt}function bc(n){return"symbol"==typeof n||cc(n)&&we(n)==et}function wc(n){return n===X}function mc(n){return cc(n)&&zs(n)==it}function xc(n){return cc(n)&&we(n)==ot}function jc(n){if(!n)return[];if(Hf(n))return dc(n)?G(n):Tu(n);if(Ul&&n[Ul])return D(n[Ul]());var t=zs(n);return(t==Gn?M:t==tt?P:ra)(n)}function Ac(n){if(!n)return 0===n?n:0;if(n=Ic(n),n===Sn||n===-Sn){return(n<0?-1:1)*Ln}return n===n?n:0}function kc(n){ +var t=Ac(n),r=t%1;return t===t?r?t-r:t:0}function Oc(n){return n?Mr(kc(n),0,Un):0}function Ic(n){if("number"==typeof n)return n;if(bc(n))return Cn;if(fc(n)){var t="function"==typeof n.valueOf?n.valueOf():n;n=fc(t)?t+"":t}if("string"!=typeof n)return 0===n?n:+n;n=R(n);var r=qt.test(n);return r||Kt.test(n)?Xr(n.slice(2),r?2:8):Pt.test(n)?Cn:+n}function Rc(n){return $u(n,qc(n))}function zc(n){return n?Mr(kc(n),-Wn,Wn):0===n?n:0}function Ec(n){return null==n?"":vu(n)}function Sc(n,t){var r=gs(n);return null==t?r:Cr(r,t); +}function Wc(n,t){return v(n,mi(t,3),ue)}function Lc(n,t){return v(n,mi(t,3),oe)}function Cc(n,t){return null==n?n:bs(n,mi(t,3),qc)}function Uc(n,t){return null==n?n:ws(n,mi(t,3),qc)}function Bc(n,t){return n&&ue(n,mi(t,3))}function Tc(n,t){return n&&oe(n,mi(t,3))}function $c(n){return null==n?[]:fe(n,Pc(n))}function Dc(n){return null==n?[]:fe(n,qc(n))}function Mc(n,t,r){var e=null==n?X:_e(n,t);return e===X?r:e}function Fc(n,t){return null!=n&&Ri(n,t,xe)}function Nc(n,t){return null!=n&&Ri(n,t,je); +}function Pc(n){return Hf(n)?Or(n):Me(n)}function qc(n){return Hf(n)?Or(n,!0):Fe(n)}function Zc(n,t){var r={};return t=mi(t,3),ue(n,function(n,e,u){Br(r,t(n,e,u),n)}),r}function Kc(n,t){var r={};return t=mi(t,3),ue(n,function(n,e,u){Br(r,e,t(n,e,u))}),r}function Vc(n,t){return Gc(n,Uf(mi(t)))}function Gc(n,t){if(null==n)return{};var r=c(di(n),function(n){return[n]});return t=mi(t),Ye(n,r,function(n,r){return t(n,r[0])})}function Hc(n,t,r){t=ku(t,n);var e=-1,u=t.length;for(u||(u=1,n=X);++e<u;){var i=null==n?X:n[no(t[e])]; +i===X&&(e=u,i=r),n=uc(i)?i.call(n):i}return n}function Jc(n,t,r){return null==n?n:fu(n,t,r)}function Yc(n,t,r,e){return e="function"==typeof e?e:X,null==n?n:fu(n,t,r,e)}function Qc(n,t,e){var u=bh(n),i=u||mh(n)||Oh(n);if(t=mi(t,4),null==e){var o=n&&n.constructor;e=i?u?new o:[]:fc(n)&&uc(o)?gs(El(n)):{}}return(i?r:ue)(n,function(n,r,u){return t(e,n,r,u)}),e}function Xc(n,t){return null==n||yu(n,t)}function na(n,t,r){return null==n?n:du(n,t,Au(r))}function ta(n,t,r,e){return e="function"==typeof e?e:X, +null==n?n:du(n,t,Au(r),e)}function ra(n){return null==n?[]:E(n,Pc(n))}function ea(n){return null==n?[]:E(n,qc(n))}function ua(n,t,r){return r===X&&(r=t,t=X),r!==X&&(r=Ic(r),r=r===r?r:0),t!==X&&(t=Ic(t),t=t===t?t:0),Mr(Ic(n),t,r)}function ia(n,t,r){return t=Ac(t),r===X?(r=t,t=0):r=Ac(r),n=Ic(n),Ae(n,t,r)}function oa(n,t,r){if(r&&"boolean"!=typeof r&&Ui(n,t,r)&&(t=r=X),r===X&&("boolean"==typeof t?(r=t,t=X):"boolean"==typeof n&&(r=n,n=X)),n===X&&t===X?(n=0,t=1):(n=Ac(n),t===X?(t=n,n=0):t=Ac(t)),n>t){ +var e=n;n=t,t=e}if(r||n%1||t%1){var u=Ql();return Hl(n+u*(t-n+Qr("1e-"+((u+"").length-1))),t)}return tu(n,t)}function fa(n){return Qh(Ec(n).toLowerCase())}function ca(n){return n=Ec(n),n&&n.replace(Gt,ve).replace(Dr,"")}function aa(n,t,r){n=Ec(n),t=vu(t);var e=n.length;r=r===X?e:Mr(kc(r),0,e);var u=r;return r-=t.length,r>=0&&n.slice(r,u)==t}function la(n){return n=Ec(n),n&&At.test(n)?n.replace(xt,ge):n}function sa(n){return n=Ec(n),n&&Wt.test(n)?n.replace(St,"\\$&"):n}function ha(n,t,r){n=Ec(n),t=kc(t); +var e=t?V(n):0;if(!t||e>=t)return n;var u=(t-e)/2;return ri(Nl(u),r)+n+ri(Fl(u),r)}function pa(n,t,r){n=Ec(n),t=kc(t);var e=t?V(n):0;return t&&e<t?n+ri(t-e,r):n}function _a(n,t,r){n=Ec(n),t=kc(t);var e=t?V(n):0;return t&&e<t?ri(t-e,r)+n:n}function va(n,t,r){return r||null==t?t=0:t&&(t=+t),Yl(Ec(n).replace(Lt,""),t||0)}function ga(n,t,r){return t=(r?Ui(n,t,r):t===X)?1:kc(t),eu(Ec(n),t)}function ya(){var n=arguments,t=Ec(n[0]);return n.length<3?t:t.replace(n[1],n[2])}function da(n,t,r){return r&&"number"!=typeof r&&Ui(n,t,r)&&(t=r=X), +(r=r===X?Un:r>>>0)?(n=Ec(n),n&&("string"==typeof t||null!=t&&!Ah(t))&&(t=vu(t),!t&&T(n))?Ou(G(n),0,r):n.split(t,r)):[]}function ba(n,t,r){return n=Ec(n),r=null==r?0:Mr(kc(r),0,n.length),t=vu(t),n.slice(r,r+t.length)==t}function wa(n,t,r){var e=Z.templateSettings;r&&Ui(n,t,r)&&(t=X),n=Ec(n),t=Sh({},t,e,li);var u,i,o=Sh({},t.imports,e.imports,li),f=Pc(o),c=E(o,f),a=0,l=t.interpolate||Ht,s="__p += '",h=sl((t.escape||Ht).source+"|"+l.source+"|"+(l===It?Ft:Ht).source+"|"+(t.evaluate||Ht).source+"|$","g"),p="//# sourceURL="+(bl.call(t,"sourceURL")?(t.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++Zr+"]")+"\n"; +n.replace(h,function(t,r,e,o,f,c){return e||(e=o),s+=n.slice(a,c).replace(Jt,U),r&&(u=!0,s+="' +\n__e("+r+") +\n'"),f&&(i=!0,s+="';\n"+f+";\n__p += '"),e&&(s+="' +\n((__t = ("+e+")) == null ? '' : __t) +\n'"),a=c+t.length,t}),s+="';\n";var _=bl.call(t,"variable")&&t.variable;if(_){if(Dt.test(_))throw new fl(un)}else s="with (obj) {\n"+s+"\n}\n";s=(i?s.replace(dt,""):s).replace(bt,"$1").replace(wt,"$1;"),s="function("+(_||"obj")+") {\n"+(_?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(u?", __e = _.escape":"")+(i?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+s+"return __p\n}"; +var v=Xh(function(){return cl(f,p+"return "+s).apply(X,c)});if(v.source=s,rc(v))throw v;return v}function ma(n){return Ec(n).toLowerCase()}function xa(n){return Ec(n).toUpperCase()}function ja(n,t,r){if(n=Ec(n),n&&(r||t===X))return R(n);if(!n||!(t=vu(t)))return n;var e=G(n),u=G(t);return Ou(e,W(e,u),L(e,u)+1).join("")}function Aa(n,t,r){if(n=Ec(n),n&&(r||t===X))return n.slice(0,H(n)+1);if(!n||!(t=vu(t)))return n;var e=G(n);return Ou(e,0,L(e,G(t))+1).join("")}function ka(n,t,r){if(n=Ec(n),n&&(r||t===X))return n.replace(Lt,""); +if(!n||!(t=vu(t)))return n;var e=G(n);return Ou(e,W(e,G(t))).join("")}function Oa(n,t){var r=An,e=kn;if(fc(t)){var u="separator"in t?t.separator:u;r="length"in t?kc(t.length):r,e="omission"in t?vu(t.omission):e}n=Ec(n);var i=n.length;if(T(n)){var o=G(n);i=o.length}if(r>=i)return n;var f=r-V(e);if(f<1)return e;var c=o?Ou(o,0,f).join(""):n.slice(0,f);if(u===X)return c+e;if(o&&(f+=c.length-f),Ah(u)){if(n.slice(f).search(u)){var a,l=c;for(u.global||(u=sl(u.source,Ec(Nt.exec(u))+"g")),u.lastIndex=0;a=u.exec(l);)var s=a.index; +c=c.slice(0,s===X?f:s)}}else if(n.indexOf(vu(u),f)!=f){var h=c.lastIndexOf(u);h>-1&&(c=c.slice(0,h))}return c+e}function Ia(n){return n=Ec(n),n&&jt.test(n)?n.replace(mt,ye):n}function Ra(n,t,r){return n=Ec(n),t=r?X:t,t===X?$(n)?Q(n):_(n):n.match(t)||[]}function za(t){var r=null==t?0:t.length,e=mi();return t=r?c(t,function(n){if("function"!=typeof n[1])throw new pl(en);return[e(n[0]),n[1]]}):[],uu(function(e){for(var u=-1;++u<r;){var i=t[u];if(n(i[0],this,e))return n(i[1],this,e)}})}function Ea(n){ +return Nr(Fr(n,an))}function Sa(n){return function(){return n}}function Wa(n,t){return null==n||n!==n?t:n}function La(n){return n}function Ca(n){return De("function"==typeof n?n:Fr(n,an))}function Ua(n){return qe(Fr(n,an))}function Ba(n,t){return Ze(n,Fr(t,an))}function Ta(n,t,e){var u=Pc(t),i=fe(t,u);null!=e||fc(t)&&(i.length||!u.length)||(e=t,t=n,n=this,i=fe(t,Pc(t)));var o=!(fc(e)&&"chain"in e&&!e.chain),f=uc(n);return r(i,function(r){var e=t[r];n[r]=e,f&&(n.prototype[r]=function(){var t=this.__chain__; +if(o||t){var r=n(this.__wrapped__);return(r.__actions__=Tu(this.__actions__)).push({func:e,args:arguments,thisArg:n}),r.__chain__=t,r}return e.apply(n,a([this.value()],arguments))})}),n}function $a(){return re._===this&&(re._=Al),this}function Da(){}function Ma(n){return n=kc(n),uu(function(t){return Ge(t,n)})}function Fa(n){return Bi(n)?m(no(n)):Qe(n)}function Na(n){return function(t){return null==n?X:_e(n,t)}}function Pa(){return[]}function qa(){return!1}function Za(){return{}}function Ka(){return""; +}function Va(){return!0}function Ga(n,t){if(n=kc(n),n<1||n>Wn)return[];var r=Un,e=Hl(n,Un);t=mi(t),n-=Un;for(var u=O(e,t);++r<n;)t(r);return u}function Ha(n){return bh(n)?c(n,no):bc(n)?[n]:Tu(Cs(Ec(n)))}function Ja(n){var t=++wl;return Ec(n)+t}function Ya(n){return n&&n.length?Yr(n,La,me):X}function Qa(n,t){return n&&n.length?Yr(n,mi(t,2),me):X}function Xa(n){return w(n,La)}function nl(n,t){return w(n,mi(t,2))}function tl(n){return n&&n.length?Yr(n,La,Ne):X}function rl(n,t){return n&&n.length?Yr(n,mi(t,2),Ne):X; +}function el(n){return n&&n.length?k(n,La):0}function ul(n,t){return n&&n.length?k(n,mi(t,2)):0}x=null==x?re:be.defaults(re.Object(),x,be.pick(re,qr));var il=x.Array,ol=x.Date,fl=x.Error,cl=x.Function,al=x.Math,ll=x.Object,sl=x.RegExp,hl=x.String,pl=x.TypeError,_l=il.prototype,vl=cl.prototype,gl=ll.prototype,yl=x["__core-js_shared__"],dl=vl.toString,bl=gl.hasOwnProperty,wl=0,ml=function(){var n=/[^.]+$/.exec(yl&&yl.keys&&yl.keys.IE_PROTO||"");return n?"Symbol(src)_1."+n:""}(),xl=gl.toString,jl=dl.call(ll),Al=re._,kl=sl("^"+dl.call(bl).replace(St,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ol=ie?x.Buffer:X,Il=x.Symbol,Rl=x.Uint8Array,zl=Ol?Ol.allocUnsafe:X,El=F(ll.getPrototypeOf,ll),Sl=ll.create,Wl=gl.propertyIsEnumerable,Ll=_l.splice,Cl=Il?Il.isConcatSpreadable:X,Ul=Il?Il.iterator:X,Bl=Il?Il.toStringTag:X,Tl=function(){ +try{var n=Ai(ll,"defineProperty");return n({},"",{}),n}catch(n){}}(),$l=x.clearTimeout!==re.clearTimeout&&x.clearTimeout,Dl=ol&&ol.now!==re.Date.now&&ol.now,Ml=x.setTimeout!==re.setTimeout&&x.setTimeout,Fl=al.ceil,Nl=al.floor,Pl=ll.getOwnPropertySymbols,ql=Ol?Ol.isBuffer:X,Zl=x.isFinite,Kl=_l.join,Vl=F(ll.keys,ll),Gl=al.max,Hl=al.min,Jl=ol.now,Yl=x.parseInt,Ql=al.random,Xl=_l.reverse,ns=Ai(x,"DataView"),ts=Ai(x,"Map"),rs=Ai(x,"Promise"),es=Ai(x,"Set"),us=Ai(x,"WeakMap"),is=Ai(ll,"create"),os=us&&new us,fs={},cs=to(ns),as=to(ts),ls=to(rs),ss=to(es),hs=to(us),ps=Il?Il.prototype:X,_s=ps?ps.valueOf:X,vs=ps?ps.toString:X,gs=function(){ +function n(){}return function(t){if(!fc(t))return{};if(Sl)return Sl(t);n.prototype=t;var r=new n;return n.prototype=X,r}}();Z.templateSettings={escape:kt,evaluate:Ot,interpolate:It,variable:"",imports:{_:Z}},Z.prototype=J.prototype,Z.prototype.constructor=Z,Y.prototype=gs(J.prototype),Y.prototype.constructor=Y,Ct.prototype=gs(J.prototype),Ct.prototype.constructor=Ct,Xt.prototype.clear=nr,Xt.prototype.delete=tr,Xt.prototype.get=rr,Xt.prototype.has=er,Xt.prototype.set=ur,ir.prototype.clear=or,ir.prototype.delete=fr, +ir.prototype.get=cr,ir.prototype.has=ar,ir.prototype.set=lr,sr.prototype.clear=hr,sr.prototype.delete=pr,sr.prototype.get=_r,sr.prototype.has=vr,sr.prototype.set=gr,yr.prototype.add=yr.prototype.push=dr,yr.prototype.has=br,wr.prototype.clear=mr,wr.prototype.delete=xr,wr.prototype.get=jr,wr.prototype.has=Ar,wr.prototype.set=kr;var ys=Pu(ue),ds=Pu(oe,!0),bs=qu(),ws=qu(!0),ms=os?function(n,t){return os.set(n,t),n}:La,xs=Tl?function(n,t){return Tl(n,"toString",{configurable:!0,enumerable:!1,value:Sa(t), +writable:!0})}:La,js=uu,As=$l||function(n){return re.clearTimeout(n)},ks=es&&1/P(new es([,-0]))[1]==Sn?function(n){return new es(n)}:Da,Os=os?function(n){return os.get(n)}:Da,Is=Pl?function(n){return null==n?[]:(n=ll(n),i(Pl(n),function(t){return Wl.call(n,t)}))}:Pa,Rs=Pl?function(n){for(var t=[];n;)a(t,Is(n)),n=El(n);return t}:Pa,zs=we;(ns&&zs(new ns(new ArrayBuffer(1)))!=ct||ts&&zs(new ts)!=Gn||rs&&zs(rs.resolve())!=Qn||es&&zs(new es)!=tt||us&&zs(new us)!=it)&&(zs=function(n){var t=we(n),r=t==Yn?n.constructor:X,e=r?to(r):""; +if(e)switch(e){case cs:return ct;case as:return Gn;case ls:return Qn;case ss:return tt;case hs:return it}return t});var Es=yl?uc:qa,Ss=Qi(ms),Ws=Ml||function(n,t){return re.setTimeout(n,t)},Ls=Qi(xs),Cs=Pi(function(n){var t=[];return 46===n.charCodeAt(0)&&t.push(""),n.replace(Et,function(n,r,e,u){t.push(e?u.replace(Mt,"$1"):r||n)}),t}),Us=uu(function(n,t){return Jf(n)?Hr(n,ee(t,1,Jf,!0)):[]}),Bs=uu(function(n,t){var r=jo(t);return Jf(r)&&(r=X),Jf(n)?Hr(n,ee(t,1,Jf,!0),mi(r,2)):[]}),Ts=uu(function(n,t){ +var r=jo(t);return Jf(r)&&(r=X),Jf(n)?Hr(n,ee(t,1,Jf,!0),X,r):[]}),$s=uu(function(n){var t=c(n,ju);return t.length&&t[0]===n[0]?ke(t):[]}),Ds=uu(function(n){var t=jo(n),r=c(n,ju);return t===jo(r)?t=X:r.pop(),r.length&&r[0]===n[0]?ke(r,mi(t,2)):[]}),Ms=uu(function(n){var t=jo(n),r=c(n,ju);return t="function"==typeof t?t:X,t&&r.pop(),r.length&&r[0]===n[0]?ke(r,X,t):[]}),Fs=uu(Oo),Ns=gi(function(n,t){var r=null==n?0:n.length,e=Tr(n,t);return nu(n,c(t,function(n){return Ci(n,r)?+n:n}).sort(Lu)),e}),Ps=uu(function(n){ +return gu(ee(n,1,Jf,!0))}),qs=uu(function(n){var t=jo(n);return Jf(t)&&(t=X),gu(ee(n,1,Jf,!0),mi(t,2))}),Zs=uu(function(n){var t=jo(n);return t="function"==typeof t?t:X,gu(ee(n,1,Jf,!0),X,t)}),Ks=uu(function(n,t){return Jf(n)?Hr(n,t):[]}),Vs=uu(function(n){return mu(i(n,Jf))}),Gs=uu(function(n){var t=jo(n);return Jf(t)&&(t=X),mu(i(n,Jf),mi(t,2))}),Hs=uu(function(n){var t=jo(n);return t="function"==typeof t?t:X,mu(i(n,Jf),X,t)}),Js=uu(Go),Ys=uu(function(n){var t=n.length,r=t>1?n[t-1]:X;return r="function"==typeof r?(n.pop(), +r):X,Ho(n,r)}),Qs=gi(function(n){var t=n.length,r=t?n[0]:0,e=this.__wrapped__,u=function(t){return Tr(t,n)};return!(t>1||this.__actions__.length)&&e instanceof Ct&&Ci(r)?(e=e.slice(r,+r+(t?1:0)),e.__actions__.push({func:nf,args:[u],thisArg:X}),new Y(e,this.__chain__).thru(function(n){return t&&!n.length&&n.push(X),n})):this.thru(u)}),Xs=Fu(function(n,t,r){bl.call(n,r)?++n[r]:Br(n,r,1)}),nh=Ju(ho),th=Ju(po),rh=Fu(function(n,t,r){bl.call(n,r)?n[r].push(t):Br(n,r,[t])}),eh=uu(function(t,r,e){var u=-1,i="function"==typeof r,o=Hf(t)?il(t.length):[]; +return ys(t,function(t){o[++u]=i?n(r,t,e):Ie(t,r,e)}),o}),uh=Fu(function(n,t,r){Br(n,r,t)}),ih=Fu(function(n,t,r){n[r?0:1].push(t)},function(){return[[],[]]}),oh=uu(function(n,t){if(null==n)return[];var r=t.length;return r>1&&Ui(n,t[0],t[1])?t=[]:r>2&&Ui(t[0],t[1],t[2])&&(t=[t[0]]),He(n,ee(t,1),[])}),fh=Dl||function(){return re.Date.now()},ch=uu(function(n,t,r){var e=_n;if(r.length){var u=N(r,wi(ch));e|=bn}return ai(n,e,t,r,u)}),ah=uu(function(n,t,r){var e=_n|vn;if(r.length){var u=N(r,wi(ah));e|=bn; +}return ai(t,e,n,r,u)}),lh=uu(function(n,t){return Gr(n,1,t)}),sh=uu(function(n,t,r){return Gr(n,Ic(t)||0,r)});Cf.Cache=sr;var hh=js(function(t,r){r=1==r.length&&bh(r[0])?c(r[0],z(mi())):c(ee(r,1),z(mi()));var e=r.length;return uu(function(u){for(var i=-1,o=Hl(u.length,e);++i<o;)u[i]=r[i].call(this,u[i]);return n(t,this,u)})}),ph=uu(function(n,t){return ai(n,bn,X,t,N(t,wi(ph)))}),_h=uu(function(n,t){return ai(n,wn,X,t,N(t,wi(_h)))}),vh=gi(function(n,t){return ai(n,xn,X,X,X,t)}),gh=ii(me),yh=ii(function(n,t){ +return n>=t}),dh=Re(function(){return arguments}())?Re:function(n){return cc(n)&&bl.call(n,"callee")&&!Wl.call(n,"callee")},bh=il.isArray,wh=ce?z(ce):ze,mh=ql||qa,xh=ae?z(ae):Ee,jh=le?z(le):Le,Ah=se?z(se):Be,kh=he?z(he):Te,Oh=pe?z(pe):$e,Ih=ii(Ne),Rh=ii(function(n,t){return n<=t}),zh=Nu(function(n,t){if(Mi(t)||Hf(t))return $u(t,Pc(t),n),X;for(var r in t)bl.call(t,r)&&Sr(n,r,t[r])}),Eh=Nu(function(n,t){$u(t,qc(t),n)}),Sh=Nu(function(n,t,r,e){$u(t,qc(t),n,e)}),Wh=Nu(function(n,t,r,e){$u(t,Pc(t),n,e); +}),Lh=gi(Tr),Ch=uu(function(n,t){n=ll(n);var r=-1,e=t.length,u=e>2?t[2]:X;for(u&&Ui(t[0],t[1],u)&&(e=1);++r<e;)for(var i=t[r],o=qc(i),f=-1,c=o.length;++f<c;){var a=o[f],l=n[a];(l===X||Gf(l,gl[a])&&!bl.call(n,a))&&(n[a]=i[a])}return n}),Uh=uu(function(t){return t.push(X,si),n(Mh,X,t)}),Bh=Xu(function(n,t,r){null!=t&&"function"!=typeof t.toString&&(t=xl.call(t)),n[t]=r},Sa(La)),Th=Xu(function(n,t,r){null!=t&&"function"!=typeof t.toString&&(t=xl.call(t)),bl.call(n,t)?n[t].push(r):n[t]=[r]},mi),$h=uu(Ie),Dh=Nu(function(n,t,r){ +Ke(n,t,r)}),Mh=Nu(function(n,t,r,e){Ke(n,t,r,e)}),Fh=gi(function(n,t){var r={};if(null==n)return r;var e=!1;t=c(t,function(t){return t=ku(t,n),e||(e=t.length>1),t}),$u(n,di(n),r),e&&(r=Fr(r,an|ln|sn,hi));for(var u=t.length;u--;)yu(r,t[u]);return r}),Nh=gi(function(n,t){return null==n?{}:Je(n,t)}),Ph=ci(Pc),qh=ci(qc),Zh=Vu(function(n,t,r){return t=t.toLowerCase(),n+(r?fa(t):t)}),Kh=Vu(function(n,t,r){return n+(r?"-":"")+t.toLowerCase()}),Vh=Vu(function(n,t,r){return n+(r?" ":"")+t.toLowerCase()}),Gh=Ku("toLowerCase"),Hh=Vu(function(n,t,r){ +return n+(r?"_":"")+t.toLowerCase()}),Jh=Vu(function(n,t,r){return n+(r?" ":"")+Qh(t)}),Yh=Vu(function(n,t,r){return n+(r?" ":"")+t.toUpperCase()}),Qh=Ku("toUpperCase"),Xh=uu(function(t,r){try{return n(t,X,r)}catch(n){return rc(n)?n:new fl(n)}}),np=gi(function(n,t){return r(t,function(t){t=no(t),Br(n,t,ch(n[t],n))}),n}),tp=Yu(),rp=Yu(!0),ep=uu(function(n,t){return function(r){return Ie(r,n,t)}}),up=uu(function(n,t){return function(r){return Ie(n,r,t)}}),ip=ti(c),op=ti(u),fp=ti(h),cp=ui(),ap=ui(!0),lp=ni(function(n,t){ +return n+t},0),sp=fi("ceil"),hp=ni(function(n,t){return n/t},1),pp=fi("floor"),_p=ni(function(n,t){return n*t},1),vp=fi("round"),gp=ni(function(n,t){return n-t},0);return Z.after=If,Z.ary=Rf,Z.assign=zh,Z.assignIn=Eh,Z.assignInWith=Sh,Z.assignWith=Wh,Z.at=Lh,Z.before=zf,Z.bind=ch,Z.bindAll=np,Z.bindKey=ah,Z.castArray=Nf,Z.chain=Qo,Z.chunk=uo,Z.compact=io,Z.concat=oo,Z.cond=za,Z.conforms=Ea,Z.constant=Sa,Z.countBy=Xs,Z.create=Sc,Z.curry=Ef,Z.curryRight=Sf,Z.debounce=Wf,Z.defaults=Ch,Z.defaultsDeep=Uh, +Z.defer=lh,Z.delay=sh,Z.difference=Us,Z.differenceBy=Bs,Z.differenceWith=Ts,Z.drop=fo,Z.dropRight=co,Z.dropRightWhile=ao,Z.dropWhile=lo,Z.fill=so,Z.filter=lf,Z.flatMap=sf,Z.flatMapDeep=hf,Z.flatMapDepth=pf,Z.flatten=_o,Z.flattenDeep=vo,Z.flattenDepth=go,Z.flip=Lf,Z.flow=tp,Z.flowRight=rp,Z.fromPairs=yo,Z.functions=$c,Z.functionsIn=Dc,Z.groupBy=rh,Z.initial=mo,Z.intersection=$s,Z.intersectionBy=Ds,Z.intersectionWith=Ms,Z.invert=Bh,Z.invertBy=Th,Z.invokeMap=eh,Z.iteratee=Ca,Z.keyBy=uh,Z.keys=Pc,Z.keysIn=qc, +Z.map=yf,Z.mapKeys=Zc,Z.mapValues=Kc,Z.matches=Ua,Z.matchesProperty=Ba,Z.memoize=Cf,Z.merge=Dh,Z.mergeWith=Mh,Z.method=ep,Z.methodOf=up,Z.mixin=Ta,Z.negate=Uf,Z.nthArg=Ma,Z.omit=Fh,Z.omitBy=Vc,Z.once=Bf,Z.orderBy=df,Z.over=ip,Z.overArgs=hh,Z.overEvery=op,Z.overSome=fp,Z.partial=ph,Z.partialRight=_h,Z.partition=ih,Z.pick=Nh,Z.pickBy=Gc,Z.property=Fa,Z.propertyOf=Na,Z.pull=Fs,Z.pullAll=Oo,Z.pullAllBy=Io,Z.pullAllWith=Ro,Z.pullAt=Ns,Z.range=cp,Z.rangeRight=ap,Z.rearg=vh,Z.reject=mf,Z.remove=zo,Z.rest=Tf, +Z.reverse=Eo,Z.sampleSize=jf,Z.set=Jc,Z.setWith=Yc,Z.shuffle=Af,Z.slice=So,Z.sortBy=oh,Z.sortedUniq=$o,Z.sortedUniqBy=Do,Z.split=da,Z.spread=$f,Z.tail=Mo,Z.take=Fo,Z.takeRight=No,Z.takeRightWhile=Po,Z.takeWhile=qo,Z.tap=Xo,Z.throttle=Df,Z.thru=nf,Z.toArray=jc,Z.toPairs=Ph,Z.toPairsIn=qh,Z.toPath=Ha,Z.toPlainObject=Rc,Z.transform=Qc,Z.unary=Mf,Z.union=Ps,Z.unionBy=qs,Z.unionWith=Zs,Z.uniq=Zo,Z.uniqBy=Ko,Z.uniqWith=Vo,Z.unset=Xc,Z.unzip=Go,Z.unzipWith=Ho,Z.update=na,Z.updateWith=ta,Z.values=ra,Z.valuesIn=ea, +Z.without=Ks,Z.words=Ra,Z.wrap=Ff,Z.xor=Vs,Z.xorBy=Gs,Z.xorWith=Hs,Z.zip=Js,Z.zipObject=Jo,Z.zipObjectDeep=Yo,Z.zipWith=Ys,Z.entries=Ph,Z.entriesIn=qh,Z.extend=Eh,Z.extendWith=Sh,Ta(Z,Z),Z.add=lp,Z.attempt=Xh,Z.camelCase=Zh,Z.capitalize=fa,Z.ceil=sp,Z.clamp=ua,Z.clone=Pf,Z.cloneDeep=Zf,Z.cloneDeepWith=Kf,Z.cloneWith=qf,Z.conformsTo=Vf,Z.deburr=ca,Z.defaultTo=Wa,Z.divide=hp,Z.endsWith=aa,Z.eq=Gf,Z.escape=la,Z.escapeRegExp=sa,Z.every=af,Z.find=nh,Z.findIndex=ho,Z.findKey=Wc,Z.findLast=th,Z.findLastIndex=po, +Z.findLastKey=Lc,Z.floor=pp,Z.forEach=_f,Z.forEachRight=vf,Z.forIn=Cc,Z.forInRight=Uc,Z.forOwn=Bc,Z.forOwnRight=Tc,Z.get=Mc,Z.gt=gh,Z.gte=yh,Z.has=Fc,Z.hasIn=Nc,Z.head=bo,Z.identity=La,Z.includes=gf,Z.indexOf=wo,Z.inRange=ia,Z.invoke=$h,Z.isArguments=dh,Z.isArray=bh,Z.isArrayBuffer=wh,Z.isArrayLike=Hf,Z.isArrayLikeObject=Jf,Z.isBoolean=Yf,Z.isBuffer=mh,Z.isDate=xh,Z.isElement=Qf,Z.isEmpty=Xf,Z.isEqual=nc,Z.isEqualWith=tc,Z.isError=rc,Z.isFinite=ec,Z.isFunction=uc,Z.isInteger=ic,Z.isLength=oc,Z.isMap=jh, +Z.isMatch=ac,Z.isMatchWith=lc,Z.isNaN=sc,Z.isNative=hc,Z.isNil=_c,Z.isNull=pc,Z.isNumber=vc,Z.isObject=fc,Z.isObjectLike=cc,Z.isPlainObject=gc,Z.isRegExp=Ah,Z.isSafeInteger=yc,Z.isSet=kh,Z.isString=dc,Z.isSymbol=bc,Z.isTypedArray=Oh,Z.isUndefined=wc,Z.isWeakMap=mc,Z.isWeakSet=xc,Z.join=xo,Z.kebabCase=Kh,Z.last=jo,Z.lastIndexOf=Ao,Z.lowerCase=Vh,Z.lowerFirst=Gh,Z.lt=Ih,Z.lte=Rh,Z.max=Ya,Z.maxBy=Qa,Z.mean=Xa,Z.meanBy=nl,Z.min=tl,Z.minBy=rl,Z.stubArray=Pa,Z.stubFalse=qa,Z.stubObject=Za,Z.stubString=Ka, +Z.stubTrue=Va,Z.multiply=_p,Z.nth=ko,Z.noConflict=$a,Z.noop=Da,Z.now=fh,Z.pad=ha,Z.padEnd=pa,Z.padStart=_a,Z.parseInt=va,Z.random=oa,Z.reduce=bf,Z.reduceRight=wf,Z.repeat=ga,Z.replace=ya,Z.result=Hc,Z.round=vp,Z.runInContext=p,Z.sample=xf,Z.size=kf,Z.snakeCase=Hh,Z.some=Of,Z.sortedIndex=Wo,Z.sortedIndexBy=Lo,Z.sortedIndexOf=Co,Z.sortedLastIndex=Uo,Z.sortedLastIndexBy=Bo,Z.sortedLastIndexOf=To,Z.startCase=Jh,Z.startsWith=ba,Z.subtract=gp,Z.sum=el,Z.sumBy=ul,Z.template=wa,Z.times=Ga,Z.toFinite=Ac,Z.toInteger=kc, +Z.toLength=Oc,Z.toLower=ma,Z.toNumber=Ic,Z.toSafeInteger=zc,Z.toString=Ec,Z.toUpper=xa,Z.trim=ja,Z.trimEnd=Aa,Z.trimStart=ka,Z.truncate=Oa,Z.unescape=Ia,Z.uniqueId=Ja,Z.upperCase=Yh,Z.upperFirst=Qh,Z.each=_f,Z.eachRight=vf,Z.first=bo,Ta(Z,function(){var n={};return ue(Z,function(t,r){bl.call(Z.prototype,r)||(n[r]=t)}),n}(),{chain:!1}),Z.VERSION=nn,r(["bind","bindKey","curry","curryRight","partial","partialRight"],function(n){Z[n].placeholder=Z}),r(["drop","take"],function(n,t){Ct.prototype[n]=function(r){ +r=r===X?1:Gl(kc(r),0);var e=this.__filtered__&&!t?new Ct(this):this.clone();return e.__filtered__?e.__takeCount__=Hl(r,e.__takeCount__):e.__views__.push({size:Hl(r,Un),type:n+(e.__dir__<0?"Right":"")}),e},Ct.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()}}),r(["filter","map","takeWhile"],function(n,t){var r=t+1,e=r==Rn||r==En;Ct.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({iteratee:mi(n,3),type:r}),t.__filtered__=t.__filtered__||e,t}}),r(["head","last"],function(n,t){ +var r="take"+(t?"Right":"");Ct.prototype[n]=function(){return this[r](1).value()[0]}}),r(["initial","tail"],function(n,t){var r="drop"+(t?"":"Right");Ct.prototype[n]=function(){return this.__filtered__?new Ct(this):this[r](1)}}),Ct.prototype.compact=function(){return this.filter(La)},Ct.prototype.find=function(n){return this.filter(n).head()},Ct.prototype.findLast=function(n){return this.reverse().find(n)},Ct.prototype.invokeMap=uu(function(n,t){return"function"==typeof n?new Ct(this):this.map(function(r){ +return Ie(r,n,t)})}),Ct.prototype.reject=function(n){return this.filter(Uf(mi(n)))},Ct.prototype.slice=function(n,t){n=kc(n);var r=this;return r.__filtered__&&(n>0||t<0)?new Ct(r):(n<0?r=r.takeRight(-n):n&&(r=r.drop(n)),t!==X&&(t=kc(t),r=t<0?r.dropRight(-t):r.take(t-n)),r)},Ct.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},Ct.prototype.toArray=function(){return this.take(Un)},ue(Ct.prototype,function(n,t){var r=/^(?:filter|find|map|reject)|While$/.test(t),e=/^(?:head|last)$/.test(t),u=Z[e?"take"+("last"==t?"Right":""):t],i=e||/^find/.test(t); +u&&(Z.prototype[t]=function(){var t=this.__wrapped__,o=e?[1]:arguments,f=t instanceof Ct,c=o[0],l=f||bh(t),s=function(n){var t=u.apply(Z,a([n],o));return e&&h?t[0]:t};l&&r&&"function"==typeof c&&1!=c.length&&(f=l=!1);var h=this.__chain__,p=!!this.__actions__.length,_=i&&!h,v=f&&!p;if(!i&&l){t=v?t:new Ct(this);var g=n.apply(t,o);return g.__actions__.push({func:nf,args:[s],thisArg:X}),new Y(g,h)}return _&&v?n.apply(this,o):(g=this.thru(s),_?e?g.value()[0]:g.value():g)})}),r(["pop","push","shift","sort","splice","unshift"],function(n){ +var t=_l[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|shift)$/.test(n);Z.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var u=this.value();return t.apply(bh(u)?u:[],n)}return this[r](function(r){return t.apply(bh(r)?r:[],n)})}}),ue(Ct.prototype,function(n,t){var r=Z[t];if(r){var e=r.name+"";bl.call(fs,e)||(fs[e]=[]),fs[e].push({name:t,func:r})}}),fs[Qu(X,vn).name]=[{name:"wrapper",func:X}],Ct.prototype.clone=$t,Ct.prototype.reverse=Yt,Ct.prototype.value=Qt,Z.prototype.at=Qs, +Z.prototype.chain=tf,Z.prototype.commit=rf,Z.prototype.next=ef,Z.prototype.plant=of,Z.prototype.reverse=ff,Z.prototype.toJSON=Z.prototype.valueOf=Z.prototype.value=cf,Z.prototype.first=Z.prototype.head,Ul&&(Z.prototype[Ul]=uf),Z},be=de();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(re._=be,define(function(){return be})):ue?((ue.exports=be)._=be,ee._=be):re._=be}).call(this);
\ No newline at end of file diff --git a/node_modules/lodash/lowerCase.js b/node_modules/lodash/lowerCase.js new file mode 100644 index 0000000..66c1f49 --- /dev/null +++ b/node_modules/lodash/lowerCase.js @@ -0,0 +1,27 @@ +var createCompounder = require('./_createCompounder'); + +/** + * Converts `string`, as space separated words, to lower case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the lower cased string. + * @example + * + * _.lowerCase('--Foo-Bar--'); + * // => 'foo bar' + * + * _.lowerCase('fooBar'); + * // => 'foo bar' + * + * _.lowerCase('__FOO_BAR__'); + * // => 'foo bar' + */ +var lowerCase = createCompounder(function(result, word, index) { +  return result + (index ? ' ' : '') + word.toLowerCase(); +}); + +module.exports = lowerCase; diff --git a/node_modules/lodash/lowerFirst.js b/node_modules/lodash/lowerFirst.js new file mode 100644 index 0000000..c08f082 --- /dev/null +++ b/node_modules/lodash/lowerFirst.js @@ -0,0 +1,22 @@ +var createCaseFirst = require('./_createCaseFirst'); + +/** + * Converts the first character of `string` to lower case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.lowerFirst('Fred'); + * // => 'fred' + * + * _.lowerFirst('FRED'); + * // => 'fRED' + */ +var lowerFirst = createCaseFirst('toLowerCase'); + +module.exports = lowerFirst; diff --git a/node_modules/lodash/lt.js b/node_modules/lodash/lt.js new file mode 100644 index 0000000..813866e --- /dev/null +++ b/node_modules/lodash/lt.js @@ -0,0 +1,29 @@ +var baseLt = require('./_baseLt'), +    createRelationalOperation = require('./_createRelationalOperation'); + +/** + * Checks if `value` is less than `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + *  else `false`. + * @see _.gt + * @example + * + * _.lt(1, 3); + * // => true + * + * _.lt(3, 3); + * // => false + * + * _.lt(3, 1); + * // => false + */ +var lt = createRelationalOperation(baseLt); + +module.exports = lt; diff --git a/node_modules/lodash/lte.js b/node_modules/lodash/lte.js new file mode 100644 index 0000000..382f661 --- /dev/null +++ b/node_modules/lodash/lte.js @@ -0,0 +1,30 @@ +var createRelationalOperation = require('./_createRelationalOperation'); + +/** + * Checks if `value` is less than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than or equal to + *  `other`, else `false`. + * @see _.gte + * @example + * + * _.lte(1, 3); + * // => true + * + * _.lte(3, 3); + * // => true + * + * _.lte(3, 1); + * // => false + */ +var lte = createRelationalOperation(function(value, other) { +  return value <= other; +}); + +module.exports = lte; diff --git a/node_modules/lodash/map.js b/node_modules/lodash/map.js new file mode 100644 index 0000000..22efee7 --- /dev/null +++ b/node_modules/lodash/map.js @@ -0,0 +1,53 @@ +var arrayMap = require('./_arrayMap'), +    baseIteratee = require('./_baseIteratee'), +    baseMap = require('./_baseMap'), +    isArray = require('./isArray'); + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + *   return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + *   { 'user': 'barney' }, + *   { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { +  var func = isArray(collection) ? arrayMap : baseMap; +  return func(collection, baseIteratee(iteratee, 3)); +} + +module.exports = map; diff --git a/node_modules/lodash/mapKeys.js b/node_modules/lodash/mapKeys.js new file mode 100644 index 0000000..3b68797 --- /dev/null +++ b/node_modules/lodash/mapKeys.js @@ -0,0 +1,36 @@ +var baseAssignValue = require('./_baseAssignValue'), +    baseForOwn = require('./_baseForOwn'), +    baseIteratee = require('./_baseIteratee'); + +/** + * The opposite of `_.mapValues`; this method creates an object with the + * same values as `object` and keys generated by running each own enumerable + * string keyed property of `object` thru `iteratee`. The iteratee is invoked + * with three arguments: (value, key, object). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapValues + * @example + * + * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { + *   return key + value; + * }); + * // => { 'a1': 1, 'b2': 2 } + */ +function mapKeys(object, iteratee) { +  var result = {}; +  iteratee = baseIteratee(iteratee, 3); + +  baseForOwn(object, function(value, key, object) { +    baseAssignValue(result, iteratee(value, key, object), value); +  }); +  return result; +} + +module.exports = mapKeys; diff --git a/node_modules/lodash/mapValues.js b/node_modules/lodash/mapValues.js new file mode 100644 index 0000000..4ec0825 --- /dev/null +++ b/node_modules/lodash/mapValues.js @@ -0,0 +1,43 @@ +var baseAssignValue = require('./_baseAssignValue'), +    baseForOwn = require('./_baseForOwn'), +    baseIteratee = require('./_baseIteratee'); + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + *   'fred':    { 'user': 'fred',    'age': 40 }, + *   'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { +  var result = {}; +  iteratee = baseIteratee(iteratee, 3); + +  baseForOwn(object, function(value, key, object) { +    baseAssignValue(result, key, iteratee(value, key, object)); +  }); +  return result; +} + +module.exports = mapValues; diff --git a/node_modules/lodash/matches.js b/node_modules/lodash/matches.js new file mode 100644 index 0000000..e10b351 --- /dev/null +++ b/node_modules/lodash/matches.js @@ -0,0 +1,46 @@ +var baseClone = require('./_baseClone'), +    baseMatches = require('./_baseMatches'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1; + +/** + * Creates a function that performs a partial deep comparison between a given + * object and `source`, returning `true` if the given object has equivalent + * property values, else `false`. + * + * **Note:** The created function is equivalent to `_.isMatch` with `source` + * partially applied. + * + * Partial comparisons will match empty array and empty object `source` + * values against any array or object value, respectively. See `_.isEqual` + * for a list of supported value comparisons. + * + * **Note:** Multiple values can be checked by combining several matchers + * using `_.overSome` + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Util + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + * @example + * + * var objects = [ + *   { 'a': 1, 'b': 2, 'c': 3 }, + *   { 'a': 4, 'b': 5, 'c': 6 } + * ]; + * + * _.filter(objects, _.matches({ 'a': 4, 'c': 6 })); + * // => [{ 'a': 4, 'b': 5, 'c': 6 }] + * + * // Checking for several possible values + * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })])); + * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }] + */ +function matches(source) { +  return baseMatches(baseClone(source, CLONE_DEEP_FLAG)); +} + +module.exports = matches; diff --git a/node_modules/lodash/matchesProperty.js b/node_modules/lodash/matchesProperty.js new file mode 100644 index 0000000..e6f1a88 --- /dev/null +++ b/node_modules/lodash/matchesProperty.js @@ -0,0 +1,44 @@ +var baseClone = require('./_baseClone'), +    baseMatchesProperty = require('./_baseMatchesProperty'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1; + +/** + * Creates a function that performs a partial deep comparison between the + * value at `path` of a given object to `srcValue`, returning `true` if the + * object value is equivalent, else `false`. + * + * **Note:** Partial comparisons will match empty array and empty object + * `srcValue` values against any array or object value, respectively. See + * `_.isEqual` for a list of supported value comparisons. + * + * **Note:** Multiple values can be checked by combining several matchers + * using `_.overSome` + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + * @example + * + * var objects = [ + *   { 'a': 1, 'b': 2, 'c': 3 }, + *   { 'a': 4, 'b': 5, 'c': 6 } + * ]; + * + * _.find(objects, _.matchesProperty('a', 4)); + * // => { 'a': 4, 'b': 5, 'c': 6 } + * + * // Checking for several possible values + * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)])); + * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }] + */ +function matchesProperty(path, srcValue) { +  return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG)); +} + +module.exports = matchesProperty; diff --git a/node_modules/lodash/math.js b/node_modules/lodash/math.js new file mode 100644 index 0000000..5966887 --- /dev/null +++ b/node_modules/lodash/math.js @@ -0,0 +1,17 @@ +module.exports = { +  'add': require('./add'), +  'ceil': require('./ceil'), +  'divide': require('./divide'), +  'floor': require('./floor'), +  'max': require('./max'), +  'maxBy': require('./maxBy'), +  'mean': require('./mean'), +  'meanBy': require('./meanBy'), +  'min': require('./min'), +  'minBy': require('./minBy'), +  'multiply': require('./multiply'), +  'round': require('./round'), +  'subtract': require('./subtract'), +  'sum': require('./sum'), +  'sumBy': require('./sumBy') +}; diff --git a/node_modules/lodash/max.js b/node_modules/lodash/max.js new file mode 100644 index 0000000..142ad8c --- /dev/null +++ b/node_modules/lodash/max.js @@ -0,0 +1,29 @@ +var baseExtremum = require('./_baseExtremum'), +    baseGt = require('./_baseGt'), +    identity = require('./identity'); + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { +  return (array && array.length) +    ? baseExtremum(array, identity, baseGt) +    : undefined; +} + +module.exports = max; diff --git a/node_modules/lodash/maxBy.js b/node_modules/lodash/maxBy.js new file mode 100644 index 0000000..2eba9c0 --- /dev/null +++ b/node_modules/lodash/maxBy.js @@ -0,0 +1,34 @@ +var baseExtremum = require('./_baseExtremum'), +    baseGt = require('./_baseGt'), +    baseIteratee = require('./_baseIteratee'); + +/** + * This method is like `_.max` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the maximum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.maxBy(objects, function(o) { return o.n; }); + * // => { 'n': 2 } + * + * // The `_.property` iteratee shorthand. + * _.maxBy(objects, 'n'); + * // => { 'n': 2 } + */ +function maxBy(array, iteratee) { +  return (array && array.length) +    ? baseExtremum(array, baseIteratee(iteratee, 2), baseGt) +    : undefined; +} + +module.exports = maxBy; diff --git a/node_modules/lodash/mean.js b/node_modules/lodash/mean.js new file mode 100644 index 0000000..e3ffff6 --- /dev/null +++ b/node_modules/lodash/mean.js @@ -0,0 +1,22 @@ +var baseMean = require('./_baseMean'), +    identity = require('./identity'); + +/** + * Computes the mean of the values in `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @returns {number} Returns the mean. + * @example + * + * _.mean([4, 2, 8, 6]); + * // => 5 + */ +function mean(array) { +  return baseMean(array, identity); +} + +module.exports = mean; diff --git a/node_modules/lodash/meanBy.js b/node_modules/lodash/meanBy.js new file mode 100644 index 0000000..b031671 --- /dev/null +++ b/node_modules/lodash/meanBy.js @@ -0,0 +1,31 @@ +var baseIteratee = require('./_baseIteratee'), +    baseMean = require('./_baseMean'); + +/** + * This method is like `_.mean` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the value to be averaged. + * The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the mean. + * @example + * + * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }]; + * + * _.meanBy(objects, function(o) { return o.n; }); + * // => 5 + * + * // The `_.property` iteratee shorthand. + * _.meanBy(objects, 'n'); + * // => 5 + */ +function meanBy(array, iteratee) { +  return baseMean(array, baseIteratee(iteratee, 2)); +} + +module.exports = meanBy; diff --git a/node_modules/lodash/memoize.js b/node_modules/lodash/memoize.js new file mode 100644 index 0000000..d6035af --- /dev/null +++ b/node_modules/lodash/memoize.js @@ -0,0 +1,73 @@ +var MapCache = require('./_MapCache'); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ +function memoize(func, resolver) { +  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { +    throw new TypeError(FUNC_ERROR_TEXT); +  } +  var memoized = function() { +    var args = arguments, +        key = resolver ? resolver.apply(this, args) : args[0], +        cache = memoized.cache; + +    if (cache.has(key)) { +      return cache.get(key); +    } +    var result = func.apply(this, args); +    memoized.cache = cache.set(key, result) || cache; +    return result; +  }; +  memoized.cache = new (memoize.Cache || MapCache); +  return memoized; +} + +// Expose `MapCache`. +memoize.Cache = MapCache; + +module.exports = memoize; diff --git a/node_modules/lodash/merge.js b/node_modules/lodash/merge.js new file mode 100644 index 0000000..4bbc3a1 --- /dev/null +++ b/node_modules/lodash/merge.js @@ -0,0 +1,39 @@ +var baseMerge = require('./_baseMerge'), +    createAssigner = require('./_createAssigner'); + +/** + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable string keyed properties of source objects into the + * destination object. Source properties that resolve to `undefined` are + * skipped if a destination value exists. Array and plain object properties + * are merged recursively. Other objects and value types are overridden by + * assignment. Source objects are applied from left to right. Subsequent + * sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var object = { + *   'a': [{ 'b': 2 }, { 'd': 4 }] + * }; + * + * var other = { + *   'a': [{ 'c': 3 }, { 'e': 5 }] + * }; + * + * _.merge(object, other); + * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } + */ +var merge = createAssigner(function(object, source, srcIndex) { +  baseMerge(object, source, srcIndex); +}); + +module.exports = merge; diff --git a/node_modules/lodash/mergeWith.js b/node_modules/lodash/mergeWith.js new file mode 100644 index 0000000..1b43a2c --- /dev/null +++ b/node_modules/lodash/mergeWith.js @@ -0,0 +1,39 @@ +var baseMerge = require('./_baseMerge'), +    createAssigner = require('./_createAssigner'); + +/** + * This method is like `_.merge` except that it accepts `customizer` which + * is invoked to produce the merged values of the destination and source + * properties. If `customizer` returns `undefined`, merging is handled by the + * method instead. The `customizer` is invoked with six arguments: + * (objValue, srcValue, key, object, source, stack). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} customizer The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + *   if (_.isArray(objValue)) { + *     return objValue.concat(srcValue); + *   } + * } + * + * var object = { 'a': [1], 'b': [2] }; + * var other = { 'a': [3], 'b': [4] }; + * + * _.mergeWith(object, other, customizer); + * // => { 'a': [1, 3], 'b': [2, 4] } + */ +var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { +  baseMerge(object, source, srcIndex, customizer); +}); + +module.exports = mergeWith; diff --git a/node_modules/lodash/method.js b/node_modules/lodash/method.js new file mode 100644 index 0000000..23ec32d --- /dev/null +++ b/node_modules/lodash/method.js @@ -0,0 +1,34 @@ +var baseInvoke = require('./_baseInvoke'), +    baseRest = require('./_baseRest'); + +/** + * Creates a function that invokes the method at `path` of a given object. + * Any additional arguments are provided to the invoked method. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Util + * @param {Array|string} path The path of the method to invoke. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {Function} Returns the new invoker function. + * @example + * + * var objects = [ + *   { 'a': { 'b': _.constant(2) } }, + *   { 'a': { 'b': _.constant(1) } } + * ]; + * + * _.map(objects, _.method('a.b')); + * // => [2, 1] + * + * _.map(objects, _.method(['a', 'b'])); + * // => [2, 1] + */ +var method = baseRest(function(path, args) { +  return function(object) { +    return baseInvoke(object, path, args); +  }; +}); + +module.exports = method; diff --git a/node_modules/lodash/methodOf.js b/node_modules/lodash/methodOf.js new file mode 100644 index 0000000..df59b57 --- /dev/null +++ b/node_modules/lodash/methodOf.js @@ -0,0 +1,33 @@ +var baseInvoke = require('./_baseInvoke'), +    baseRest = require('./_baseRest'); + +/** + * The opposite of `_.method`; this method creates a function that invokes + * the method at a given path of `object`. Any additional arguments are + * provided to the invoked method. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Util + * @param {Object} object The object to query. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {Function} Returns the new invoker function. + * @example + * + * var array = _.times(3, _.constant), + *     object = { 'a': array, 'b': array, 'c': array }; + * + * _.map(['a[2]', 'c[0]'], _.methodOf(object)); + * // => [2, 0] + * + * _.map([['a', '2'], ['c', '0']], _.methodOf(object)); + * // => [2, 0] + */ +var methodOf = baseRest(function(object, args) { +  return function(path) { +    return baseInvoke(object, path, args); +  }; +}); + +module.exports = methodOf; diff --git a/node_modules/lodash/min.js b/node_modules/lodash/min.js new file mode 100644 index 0000000..428f571 --- /dev/null +++ b/node_modules/lodash/min.js @@ -0,0 +1,29 @@ +var baseExtremum = require('./_baseExtremum'), +    baseLt = require('./_baseLt'), +    identity = require('./identity'); + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { +  return (array && array.length) +    ? baseExtremum(array, identity, baseLt) +    : undefined; +} + +module.exports = min; diff --git a/node_modules/lodash/minBy.js b/node_modules/lodash/minBy.js new file mode 100644 index 0000000..b2697e4 --- /dev/null +++ b/node_modules/lodash/minBy.js @@ -0,0 +1,34 @@ +var baseExtremum = require('./_baseExtremum'), +    baseIteratee = require('./_baseIteratee'), +    baseLt = require('./_baseLt'); + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { +  return (array && array.length) +    ? baseExtremum(array, baseIteratee(iteratee, 2), baseLt) +    : undefined; +} + +module.exports = minBy; diff --git a/node_modules/lodash/mixin.js b/node_modules/lodash/mixin.js new file mode 100644 index 0000000..6dc9674 --- /dev/null +++ b/node_modules/lodash/mixin.js @@ -0,0 +1,74 @@ +var arrayEach = require('./_arrayEach'), +    arrayPush = require('./_arrayPush'), +    baseFunctions = require('./_baseFunctions'), +    copyArray = require('./_copyArray'), +    isFunction = require('./isFunction'), +    isObject = require('./isObject'), +    keys = require('./keys'); + +/** + * Adds all own enumerable string keyed function properties of a source + * object to the destination object. If `object` is a function, then methods + * are added to its prototype as well. + * + * **Note:** Use `_.runInContext` to create a pristine `lodash` function to + * avoid conflicts caused by modifying the original. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {Function|Object} [object=lodash] The destination object. + * @param {Object} source The object of functions to add. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.chain=true] Specify whether mixins are chainable. + * @returns {Function|Object} Returns `object`. + * @example + * + * function vowels(string) { + *   return _.filter(string, function(v) { + *     return /[aeiou]/i.test(v); + *   }); + * } + * + * _.mixin({ 'vowels': vowels }); + * _.vowels('fred'); + * // => ['e'] + * + * _('fred').vowels().value(); + * // => ['e'] + * + * _.mixin({ 'vowels': vowels }, { 'chain': false }); + * _('fred').vowels(); + * // => ['e'] + */ +function mixin(object, source, options) { +  var props = keys(source), +      methodNames = baseFunctions(source, props); + +  var chain = !(isObject(options) && 'chain' in options) || !!options.chain, +      isFunc = isFunction(object); + +  arrayEach(methodNames, function(methodName) { +    var func = source[methodName]; +    object[methodName] = func; +    if (isFunc) { +      object.prototype[methodName] = function() { +        var chainAll = this.__chain__; +        if (chain || chainAll) { +          var result = object(this.__wrapped__), +              actions = result.__actions__ = copyArray(this.__actions__); + +          actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); +          result.__chain__ = chainAll; +          return result; +        } +        return func.apply(object, arrayPush([this.value()], arguments)); +      }; +    } +  }); + +  return object; +} + +module.exports = mixin; diff --git a/node_modules/lodash/multiply.js b/node_modules/lodash/multiply.js new file mode 100644 index 0000000..d7876e1 --- /dev/null +++ b/node_modules/lodash/multiply.js @@ -0,0 +1,22 @@ +var createMathOperation = require('./_createMathOperation'); + +/** + * Multiply two numbers. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Math + * @param {number} multiplier The first number in a multiplication. + * @param {number} multiplicand The second number in a multiplication. + * @returns {number} Returns the product. + * @example + * + * _.multiply(6, 4); + * // => 24 + */ +var multiply = createMathOperation(function(multiplier, multiplicand) { +  return multiplier * multiplicand; +}, 1); + +module.exports = multiply; diff --git a/node_modules/lodash/negate.js b/node_modules/lodash/negate.js new file mode 100644 index 0000000..5a65cd1 --- /dev/null +++ b/node_modules/lodash/negate.js @@ -0,0 +1,40 @@ +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new negated function. + * @example + * + * function isEven(n) { + *   return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ +function negate(predicate) { +  if (typeof predicate != 'function') { +    throw new TypeError(FUNC_ERROR_TEXT); +  } +  return function() { +    var args = arguments; +    switch (args.length) { +      case 0: return !predicate.call(this); +      case 1: return !predicate.call(this, args[0]); +      case 2: return !predicate.call(this, args[0], args[1]); +      case 3: return !predicate.call(this, args[0], args[1], args[2]); +    } +    return !predicate.apply(this, args); +  }; +} + +module.exports = negate; diff --git a/node_modules/lodash/next.js b/node_modules/lodash/next.js new file mode 100644 index 0000000..55f949c --- /dev/null +++ b/node_modules/lodash/next.js @@ -0,0 +1,35 @@ +var toArray = require('./toArray'); + +/** + * Gets the next value on a wrapped object following the + * [iterator protocol](https://mdn.io/iteration_protocols#iterator). + * + * @name next + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the next iterator value. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped.next(); + * // => { 'done': false, 'value': 1 } + * + * wrapped.next(); + * // => { 'done': false, 'value': 2 } + * + * wrapped.next(); + * // => { 'done': true, 'value': undefined } + */ +function wrapperNext() { +  if (this.__values__ === undefined) { +    this.__values__ = toArray(this.value()); +  } +  var done = this.__index__ >= this.__values__.length, +      value = done ? undefined : this.__values__[this.__index__++]; + +  return { 'done': done, 'value': value }; +} + +module.exports = wrapperNext; diff --git a/node_modules/lodash/noop.js b/node_modules/lodash/noop.js new file mode 100644 index 0000000..3c0862e --- /dev/null +++ b/node_modules/lodash/noop.js @@ -0,0 +1,17 @@ +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { +  // No operation performed. +} + +module.exports = noop; diff --git a/node_modules/lodash/now.js b/node_modules/lodash/now.js new file mode 100644 index 0000000..44a0562 --- /dev/null +++ b/node_modules/lodash/now.js @@ -0,0 +1,23 @@ +var root = require('./_root'); + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + *   console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { +  return root.Date.now(); +}; + +module.exports = now; diff --git a/node_modules/lodash/nth.js b/node_modules/lodash/nth.js new file mode 100644 index 0000000..8a344de --- /dev/null +++ b/node_modules/lodash/nth.js @@ -0,0 +1,29 @@ +var baseNth = require('./_baseNth'), +    toInteger = require('./toInteger'); + +/** + * Gets the element at index `n` of `array`. If `n` is negative, the nth + * element from the end is returned. + * + * @static + * @memberOf _ + * @since 4.11.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=0] The index of the element to return. + * @returns {*} Returns the nth element of `array`. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * + * _.nth(array, 1); + * // => 'b' + * + * _.nth(array, -2); + * // => 'c'; + */ +function nth(array, n) { +  return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; +} + +module.exports = nth; diff --git a/node_modules/lodash/nthArg.js b/node_modules/lodash/nthArg.js new file mode 100644 index 0000000..09406dd --- /dev/null +++ b/node_modules/lodash/nthArg.js @@ -0,0 +1,32 @@ +var baseNth = require('./_baseNth'), +    baseRest = require('./_baseRest'), +    toInteger = require('./toInteger'); + +/** + * Creates a function that gets the argument at index `n`. If `n` is negative, + * the nth argument from the end is returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Util + * @param {number} [n=0] The index of the argument to return. + * @returns {Function} Returns the new pass-thru function. + * @example + * + * var func = _.nthArg(1); + * func('a', 'b', 'c', 'd'); + * // => 'b' + * + * var func = _.nthArg(-2); + * func('a', 'b', 'c', 'd'); + * // => 'c' + */ +function nthArg(n) { +  n = toInteger(n); +  return baseRest(function(args) { +    return baseNth(args, n); +  }); +} + +module.exports = nthArg; diff --git a/node_modules/lodash/number.js b/node_modules/lodash/number.js new file mode 100644 index 0000000..c3b0100 --- /dev/null +++ b/node_modules/lodash/number.js @@ -0,0 +1,5 @@ +module.exports = { +  'clamp': require('./clamp'), +  'inRange': require('./inRange'), +  'random': require('./random') +}; diff --git a/node_modules/lodash/object.js b/node_modules/lodash/object.js new file mode 100644 index 0000000..f046b05 --- /dev/null +++ b/node_modules/lodash/object.js @@ -0,0 +1,49 @@ +module.exports = { +  'assign': require('./assign'), +  'assignIn': require('./assignIn'), +  'assignInWith': require('./assignInWith'), +  'assignWith': require('./assignWith'), +  'at': require('./at'), +  'create': require('./create'), +  'defaults': require('./defaults'), +  'defaultsDeep': require('./defaultsDeep'), +  'entries': require('./entries'), +  'entriesIn': require('./entriesIn'), +  'extend': require('./extend'), +  'extendWith': require('./extendWith'), +  'findKey': require('./findKey'), +  'findLastKey': require('./findLastKey'), +  'forIn': require('./forIn'), +  'forInRight': require('./forInRight'), +  'forOwn': require('./forOwn'), +  'forOwnRight': require('./forOwnRight'), +  'functions': require('./functions'), +  'functionsIn': require('./functionsIn'), +  'get': require('./get'), +  'has': require('./has'), +  'hasIn': require('./hasIn'), +  'invert': require('./invert'), +  'invertBy': require('./invertBy'), +  'invoke': require('./invoke'), +  'keys': require('./keys'), +  'keysIn': require('./keysIn'), +  'mapKeys': require('./mapKeys'), +  'mapValues': require('./mapValues'), +  'merge': require('./merge'), +  'mergeWith': require('./mergeWith'), +  'omit': require('./omit'), +  'omitBy': require('./omitBy'), +  'pick': require('./pick'), +  'pickBy': require('./pickBy'), +  'result': require('./result'), +  'set': require('./set'), +  'setWith': require('./setWith'), +  'toPairs': require('./toPairs'), +  'toPairsIn': require('./toPairsIn'), +  'transform': require('./transform'), +  'unset': require('./unset'), +  'update': require('./update'), +  'updateWith': require('./updateWith'), +  'values': require('./values'), +  'valuesIn': require('./valuesIn') +}; diff --git a/node_modules/lodash/omit.js b/node_modules/lodash/omit.js new file mode 100644 index 0000000..97f5f54 --- /dev/null +++ b/node_modules/lodash/omit.js @@ -0,0 +1,57 @@ +var arrayMap = require('./_arrayMap'), +    baseClone = require('./_baseClone'), +    baseUnset = require('./_baseUnset'), +    castPath = require('./_castPath'), +    copyObject = require('./_copyObject'), +    customOmitClone = require('./_customOmitClone'), +    flatRest = require('./_flatRest'), +    getAllKeysIn = require('./_getAllKeysIn'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, +    CLONE_FLAT_FLAG = 2, +    CLONE_SYMBOLS_FLAG = 4; + +/** + * The opposite of `_.pick`; this method creates an object composed of the + * own and inherited enumerable property paths of `object` that are not omitted. + * + * **Note:** This method is considerably slower than `_.pick`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to omit. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omit(object, ['a', 'c']); + * // => { 'b': '2' } + */ +var omit = flatRest(function(object, paths) { +  var result = {}; +  if (object == null) { +    return result; +  } +  var isDeep = false; +  paths = arrayMap(paths, function(path) { +    path = castPath(path, object); +    isDeep || (isDeep = path.length > 1); +    return path; +  }); +  copyObject(object, getAllKeysIn(object), result); +  if (isDeep) { +    result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); +  } +  var length = paths.length; +  while (length--) { +    baseUnset(result, paths[length]); +  } +  return result; +}); + +module.exports = omit; diff --git a/node_modules/lodash/omitBy.js b/node_modules/lodash/omitBy.js new file mode 100644 index 0000000..a064036 --- /dev/null +++ b/node_modules/lodash/omitBy.js @@ -0,0 +1,29 @@ +var baseIteratee = require('./_baseIteratee'), +    negate = require('./negate'), +    pickBy = require('./pickBy'); + +/** + * The opposite of `_.pickBy`; this method creates an object composed of + * the own and inherited enumerable string keyed properties of `object` that + * `predicate` doesn't return truthy for. The predicate is invoked with two + * arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omitBy(object, _.isNumber); + * // => { 'b': '2' } + */ +function omitBy(object, predicate) { +  return pickBy(object, negate(baseIteratee(predicate))); +} + +module.exports = omitBy; diff --git a/node_modules/lodash/once.js b/node_modules/lodash/once.js new file mode 100644 index 0000000..0706fc3 --- /dev/null +++ b/node_modules/lodash/once.js @@ -0,0 +1,25 @@ +var before = require('./before'); + +/** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first invocation. The `func` is + * invoked with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // => `createApplication` is invoked once + */ +function once(func) { +  return before(2, func); +} + +module.exports = once; diff --git a/node_modules/lodash/orderBy.js b/node_modules/lodash/orderBy.js new file mode 100644 index 0000000..7195c8c --- /dev/null +++ b/node_modules/lodash/orderBy.js @@ -0,0 +1,47 @@ +var baseOrderBy = require('./_baseOrderBy'), +    isArray = require('./isArray'); + +/** + * This method is like `_.sortBy` except that it allows specifying the sort + * orders of the iteratees to sort by. If `orders` is unspecified, all values + * are sorted in ascending order. Otherwise, specify an order of "desc" for + * descending or "asc" for ascending sort order of corresponding values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] + *  The iteratees to sort by. + * @param {string[]} [orders] The sort orders of `iteratees`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + *   { 'user': 'fred',   'age': 48 }, + *   { 'user': 'barney', 'age': 34 }, + *   { 'user': 'fred',   'age': 40 }, + *   { 'user': 'barney', 'age': 36 } + * ]; + * + * // Sort by `user` in ascending order and by `age` in descending order. + * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + */ +function orderBy(collection, iteratees, orders, guard) { +  if (collection == null) { +    return []; +  } +  if (!isArray(iteratees)) { +    iteratees = iteratees == null ? [] : [iteratees]; +  } +  orders = guard ? undefined : orders; +  if (!isArray(orders)) { +    orders = orders == null ? [] : [orders]; +  } +  return baseOrderBy(collection, iteratees, orders); +} + +module.exports = orderBy; diff --git a/node_modules/lodash/over.js b/node_modules/lodash/over.js new file mode 100644 index 0000000..bea2f91 --- /dev/null +++ b/node_modules/lodash/over.js @@ -0,0 +1,24 @@ +var arrayMap = require('./_arrayMap'), +    createOver = require('./_createOver'); + +/** + * Creates a function that invokes `iteratees` with the arguments it receives + * and returns their results. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Util + * @param {...(Function|Function[])} [iteratees=[_.identity]] + *  The iteratees to invoke. + * @returns {Function} Returns the new function. + * @example + * + * var func = _.over([Math.max, Math.min]); + * + * func(1, 2, 3, 4); + * // => [4, 1] + */ +var over = createOver(arrayMap); + +module.exports = over; diff --git a/node_modules/lodash/overArgs.js b/node_modules/lodash/overArgs.js new file mode 100644 index 0000000..f0067db --- /dev/null +++ b/node_modules/lodash/overArgs.js @@ -0,0 +1,61 @@ +var apply = require('./_apply'), +    arrayMap = require('./_arrayMap'), +    baseFlatten = require('./_baseFlatten'), +    baseIteratee = require('./_baseIteratee'), +    baseRest = require('./_baseRest'), +    baseUnary = require('./_baseUnary'), +    castRest = require('./_castRest'), +    isArray = require('./isArray'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Creates a function that invokes `func` with its arguments transformed. + * + * @static + * @since 4.0.0 + * @memberOf _ + * @category Function + * @param {Function} func The function to wrap. + * @param {...(Function|Function[])} [transforms=[_.identity]] + *  The argument transforms. + * @returns {Function} Returns the new function. + * @example + * + * function doubled(n) { + *   return n * 2; + * } + * + * function square(n) { + *   return n * n; + * } + * + * var func = _.overArgs(function(x, y) { + *   return [x, y]; + * }, [square, doubled]); + * + * func(9, 3); + * // => [81, 6] + * + * func(10, 5); + * // => [100, 10] + */ +var overArgs = castRest(function(func, transforms) { +  transforms = (transforms.length == 1 && isArray(transforms[0])) +    ? arrayMap(transforms[0], baseUnary(baseIteratee)) +    : arrayMap(baseFlatten(transforms, 1), baseUnary(baseIteratee)); + +  var funcsLength = transforms.length; +  return baseRest(function(args) { +    var index = -1, +        length = nativeMin(args.length, funcsLength); + +    while (++index < length) { +      args[index] = transforms[index].call(this, args[index]); +    } +    return apply(func, this, args); +  }); +}); + +module.exports = overArgs; diff --git a/node_modules/lodash/overEvery.js b/node_modules/lodash/overEvery.js new file mode 100644 index 0000000..fb19d13 --- /dev/null +++ b/node_modules/lodash/overEvery.js @@ -0,0 +1,34 @@ +var arrayEvery = require('./_arrayEvery'), +    createOver = require('./_createOver'); + +/** + * Creates a function that checks if **all** of the `predicates` return + * truthy when invoked with the arguments it receives. + * + * Following shorthands are possible for providing predicates. + * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate. + * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Util + * @param {...(Function|Function[])} [predicates=[_.identity]] + *  The predicates to check. + * @returns {Function} Returns the new function. + * @example + * + * var func = _.overEvery([Boolean, isFinite]); + * + * func('1'); + * // => true + * + * func(null); + * // => false + * + * func(NaN); + * // => false + */ +var overEvery = createOver(arrayEvery); + +module.exports = overEvery; diff --git a/node_modules/lodash/overSome.js b/node_modules/lodash/overSome.js new file mode 100644 index 0000000..414ab66 --- /dev/null +++ b/node_modules/lodash/overSome.js @@ -0,0 +1,37 @@ +var arraySome = require('./_arraySome'), +    createOver = require('./_createOver'); + +/** + * Creates a function that checks if **any** of the `predicates` return + * truthy when invoked with the arguments it receives. + * + * Following shorthands are possible for providing predicates. + * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate. + * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Util + * @param {...(Function|Function[])} [predicates=[_.identity]] + *  The predicates to check. + * @returns {Function} Returns the new function. + * @example + * + * var func = _.overSome([Boolean, isFinite]); + * + * func('1'); + * // => true + * + * func(null); + * // => true + * + * func(NaN); + * // => false + * + * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }]) + * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]]) + */ +var overSome = createOver(arraySome); + +module.exports = overSome; diff --git a/node_modules/lodash/package.json b/node_modules/lodash/package.json new file mode 100644 index 0000000..b35fd95 --- /dev/null +++ b/node_modules/lodash/package.json @@ -0,0 +1,17 @@ +{ +  "name": "lodash", +  "version": "4.17.21", +  "description": "Lodash modular utilities.", +  "keywords": "modules, stdlib, util", +  "homepage": "https://lodash.com/", +  "repository": "lodash/lodash", +  "icon": "https://lodash.com/icon.svg", +  "license": "MIT", +  "main": "lodash.js", +  "author": "John-David Dalton <john.david.dalton@gmail.com>", +  "contributors": [ +    "John-David Dalton <john.david.dalton@gmail.com>", +    "Mathias Bynens <mathias@qiwi.be>" +  ], +  "scripts": { "test": "echo \"See https://travis-ci.org/lodash-archive/lodash-cli for testing details.\"" } +} diff --git a/node_modules/lodash/pad.js b/node_modules/lodash/pad.js new file mode 100644 index 0000000..77e1f1c --- /dev/null +++ b/node_modules/lodash/pad.js @@ -0,0 +1,49 @@ +var createPadding = require('./_createPadding'), +    stringSize = require('./_stringSize'), +    toInteger = require('./toInteger'), +    toString = require('./toString'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, +    nativeFloor = Math.floor; + +/** + * Pads `string` on the left and right sides if it's shorter than `length`. + * Padding characters are truncated if they can't be evenly divided by `length`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.pad('abc', 8); + * // => '  abc   ' + * + * _.pad('abc', 8, '_-'); + * // => '_-abc_-_' + * + * _.pad('abc', 3); + * // => 'abc' + */ +function pad(string, length, chars) { +  string = toString(string); +  length = toInteger(length); + +  var strLength = length ? stringSize(string) : 0; +  if (!length || strLength >= length) { +    return string; +  } +  var mid = (length - strLength) / 2; +  return ( +    createPadding(nativeFloor(mid), chars) + +    string + +    createPadding(nativeCeil(mid), chars) +  ); +} + +module.exports = pad; diff --git a/node_modules/lodash/padEnd.js b/node_modules/lodash/padEnd.js new file mode 100644 index 0000000..224eb80 --- /dev/null +++ b/node_modules/lodash/padEnd.js @@ -0,0 +1,39 @@ +var createPadding = require('./_createPadding'), +    stringSize = require('./_stringSize'), +    toInteger = require('./toInteger'), +    toString = require('./toString'); + +/** + * Pads `string` on the right side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padEnd('abc', 6); + * // => 'abc   ' + * + * _.padEnd('abc', 6, '_-'); + * // => 'abc_-_' + * + * _.padEnd('abc', 3); + * // => 'abc' + */ +function padEnd(string, length, chars) { +  string = toString(string); +  length = toInteger(length); + +  var strLength = length ? stringSize(string) : 0; +  return (length && strLength < length) +    ? (string + createPadding(length - strLength, chars)) +    : string; +} + +module.exports = padEnd; diff --git a/node_modules/lodash/padStart.js b/node_modules/lodash/padStart.js new file mode 100644 index 0000000..f991866 --- /dev/null +++ b/node_modules/lodash/padStart.js @@ -0,0 +1,39 @@ +var createPadding = require('./_createPadding'), +    stringSize = require('./_stringSize'), +    toInteger = require('./toInteger'), +    toString = require('./toString'); + +/** + * Pads `string` on the left side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padStart('abc', 6); + * // => '   abc' + * + * _.padStart('abc', 6, '_-'); + * // => '_-_abc' + * + * _.padStart('abc', 3); + * // => 'abc' + */ +function padStart(string, length, chars) { +  string = toString(string); +  length = toInteger(length); + +  var strLength = length ? stringSize(string) : 0; +  return (length && strLength < length) +    ? (createPadding(length - strLength, chars) + string) +    : string; +} + +module.exports = padStart; diff --git a/node_modules/lodash/parseInt.js b/node_modules/lodash/parseInt.js new file mode 100644 index 0000000..b89ac63 --- /dev/null +++ b/node_modules/lodash/parseInt.js @@ -0,0 +1,43 @@ +var root = require('./_root'), +    toString = require('./toString'); + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeParseInt = root.parseInt; + +/** + * Converts `string` to an integer of the specified radix. If `radix` is + * `undefined` or `0`, a `radix` of `10` is used unless `value` is a + * hexadecimal, in which case a `radix` of `16` is used. + * + * **Note:** This method aligns with the + * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category String + * @param {string} string The string to convert. + * @param {number} [radix=10] The radix to interpret `value` by. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {number} Returns the converted integer. + * @example + * + * _.parseInt('08'); + * // => 8 + * + * _.map(['6', '08', '10'], _.parseInt); + * // => [6, 8, 10] + */ +function parseInt(string, radix, guard) { +  if (guard || radix == null) { +    radix = 0; +  } else if (radix) { +    radix = +radix; +  } +  return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); +} + +module.exports = parseInt; diff --git a/node_modules/lodash/partial.js b/node_modules/lodash/partial.js new file mode 100644 index 0000000..05fe8d3 --- /dev/null +++ b/node_modules/lodash/partial.js @@ -0,0 +1,50 @@ +var baseRest = require('./_baseRest'), +    createWrap = require('./_createWrap'), +    getHolder = require('./_getHolder'), +    replaceHolders = require('./_replaceHolders'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_PARTIAL_FLAG = 32; + +/** + * Creates a function that invokes `func` with `partials` prepended to the + * arguments it receives. This method is like `_.bind` except it does **not** + * alter the `this` binding. + * + * The `_.partial.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @since 0.2.0 + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * function greet(greeting, name) { + *   return greeting + ' ' + name; + * } + * + * var sayHelloTo = _.partial(greet, 'hello'); + * sayHelloTo('fred'); + * // => 'hello fred' + * + * // Partially applied with placeholders. + * var greetFred = _.partial(greet, _, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + */ +var partial = baseRest(function(func, partials) { +  var holders = replaceHolders(partials, getHolder(partial)); +  return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders); +}); + +// Assign default placeholders. +partial.placeholder = {}; + +module.exports = partial; diff --git a/node_modules/lodash/partialRight.js b/node_modules/lodash/partialRight.js new file mode 100644 index 0000000..eee031f --- /dev/null +++ b/node_modules/lodash/partialRight.js @@ -0,0 +1,49 @@ +var baseRest = require('./_baseRest'), +    createWrap = require('./_createWrap'), +    getHolder = require('./_getHolder'), +    replaceHolders = require('./_replaceHolders'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_PARTIAL_RIGHT_FLAG = 64; + +/** + * This method is like `_.partial` except that partially applied arguments + * are appended to the arguments it receives. + * + * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * function greet(greeting, name) { + *   return greeting + ' ' + name; + * } + * + * var greetFred = _.partialRight(greet, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + * + * // Partially applied with placeholders. + * var sayHelloTo = _.partialRight(greet, 'hello', _); + * sayHelloTo('fred'); + * // => 'hello fred' + */ +var partialRight = baseRest(function(func, partials) { +  var holders = replaceHolders(partials, getHolder(partialRight)); +  return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders); +}); + +// Assign default placeholders. +partialRight.placeholder = {}; + +module.exports = partialRight; diff --git a/node_modules/lodash/partition.js b/node_modules/lodash/partition.js new file mode 100644 index 0000000..6b814a9 --- /dev/null +++ b/node_modules/lodash/partition.js @@ -0,0 +1,43 @@ +var createAggregator = require('./_createAggregator'); + +/** + * Creates an array of elements split into two groups, the first of which + * contains elements `predicate` returns truthy for, the second of which + * contains elements `predicate` returns falsey for. The predicate is + * invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the array of grouped elements. + * @example + * + * var users = [ + *   { 'user': 'barney',  'age': 36, 'active': false }, + *   { 'user': 'fred',    'age': 40, 'active': true }, + *   { 'user': 'pebbles', 'age': 1,  'active': false } + * ]; + * + * _.partition(users, function(o) { return o.active; }); + * // => objects for [['fred'], ['barney', 'pebbles']] + * + * // The `_.matches` iteratee shorthand. + * _.partition(users, { 'age': 1, 'active': false }); + * // => objects for [['pebbles'], ['barney', 'fred']] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.partition(users, ['active', false]); + * // => objects for [['barney', 'pebbles'], ['fred']] + * + * // The `_.property` iteratee shorthand. + * _.partition(users, 'active'); + * // => objects for [['fred'], ['barney', 'pebbles']] + */ +var partition = createAggregator(function(result, value, key) { +  result[key ? 0 : 1].push(value); +}, function() { return [[], []]; }); + +module.exports = partition; diff --git a/node_modules/lodash/pick.js b/node_modules/lodash/pick.js new file mode 100644 index 0000000..3160199 --- /dev/null +++ b/node_modules/lodash/pick.js @@ -0,0 +1,25 @@ +var basePick = require('./_basePick'), +    flatRest = require('./_flatRest'); + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = flatRest(function(object, paths) { +  return object == null ? {} : basePick(object, paths); +}); + +module.exports = pick; diff --git a/node_modules/lodash/pickBy.js b/node_modules/lodash/pickBy.js new file mode 100644 index 0000000..ae7c271 --- /dev/null +++ b/node_modules/lodash/pickBy.js @@ -0,0 +1,37 @@ +var arrayMap = require('./_arrayMap'), +    baseIteratee = require('./_baseIteratee'), +    basePickBy = require('./_basePickBy'), +    getAllKeysIn = require('./_getAllKeysIn'); + +/** + * Creates an object composed of the `object` properties `predicate` returns + * truthy for. The predicate is invoked with two arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pickBy(object, _.isNumber); + * // => { 'a': 1, 'c': 3 } + */ +function pickBy(object, predicate) { +  if (object == null) { +    return {}; +  } +  var props = arrayMap(getAllKeysIn(object), function(prop) { +    return [prop]; +  }); +  predicate = baseIteratee(predicate); +  return basePickBy(object, props, function(value, path) { +    return predicate(value, path[0]); +  }); +} + +module.exports = pickBy; diff --git a/node_modules/lodash/plant.js b/node_modules/lodash/plant.js new file mode 100644 index 0000000..23776f3 --- /dev/null +++ b/node_modules/lodash/plant.js @@ -0,0 +1,48 @@ +var baseLodash = require('./_baseLodash'), +    wrapperClone = require('./_wrapperClone'); + +/** + * Creates a clone of the chain sequence planting `value` as the wrapped value. + * + * @name plant + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @param {*} value The value to plant. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + *   return n * n; + * } + * + * var wrapped = _([1, 2]).map(square); + * var other = wrapped.plant([3, 4]); + * + * other.value(); + * // => [9, 16] + * + * wrapped.value(); + * // => [1, 4] + */ +function wrapperPlant(value) { +  var result, +      parent = this; + +  while (parent instanceof baseLodash) { +    var clone = wrapperClone(parent); +    clone.__index__ = 0; +    clone.__values__ = undefined; +    if (result) { +      previous.__wrapped__ = clone; +    } else { +      result = clone; +    } +    var previous = clone; +    parent = parent.__wrapped__; +  } +  previous.__wrapped__ = value; +  return result; +} + +module.exports = wrapperPlant; diff --git a/node_modules/lodash/property.js b/node_modules/lodash/property.js new file mode 100644 index 0000000..ca8202f --- /dev/null +++ b/node_modules/lodash/property.js @@ -0,0 +1,32 @@ +var baseProperty = require('./_baseProperty'), +    basePropertyDeep = require('./_basePropertyDeep'), +    isKey = require('./_isKey'), +    toKey = require('./_toKey'); + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + *   { 'a': { 'b': 2 } }, + *   { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { +  return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); +} + +module.exports = property; diff --git a/node_modules/lodash/propertyOf.js b/node_modules/lodash/propertyOf.js new file mode 100644 index 0000000..384044d --- /dev/null +++ b/node_modules/lodash/propertyOf.js @@ -0,0 +1,30 @@ +var baseGet = require('./_baseGet'); + +/** + * The opposite of `_.property`; this method creates a function that returns + * the value at a given path of `object`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Util + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + * @example + * + * var array = [0, 1, 2], + *     object = { 'a': array, 'b': array, 'c': array }; + * + * _.map(['a[2]', 'c[0]'], _.propertyOf(object)); + * // => [2, 0] + * + * _.map([['a', '2'], ['c', '0']], _.propertyOf(object)); + * // => [2, 0] + */ +function propertyOf(object) { +  return function(path) { +    return object == null ? undefined : baseGet(object, path); +  }; +} + +module.exports = propertyOf; diff --git a/node_modules/lodash/pull.js b/node_modules/lodash/pull.js new file mode 100644 index 0000000..a2efcb5 --- /dev/null +++ b/node_modules/lodash/pull.js @@ -0,0 +1,29 @@ +var baseRest = require('./_baseRest'), +    pullAll = require('./pullAll'); + +/** + * Removes all given values from `array` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` + * to remove elements from an array by predicate. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...*} [values] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pull(array, 'a', 'c'); + * console.log(array); + * // => ['b', 'b'] + */ +var pull = baseRest(pullAll); + +module.exports = pull; diff --git a/node_modules/lodash/pullAll.js b/node_modules/lodash/pullAll.js new file mode 100644 index 0000000..f4605c2 --- /dev/null +++ b/node_modules/lodash/pullAll.js @@ -0,0 +1,29 @@ +var basePullAll = require('./_basePullAll'); + +/** + * This method is like `_.pull` except that it accepts an array of values to remove. + * + * **Note:** Unlike `_.difference`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pullAll(array, ['a', 'c']); + * console.log(array); + * // => ['b', 'b'] + */ +function pullAll(array, values) { +  return (array && array.length && values && values.length) +    ? basePullAll(array, values) +    : array; +} + +module.exports = pullAll; diff --git a/node_modules/lodash/pullAllBy.js b/node_modules/lodash/pullAllBy.js new file mode 100644 index 0000000..74025e8 --- /dev/null +++ b/node_modules/lodash/pullAllBy.js @@ -0,0 +1,33 @@ +var baseIteratee = require('./_baseIteratee'), +    basePullAll = require('./_basePullAll'); + +/** + * This method is like `_.pullAll` except that it accepts `iteratee` which is + * invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The iteratee is invoked with one argument: (value). + * + * **Note:** Unlike `_.differenceBy`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; + * + * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); + * console.log(array); + * // => [{ 'x': 2 }] + */ +function pullAllBy(array, values, iteratee) { +  return (array && array.length && values && values.length) +    ? basePullAll(array, values, baseIteratee(iteratee, 2)) +    : array; +} + +module.exports = pullAllBy; diff --git a/node_modules/lodash/pullAllWith.js b/node_modules/lodash/pullAllWith.js new file mode 100644 index 0000000..1d2fd9f --- /dev/null +++ b/node_modules/lodash/pullAllWith.js @@ -0,0 +1,32 @@ +var basePullAll = require('./_basePullAll'); + +/** + * This method is like `_.pullAll` except that it accepts `comparator` which + * is invoked to compare elements of `array` to `values`. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.differenceWith`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; + * + * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); + * console.log(array); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] + */ +function pullAllWith(array, values, comparator) { +  return (array && array.length && values && values.length) +    ? basePullAll(array, values, undefined, comparator) +    : array; +} + +module.exports = pullAllWith; diff --git a/node_modules/lodash/pullAt.js b/node_modules/lodash/pullAt.js new file mode 100644 index 0000000..6ed84e0 --- /dev/null +++ b/node_modules/lodash/pullAt.js @@ -0,0 +1,43 @@ +var arrayMap = require('./_arrayMap'), +    baseAt = require('./_baseAt'), +    basePullAt = require('./_basePullAt'), +    compareAscending = require('./_compareAscending'), +    flatRest = require('./_flatRest'), +    isIndex = require('./_isIndex'); + +/** + * Removes elements from `array` corresponding to `indexes` and returns an + * array of removed elements. + * + * **Note:** Unlike `_.at`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...(number|number[])} [indexes] The indexes of elements to remove. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * var pulled = _.pullAt(array, [1, 3]); + * + * console.log(array); + * // => ['a', 'c'] + * + * console.log(pulled); + * // => ['b', 'd'] + */ +var pullAt = flatRest(function(array, indexes) { +  var length = array == null ? 0 : array.length, +      result = baseAt(array, indexes); + +  basePullAt(array, arrayMap(indexes, function(index) { +    return isIndex(index, length) ? +index : index; +  }).sort(compareAscending)); + +  return result; +}); + +module.exports = pullAt; diff --git a/node_modules/lodash/random.js b/node_modules/lodash/random.js new file mode 100644 index 0000000..8067711 --- /dev/null +++ b/node_modules/lodash/random.js @@ -0,0 +1,82 @@ +var baseRandom = require('./_baseRandom'), +    isIterateeCall = require('./_isIterateeCall'), +    toFinite = require('./toFinite'); + +/** Built-in method references without a dependency on `root`. */ +var freeParseFloat = parseFloat; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min, +    nativeRandom = Math.random; + +/** + * Produces a random number between the inclusive `lower` and `upper` bounds. + * If only one argument is provided a number between `0` and the given number + * is returned. If `floating` is `true`, or either `lower` or `upper` are + * floats, a floating-point number is returned instead of an integer. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Number + * @param {number} [lower=0] The lower bound. + * @param {number} [upper=1] The upper bound. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ +function random(lower, upper, floating) { +  if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { +    upper = floating = undefined; +  } +  if (floating === undefined) { +    if (typeof upper == 'boolean') { +      floating = upper; +      upper = undefined; +    } +    else if (typeof lower == 'boolean') { +      floating = lower; +      lower = undefined; +    } +  } +  if (lower === undefined && upper === undefined) { +    lower = 0; +    upper = 1; +  } +  else { +    lower = toFinite(lower); +    if (upper === undefined) { +      upper = lower; +      lower = 0; +    } else { +      upper = toFinite(upper); +    } +  } +  if (lower > upper) { +    var temp = lower; +    lower = upper; +    upper = temp; +  } +  if (floating || lower % 1 || upper % 1) { +    var rand = nativeRandom(); +    return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); +  } +  return baseRandom(lower, upper); +} + +module.exports = random; diff --git a/node_modules/lodash/range.js b/node_modules/lodash/range.js new file mode 100644 index 0000000..fa63b09 --- /dev/null +++ b/node_modules/lodash/range.js @@ -0,0 +1,46 @@ +var createRange = require('./_createRange'); + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = createRange(); + +module.exports = range; diff --git a/node_modules/lodash/rangeRight.js b/node_modules/lodash/rangeRight.js new file mode 100644 index 0000000..271fafc --- /dev/null +++ b/node_modules/lodash/rangeRight.js @@ -0,0 +1,41 @@ +var createRange = require('./_createRange'); + +/** + * This method is like `_.range` except that it populates values in + * descending order. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.range + * @example + * + * _.rangeRight(4); + * // => [3, 2, 1, 0] + * + * _.rangeRight(-4); + * // => [-3, -2, -1, 0] + * + * _.rangeRight(1, 5); + * // => [4, 3, 2, 1] + * + * _.rangeRight(0, 20, 5); + * // => [15, 10, 5, 0] + * + * _.rangeRight(0, -4, -1); + * // => [-3, -2, -1, 0] + * + * _.rangeRight(1, 4, 0); + * // => [1, 1, 1] + * + * _.rangeRight(0); + * // => [] + */ +var rangeRight = createRange(true); + +module.exports = rangeRight; diff --git a/node_modules/lodash/rearg.js b/node_modules/lodash/rearg.js new file mode 100644 index 0000000..a3e1970 --- /dev/null +++ b/node_modules/lodash/rearg.js @@ -0,0 +1,33 @@ +var createWrap = require('./_createWrap'), +    flatRest = require('./_flatRest'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_REARG_FLAG = 256; + +/** + * Creates a function that invokes `func` with arguments arranged according + * to the specified `indexes` where the argument value at the first index is + * provided as the first argument, the argument value at the second index is + * provided as the second argument, and so on. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to rearrange arguments for. + * @param {...(number|number[])} indexes The arranged argument indexes. + * @returns {Function} Returns the new function. + * @example + * + * var rearged = _.rearg(function(a, b, c) { + *   return [a, b, c]; + * }, [2, 0, 1]); + * + * rearged('b', 'c', 'a') + * // => ['a', 'b', 'c'] + */ +var rearg = flatRest(function(func, indexes) { +  return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes); +}); + +module.exports = rearg; diff --git a/node_modules/lodash/reduce.js b/node_modules/lodash/reduce.js new file mode 100644 index 0000000..5a1df4d --- /dev/null +++ b/node_modules/lodash/reduce.js @@ -0,0 +1,51 @@ +var arrayReduce = require('./_arrayReduce'), +    baseEach = require('./_baseEach'), +    baseIteratee = require('./_baseIteratee'), +    baseReduce = require('./_baseReduce'), +    isArray = require('./isArray'); + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + *   return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + *   (result[value] || (result[value] = [])).push(key); + *   return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { +  var func = isArray(collection) ? arrayReduce : baseReduce, +      initAccum = arguments.length < 3; + +  return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach); +} + +module.exports = reduce; diff --git a/node_modules/lodash/reduceRight.js b/node_modules/lodash/reduceRight.js new file mode 100644 index 0000000..e06a7cb --- /dev/null +++ b/node_modules/lodash/reduceRight.js @@ -0,0 +1,36 @@ +var arrayReduceRight = require('./_arrayReduceRight'), +    baseEachRight = require('./_baseEachRight'), +    baseIteratee = require('./_baseIteratee'), +    baseReduce = require('./_baseReduce'), +    isArray = require('./isArray'); + +/** + * This method is like `_.reduce` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduce + * @example + * + * var array = [[0, 1], [2, 3], [4, 5]]; + * + * _.reduceRight(array, function(flattened, other) { + *   return flattened.concat(other); + * }, []); + * // => [4, 5, 2, 3, 0, 1] + */ +function reduceRight(collection, iteratee, accumulator) { +  var func = isArray(collection) ? arrayReduceRight : baseReduce, +      initAccum = arguments.length < 3; + +  return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); +} + +module.exports = reduceRight; diff --git a/node_modules/lodash/reject.js b/node_modules/lodash/reject.js new file mode 100644 index 0000000..a13e554 --- /dev/null +++ b/node_modules/lodash/reject.js @@ -0,0 +1,46 @@ +var arrayFilter = require('./_arrayFilter'), +    baseFilter = require('./_baseFilter'), +    baseIteratee = require('./_baseIteratee'), +    isArray = require('./isArray'), +    negate = require('./negate'); + +/** + * The opposite of `_.filter`; this method returns the elements of `collection` + * that `predicate` does **not** return truthy for. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.filter + * @example + * + * var users = [ + *   { 'user': 'barney', 'age': 36, 'active': false }, + *   { 'user': 'fred',   'age': 40, 'active': true } + * ]; + * + * _.reject(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.reject(users, { 'age': 40, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.reject(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.reject(users, 'active'); + * // => objects for ['barney'] + */ +function reject(collection, predicate) { +  var func = isArray(collection) ? arrayFilter : baseFilter; +  return func(collection, negate(baseIteratee(predicate, 3))); +} + +module.exports = reject; diff --git a/node_modules/lodash/release.md b/node_modules/lodash/release.md new file mode 100644 index 0000000..465d8ff --- /dev/null +++ b/node_modules/lodash/release.md @@ -0,0 +1,48 @@ +npm run build +npm run doc +npm i +git clone --depth=10 --branch=master git@github.com:lodash-archive/lodash-cli.git ./node_modules/lodash-cli +mkdir -p ./node_modules/lodash-cli/node_modules/lodash; cd $_; cp ../../../../lodash.js ./lodash.js; cp ../../../../package.json ./package.json +cd ../../; npm i --production; cd ../../ +node ./node_modules/lodash-cli/bin/lodash core exports=node -o ./npm-package/core.js +node ./node_modules/lodash-cli/bin/lodash modularize exports=node -o ./npm-package +cp lodash.js npm-package/lodash.js +cp dist/lodash.min.js npm-package/lodash.min.js +cp LICENSE npm-package/LICENSE + +1. Clone two repos +Bump lodash version in package.json, readme, package=locak, lodash.js +npm run build +npm run doc + +2. update mappings in ldoash-cli +3. copy ldoash into lodash-cli node modules and package json. + +node ./node_modules/lodash-cli/bin/lodash core exports=node -o ./npm-package/core.js +node ./node_modules/lodash-cli/bin/lodash modularize exports=node -o ./npm-package + + + +1. Clone the two repositories: +```sh +$ git clone https://github.com/lodash/lodash.git +$ git clone https://github.com/bnjmnt4n/lodash-cli.git +``` +2. Update lodash-cli to accomdate changes in lodash source. This can typically involve adding new function dependency mappings in lib/mappings.js. Sometimes, additional changes might be needed for more involved functions. +3. In the lodash repository, update references to the lodash version in README.md, lodash.js, package.jsona nd package-lock.json +4. Run: +```sh +npm run build +npm run doc +node ../lodash-cli/bin/lodash core -o ./dist/lodash.core.js +``` +5. Add a commit and tag the release +mkdir ../lodash-temp +cp lodash.js dist/lodash.min.js dist/lodash.core.js dist/lodash.core.min.js ../lodash-temp/ +node ../lodash-cli/bin/lodash modularize exports=node -o . +cp ../lodash-temp/lodash.core.js core.js +cp ../lodash-temp/lodash.core.min.js core.min.js +cp ../lodash-temp/lodash.js lodash.js +cp ../lodash-temp/lodash.min.js lodash.min.js + +❯ node ../lodash-cli/bin/lodash modularize exports=es -o . diff --git a/node_modules/lodash/remove.js b/node_modules/lodash/remove.js new file mode 100644 index 0000000..87b1898 --- /dev/null +++ b/node_modules/lodash/remove.js @@ -0,0 +1,53 @@ +var baseIteratee = require('./_baseIteratee'), +    basePullAt = require('./_basePullAt'); + +/** + * Removes all elements from `array` that `predicate` returns truthy for + * and returns an array of the removed elements. The predicate is invoked + * with three arguments: (value, index, array). + * + * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` + * to pull elements from an array by value. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4]; + * var evens = _.remove(array, function(n) { + *   return n % 2 == 0; + * }); + * + * console.log(array); + * // => [1, 3] + * + * console.log(evens); + * // => [2, 4] + */ +function remove(array, predicate) { +  var result = []; +  if (!(array && array.length)) { +    return result; +  } +  var index = -1, +      indexes = [], +      length = array.length; + +  predicate = baseIteratee(predicate, 3); +  while (++index < length) { +    var value = array[index]; +    if (predicate(value, index, array)) { +      result.push(value); +      indexes.push(index); +    } +  } +  basePullAt(array, indexes); +  return result; +} + +module.exports = remove; diff --git a/node_modules/lodash/repeat.js b/node_modules/lodash/repeat.js new file mode 100644 index 0000000..f4d8c69 --- /dev/null +++ b/node_modules/lodash/repeat.js @@ -0,0 +1,37 @@ +var baseRepeat = require('./_baseRepeat'), +    isIterateeCall = require('./_isIterateeCall'), +    toInteger = require('./toInteger'), +    toString = require('./toString'); + +/** + * Repeats the given string `n` times. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to repeat. + * @param {number} [n=1] The number of times to repeat the string. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {string} Returns the repeated string. + * @example + * + * _.repeat('*', 3); + * // => '***' + * + * _.repeat('abc', 2); + * // => 'abcabc' + * + * _.repeat('abc', 0); + * // => '' + */ +function repeat(string, n, guard) { +  if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { +    n = 1; +  } else { +    n = toInteger(n); +  } +  return baseRepeat(toString(string), n); +} + +module.exports = repeat; diff --git a/node_modules/lodash/replace.js b/node_modules/lodash/replace.js new file mode 100644 index 0000000..6e26ecd --- /dev/null +++ b/node_modules/lodash/replace.js @@ -0,0 +1,29 @@ +var toString = require('./toString'); + +/** + * Replaces matches for `pattern` in `string` with `replacement`. + * + * **Note:** This method is based on + * [`String#replace`](https://mdn.io/String/replace). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to modify. + * @param {RegExp|string} pattern The pattern to replace. + * @param {Function|string} replacement The match replacement. + * @returns {string} Returns the modified string. + * @example + * + * _.replace('Hi Fred', 'Fred', 'Barney'); + * // => 'Hi Barney' + */ +function replace() { +  var args = arguments, +      string = toString(args[0]); + +  return args.length < 3 ? string : string.replace(args[1], args[2]); +} + +module.exports = replace; diff --git a/node_modules/lodash/rest.js b/node_modules/lodash/rest.js new file mode 100644 index 0000000..eaaad00 --- /dev/null +++ b/node_modules/lodash/rest.js @@ -0,0 +1,40 @@ +var baseRest = require('./_baseRest'), +    toInteger = require('./toInteger'); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as + * an array. + * + * **Note:** This method is based on the + * [rest parameter](https://mdn.io/rest_parameters). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.rest(function(what, names) { + *   return what + ' ' + _.initial(names).join(', ') + + *     (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' + */ +function rest(func, start) { +  if (typeof func != 'function') { +    throw new TypeError(FUNC_ERROR_TEXT); +  } +  start = start === undefined ? start : toInteger(start); +  return baseRest(func, start); +} + +module.exports = rest; diff --git a/node_modules/lodash/result.js b/node_modules/lodash/result.js new file mode 100644 index 0000000..eae1250 --- /dev/null +++ b/node_modules/lodash/result.js @@ -0,0 +1,56 @@ +var castPath = require('./_castPath'), +    isFunction = require('./isFunction'), +    toKey = require('./_toKey'); + +/** + * This method is like `_.get` except that if the resolved value is a + * function it's invoked with the `this` binding of its parent object and + * its result is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a[0].b.c3', 'default'); + * // => 'default' + * + * _.result(object, 'a[0].b.c3', _.constant('default')); + * // => 'default' + */ +function result(object, path, defaultValue) { +  path = castPath(path, object); + +  var index = -1, +      length = path.length; + +  // Ensure the loop is entered when path is empty. +  if (!length) { +    length = 1; +    object = undefined; +  } +  while (++index < length) { +    var value = object == null ? undefined : object[toKey(path[index])]; +    if (value === undefined) { +      index = length; +      value = defaultValue; +    } +    object = isFunction(value) ? value.call(object) : value; +  } +  return object; +} + +module.exports = result; diff --git a/node_modules/lodash/reverse.js b/node_modules/lodash/reverse.js new file mode 100644 index 0000000..21764af --- /dev/null +++ b/node_modules/lodash/reverse.js @@ -0,0 +1,34 @@ +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeReverse = arrayProto.reverse; + +/** + * Reverses `array` so that the first element becomes the last, the second + * element becomes the second to last, and so on. + * + * **Note:** This method mutates `array` and is based on + * [`Array#reverse`](https://mdn.io/Array/reverse). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.reverse(array); + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ +function reverse(array) { +  return array == null ? array : nativeReverse.call(array); +} + +module.exports = reverse; diff --git a/node_modules/lodash/round.js b/node_modules/lodash/round.js new file mode 100644 index 0000000..fccc831 --- /dev/null +++ b/node_modules/lodash/round.js @@ -0,0 +1,26 @@ +var createRound = require('./_createRound'); + +/** + * Computes `number` rounded to `precision`. + * + * @static + * @memberOf _ + * @since 3.10.0 + * @category Math + * @param {number} number The number to round. + * @param {number} [precision=0] The precision to round to. + * @returns {number} Returns the rounded number. + * @example + * + * _.round(4.006); + * // => 4 + * + * _.round(4.006, 2); + * // => 4.01 + * + * _.round(4060, -2); + * // => 4100 + */ +var round = createRound('round'); + +module.exports = round; diff --git a/node_modules/lodash/sample.js b/node_modules/lodash/sample.js new file mode 100644 index 0000000..39c3560 --- /dev/null +++ b/node_modules/lodash/sample.js @@ -0,0 +1,24 @@ +var arraySample = require('./_arraySample'), +    baseSample = require('./_baseSample'), +    isArray = require('./isArray'); + +/** + * Gets a random element from `collection`. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + * @example + * + * _.sample([1, 2, 3, 4]); + * // => 2 + */ +function sample(collection) { +  var func = isArray(collection) ? arraySample : baseSample; +  return func(collection); +} + +module.exports = sample; diff --git a/node_modules/lodash/sampleSize.js b/node_modules/lodash/sampleSize.js new file mode 100644 index 0000000..a303686 --- /dev/null +++ b/node_modules/lodash/sampleSize.js @@ -0,0 +1,37 @@ +var arraySampleSize = require('./_arraySampleSize'), +    baseSampleSize = require('./_baseSampleSize'), +    isArray = require('./isArray'), +    isIterateeCall = require('./_isIterateeCall'), +    toInteger = require('./toInteger'); + +/** + * Gets `n` random elements at unique keys from `collection` up to the + * size of `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @param {number} [n=1] The number of elements to sample. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the random elements. + * @example + * + * _.sampleSize([1, 2, 3], 2); + * // => [3, 1] + * + * _.sampleSize([1, 2, 3], 4); + * // => [2, 3, 1] + */ +function sampleSize(collection, n, guard) { +  if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { +    n = 1; +  } else { +    n = toInteger(n); +  } +  var func = isArray(collection) ? arraySampleSize : baseSampleSize; +  return func(collection, n); +} + +module.exports = sampleSize; diff --git a/node_modules/lodash/seq.js b/node_modules/lodash/seq.js new file mode 100644 index 0000000..1570c2d --- /dev/null +++ b/node_modules/lodash/seq.js @@ -0,0 +1,16 @@ +module.exports = { +  'at': require('./wrapperAt'), +  'chain': require('./chain'), +  'commit': require('./commit'), +  'lodash': require('./wrapperLodash'), +  'next': require('./next'), +  'plant': require('./plant'), +  'reverse': require('./wrapperReverse'), +  'tap': require('./tap'), +  'thru': require('./thru'), +  'toIterator': require('./toIterator'), +  'toJSON': require('./toJSON'), +  'value': require('./wrapperValue'), +  'valueOf': require('./valueOf'), +  'wrapperChain': require('./wrapperChain') +}; diff --git a/node_modules/lodash/set.js b/node_modules/lodash/set.js new file mode 100644 index 0000000..d663002 --- /dev/null +++ b/node_modules/lodash/set.js @@ -0,0 +1,35 @@ +var baseSet = require('./_baseSet'); + +/** + * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, + * it's created. Arrays are created for missing index properties while objects + * are created for all other missing properties. Use `_.setWith` to customize + * `path` creation. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, ['x', '0', 'y', 'z'], 5); + * console.log(object.x[0].y.z); + * // => 5 + */ +function set(object, path, value) { +  return object == null ? object : baseSet(object, path, value); +} + +module.exports = set; diff --git a/node_modules/lodash/setWith.js b/node_modules/lodash/setWith.js new file mode 100644 index 0000000..fb3e0f6 --- /dev/null +++ b/node_modules/lodash/setWith.js @@ -0,0 +1,32 @@ +var baseSet = require('./_baseSet'); + +/** + * This method is like `_.set` except that it accepts `customizer` which is + * invoked to produce the objects of `path`.  If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.setWith(object, '[0][1]', 'a', Object); + * // => { '0': { '1': 'a' } } + */ +function setWith(object, path, value, customizer) { +  customizer = typeof customizer == 'function' ? customizer : undefined; +  return object == null ? object : baseSet(object, path, value, customizer); +} + +module.exports = setWith; diff --git a/node_modules/lodash/shuffle.js b/node_modules/lodash/shuffle.js new file mode 100644 index 0000000..2b72da7 --- /dev/null +++ b/node_modules/lodash/shuffle.js @@ -0,0 +1,25 @@ +var arrayShuffle = require('./_arrayShuffle'), +    baseShuffle = require('./_baseShuffle'), +    isArray = require('./isArray'); + +/** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ +function shuffle(collection) { +  var func = isArray(collection) ? arrayShuffle : baseShuffle; +  return func(collection); +} + +module.exports = shuffle; diff --git a/node_modules/lodash/size.js b/node_modules/lodash/size.js new file mode 100644 index 0000000..3561fc1 --- /dev/null +++ b/node_modules/lodash/size.js @@ -0,0 +1,46 @@ +var baseKeys = require('./_baseKeys'), +    getTag = require('./_getTag'), +    isArrayLike = require('./isArrayLike'), +    isString = require('./isString'), +    stringSize = require('./_stringSize'); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', +    setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { +  if (collection == null) { +    return 0; +  } +  if (isArrayLike(collection)) { +    return isString(collection) ? stringSize(collection) : collection.length; +  } +  var tag = getTag(collection); +  if (tag == mapTag || tag == setTag) { +    return collection.size; +  } +  return baseKeys(collection).length; +} + +module.exports = size; diff --git a/node_modules/lodash/slice.js b/node_modules/lodash/slice.js new file mode 100644 index 0000000..f732442 --- /dev/null +++ b/node_modules/lodash/slice.js @@ -0,0 +1,37 @@ +var baseSlice = require('./_baseSlice'), +    isIterateeCall = require('./_isIterateeCall'), +    toInteger = require('./toInteger'); + +/** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of + * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are + * returned. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ +function slice(array, start, end) { +  var length = array == null ? 0 : array.length; +  if (!length) { +    return []; +  } +  if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { +    start = 0; +    end = length; +  } +  else { +    start = start == null ? 0 : toInteger(start); +    end = end === undefined ? length : toInteger(end); +  } +  return baseSlice(array, start, end); +} + +module.exports = slice; diff --git a/node_modules/lodash/snakeCase.js b/node_modules/lodash/snakeCase.js new file mode 100644 index 0000000..27f2a76 --- /dev/null +++ b/node_modules/lodash/snakeCase.js @@ -0,0 +1,28 @@ +var createCompounder = require('./_createCompounder'); + +/** + * Converts `string` to + * [snake case](https://en.wikipedia.org/wiki/Snake_case). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the snake cased string. + * @example + * + * _.snakeCase('Foo Bar'); + * // => 'foo_bar' + * + * _.snakeCase('fooBar'); + * // => 'foo_bar' + * + * _.snakeCase('--FOO-BAR--'); + * // => 'foo_bar' + */ +var snakeCase = createCompounder(function(result, word, index) { +  return result + (index ? '_' : '') + word.toLowerCase(); +}); + +module.exports = snakeCase; diff --git a/node_modules/lodash/some.js b/node_modules/lodash/some.js new file mode 100644 index 0000000..9c1d08c --- /dev/null +++ b/node_modules/lodash/some.js @@ -0,0 +1,51 @@ +var arraySome = require('./_arraySome'), +    baseIteratee = require('./_baseIteratee'), +    baseSome = require('./_baseSome'), +    isArray = require('./isArray'), +    isIterateeCall = require('./_isIterateeCall'); + +/** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * Iteration is stopped once `predicate` returns truthy. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + *  else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + *   { 'user': 'barney', 'active': true }, + *   { 'user': 'fred',   'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.some(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.some(users, 'active'); + * // => true + */ +function some(collection, predicate, guard) { +  var func = isArray(collection) ? arraySome : baseSome; +  if (guard && isIterateeCall(collection, predicate, guard)) { +    predicate = undefined; +  } +  return func(collection, baseIteratee(predicate, 3)); +} + +module.exports = some; diff --git a/node_modules/lodash/sortBy.js b/node_modules/lodash/sortBy.js new file mode 100644 index 0000000..d756aba --- /dev/null +++ b/node_modules/lodash/sortBy.js @@ -0,0 +1,48 @@ +var baseFlatten = require('./_baseFlatten'), +    baseOrderBy = require('./_baseOrderBy'), +    baseRest = require('./_baseRest'), +    isIterateeCall = require('./_isIterateeCall'); + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + *  The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + *   { 'user': 'fred',   'age': 48 }, + *   { 'user': 'barney', 'age': 36 }, + *   { 'user': 'fred',   'age': 30 }, + *   { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = baseRest(function(collection, iteratees) { +  if (collection == null) { +    return []; +  } +  var length = iteratees.length; +  if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { +    iteratees = []; +  } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { +    iteratees = [iteratees[0]]; +  } +  return baseOrderBy(collection, baseFlatten(iteratees, 1), []); +}); + +module.exports = sortBy; diff --git a/node_modules/lodash/sortedIndex.js b/node_modules/lodash/sortedIndex.js new file mode 100644 index 0000000..e763473 --- /dev/null +++ b/node_modules/lodash/sortedIndex.js @@ -0,0 +1,24 @@ +var baseSortedIndex = require('./_baseSortedIndex'); + +/** + * Uses a binary search to determine the lowest index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + *  into `array`. + * @example + * + * _.sortedIndex([30, 50], 40); + * // => 1 + */ +function sortedIndex(array, value) { +  return baseSortedIndex(array, value); +} + +module.exports = sortedIndex; diff --git a/node_modules/lodash/sortedIndexBy.js b/node_modules/lodash/sortedIndexBy.js new file mode 100644 index 0000000..945f23c --- /dev/null +++ b/node_modules/lodash/sortedIndexBy.js @@ -0,0 +1,33 @@ +var baseIteratee = require('./_baseIteratee'), +    baseSortedIndexBy = require('./_baseSortedIndexBy'); + +/** + * This method is like `_.sortedIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + *  into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); + * // => 0 + */ +function sortedIndexBy(array, value, iteratee) { +  return baseSortedIndexBy(array, value, baseIteratee(iteratee, 2)); +} + +module.exports = sortedIndexBy; diff --git a/node_modules/lodash/sortedIndexOf.js b/node_modules/lodash/sortedIndexOf.js new file mode 100644 index 0000000..e2d3b7a --- /dev/null +++ b/node_modules/lodash/sortedIndexOf.js @@ -0,0 +1,31 @@ +var baseSortedIndex = require('./_baseSortedIndex'), +    eq = require('./eq'); + +/** + * This method is like `_.indexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedIndexOf([4, 5, 5, 5, 6], 5); + * // => 1 + */ +function sortedIndexOf(array, value) { +  var length = array == null ? 0 : array.length; +  if (length) { +    var index = baseSortedIndex(array, value); +    if (index < length && eq(array[index], value)) { +      return index; +    } +  } +  return -1; +} + +module.exports = sortedIndexOf; diff --git a/node_modules/lodash/sortedLastIndex.js b/node_modules/lodash/sortedLastIndex.js new file mode 100644 index 0000000..9380cb9 --- /dev/null +++ b/node_modules/lodash/sortedLastIndex.js @@ -0,0 +1,25 @@ +var baseSortedIndex = require('./_baseSortedIndex'); + +/** + * This method is like `_.sortedIndex` except that it returns the highest + * index at which `value` should be inserted into `array` in order to + * maintain its sort order. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + *  into `array`. + * @example + * + * _.sortedLastIndex([4, 5, 5, 5, 6], 5); + * // => 4 + */ +function sortedLastIndex(array, value) { +  return baseSortedIndex(array, value, true); +} + +module.exports = sortedLastIndex; diff --git a/node_modules/lodash/sortedLastIndexBy.js b/node_modules/lodash/sortedLastIndexBy.js new file mode 100644 index 0000000..9225eeb --- /dev/null +++ b/node_modules/lodash/sortedLastIndexBy.js @@ -0,0 +1,33 @@ +var baseIteratee = require('./_baseIteratee'), +    baseSortedIndexBy = require('./_baseSortedIndexBy'); + +/** + * This method is like `_.sortedLastIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + *  into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 1 + * + * // The `_.property` iteratee shorthand. + * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); + * // => 1 + */ +function sortedLastIndexBy(array, value, iteratee) { +  return baseSortedIndexBy(array, value, baseIteratee(iteratee, 2), true); +} + +module.exports = sortedLastIndexBy; diff --git a/node_modules/lodash/sortedLastIndexOf.js b/node_modules/lodash/sortedLastIndexOf.js new file mode 100644 index 0000000..18bc4c5 --- /dev/null +++ b/node_modules/lodash/sortedLastIndexOf.js @@ -0,0 +1,31 @@ +var baseSortedIndex = require('./_baseSortedIndex'), +    eq = require('./eq'); + +/** + * This method is like `_.lastIndexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); + * // => 3 + */ +function sortedLastIndexOf(array, value) { +  var length = array == null ? 0 : array.length; +  if (length) { +    var index = baseSortedIndex(array, value, true) - 1; +    if (eq(array[index], value)) { +      return index; +    } +  } +  return -1; +} + +module.exports = sortedLastIndexOf; diff --git a/node_modules/lodash/sortedUniq.js b/node_modules/lodash/sortedUniq.js new file mode 100644 index 0000000..866db31 --- /dev/null +++ b/node_modules/lodash/sortedUniq.js @@ -0,0 +1,24 @@ +var baseSortedUniq = require('./_baseSortedUniq'); + +/** + * This method is like `_.uniq` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniq([1, 1, 2]); + * // => [1, 2] + */ +function sortedUniq(array) { +  return (array && array.length) +    ? baseSortedUniq(array) +    : []; +} + +module.exports = sortedUniq; diff --git a/node_modules/lodash/sortedUniqBy.js b/node_modules/lodash/sortedUniqBy.js new file mode 100644 index 0000000..4f05ebe --- /dev/null +++ b/node_modules/lodash/sortedUniqBy.js @@ -0,0 +1,26 @@ +var baseIteratee = require('./_baseIteratee'), +    baseSortedUniq = require('./_baseSortedUniq'); + +/** + * This method is like `_.uniqBy` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); + * // => [1.1, 2.3] + */ +function sortedUniqBy(array, iteratee) { +  return (array && array.length) +    ? baseSortedUniq(array, baseIteratee(iteratee, 2)) +    : []; +} + +module.exports = sortedUniqBy; diff --git a/node_modules/lodash/split.js b/node_modules/lodash/split.js new file mode 100644 index 0000000..956b48a --- /dev/null +++ b/node_modules/lodash/split.js @@ -0,0 +1,52 @@ +var baseToString = require('./_baseToString'), +    castSlice = require('./_castSlice'), +    hasUnicode = require('./_hasUnicode'), +    isIterateeCall = require('./_isIterateeCall'), +    isRegExp = require('./isRegExp'), +    stringToArray = require('./_stringToArray'), +    toString = require('./toString'); + +/** Used as references for the maximum length and index of an array. */ +var MAX_ARRAY_LENGTH = 4294967295; + +/** + * Splits `string` by `separator`. + * + * **Note:** This method is based on + * [`String#split`](https://mdn.io/String/split). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to split. + * @param {RegExp|string} separator The separator pattern to split by. + * @param {number} [limit] The length to truncate results to. + * @returns {Array} Returns the string segments. + * @example + * + * _.split('a-b-c', '-', 2); + * // => ['a', 'b'] + */ +function split(string, separator, limit) { +  if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { +    separator = limit = undefined; +  } +  limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; +  if (!limit) { +    return []; +  } +  string = toString(string); +  if (string && ( +        typeof separator == 'string' || +        (separator != null && !isRegExp(separator)) +      )) { +    separator = baseToString(separator); +    if (!separator && hasUnicode(string)) { +      return castSlice(stringToArray(string), 0, limit); +    } +  } +  return string.split(separator, limit); +} + +module.exports = split; diff --git a/node_modules/lodash/spread.js b/node_modules/lodash/spread.js new file mode 100644 index 0000000..60a08e2 --- /dev/null +++ b/node_modules/lodash/spread.js @@ -0,0 +1,63 @@ +var apply = require('./_apply'), +    arrayPush = require('./_arrayPush'), +    baseRest = require('./_baseRest'), +    castSlice = require('./_castSlice'), +    toInteger = require('./toInteger'); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates a function that invokes `func` with the `this` binding of the + * create function and an array of arguments much like + * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). + * + * **Note:** This method is based on the + * [spread operator](https://mdn.io/spread_operator). + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Function + * @param {Function} func The function to spread arguments over. + * @param {number} [start=0] The start position of the spread. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.spread(function(who, what) { + *   return who + ' says ' + what; + * }); + * + * say(['fred', 'hello']); + * // => 'fred says hello' + * + * var numbers = Promise.all([ + *   Promise.resolve(40), + *   Promise.resolve(36) + * ]); + * + * numbers.then(_.spread(function(x, y) { + *   return x + y; + * })); + * // => a Promise of 76 + */ +function spread(func, start) { +  if (typeof func != 'function') { +    throw new TypeError(FUNC_ERROR_TEXT); +  } +  start = start == null ? 0 : nativeMax(toInteger(start), 0); +  return baseRest(function(args) { +    var array = args[start], +        otherArgs = castSlice(args, 0, start); + +    if (array) { +      arrayPush(otherArgs, array); +    } +    return apply(func, this, otherArgs); +  }); +} + +module.exports = spread; diff --git a/node_modules/lodash/startCase.js b/node_modules/lodash/startCase.js new file mode 100644 index 0000000..a48f21c --- /dev/null +++ b/node_modules/lodash/startCase.js @@ -0,0 +1,29 @@ +var createCompounder = require('./_createCompounder'), +    upperFirst = require('./upperFirst'); + +/** + * Converts `string` to + * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). + * + * @static + * @memberOf _ + * @since 3.1.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the start cased string. + * @example + * + * _.startCase('--foo-bar--'); + * // => 'Foo Bar' + * + * _.startCase('fooBar'); + * // => 'Foo Bar' + * + * _.startCase('__FOO_BAR__'); + * // => 'FOO BAR' + */ +var startCase = createCompounder(function(result, word, index) { +  return result + (index ? ' ' : '') + upperFirst(word); +}); + +module.exports = startCase; diff --git a/node_modules/lodash/startsWith.js b/node_modules/lodash/startsWith.js new file mode 100644 index 0000000..956c098 --- /dev/null +++ b/node_modules/lodash/startsWith.js @@ -0,0 +1,39 @@ +var baseClamp = require('./_baseClamp'), +    baseToString = require('./_baseToString'), +    toInteger = require('./toInteger'), +    toString = require('./toString'); + +/** + * Checks if `string` starts with the given target string. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=0] The position to search from. + * @returns {boolean} Returns `true` if `string` starts with `target`, + *  else `false`. + * @example + * + * _.startsWith('abc', 'a'); + * // => true + * + * _.startsWith('abc', 'b'); + * // => false + * + * _.startsWith('abc', 'b', 1); + * // => true + */ +function startsWith(string, target, position) { +  string = toString(string); +  position = position == null +    ? 0 +    : baseClamp(toInteger(position), 0, string.length); + +  target = baseToString(target); +  return string.slice(position, position + target.length) == target; +} + +module.exports = startsWith; diff --git a/node_modules/lodash/string.js b/node_modules/lodash/string.js new file mode 100644 index 0000000..2c829c1 --- /dev/null +++ b/node_modules/lodash/string.js @@ -0,0 +1,33 @@ +module.exports = { +  'camelCase': require('./camelCase'), +  'capitalize': require('./capitalize'), +  'deburr': require('./deburr'), +  'endsWith': require('./endsWith'), +  'escape': require('./escape'), +  'escapeRegExp': require('./escapeRegExp'), +  'kebabCase': require('./kebabCase'), +  'lowerCase': require('./lowerCase'), +  'lowerFirst': require('./lowerFirst'), +  'pad': require('./pad'), +  'padEnd': require('./padEnd'), +  'padStart': require('./padStart'), +  'parseInt': require('./parseInt'), +  'repeat': require('./repeat'), +  'replace': require('./replace'), +  'snakeCase': require('./snakeCase'), +  'split': require('./split'), +  'startCase': require('./startCase'), +  'startsWith': require('./startsWith'), +  'template': require('./template'), +  'templateSettings': require('./templateSettings'), +  'toLower': require('./toLower'), +  'toUpper': require('./toUpper'), +  'trim': require('./trim'), +  'trimEnd': require('./trimEnd'), +  'trimStart': require('./trimStart'), +  'truncate': require('./truncate'), +  'unescape': require('./unescape'), +  'upperCase': require('./upperCase'), +  'upperFirst': require('./upperFirst'), +  'words': require('./words') +}; diff --git a/node_modules/lodash/stubArray.js b/node_modules/lodash/stubArray.js new file mode 100644 index 0000000..f460c15 --- /dev/null +++ b/node_modules/lodash/stubArray.js @@ -0,0 +1,23 @@ +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { +  return []; +} + +module.exports = stubArray; diff --git a/node_modules/lodash/stubFalse.js b/node_modules/lodash/stubFalse.js new file mode 100644 index 0000000..9b346fc --- /dev/null +++ b/node_modules/lodash/stubFalse.js @@ -0,0 +1,18 @@ +/** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ +function stubFalse() { +  return false; +} + +module.exports = stubFalse; diff --git a/node_modules/lodash/stubObject.js b/node_modules/lodash/stubObject.js new file mode 100644 index 0000000..1d190a1 --- /dev/null +++ b/node_modules/lodash/stubObject.js @@ -0,0 +1,23 @@ +/** + * This method returns a new empty object. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Object} Returns the new empty object. + * @example + * + * var objects = _.times(2, _.stubObject); + * + * console.log(objects); + * // => [{}, {}] + * + * console.log(objects[0] === objects[1]); + * // => false + */ +function stubObject() { +  return {}; +} + +module.exports = stubObject; diff --git a/node_modules/lodash/stubString.js b/node_modules/lodash/stubString.js new file mode 100644 index 0000000..2db0bed --- /dev/null +++ b/node_modules/lodash/stubString.js @@ -0,0 +1,18 @@ +/** + * This method returns an empty string. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {string} Returns the empty string. + * @example + * + * _.times(2, _.stubString); + * // => ['', ''] + */ +function stubString() { +  return ''; +} + +module.exports = stubString; diff --git a/node_modules/lodash/stubTrue.js b/node_modules/lodash/stubTrue.js new file mode 100644 index 0000000..af3cc9e --- /dev/null +++ b/node_modules/lodash/stubTrue.js @@ -0,0 +1,18 @@ +/** + * This method returns `true`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `true`. + * @example + * + * _.times(2, _.stubTrue); + * // => [true, true] + */ +function stubTrue() { +  return true; +} + +module.exports = stubTrue; diff --git a/node_modules/lodash/subtract.js b/node_modules/lodash/subtract.js new file mode 100644 index 0000000..6720778 --- /dev/null +++ b/node_modules/lodash/subtract.js @@ -0,0 +1,22 @@ +var createMathOperation = require('./_createMathOperation'); + +/** + * Subtract two numbers. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {number} minuend The first number in a subtraction. + * @param {number} subtrahend The second number in a subtraction. + * @returns {number} Returns the difference. + * @example + * + * _.subtract(6, 4); + * // => 2 + */ +var subtract = createMathOperation(function(minuend, subtrahend) { +  return minuend - subtrahend; +}, 0); + +module.exports = subtract; diff --git a/node_modules/lodash/sum.js b/node_modules/lodash/sum.js new file mode 100644 index 0000000..3b07ee4 --- /dev/null +++ b/node_modules/lodash/sum.js @@ -0,0 +1,24 @@ +var baseSum = require('./_baseSum'), +    identity = require('./identity'); + +/** + * Computes the sum of the values in `array`. + * + * @static + * @memberOf _ + * @since 3.4.0 + * @category Math + * @param {Array} array The array to iterate over. + * @returns {number} Returns the sum. + * @example + * + * _.sum([4, 2, 8, 6]); + * // => 20 + */ +function sum(array) { +  return (array && array.length) +    ? baseSum(array, identity) +    : 0; +} + +module.exports = sum; diff --git a/node_modules/lodash/sumBy.js b/node_modules/lodash/sumBy.js new file mode 100644 index 0000000..00e36d0 --- /dev/null +++ b/node_modules/lodash/sumBy.js @@ -0,0 +1,33 @@ +var baseIteratee = require('./_baseIteratee'), +    baseSum = require('./_baseSum'); + +/** + * This method is like `_.sum` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the value to be summed. + * The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the sum. + * @example + * + * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }]; + * + * _.sumBy(objects, function(o) { return o.n; }); + * // => 20 + * + * // The `_.property` iteratee shorthand. + * _.sumBy(objects, 'n'); + * // => 20 + */ +function sumBy(array, iteratee) { +  return (array && array.length) +    ? baseSum(array, baseIteratee(iteratee, 2)) +    : 0; +} + +module.exports = sumBy; diff --git a/node_modules/lodash/tail.js b/node_modules/lodash/tail.js new file mode 100644 index 0000000..001c22d --- /dev/null +++ b/node_modules/lodash/tail.js @@ -0,0 +1,22 @@ +var baseSlice = require('./_baseSlice'); + +/** + * Gets all but the first element of `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.tail([1, 2, 3]); + * // => [2, 3] + */ +function tail(array) { +  var length = array == null ? 0 : array.length; +  return length ? baseSlice(array, 1, length) : []; +} + +module.exports = tail; diff --git a/node_modules/lodash/take.js b/node_modules/lodash/take.js new file mode 100644 index 0000000..b7da712 --- /dev/null +++ b/node_modules/lodash/take.js @@ -0,0 +1,37 @@ +var baseSlice = require('./_baseSlice'), +    toInteger = require('./toInteger'); + +/** + * Creates a slice of `array` with `n` elements taken from the beginning. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.take([1, 2, 3]); + * // => [1] + * + * _.take([1, 2, 3], 2); + * // => [1, 2] + * + * _.take([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.take([1, 2, 3], 0); + * // => [] + */ +function take(array, n, guard) { +  if (!(array && array.length)) { +    return []; +  } +  n = (guard || n === undefined) ? 1 : toInteger(n); +  return baseSlice(array, 0, n < 0 ? 0 : n); +} + +module.exports = take; diff --git a/node_modules/lodash/takeRight.js b/node_modules/lodash/takeRight.js new file mode 100644 index 0000000..6c37506 --- /dev/null +++ b/node_modules/lodash/takeRight.js @@ -0,0 +1,39 @@ +var baseSlice = require('./_baseSlice'), +    toInteger = require('./toInteger'); + +/** + * Creates a slice of `array` with `n` elements taken from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRight([1, 2, 3]); + * // => [3] + * + * _.takeRight([1, 2, 3], 2); + * // => [2, 3] + * + * _.takeRight([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.takeRight([1, 2, 3], 0); + * // => [] + */ +function takeRight(array, n, guard) { +  var length = array == null ? 0 : array.length; +  if (!length) { +    return []; +  } +  n = (guard || n === undefined) ? 1 : toInteger(n); +  n = length - n; +  return baseSlice(array, n < 0 ? 0 : n, length); +} + +module.exports = takeRight; diff --git a/node_modules/lodash/takeRightWhile.js b/node_modules/lodash/takeRightWhile.js new file mode 100644 index 0000000..94ab783 --- /dev/null +++ b/node_modules/lodash/takeRightWhile.js @@ -0,0 +1,45 @@ +var baseIteratee = require('./_baseIteratee'), +    baseWhile = require('./_baseWhile'); + +/** + * Creates a slice of `array` with elements taken from the end. Elements are + * taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + *   { 'user': 'barney',  'active': true }, + *   { 'user': 'fred',    'active': false }, + *   { 'user': 'pebbles', 'active': false } + * ]; + * + * _.takeRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeRightWhile(users, ['active', false]); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.takeRightWhile(users, 'active'); + * // => [] + */ +function takeRightWhile(array, predicate) { +  return (array && array.length) +    ? baseWhile(array, baseIteratee(predicate, 3), false, true) +    : []; +} + +module.exports = takeRightWhile; diff --git a/node_modules/lodash/takeWhile.js b/node_modules/lodash/takeWhile.js new file mode 100644 index 0000000..e88f591 --- /dev/null +++ b/node_modules/lodash/takeWhile.js @@ -0,0 +1,45 @@ +var baseIteratee = require('./_baseIteratee'), +    baseWhile = require('./_baseWhile'); + +/** + * Creates a slice of `array` with elements taken from the beginning. Elements + * are taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + *   { 'user': 'barney',  'active': false }, + *   { 'user': 'fred',    'active': false }, + *   { 'user': 'pebbles', 'active': true } + * ]; + * + * _.takeWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matches` iteratee shorthand. + * _.takeWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeWhile(users, ['active', false]); + * // => objects for ['barney', 'fred'] + * + * // The `_.property` iteratee shorthand. + * _.takeWhile(users, 'active'); + * // => [] + */ +function takeWhile(array, predicate) { +  return (array && array.length) +    ? baseWhile(array, baseIteratee(predicate, 3)) +    : []; +} + +module.exports = takeWhile; diff --git a/node_modules/lodash/tap.js b/node_modules/lodash/tap.js new file mode 100644 index 0000000..d007285 --- /dev/null +++ b/node_modules/lodash/tap.js @@ -0,0 +1,29 @@ +/** + * This method invokes `interceptor` and returns `value`. The interceptor + * is invoked with one argument; (value). The purpose of this method is to + * "tap into" a method chain sequence in order to modify intermediate results. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + *  .tap(function(array) { + *    // Mutate input array. + *    array.pop(); + *  }) + *  .reverse() + *  .value(); + * // => [2, 1] + */ +function tap(value, interceptor) { +  interceptor(value); +  return value; +} + +module.exports = tap; diff --git a/node_modules/lodash/template.js b/node_modules/lodash/template.js new file mode 100644 index 0000000..5c6d6f4 --- /dev/null +++ b/node_modules/lodash/template.js @@ -0,0 +1,272 @@ +var assignInWith = require('./assignInWith'), +    attempt = require('./attempt'), +    baseValues = require('./_baseValues'), +    customDefaultsAssignIn = require('./_customDefaultsAssignIn'), +    escapeStringChar = require('./_escapeStringChar'), +    isError = require('./isError'), +    isIterateeCall = require('./_isIterateeCall'), +    keys = require('./keys'), +    reInterpolate = require('./_reInterpolate'), +    templateSettings = require('./templateSettings'), +    toString = require('./toString'); + +/** Error message constants. */ +var INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`'; + +/** Used to match empty string literals in compiled template source. */ +var reEmptyStringLeading = /\b__p \+= '';/g, +    reEmptyStringMiddle = /\b(__p \+=) '' \+/g, +    reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; + +/** + * Used to validate the `validate` option in `_.template` variable. + * + * Forbids characters which could potentially change the meaning of the function argument definition: + * - "()," (modification of function parameters) + * - "=" (default value) + * - "[]{}" (destructuring of function parameters) + * - "/" (beginning of a comment) + * - whitespace + */ +var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/; + +/** + * Used to match + * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). + */ +var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; + +/** Used to ensure capturing order of template delimiters. */ +var reNoMatch = /($^)/; + +/** Used to match unescaped characters in compiled string literals. */ +var reUnescapedString = /['\n\r\u2028\u2029\\]/g; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates a compiled template function that can interpolate data properties + * in "interpolate" delimiters, HTML-escape interpolated data properties in + * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data + * properties may be accessed as free variables in the template. If a setting + * object is given, it takes precedence over `_.templateSettings` values. + * + * **Note:** In the development build `_.template` utilizes + * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) + * for easier debugging. + * + * For more information on precompiling templates see + * [lodash's custom builds documentation](https://lodash.com/custom-builds). + * + * For more information on Chrome extension sandboxes see + * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The template string. + * @param {Object} [options={}] The options object. + * @param {RegExp} [options.escape=_.templateSettings.escape] + *  The HTML "escape" delimiter. + * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] + *  The "evaluate" delimiter. + * @param {Object} [options.imports=_.templateSettings.imports] + *  An object to import into the template as free variables. + * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] + *  The "interpolate" delimiter. + * @param {string} [options.sourceURL='templateSources[n]'] + *  The sourceURL of the compiled template. + * @param {string} [options.variable='obj'] + *  The data object variable name. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the compiled template function. + * @example + * + * // Use the "interpolate" delimiter to create a compiled template. + * var compiled = _.template('hello <%= user %>!'); + * compiled({ 'user': 'fred' }); + * // => 'hello fred!' + * + * // Use the HTML "escape" delimiter to escape data property values. + * var compiled = _.template('<b><%- value %></b>'); + * compiled({ 'value': '<script>' }); + * // => '<b><script></b>' + * + * // Use the "evaluate" delimiter to execute JavaScript and generate HTML. + * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>'); + * compiled({ 'users': ['fred', 'barney'] }); + * // => '<li>fred</li><li>barney</li>' + * + * // Use the internal `print` function in "evaluate" delimiters. + * var compiled = _.template('<% print("hello " + user); %>!'); + * compiled({ 'user': 'barney' }); + * // => 'hello barney!' + * + * // Use the ES template literal delimiter as an "interpolate" delimiter. + * // Disable support by replacing the "interpolate" delimiter. + * var compiled = _.template('hello ${ user }!'); + * compiled({ 'user': 'pebbles' }); + * // => 'hello pebbles!' + * + * // Use backslashes to treat delimiters as plain text. + * var compiled = _.template('<%= "\\<%- value %\\>" %>'); + * compiled({ 'value': 'ignored' }); + * // => '<%- value %>' + * + * // Use the `imports` option to import `jQuery` as `jq`. + * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>'; + * var compiled = _.template(text, { 'imports': { 'jq': jQuery } }); + * compiled({ 'users': ['fred', 'barney'] }); + * // => '<li>fred</li><li>barney</li>' + * + * // Use the `sourceURL` option to specify a custom sourceURL for the template. + * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' }); + * compiled(data); + * // => Find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector. + * + * // Use the `variable` option to ensure a with-statement isn't used in the compiled template. + * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' }); + * compiled.source; + * // => function(data) { + * //   var __t, __p = ''; + * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!'; + * //   return __p; + * // } + * + * // Use custom template delimiters. + * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g; + * var compiled = _.template('hello {{ user }}!'); + * compiled({ 'user': 'mustache' }); + * // => 'hello mustache!' + * + * // Use the `source` property to inline compiled templates for meaningful + * // line numbers in error messages and stack traces. + * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\ + *   var JST = {\ + *     "main": ' + _.template(mainText).source + '\ + *   };\ + * '); + */ +function template(string, options, guard) { +  // Based on John Resig's `tmpl` implementation +  // (http://ejohn.org/blog/javascript-micro-templating/) +  // and Laura Doktorova's doT.js (https://github.com/olado/doT). +  var settings = templateSettings.imports._.templateSettings || templateSettings; + +  if (guard && isIterateeCall(string, options, guard)) { +    options = undefined; +  } +  string = toString(string); +  options = assignInWith({}, options, settings, customDefaultsAssignIn); + +  var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn), +      importsKeys = keys(imports), +      importsValues = baseValues(imports, importsKeys); + +  var isEscaping, +      isEvaluating, +      index = 0, +      interpolate = options.interpolate || reNoMatch, +      source = "__p += '"; + +  // Compile the regexp to match each delimiter. +  var reDelimiters = RegExp( +    (options.escape || reNoMatch).source + '|' + +    interpolate.source + '|' + +    (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' + +    (options.evaluate || reNoMatch).source + '|$' +  , 'g'); + +  // Use a sourceURL for easier debugging. +  // The sourceURL gets injected into the source that's eval-ed, so be careful +  // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in +  // and escape the comment, thus injecting code that gets evaled. +  var sourceURL = hasOwnProperty.call(options, 'sourceURL') +    ? ('//# sourceURL=' + +       (options.sourceURL + '').replace(/\s/g, ' ') + +       '\n') +    : ''; + +  string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) { +    interpolateValue || (interpolateValue = esTemplateValue); + +    // Escape characters that can't be included in string literals. +    source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar); + +    // Replace delimiters with snippets. +    if (escapeValue) { +      isEscaping = true; +      source += "' +\n__e(" + escapeValue + ") +\n'"; +    } +    if (evaluateValue) { +      isEvaluating = true; +      source += "';\n" + evaluateValue + ";\n__p += '"; +    } +    if (interpolateValue) { +      source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'"; +    } +    index = offset + match.length; + +    // The JS engine embedded in Adobe products needs `match` returned in +    // order to produce the correct `offset` value. +    return match; +  }); + +  source += "';\n"; + +  // If `variable` is not specified wrap a with-statement around the generated +  // code to add the data object to the top of the scope chain. +  var variable = hasOwnProperty.call(options, 'variable') && options.variable; +  if (!variable) { +    source = 'with (obj) {\n' + source + '\n}\n'; +  } +  // Throw an error if a forbidden character was found in `variable`, to prevent +  // potential command injection attacks. +  else if (reForbiddenIdentifierChars.test(variable)) { +    throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT); +  } + +  // Cleanup code by stripping empty strings. +  source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source) +    .replace(reEmptyStringMiddle, '$1') +    .replace(reEmptyStringTrailing, '$1;'); + +  // Frame code as the function body. +  source = 'function(' + (variable || 'obj') + ') {\n' + +    (variable +      ? '' +      : 'obj || (obj = {});\n' +    ) + +    "var __t, __p = ''" + +    (isEscaping +       ? ', __e = _.escape' +       : '' +    ) + +    (isEvaluating +      ? ', __j = Array.prototype.join;\n' + +        "function print() { __p += __j.call(arguments, '') }\n" +      : ';\n' +    ) + +    source + +    'return __p\n}'; + +  var result = attempt(function() { +    return Function(importsKeys, sourceURL + 'return ' + source) +      .apply(undefined, importsValues); +  }); + +  // Provide the compiled function's source by its `toString` method or +  // the `source` property as a convenience for inlining compiled templates. +  result.source = source; +  if (isError(result)) { +    throw result; +  } +  return result; +} + +module.exports = template; diff --git a/node_modules/lodash/templateSettings.js b/node_modules/lodash/templateSettings.js new file mode 100644 index 0000000..5aa5924 --- /dev/null +++ b/node_modules/lodash/templateSettings.js @@ -0,0 +1,67 @@ +var escape = require('./escape'), +    reEscape = require('./_reEscape'), +    reEvaluate = require('./_reEvaluate'), +    reInterpolate = require('./_reInterpolate'); + +/** + * By default, the template delimiters used by lodash are like those in + * embedded Ruby (ERB) as well as ES2015 template strings. Change the + * following template settings to use alternative delimiters. + * + * @static + * @memberOf _ + * @type {Object} + */ +var templateSettings = { + +  /** +   * Used to detect `data` property values to be HTML-escaped. +   * +   * @memberOf _.templateSettings +   * @type {RegExp} +   */ +  'escape': reEscape, + +  /** +   * Used to detect code to be evaluated. +   * +   * @memberOf _.templateSettings +   * @type {RegExp} +   */ +  'evaluate': reEvaluate, + +  /** +   * Used to detect `data` property values to inject. +   * +   * @memberOf _.templateSettings +   * @type {RegExp} +   */ +  'interpolate': reInterpolate, + +  /** +   * Used to reference the data object in the template text. +   * +   * @memberOf _.templateSettings +   * @type {string} +   */ +  'variable': '', + +  /** +   * Used to import variables into the compiled template. +   * +   * @memberOf _.templateSettings +   * @type {Object} +   */ +  'imports': { + +    /** +     * A reference to the `lodash` function. +     * +     * @memberOf _.templateSettings.imports +     * @type {Function} +     */ +    '_': { 'escape': escape } +  } +}; + +module.exports = templateSettings; diff --git a/node_modules/lodash/throttle.js b/node_modules/lodash/throttle.js new file mode 100644 index 0000000..e2bb806 --- /dev/null +++ b/node_modules/lodash/throttle.js @@ -0,0 +1,69 @@ +var debounce = require('./debounce'), +    isObject = require('./isObject'); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds. The throttled function comes with a `cancel` + * method to cancel delayed `func` invocations and a `flush` method to + * immediately invoke them. Provide `options` to indicate whether `func` + * should be invoked on the leading and/or trailing edge of the `wait` + * timeout. The `func` is invoked with the last arguments provided to the + * throttled function. Subsequent calls to the throttled function return the + * result of the last `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the throttled function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.throttle` and `_.debounce`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] The number of milliseconds to throttle invocations to. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=true] + *  Specify invoking on the leading edge of the timeout. + * @param {boolean} [options.trailing=true] + *  Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // Avoid excessively updating the position while scrolling. + * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); + * + * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. + * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); + * jQuery(element).on('click', throttled); + * + * // Cancel the trailing throttled invocation. + * jQuery(window).on('popstate', throttled.cancel); + */ +function throttle(func, wait, options) { +  var leading = true, +      trailing = true; + +  if (typeof func != 'function') { +    throw new TypeError(FUNC_ERROR_TEXT); +  } +  if (isObject(options)) { +    leading = 'leading' in options ? !!options.leading : leading; +    trailing = 'trailing' in options ? !!options.trailing : trailing; +  } +  return debounce(func, wait, { +    'leading': leading, +    'maxWait': wait, +    'trailing': trailing +  }); +} + +module.exports = throttle; diff --git a/node_modules/lodash/thru.js b/node_modules/lodash/thru.js new file mode 100644 index 0000000..91e132e --- /dev/null +++ b/node_modules/lodash/thru.js @@ -0,0 +1,28 @@ +/** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * The purpose of this method is to "pass thru" values replacing intermediate + * results in a method chain sequence. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _('  abc  ') + *  .chain() + *  .trim() + *  .thru(function(value) { + *    return [value]; + *  }) + *  .value(); + * // => ['abc'] + */ +function thru(value, interceptor) { +  return interceptor(value); +} + +module.exports = thru; diff --git a/node_modules/lodash/times.js b/node_modules/lodash/times.js new file mode 100644 index 0000000..266c90c --- /dev/null +++ b/node_modules/lodash/times.js @@ -0,0 +1,51 @@ +var baseTimes = require('./_baseTimes'), +    castFunction = require('./_castFunction'), +    toInteger = require('./toInteger'); + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** Used as references for the maximum length and index of an array. */ +var MAX_ARRAY_LENGTH = 4294967295; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Invokes the iteratee `n` times, returning an array of the results of + * each invocation. The iteratee is invoked with one argument; (index). + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the array of results. + * @example + * + * _.times(3, String); + * // => ['0', '1', '2'] + * + *  _.times(4, _.constant(0)); + * // => [0, 0, 0, 0] + */ +function times(n, iteratee) { +  n = toInteger(n); +  if (n < 1 || n > MAX_SAFE_INTEGER) { +    return []; +  } +  var index = MAX_ARRAY_LENGTH, +      length = nativeMin(n, MAX_ARRAY_LENGTH); + +  iteratee = castFunction(iteratee); +  n -= MAX_ARRAY_LENGTH; + +  var result = baseTimes(length, iteratee); +  while (++index < n) { +    iteratee(index); +  } +  return result; +} + +module.exports = times; diff --git a/node_modules/lodash/toArray.js b/node_modules/lodash/toArray.js new file mode 100644 index 0000000..9809584 --- /dev/null +++ b/node_modules/lodash/toArray.js @@ -0,0 +1,58 @@ +var Symbol = require('./_Symbol'), +    copyArray = require('./_copyArray'), +    getTag = require('./_getTag'), +    isArrayLike = require('./isArrayLike'), +    isString = require('./isString'), +    iteratorToArray = require('./_iteratorToArray'), +    mapToArray = require('./_mapToArray'), +    setToArray = require('./_setToArray'), +    stringToArray = require('./_stringToArray'), +    values = require('./values'); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', +    setTag = '[object Set]'; + +/** Built-in value references. */ +var symIterator = Symbol ? Symbol.iterator : undefined; + +/** + * Converts `value` to an array. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * _.toArray({ 'a': 1, 'b': 2 }); + * // => [1, 2] + * + * _.toArray('abc'); + * // => ['a', 'b', 'c'] + * + * _.toArray(1); + * // => [] + * + * _.toArray(null); + * // => [] + */ +function toArray(value) { +  if (!value) { +    return []; +  } +  if (isArrayLike(value)) { +    return isString(value) ? stringToArray(value) : copyArray(value); +  } +  if (symIterator && value[symIterator]) { +    return iteratorToArray(value[symIterator]()); +  } +  var tag = getTag(value), +      func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); + +  return func(value); +} + +module.exports = toArray; diff --git a/node_modules/lodash/toFinite.js b/node_modules/lodash/toFinite.js new file mode 100644 index 0000000..3b5bba6 --- /dev/null +++ b/node_modules/lodash/toFinite.js @@ -0,0 +1,42 @@ +var toNumber = require('./toNumber'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, +    MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { +  if (!value) { +    return value === 0 ? value : 0; +  } +  value = toNumber(value); +  if (value === INFINITY || value === -INFINITY) { +    var sign = (value < 0 ? -1 : 1); +    return sign * MAX_INTEGER; +  } +  return value === value ? value : 0; +} + +module.exports = toFinite; diff --git a/node_modules/lodash/toInteger.js b/node_modules/lodash/toInteger.js new file mode 100644 index 0000000..c6aadf8 --- /dev/null +++ b/node_modules/lodash/toInteger.js @@ -0,0 +1,36 @@ +var toFinite = require('./toFinite'); + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { +  var result = toFinite(value), +      remainder = result % 1; + +  return result === result ? (remainder ? result - remainder : result) : 0; +} + +module.exports = toInteger; diff --git a/node_modules/lodash/toIterator.js b/node_modules/lodash/toIterator.js new file mode 100644 index 0000000..beeed5d --- /dev/null +++ b/node_modules/lodash/toIterator.js @@ -0,0 +1,23 @@ +/** + * Enables the wrapper to be iterable. + * + * @name Symbol.iterator + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the wrapper object. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped[Symbol.iterator]() === wrapped; + * // => true + * + * Array.from(wrapped); + * // => [1, 2] + */ +function wrapperToIterator() { +  return this; +} + +module.exports = wrapperToIterator; diff --git a/node_modules/lodash/toJSON.js b/node_modules/lodash/toJSON.js new file mode 100644 index 0000000..5e751a2 --- /dev/null +++ b/node_modules/lodash/toJSON.js @@ -0,0 +1 @@ +module.exports = require('./wrapperValue'); diff --git a/node_modules/lodash/toLength.js b/node_modules/lodash/toLength.js new file mode 100644 index 0000000..be8f2a7 --- /dev/null +++ b/node_modules/lodash/toLength.js @@ -0,0 +1,38 @@ +var baseClamp = require('./_baseClamp'), +    toInteger = require('./toInteger'); + +/** Used as references for the maximum length and index of an array. */ +var MAX_ARRAY_LENGTH = 4294967295; + +/** + * Converts `value` to an integer suitable for use as the length of an + * array-like object. + * + * **Note:** This method is based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toLength(3.2); + * // => 3 + * + * _.toLength(Number.MIN_VALUE); + * // => 0 + * + * _.toLength(Infinity); + * // => 4294967295 + * + * _.toLength('3.2'); + * // => 3 + */ +function toLength(value) { +  return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; +} + +module.exports = toLength; diff --git a/node_modules/lodash/toLower.js b/node_modules/lodash/toLower.js new file mode 100644 index 0000000..b4b7858 --- /dev/null +++ b/node_modules/lodash/toLower.js @@ -0,0 +1,28 @@ +var toString = require('./toString'); + +/** + * Converts `string`, as a whole, to lower case just like + * [String#toLowerCase](https://mdn.io/toLowerCase). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the lower cased string. + * @example + * + * _.toLower('--Foo-Bar--'); + * // => '--foo-bar--' + * + * _.toLower('fooBar'); + * // => 'foobar' + * + * _.toLower('__FOO_BAR__'); + * // => '__foo_bar__' + */ +function toLower(value) { +  return toString(value).toLowerCase(); +} + +module.exports = toLower; diff --git a/node_modules/lodash/toNumber.js b/node_modules/lodash/toNumber.js new file mode 100644 index 0000000..cf46f10 --- /dev/null +++ b/node_modules/lodash/toNumber.js @@ -0,0 +1,64 @@ +var baseTrim = require('./_baseTrim'), +    isObject = require('./isObject'), +    isSymbol = require('./isSymbol'); + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { +  if (typeof value == 'number') { +    return value; +  } +  if (isSymbol(value)) { +    return NAN; +  } +  if (isObject(value)) { +    var other = typeof value.valueOf == 'function' ? value.valueOf() : value; +    value = isObject(other) ? (other + '') : other; +  } +  if (typeof value != 'string') { +    return value === 0 ? value : +value; +  } +  value = baseTrim(value); +  var isBinary = reIsBinary.test(value); +  return (isBinary || reIsOctal.test(value)) +    ? freeParseInt(value.slice(2), isBinary ? 2 : 8) +    : (reIsBadHex.test(value) ? NAN : +value); +} + +module.exports = toNumber; diff --git a/node_modules/lodash/toPairs.js b/node_modules/lodash/toPairs.js new file mode 100644 index 0000000..c4f52ae --- /dev/null +++ b/node_modules/lodash/toPairs.js @@ -0,0 +1,30 @@ +var createToPairs = require('./_createToPairs'), +    keys = require('./keys'); + +/** + * Creates an array of own enumerable string keyed-value pairs for `object` + * which can be consumed by `_.fromPairs`. If `object` is a map or set, its + * entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entries + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + *   this.a = 1; + *   this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairs(new Foo); + * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) + */ +var toPairs = createToPairs(keys); + +module.exports = toPairs; diff --git a/node_modules/lodash/toPairsIn.js b/node_modules/lodash/toPairsIn.js new file mode 100644 index 0000000..32c562c --- /dev/null +++ b/node_modules/lodash/toPairsIn.js @@ -0,0 +1,30 @@ +var createToPairs = require('./_createToPairs'), +    keysIn = require('./keysIn'); + +/** + * Creates an array of own and inherited enumerable string keyed-value pairs + * for `object` which can be consumed by `_.fromPairs`. If `object` is a map + * or set, its entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entriesIn + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + *   this.a = 1; + *   this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairsIn(new Foo); + * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) + */ +var toPairsIn = createToPairs(keysIn); + +module.exports = toPairsIn; diff --git a/node_modules/lodash/toPath.js b/node_modules/lodash/toPath.js new file mode 100644 index 0000000..d3e96ee --- /dev/null +++ b/node_modules/lodash/toPath.js @@ -0,0 +1,33 @@ +var arrayMap = require('./_arrayMap'), +    copyArray = require('./_copyArray'), +    isArray = require('./isArray'), +    isSymbol = require('./isSymbol'), +    stringToPath = require('./_stringToPath'), +    toKey = require('./_toKey'), +    toString = require('./toString'); + +/** + * Converts `value` to a property path array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Util + * @param {*} value The value to convert. + * @returns {Array} Returns the new property path array. + * @example + * + * _.toPath('a.b.c'); + * // => ['a', 'b', 'c'] + * + * _.toPath('a[0].b.c'); + * // => ['a', '0', 'b', 'c'] + */ +function toPath(value) { +  if (isArray(value)) { +    return arrayMap(value, toKey); +  } +  return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value))); +} + +module.exports = toPath; diff --git a/node_modules/lodash/toPlainObject.js b/node_modules/lodash/toPlainObject.js new file mode 100644 index 0000000..5de79b8 --- /dev/null +++ b/node_modules/lodash/toPlainObject.js @@ -0,0 +1,32 @@ +var copyObject = require('./_copyObject'), +    keysIn = require('./keysIn'); + +/** + * Converts `value` to a plain object flattening inherited enumerable string + * keyed properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + *   this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ +function toPlainObject(value) { +  return copyObject(value, keysIn(value)); +} + +module.exports = toPlainObject; diff --git a/node_modules/lodash/toSafeInteger.js b/node_modules/lodash/toSafeInteger.js new file mode 100644 index 0000000..f564623 --- /dev/null +++ b/node_modules/lodash/toSafeInteger.js @@ -0,0 +1,37 @@ +var baseClamp = require('./_baseClamp'), +    toInteger = require('./toInteger'); + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Converts `value` to a safe integer. A safe integer can be compared and + * represented correctly. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toSafeInteger(3.2); + * // => 3 + * + * _.toSafeInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toSafeInteger(Infinity); + * // => 9007199254740991 + * + * _.toSafeInteger('3.2'); + * // => 3 + */ +function toSafeInteger(value) { +  return value +    ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) +    : (value === 0 ? value : 0); +} + +module.exports = toSafeInteger; diff --git a/node_modules/lodash/toString.js b/node_modules/lodash/toString.js new file mode 100644 index 0000000..daaf681 --- /dev/null +++ b/node_modules/lodash/toString.js @@ -0,0 +1,28 @@ +var baseToString = require('./_baseToString'); + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { +  return value == null ? '' : baseToString(value); +} + +module.exports = toString; diff --git a/node_modules/lodash/toUpper.js b/node_modules/lodash/toUpper.js new file mode 100644 index 0000000..b3648e8 --- /dev/null +++ b/node_modules/lodash/toUpper.js @@ -0,0 +1,28 @@ +var toString = require('./toString'); + +/** + * Converts `string`, as a whole, to upper case just like + * [String#toUpperCase](https://mdn.io/toUpperCase). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the upper cased string. + * @example + * + * _.toUpper('--foo-bar--'); + * // => '--FOO-BAR--' + * + * _.toUpper('fooBar'); + * // => 'FOOBAR' + * + * _.toUpper('__foo_bar__'); + * // => '__FOO_BAR__' + */ +function toUpper(value) { +  return toString(value).toUpperCase(); +} + +module.exports = toUpper; diff --git a/node_modules/lodash/transform.js b/node_modules/lodash/transform.js new file mode 100644 index 0000000..d755a15 --- /dev/null +++ b/node_modules/lodash/transform.js @@ -0,0 +1,65 @@ +var arrayEach = require('./_arrayEach'), +    baseCreate = require('./_baseCreate'), +    baseForOwn = require('./_baseForOwn'), +    baseIteratee = require('./_baseIteratee'), +    getPrototype = require('./_getPrototype'), +    isArray = require('./isArray'), +    isBuffer = require('./isBuffer'), +    isFunction = require('./isFunction'), +    isObject = require('./isObject'), +    isTypedArray = require('./isTypedArray'); + +/** + * An alternative to `_.reduce`; this method transforms `object` to a new + * `accumulator` object which is the result of running each of its own + * enumerable string keyed properties thru `iteratee`, with each invocation + * potentially mutating the `accumulator` object. If `accumulator` is not + * provided, a new object with the same `[[Prototype]]` will be used. The + * iteratee is invoked with four arguments: (accumulator, value, key, object). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The custom accumulator value. + * @returns {*} Returns the accumulated value. + * @example + * + * _.transform([2, 3, 4], function(result, n) { + *   result.push(n *= n); + *   return n % 2 == 0; + * }, []); + * // => [4, 9] + * + * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + *   (result[value] || (result[value] = [])).push(key); + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } + */ +function transform(object, iteratee, accumulator) { +  var isArr = isArray(object), +      isArrLike = isArr || isBuffer(object) || isTypedArray(object); + +  iteratee = baseIteratee(iteratee, 4); +  if (accumulator == null) { +    var Ctor = object && object.constructor; +    if (isArrLike) { +      accumulator = isArr ? new Ctor : []; +    } +    else if (isObject(object)) { +      accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; +    } +    else { +      accumulator = {}; +    } +  } +  (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { +    return iteratee(accumulator, value, index, object); +  }); +  return accumulator; +} + +module.exports = transform; diff --git a/node_modules/lodash/trim.js b/node_modules/lodash/trim.js new file mode 100644 index 0000000..13a6ad7 --- /dev/null +++ b/node_modules/lodash/trim.js @@ -0,0 +1,47 @@ +var baseToString = require('./_baseToString'), +    baseTrim = require('./_baseTrim'), +    castSlice = require('./_castSlice'), +    charsEndIndex = require('./_charsEndIndex'), +    charsStartIndex = require('./_charsStartIndex'), +    stringToArray = require('./_stringToArray'), +    toString = require('./toString'); + +/** + * Removes leading and trailing whitespace or specified characters from `string`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to trim. + * @param {string} [chars=whitespace] The characters to trim. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {string} Returns the trimmed string. + * @example + * + * _.trim('  abc  '); + * // => 'abc' + * + * _.trim('-_-abc-_-', '_-'); + * // => 'abc' + * + * _.map(['  foo  ', '  bar  '], _.trim); + * // => ['foo', 'bar'] + */ +function trim(string, chars, guard) { +  string = toString(string); +  if (string && (guard || chars === undefined)) { +    return baseTrim(string); +  } +  if (!string || !(chars = baseToString(chars))) { +    return string; +  } +  var strSymbols = stringToArray(string), +      chrSymbols = stringToArray(chars), +      start = charsStartIndex(strSymbols, chrSymbols), +      end = charsEndIndex(strSymbols, chrSymbols) + 1; + +  return castSlice(strSymbols, start, end).join(''); +} + +module.exports = trim; diff --git a/node_modules/lodash/trimEnd.js b/node_modules/lodash/trimEnd.js new file mode 100644 index 0000000..8dcd493 --- /dev/null +++ b/node_modules/lodash/trimEnd.js @@ -0,0 +1,41 @@ +var baseToString = require('./_baseToString'), +    castSlice = require('./_castSlice'), +    charsEndIndex = require('./_charsEndIndex'), +    stringToArray = require('./_stringToArray'), +    toString = require('./toString'), +    trimmedEndIndex = require('./_trimmedEndIndex'); + +/** + * Removes trailing whitespace or specified characters from `string`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to trim. + * @param {string} [chars=whitespace] The characters to trim. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {string} Returns the trimmed string. + * @example + * + * _.trimEnd('  abc  '); + * // => '  abc' + * + * _.trimEnd('-_-abc-_-', '_-'); + * // => '-_-abc' + */ +function trimEnd(string, chars, guard) { +  string = toString(string); +  if (string && (guard || chars === undefined)) { +    return string.slice(0, trimmedEndIndex(string) + 1); +  } +  if (!string || !(chars = baseToString(chars))) { +    return string; +  } +  var strSymbols = stringToArray(string), +      end = charsEndIndex(strSymbols, stringToArray(chars)) + 1; + +  return castSlice(strSymbols, 0, end).join(''); +} + +module.exports = trimEnd; diff --git a/node_modules/lodash/trimStart.js b/node_modules/lodash/trimStart.js new file mode 100644 index 0000000..6cba766 --- /dev/null +++ b/node_modules/lodash/trimStart.js @@ -0,0 +1,43 @@ +var baseToString = require('./_baseToString'), +    castSlice = require('./_castSlice'), +    charsStartIndex = require('./_charsStartIndex'), +    stringToArray = require('./_stringToArray'), +    toString = require('./toString'); + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * Removes leading whitespace or specified characters from `string`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to trim. + * @param {string} [chars=whitespace] The characters to trim. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {string} Returns the trimmed string. + * @example + * + * _.trimStart('  abc  '); + * // => 'abc  ' + * + * _.trimStart('-_-abc-_-', '_-'); + * // => 'abc-_-' + */ +function trimStart(string, chars, guard) { +  string = toString(string); +  if (string && (guard || chars === undefined)) { +    return string.replace(reTrimStart, ''); +  } +  if (!string || !(chars = baseToString(chars))) { +    return string; +  } +  var strSymbols = stringToArray(string), +      start = charsStartIndex(strSymbols, stringToArray(chars)); + +  return castSlice(strSymbols, start).join(''); +} + +module.exports = trimStart; diff --git a/node_modules/lodash/truncate.js b/node_modules/lodash/truncate.js new file mode 100644 index 0000000..21fcdfe --- /dev/null +++ b/node_modules/lodash/truncate.js @@ -0,0 +1,111 @@ +var baseToString = require('./_baseToString'), +    castSlice = require('./_castSlice'), +    hasUnicode = require('./_hasUnicode'), +    isObject = require('./isObject'), +    isRegExp = require('./isRegExp'), +    stringSize = require('./_stringSize'), +    stringToArray = require('./_stringToArray'), +    toInteger = require('./toInteger'), +    toString = require('./toString'); + +/** Used as default options for `_.truncate`. */ +var DEFAULT_TRUNC_LENGTH = 30, +    DEFAULT_TRUNC_OMISSION = '...'; + +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Truncates `string` if it's longer than the given maximum string length. + * The last characters of the truncated string are replaced with the omission + * string which defaults to "...". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to truncate. + * @param {Object} [options={}] The options object. + * @param {number} [options.length=30] The maximum string length. + * @param {string} [options.omission='...'] The string to indicate text is omitted. + * @param {RegExp|string} [options.separator] The separator pattern to truncate to. + * @returns {string} Returns the truncated string. + * @example + * + * _.truncate('hi-diddly-ho there, neighborino'); + * // => 'hi-diddly-ho there, neighbo...' + * + * _.truncate('hi-diddly-ho there, neighborino', { + *   'length': 24, + *   'separator': ' ' + * }); + * // => 'hi-diddly-ho there,...' + * + * _.truncate('hi-diddly-ho there, neighborino', { + *   'length': 24, + *   'separator': /,? +/ + * }); + * // => 'hi-diddly-ho there...' + * + * _.truncate('hi-diddly-ho there, neighborino', { + *   'omission': ' [...]' + * }); + * // => 'hi-diddly-ho there, neig [...]' + */ +function truncate(string, options) { +  var length = DEFAULT_TRUNC_LENGTH, +      omission = DEFAULT_TRUNC_OMISSION; + +  if (isObject(options)) { +    var separator = 'separator' in options ? options.separator : separator; +    length = 'length' in options ? toInteger(options.length) : length; +    omission = 'omission' in options ? baseToString(options.omission) : omission; +  } +  string = toString(string); + +  var strLength = string.length; +  if (hasUnicode(string)) { +    var strSymbols = stringToArray(string); +    strLength = strSymbols.length; +  } +  if (length >= strLength) { +    return string; +  } +  var end = length - stringSize(omission); +  if (end < 1) { +    return omission; +  } +  var result = strSymbols +    ? castSlice(strSymbols, 0, end).join('') +    : string.slice(0, end); + +  if (separator === undefined) { +    return result + omission; +  } +  if (strSymbols) { +    end += (result.length - end); +  } +  if (isRegExp(separator)) { +    if (string.slice(end).search(separator)) { +      var match, +          substring = result; + +      if (!separator.global) { +        separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g'); +      } +      separator.lastIndex = 0; +      while ((match = separator.exec(substring))) { +        var newEnd = match.index; +      } +      result = result.slice(0, newEnd === undefined ? end : newEnd); +    } +  } else if (string.indexOf(baseToString(separator), end) != end) { +    var index = result.lastIndexOf(separator); +    if (index > -1) { +      result = result.slice(0, index); +    } +  } +  return result + omission; +} + +module.exports = truncate; diff --git a/node_modules/lodash/unary.js b/node_modules/lodash/unary.js new file mode 100644 index 0000000..76f48f6 --- /dev/null +++ b/node_modules/lodash/unary.js @@ -0,0 +1,22 @@ +var ary = require('./ary'); + +/** + * Creates a function that accepts up to one argument, ignoring any + * additional arguments. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.unary(parseInt)); + * // => [6, 8, 10] + */ +function unary(func) { +  return ary(func, 1); +} + +module.exports = unary; diff --git a/node_modules/lodash/unescape.js b/node_modules/lodash/unescape.js new file mode 100644 index 0000000..3b6efd5 --- /dev/null +++ b/node_modules/lodash/unescape.js @@ -0,0 +1,34 @@ +var toString = require('./toString'), +    unescapeHtmlChar = require('./_unescapeHtmlChar'); + +/** Used to match HTML entities and HTML characters. */ +var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, +    reHasEscapedHtml = RegExp(reEscapedHtml.source); + +/** + * The inverse of `_.escape`; this method converts the HTML entities + * `&`, `<`, `>`, `"`, and `'` in `string` to + * their corresponding characters. + * + * **Note:** No other HTML entities are unescaped. To unescape additional + * HTML entities use a third-party library like [_he_](https://mths.be/he). + * + * @static + * @memberOf _ + * @since 0.6.0 + * @category String + * @param {string} [string=''] The string to unescape. + * @returns {string} Returns the unescaped string. + * @example + * + * _.unescape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ +function unescape(string) { +  string = toString(string); +  return (string && reHasEscapedHtml.test(string)) +    ? string.replace(reEscapedHtml, unescapeHtmlChar) +    : string; +} + +module.exports = unescape; diff --git a/node_modules/lodash/union.js b/node_modules/lodash/union.js new file mode 100644 index 0000000..e676dfe --- /dev/null +++ b/node_modules/lodash/union.js @@ -0,0 +1,26 @@ +var baseFlatten = require('./_baseFlatten'), +    baseRest = require('./_baseRest'), +    baseUniq = require('./_baseUniq'), +    isArrayLikeObject = require('./isArrayLikeObject'); + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = baseRest(function(arrays) { +  return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); +}); + +module.exports = union; diff --git a/node_modules/lodash/unionBy.js b/node_modules/lodash/unionBy.js new file mode 100644 index 0000000..6ae8ccd --- /dev/null +++ b/node_modules/lodash/unionBy.js @@ -0,0 +1,39 @@ +var baseFlatten = require('./_baseFlatten'), +    baseIteratee = require('./_baseIteratee'), +    baseRest = require('./_baseRest'), +    baseUniq = require('./_baseUniq'), +    isArrayLikeObject = require('./isArrayLikeObject'), +    last = require('./last'); + +/** + * This method is like `_.union` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which uniqueness is computed. Result values are chosen from the first + * array in which the value occurs. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.unionBy([2.1], [1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ +var unionBy = baseRest(function(arrays) { +  var iteratee = last(arrays); +  if (isArrayLikeObject(iteratee)) { +    iteratee = undefined; +  } +  return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), baseIteratee(iteratee, 2)); +}); + +module.exports = unionBy; diff --git a/node_modules/lodash/unionWith.js b/node_modules/lodash/unionWith.js new file mode 100644 index 0000000..78736b2 --- /dev/null +++ b/node_modules/lodash/unionWith.js @@ -0,0 +1,34 @@ +var baseFlatten = require('./_baseFlatten'), +    baseRest = require('./_baseRest'), +    baseUniq = require('./_baseUniq'), +    isArrayLikeObject = require('./isArrayLikeObject'), +    last = require('./last'); + +/** + * This method is like `_.union` except that it accepts `comparator` which + * is invoked to compare elements of `arrays`. Result values are chosen from + * the first array in which the value occurs. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.unionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ +var unionWith = baseRest(function(arrays) { +  var comparator = last(arrays); +  comparator = typeof comparator == 'function' ? comparator : undefined; +  return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); +}); + +module.exports = unionWith; diff --git a/node_modules/lodash/uniq.js b/node_modules/lodash/uniq.js new file mode 100644 index 0000000..157d1cd --- /dev/null +++ b/node_modules/lodash/uniq.js @@ -0,0 +1,25 @@ +var baseUniq = require('./_baseUniq'); + +/** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurrence of each element + * is kept. The order of result values is determined by the order they occur + * in the array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + */ +function uniq(array) { +  return (array && array.length) ? baseUniq(array) : []; +} + +module.exports = uniq; diff --git a/node_modules/lodash/uniqBy.js b/node_modules/lodash/uniqBy.js new file mode 100644 index 0000000..53402a9 --- /dev/null +++ b/node_modules/lodash/uniqBy.js @@ -0,0 +1,31 @@ +var baseIteratee = require('./_baseIteratee'), +    baseUniq = require('./_baseUniq'); + +/** + * This method is like `_.uniq` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * uniqueness is computed. The order of result values is determined by the + * order they occur in the array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniqBy([2.1, 1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ +function uniqBy(array, iteratee) { +  return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : []; +} + +module.exports = uniqBy; diff --git a/node_modules/lodash/uniqWith.js b/node_modules/lodash/uniqWith.js new file mode 100644 index 0000000..18d72aa --- /dev/null +++ b/node_modules/lodash/uniqWith.js @@ -0,0 +1,28 @@ +var baseUniq = require('./_baseUniq'); + +/** + * This method is like `_.uniq` except that it accepts `comparator` which + * is invoked to compare elements of `array`. The order of result values is + * determined by the order they occur in the array.The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.uniqWith(objects, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] + */ +function uniqWith(array, comparator) { +  comparator = typeof comparator == 'function' ? comparator : undefined; +  return (array && array.length) ? baseUniq(array, undefined, comparator) : []; +} + +module.exports = uniqWith; diff --git a/node_modules/lodash/uniqueId.js b/node_modules/lodash/uniqueId.js new file mode 100644 index 0000000..ffa8c03 --- /dev/null +++ b/node_modules/lodash/uniqueId.js @@ -0,0 +1,28 @@ +var toString = require('./toString'); + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { +  var id = ++idCounter; +  return toString(prefix) + id; +} + +module.exports = uniqueId; diff --git a/node_modules/lodash/unset.js b/node_modules/lodash/unset.js new file mode 100644 index 0000000..723c3d4 --- /dev/null +++ b/node_modules/lodash/unset.js @@ -0,0 +1,34 @@ +var baseUnset = require('./_baseUnset'); + +/** + * Removes the property at `path` of `object`. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 7 } }] }; + * _.unset(object, 'a[0].b.c'); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + * + * _.unset(object, ['a', '0', 'b', 'c']); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + */ +function unset(object, path) { +  return object == null ? true : baseUnset(object, path); +} + +module.exports = unset; diff --git a/node_modules/lodash/unzip.js b/node_modules/lodash/unzip.js new file mode 100644 index 0000000..fce0ec7 --- /dev/null +++ b/node_modules/lodash/unzip.js @@ -0,0 +1,45 @@ +var arrayFilter = require('./_arrayFilter'), +    arrayMap = require('./_arrayMap'), +    baseProperty = require('./_baseProperty'), +    baseTimes = require('./_baseTimes'), +    isArrayLikeObject = require('./isArrayLikeObject'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.zip` except that it accepts an array of grouped + * elements and creates an array regrouping the elements to their pre-zip + * configuration. + * + * @static + * @memberOf _ + * @since 1.2.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + * + * _.unzip(zipped); + * // => [['a', 'b'], [1, 2], [true, false]] + */ +function unzip(array) { +  if (!(array && array.length)) { +    return []; +  } +  var length = 0; +  array = arrayFilter(array, function(group) { +    if (isArrayLikeObject(group)) { +      length = nativeMax(group.length, length); +      return true; +    } +  }); +  return baseTimes(length, function(index) { +    return arrayMap(array, baseProperty(index)); +  }); +} + +module.exports = unzip; diff --git a/node_modules/lodash/unzipWith.js b/node_modules/lodash/unzipWith.js new file mode 100644 index 0000000..926c899 --- /dev/null +++ b/node_modules/lodash/unzipWith.js @@ -0,0 +1,39 @@ +var apply = require('./_apply'), +    arrayMap = require('./_arrayMap'), +    unzip = require('./unzip'); + +/** + * This method is like `_.unzip` except that it accepts `iteratee` to specify + * how regrouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @param {Function} [iteratee=_.identity] The function to combine + *  regrouped values. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip([1, 2], [10, 20], [100, 200]); + * // => [[1, 10, 100], [2, 20, 200]] + * + * _.unzipWith(zipped, _.add); + * // => [3, 30, 300] + */ +function unzipWith(array, iteratee) { +  if (!(array && array.length)) { +    return []; +  } +  var result = unzip(array); +  if (iteratee == null) { +    return result; +  } +  return arrayMap(result, function(group) { +    return apply(iteratee, undefined, group); +  }); +} + +module.exports = unzipWith; diff --git a/node_modules/lodash/update.js b/node_modules/lodash/update.js new file mode 100644 index 0000000..b90098e --- /dev/null +++ b/node_modules/lodash/update.js @@ -0,0 +1,35 @@ +var baseUpdate = require('./_baseUpdate'), +    castFunction = require('./_castFunction'); + +/** + * This method is like `_.set` except that accepts `updater` to produce the + * value to set. Use `_.updateWith` to customize `path` creation. The `updater` + * is invoked with one argument: (value). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.update(object, 'a[0].b.c', function(n) { return n * n; }); + * console.log(object.a[0].b.c); + * // => 9 + * + * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); + * console.log(object.x[0].y.z); + * // => 0 + */ +function update(object, path, updater) { +  return object == null ? object : baseUpdate(object, path, castFunction(updater)); +} + +module.exports = update; diff --git a/node_modules/lodash/updateWith.js b/node_modules/lodash/updateWith.js new file mode 100644 index 0000000..a2f4a2c --- /dev/null +++ b/node_modules/lodash/updateWith.js @@ -0,0 +1,33 @@ +var baseUpdate = require('./_baseUpdate'), +    castFunction = require('./_castFunction'); + +/** + * This method is like `_.update` except that it accepts `customizer` which is + * invoked to produce the objects of `path`.  If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.updateWith(object, '[0][1]', _.constant('a'), Object); + * // => { '0': { '1': 'a' } } + */ +function updateWith(object, path, updater, customizer) { +  customizer = typeof customizer == 'function' ? customizer : undefined; +  return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); +} + +module.exports = updateWith; diff --git a/node_modules/lodash/upperCase.js b/node_modules/lodash/upperCase.js new file mode 100644 index 0000000..efbb8b0 --- /dev/null +++ b/node_modules/lodash/upperCase.js @@ -0,0 +1,27 @@ +var createCompounder = require('./_createCompounder'); + +/** + * Converts `string`, as space separated words, to upper case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the upper cased string. + * @example + * + * _.upperCase('--foo-bar'); + * // => 'FOO BAR' + * + * _.upperCase('fooBar'); + * // => 'FOO BAR' + * + * _.upperCase('__foo_bar__'); + * // => 'FOO BAR' + */ +var upperCase = createCompounder(function(result, word, index) { +  return result + (index ? ' ' : '') + word.toUpperCase(); +}); + +module.exports = upperCase; diff --git a/node_modules/lodash/upperFirst.js b/node_modules/lodash/upperFirst.js new file mode 100644 index 0000000..1dd64e1 --- /dev/null +++ b/node_modules/lodash/upperFirst.js @@ -0,0 +1,22 @@ +var createCaseFirst = require('./_createCaseFirst'); + +/** + * Converts the first character of `string` to upper case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.upperFirst('fred'); + * // => 'Fred' + * + * _.upperFirst('FRED'); + * // => 'FRED' + */ +var upperFirst = createCaseFirst('toUpperCase'); + +module.exports = upperFirst; diff --git a/node_modules/lodash/util.js b/node_modules/lodash/util.js new file mode 100644 index 0000000..d244dc2 --- /dev/null +++ b/node_modules/lodash/util.js @@ -0,0 +1,34 @@ +module.exports = { +  'attempt': require('./attempt'), +  'bindAll': require('./bindAll'), +  'cond': require('./cond'), +  'conforms': require('./conforms'), +  'constant': require('./constant'), +  'defaultTo': require('./defaultTo'), +  'flow': require('./flow'), +  'flowRight': require('./flowRight'), +  'identity': require('./identity'), +  'iteratee': require('./iteratee'), +  'matches': require('./matches'), +  'matchesProperty': require('./matchesProperty'), +  'method': require('./method'), +  'methodOf': require('./methodOf'), +  'mixin': require('./mixin'), +  'noop': require('./noop'), +  'nthArg': require('./nthArg'), +  'over': require('./over'), +  'overEvery': require('./overEvery'), +  'overSome': require('./overSome'), +  'property': require('./property'), +  'propertyOf': require('./propertyOf'), +  'range': require('./range'), +  'rangeRight': require('./rangeRight'), +  'stubArray': require('./stubArray'), +  'stubFalse': require('./stubFalse'), +  'stubObject': require('./stubObject'), +  'stubString': require('./stubString'), +  'stubTrue': require('./stubTrue'), +  'times': require('./times'), +  'toPath': require('./toPath'), +  'uniqueId': require('./uniqueId') +}; diff --git a/node_modules/lodash/value.js b/node_modules/lodash/value.js new file mode 100644 index 0000000..5e751a2 --- /dev/null +++ b/node_modules/lodash/value.js @@ -0,0 +1 @@ +module.exports = require('./wrapperValue'); diff --git a/node_modules/lodash/valueOf.js b/node_modules/lodash/valueOf.js new file mode 100644 index 0000000..5e751a2 --- /dev/null +++ b/node_modules/lodash/valueOf.js @@ -0,0 +1 @@ +module.exports = require('./wrapperValue'); diff --git a/node_modules/lodash/values.js b/node_modules/lodash/values.js new file mode 100644 index 0000000..b069654 --- /dev/null +++ b/node_modules/lodash/values.js @@ -0,0 +1,34 @@ +var baseValues = require('./_baseValues'), +    keys = require('./keys'); + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + *   this.a = 1; + *   this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { +  return object == null ? [] : baseValues(object, keys(object)); +} + +module.exports = values; diff --git a/node_modules/lodash/valuesIn.js b/node_modules/lodash/valuesIn.js new file mode 100644 index 0000000..6296094 --- /dev/null +++ b/node_modules/lodash/valuesIn.js @@ -0,0 +1,32 @@ +var baseValues = require('./_baseValues'), +    keysIn = require('./keysIn'); + +/** + * Creates an array of the own and inherited enumerable string keyed property + * values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + *   this.a = 1; + *   this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.valuesIn(new Foo); + * // => [1, 2, 3] (iteration order is not guaranteed) + */ +function valuesIn(object) { +  return object == null ? [] : baseValues(object, keysIn(object)); +} + +module.exports = valuesIn; diff --git a/node_modules/lodash/without.js b/node_modules/lodash/without.js new file mode 100644 index 0000000..3a28e8a --- /dev/null +++ b/node_modules/lodash/without.js @@ -0,0 +1,31 @@ +var baseDifference = require('./_baseDifference'), +    baseRest = require('./_baseRest'), +    isArrayLikeObject = require('./isArrayLikeObject'); + +/** + * Creates an array excluding all given values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.pull`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.xor + * @example + * + * _.without([2, 1, 2, 3], 1, 2); + * // => [3] + */ +var without = baseRest(function(array, values) { +  return isArrayLikeObject(array) +    ? baseDifference(array, values) +    : []; +}); + +module.exports = without; diff --git a/node_modules/lodash/words.js b/node_modules/lodash/words.js new file mode 100644 index 0000000..6d7cdd1 --- /dev/null +++ b/node_modules/lodash/words.js @@ -0,0 +1,35 @@ +var asciiWords = require('./_asciiWords'), +    hasUnicodeWord = require('./_hasUnicodeWord'), +    toString = require('./toString'), +    unicodeWords = require('./_unicodeWords'); + +/** + * Splits `string` into an array of its words. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {RegExp|string} [pattern] The pattern to match words. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the words of `string`. + * @example + * + * _.words('fred, barney, & pebbles'); + * // => ['fred', 'barney', 'pebbles'] + * + * _.words('fred, barney, & pebbles', /[^, ]+/g); + * // => ['fred', 'barney', '&', 'pebbles'] + */ +function words(string, pattern, guard) { +  string = toString(string); +  pattern = guard ? undefined : pattern; + +  if (pattern === undefined) { +    return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string); +  } +  return string.match(pattern) || []; +} + +module.exports = words; diff --git a/node_modules/lodash/wrap.js b/node_modules/lodash/wrap.js new file mode 100644 index 0000000..cad3c50 --- /dev/null +++ b/node_modules/lodash/wrap.js @@ -0,0 +1,30 @@ +var castFunction = require('./_castFunction'), +    partial = require('./partial'); + +/** + * Creates a function that provides `value` to `wrapper` as its first + * argument. Any additional arguments provided to the function are appended + * to those provided to the `wrapper`. The wrapper is invoked with the `this` + * binding of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {*} value The value to wrap. + * @param {Function} [wrapper=identity] The wrapper function. + * @returns {Function} Returns the new function. + * @example + * + * var p = _.wrap(_.escape, function(func, text) { + *   return '<p>' + func(text) + '</p>'; + * }); + * + * p('fred, barney, & pebbles'); + * // => '<p>fred, barney, & pebbles</p>' + */ +function wrap(value, wrapper) { +  return partial(castFunction(wrapper), value); +} + +module.exports = wrap; diff --git a/node_modules/lodash/wrapperAt.js b/node_modules/lodash/wrapperAt.js new file mode 100644 index 0000000..6f6a1d0 --- /dev/null +++ b/node_modules/lodash/wrapperAt.js @@ -0,0 +1,48 @@ +var LazyWrapper = require('./_LazyWrapper'), +    LodashWrapper = require('./_LodashWrapper'), +    baseAt = require('./_baseAt'), +    flatRest = require('./_flatRest'), +    isIndex = require('./_isIndex'), +    thru = require('./thru'); + +/** + * This method is the wrapper version of `_.at`. + * + * @name at + * @memberOf _ + * @since 1.0.0 + * @category Seq + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _(object).at(['a[0].b.c', 'a[1]']).value(); + * // => [3, 4] + */ +var wrapperAt = flatRest(function(paths) { +  var length = paths.length, +      start = length ? paths[0] : 0, +      value = this.__wrapped__, +      interceptor = function(object) { return baseAt(object, paths); }; + +  if (length > 1 || this.__actions__.length || +      !(value instanceof LazyWrapper) || !isIndex(start)) { +    return this.thru(interceptor); +  } +  value = value.slice(start, +start + (length ? 1 : 0)); +  value.__actions__.push({ +    'func': thru, +    'args': [interceptor], +    'thisArg': undefined +  }); +  return new LodashWrapper(value, this.__chain__).thru(function(array) { +    if (length && !array.length) { +      array.push(undefined); +    } +    return array; +  }); +}); + +module.exports = wrapperAt; diff --git a/node_modules/lodash/wrapperChain.js b/node_modules/lodash/wrapperChain.js new file mode 100644 index 0000000..bda2ce6 --- /dev/null +++ b/node_modules/lodash/wrapperChain.js @@ -0,0 +1,34 @@ +var chain = require('./chain'); + +/** + * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. + * + * @name chain + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + *   { 'user': 'barney', 'age': 36 }, + *   { 'user': 'fred',   'age': 40 } + * ]; + * + * // A sequence without explicit chaining. + * _(users).head(); + * // => { 'user': 'barney', 'age': 36 } + * + * // A sequence with explicit chaining. + * _(users) + *   .chain() + *   .head() + *   .pick('user') + *   .value(); + * // => { 'user': 'barney' } + */ +function wrapperChain() { +  return chain(this); +} + +module.exports = wrapperChain; diff --git a/node_modules/lodash/wrapperLodash.js b/node_modules/lodash/wrapperLodash.js new file mode 100644 index 0000000..bd6e8ad --- /dev/null +++ b/node_modules/lodash/wrapperLodash.js @@ -0,0 +1,147 @@ +var LazyWrapper = require('./_LazyWrapper'), +    LodashWrapper = require('./_LodashWrapper'), +    baseLodash = require('./_baseLodash'), +    isArray = require('./isArray'), +    isObjectLike = require('./isObjectLike'), +    wrapperClone = require('./_wrapperClone'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates a `lodash` object which wraps `value` to enable implicit method + * chain sequences. Methods that operate on and return arrays, collections, + * and functions can be chained together. Methods that retrieve a single value + * or may return a primitive value will automatically end the chain sequence + * and return the unwrapped value. Otherwise, the value must be unwrapped + * with `_#value`. + * + * Explicit chain sequences, which must be unwrapped with `_#value`, may be + * enabled using `_.chain`. + * + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. + * Shortcut fusion is an optimization to merge iteratee calls; this avoids + * the creation of intermediate arrays and can greatly reduce the number of + * iteratee executions. Sections of a chain sequence qualify for shortcut + * fusion if the section is applied to an array and iteratees accept only + * one argument. The heuristic for whether a section qualifies for shortcut + * fusion is subject to change. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, + * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, + * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, + * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, + * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, + * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, + * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, + * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, + * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, + * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, + * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, + * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, + * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, + * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, + * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, + * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, + * `zipObject`, `zipObjectDeep`, and `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, + * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, + * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, + * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, + * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, + * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, + * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, + * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, + * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, + * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, + * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, + * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, + * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, + * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, + * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, + * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, + * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, + * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, + * `upperFirst`, `value`, and `words` + * + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + *   return n * n; + * } + * + * var wrapped = _([1, 2, 3]); + * + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 + * + * // Returns a wrapped value. + * var squares = wrapped.map(square); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ +function lodash(value) { +  if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { +    if (value instanceof LodashWrapper) { +      return value; +    } +    if (hasOwnProperty.call(value, '__wrapped__')) { +      return wrapperClone(value); +    } +  } +  return new LodashWrapper(value); +} + +// Ensure wrappers are instances of `baseLodash`. +lodash.prototype = baseLodash.prototype; +lodash.prototype.constructor = lodash; + +module.exports = lodash; diff --git a/node_modules/lodash/wrapperReverse.js b/node_modules/lodash/wrapperReverse.js new file mode 100644 index 0000000..e93112a --- /dev/null +++ b/node_modules/lodash/wrapperReverse.js @@ -0,0 +1,44 @@ +var LazyWrapper = require('./_LazyWrapper'), +    LodashWrapper = require('./_LodashWrapper'), +    reverse = require('./reverse'), +    thru = require('./thru'); + +/** + * This method is the wrapper version of `_.reverse`. + * + * **Note:** This method mutates the wrapped array. + * + * @name reverse + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2, 3]; + * + * _(array).reverse().value() + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ +function wrapperReverse() { +  var value = this.__wrapped__; +  if (value instanceof LazyWrapper) { +    var wrapped = value; +    if (this.__actions__.length) { +      wrapped = new LazyWrapper(this); +    } +    wrapped = wrapped.reverse(); +    wrapped.__actions__.push({ +      'func': thru, +      'args': [reverse], +      'thisArg': undefined +    }); +    return new LodashWrapper(wrapped, this.__chain__); +  } +  return this.thru(reverse); +} + +module.exports = wrapperReverse; diff --git a/node_modules/lodash/wrapperValue.js b/node_modules/lodash/wrapperValue.js new file mode 100644 index 0000000..f56c2da --- /dev/null +++ b/node_modules/lodash/wrapperValue.js @@ -0,0 +1,21 @@ +var baseWrapperValue = require('./_baseWrapperValue'); + +/** + * Executes the chain sequence to resolve the unwrapped value. + * + * @name value + * @memberOf _ + * @since 0.1.0 + * @alias toJSON, valueOf + * @category Seq + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ +function wrapperValue() { +  return baseWrapperValue(this.__wrapped__, this.__actions__); +} + +module.exports = wrapperValue; diff --git a/node_modules/lodash/xor.js b/node_modules/lodash/xor.js new file mode 100644 index 0000000..d4d2860 --- /dev/null +++ b/node_modules/lodash/xor.js @@ -0,0 +1,28 @@ +var arrayFilter = require('./_arrayFilter'), +    baseRest = require('./_baseRest'), +    baseXor = require('./_baseXor'), +    isArrayLikeObject = require('./isArrayLikeObject'); + +/** + * Creates an array of unique values that is the + * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) + * of the given arrays. The order of result values is determined by the order + * they occur in the arrays. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.without + * @example + * + * _.xor([2, 1], [2, 3]); + * // => [1, 3] + */ +var xor = baseRest(function(arrays) { +  return baseXor(arrayFilter(arrays, isArrayLikeObject)); +}); + +module.exports = xor; diff --git a/node_modules/lodash/xorBy.js b/node_modules/lodash/xorBy.js new file mode 100644 index 0000000..e047895 --- /dev/null +++ b/node_modules/lodash/xorBy.js @@ -0,0 +1,39 @@ +var arrayFilter = require('./_arrayFilter'), +    baseIteratee = require('./_baseIteratee'), +    baseRest = require('./_baseRest'), +    baseXor = require('./_baseXor'), +    isArrayLikeObject = require('./isArrayLikeObject'), +    last = require('./last'); + +/** + * This method is like `_.xor` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which by which they're compared. The order of result values is determined + * by the order they occur in the arrays. The iteratee is invoked with one + * argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2, 3.4] + * + * // The `_.property` iteratee shorthand. + * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ +var xorBy = baseRest(function(arrays) { +  var iteratee = last(arrays); +  if (isArrayLikeObject(iteratee)) { +    iteratee = undefined; +  } +  return baseXor(arrayFilter(arrays, isArrayLikeObject), baseIteratee(iteratee, 2)); +}); + +module.exports = xorBy; diff --git a/node_modules/lodash/xorWith.js b/node_modules/lodash/xorWith.js new file mode 100644 index 0000000..e3a8ac6 --- /dev/null +++ b/node_modules/lodash/xorWith.js @@ -0,0 +1,34 @@ +var arrayFilter = require('./_arrayFilter'), +    baseRest = require('./_baseRest'), +    baseXor = require('./_baseXor'), +    isArrayLikeObject = require('./isArrayLikeObject'), +    last = require('./last'); + +/** + * This method is like `_.xor` except that it accepts `comparator` which is + * invoked to compare elements of `arrays`. The order of result values is + * determined by the order they occur in the arrays. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.xorWith(objects, others, _.isEqual); + * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ +var xorWith = baseRest(function(arrays) { +  var comparator = last(arrays); +  comparator = typeof comparator == 'function' ? comparator : undefined; +  return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); +}); + +module.exports = xorWith; diff --git a/node_modules/lodash/zip.js b/node_modules/lodash/zip.js new file mode 100644 index 0000000..c800ab3 --- /dev/null +++ b/node_modules/lodash/zip.js @@ -0,0 +1,22 @@ +var baseRest = require('./_baseRest'), +    unzip = require('./unzip'); + +/** + * Creates an array of grouped elements, the first of which contains the + * first elements of the given arrays, the second of which contains the + * second elements of the given arrays, and so on. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + */ +var zip = baseRest(unzip); + +module.exports = zip; diff --git a/node_modules/lodash/zipObject.js b/node_modules/lodash/zipObject.js new file mode 100644 index 0000000..23fdf14 --- /dev/null +++ b/node_modules/lodash/zipObject.js @@ -0,0 +1,24 @@ +var assignValue = require('./_assignValue'), +    baseZipObject = require('./_baseZipObject'); + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { +  return baseZipObject(props || [], values || [], assignValue); +} + +module.exports = zipObject; diff --git a/node_modules/lodash/zipObjectDeep.js b/node_modules/lodash/zipObjectDeep.js new file mode 100644 index 0000000..7c858f8 --- /dev/null +++ b/node_modules/lodash/zipObjectDeep.js @@ -0,0 +1,23 @@ +var baseSet = require('./_baseSet'), +    baseZipObject = require('./_baseZipObject'); + +/** + * This method is like `_.zipObject` except that it supports property paths. + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); + * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } + */ +function zipObjectDeep(props, values) { +  return baseZipObject(props || [], values || [], baseSet); +} + +module.exports = zipObjectDeep; diff --git a/node_modules/lodash/zipWith.js b/node_modules/lodash/zipWith.js new file mode 100644 index 0000000..d7a1f91 --- /dev/null +++ b/node_modules/lodash/zipWith.js @@ -0,0 +1,32 @@ +var baseRest = require('./_baseRest'), +    unzipWith = require('./unzipWith'); + +/** + * This method is like `_.zip` except that it accepts `iteratee` to specify + * how grouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @param {Function} [iteratee=_.identity] The function to combine + *  grouped values. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { + *   return a + b + c; + * }); + * // => [111, 222] + */ +var zipWith = baseRest(function(arrays) { +  var length = arrays.length, +      iteratee = length > 1 ? arrays[length - 1] : undefined; + +  iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; +  return unzipWith(arrays, iteratee); +}); + +module.exports = zipWith;  | 
