{"version":3,"file":"add-photos-interface-a4c3d46e.js","sources":["../../../node_modules/lodash/last.js","../../../node_modules/lodash/_baseSlice.js","../../../node_modules/lodash/_parent.js","../../../node_modules/lodash/_baseUnset.js","../../../node_modules/lodash/_basePullAt.js","../../../node_modules/lodash/remove.js","../../../client/src/javascripts/customer_pages/_utils/object-to-form-data-util.js","../../../node_modules/lodash/_arrayAggregator.js","../../../node_modules/lodash/_baseAggregator.js","../../../node_modules/lodash/_createAggregator.js","../../../node_modules/lodash/partition.js","../../../node_modules/zustand/esm/vanilla.mjs","../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js","../../../node_modules/use-sync-external-store/shim/index.js","../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js","../../../node_modules/use-sync-external-store/shim/with-selector.js","../../../node_modules/zustand/esm/index.mjs","../../../node_modules/lodash/_createFind.js","../../../node_modules/lodash/_baseFindIndex.js","../../../node_modules/lodash/toFinite.js","../../../node_modules/lodash/toInteger.js","../../../node_modules/lodash/findIndex.js","../../../node_modules/lodash/find.js","../../../node_modules/lodash/flatten.js","../../../node_modules/lodash/assign.js","../../../node_modules/lodash/_baseIsNaN.js","../../../node_modules/lodash/_strictIndexOf.js","../../../node_modules/lodash/_baseIndexOf.js","../../../node_modules/lodash/_arrayIncludes.js","../../../node_modules/lodash/_arrayIncludesWith.js","../../../node_modules/lodash/noop.js","../../../node_modules/lodash/_createSet.js","../../../node_modules/lodash/_baseUniq.js","../../../node_modules/lodash/uniq.js","../../../node_modules/lodash/_baseSortBy.js","../../../node_modules/lodash/_compareAscending.js","../../../node_modules/lodash/_compareMultiple.js","../../../node_modules/lodash/_baseOrderBy.js","../../../node_modules/lodash/sortBy.js","../../../node_modules/lodash/compact.js","../../../node_modules/lodash/isString.js","../../../node_modules/lodash/_baseValues.js","../../../node_modules/lodash/values.js","../../../node_modules/lodash/includes.js","../../../client/src/javascripts/customer_pages/_prism-builder/misc/template-interrogator.js","../../../client/src/javascripts/customer_pages/_prism-builder/templates/template-store.js","../../../client/src/javascripts/customer_pages/_prism-builder/utils/utils.js","../../../client/src/javascripts/customer_pages/_prism-builder/prism/prism-json-encoder.js","../../../client/src/javascripts/customer_pages/_prism-builder/edit-area/containing-active-orientation.js","../../../client/src/javascripts/customer_pages/_prism-builder/misc/prism-item-interrogator.js","../../../client/src/javascripts/customer_pages/_prism-builder/trays/favourites-tray-helpers.js","../../../client/src/javascripts/customer_pages/_prism-builder/utils/special-slots.js","../../../node_modules/lodash/_arrayEach.js","../../../node_modules/lodash/_baseAssign.js","../../../node_modules/lodash/_baseAssignIn.js","../../../node_modules/lodash/_copySymbols.js","../../../node_modules/lodash/_getSymbolsIn.js","../../../node_modules/lodash/_copySymbolsIn.js","../../../node_modules/lodash/_getAllKeysIn.js","../../../node_modules/lodash/_initCloneArray.js","../../../node_modules/lodash/_cloneDataView.js","../../../node_modules/lodash/_cloneRegExp.js","../../../node_modules/lodash/_cloneSymbol.js","../../../node_modules/lodash/_initCloneByTag.js","../../../node_modules/lodash/_baseIsMap.js","../../../node_modules/lodash/isMap.js","../../../node_modules/lodash/_baseIsSet.js","../../../node_modules/lodash/isSet.js","../../../node_modules/lodash/_baseClone.js","../../../node_modules/lodash/clone.js","../../../node_modules/lodash/_castFunction.js","../../../node_modules/lodash/forEach.js","../../../node_modules/lodash/each.js","../../../client/src/javascripts/customer_pages/_prism-builder/templates/template-data.js","../../../client/src/javascripts/customer_pages/_prism-builder/prism/activeview-manipulations/shuffle.js","../../../client/src/javascripts/customer_pages/_prism-builder/dispatcher-methods/register-page-change.js","../../../client/src/javascripts/customer_pages/_prism-builder/stores/useTemplateStore.js","../../../client/src/javascripts/customer_pages/_prism-builder/misc/wk-data-interrogator.js","../../../client/src/javascripts/customer_pages/_prism-builder/utils/is-card.js","../../../client/src/javascripts/customer_pages/_prism-builder/stores/themes.js","../../../node_modules/lodash/lodash.js","../../../client/src/javascripts/customer_pages/_prism-builder/utils/fetch-favourites.js","../../../client/src/javascripts/customer_pages/_prism-builder/common/tray-base.jsx","../../../client/src/javascripts/customer_pages/_prism-builder/trays/tray-determiner.js","../../../client/src/javascripts/customer_pages/_prism-builder/utils/autofill.js","../../../client/src/javascripts/customer_pages/_prism-builder/utils/dpi-threshold.js","../../../client/src/javascripts/customer_pages/_prism-builder/stores/usePrismItemStore.js","../../../client/src/javascripts/customer_pages/_prism-builder/templates/template-cache.js","../../../client/src/javascripts/customer_pages/_prism-builder/misc/envelope-page.jsx","../../../client/src/javascripts/customer_pages/_prism-builder/edit-area/page-spreads.js","../../../client/src/javascripts/customer_pages/_prism-builder/stores/embellishments.js","../../../node_modules/eventemitter3/index.js","../../../client/src/javascripts/customer_pages/_prism-builder/event-emitter/pubsub.js","../../../client/src/javascripts/customer_pages/_prism-builder/utils/stores.js","../../../client/src/javascripts/customer_pages/_prism-builder/stores/useGenStore.js","../../../client/src/javascripts/customer_pages/_prism-builder/desktop/lib/add-photos-interface.js"],"sourcesContent":["/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nmodule.exports = last;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nmodule.exports = baseSlice;\n","var baseGet = require('./_baseGet'),\n baseSlice = require('./_baseSlice');\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nmodule.exports = parent;\n","var castPath = require('./_castPath'),\n last = require('./last'),\n parent = require('./_parent'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n}\n\nmodule.exports = baseUnset;\n","var baseUnset = require('./_baseUnset'),\n isIndex = require('./_isIndex');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\nfunction basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n}\n\nmodule.exports = basePullAt;\n","var baseIteratee = require('./_baseIteratee'),\n basePullAt = require('./_basePullAt');\n\n/**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\nfunction remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = baseIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n}\n\nmodule.exports = remove;\n","export default function objectToFormData(obj) {\n let rootName;\n let formData = null;\n\n function appendFormData(data, rootData) {\n rootData = rootData || '';\n switch (typeof data) {\n case 'string':\n formData = (formData || new FormData());\n formData.append(rootData, data);\n break;\n case 'array':\n for (let i = 0; i < Object.keys(data).length; i++) {\n appendFormData(data[i], `${rootData}[${i}]`);\n }\n break;\n case 'object':\n if (data) {\n for (const key in data) {\n if (data.hasOwnProperty(key) && key !== 'undefined') {\n if (rootData === '') {\n appendFormData(data[key], key);\n } else {\n appendFormData(data[key], `${rootData}[${key}]`);\n }\n }\n }\n }\n break;\n default:\n if (data !== null && typeof data !== 'undefined') {\n formData = (formData || new FormData());\n formData.append(rootData, data);\n }\n break;\n }\n }\n\n appendFormData(obj, rootName);\n\n return formData;\n}\n","/**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n}\n\nmodule.exports = arrayAggregator;\n","var baseEach = require('./_baseEach');\n\n/**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n}\n\nmodule.exports = baseAggregator;\n","var arrayAggregator = require('./_arrayAggregator'),\n baseAggregator = require('./_baseAggregator'),\n baseIteratee = require('./_baseIteratee'),\n isArray = require('./isArray');\n\n/**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\nfunction createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, baseIteratee(iteratee, 2), accumulator);\n };\n}\n\nmodule.exports = createAggregator;\n","var createAggregator = require('./_createAggregator');\n\n/**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\nvar partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n}, function() { return [[], []]; });\n\nmodule.exports = partition;\n","const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const destroy = () => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected.\"\n );\n }\n listeners.clear();\n };\n const api = { setState, getState, getInitialState, subscribe, destroy };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\nvar vanilla = (createState) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] Default export is deprecated. Instead use import { createStore } from 'zustand/vanilla'.\"\n );\n }\n return createStore(createState);\n};\n\nexport { createStore, vanilla as default };\n","/**\n * @license React\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var e=require(\"react\");function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d}\nfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var h=require(\"react\"),n=require(\"use-sync-external-store/shim\");function p(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var q=\"function\"===typeof Object.is?Object.is:p,r=n.useSyncExternalStore,t=h.useRef,u=h.useEffect,v=h.useMemo,w=h.useDebugValue;\nexports.useSyncExternalStoreWithSelector=function(a,b,e,l,g){var c=t(null);if(null===c.current){var f={hasValue:!1,value:null};c.current=f}else f=c.current;c=v(function(){function a(a){if(!c){c=!0;d=a;a=l(a);if(void 0!==g&&f.hasValue){var b=f.value;if(g(b,a))return k=b}return k=a}b=k;if(q(d,a))return b;var e=l(a);if(void 0!==g&&g(b,e))return b;d=a;return k=e}var c=!1,d,k,m=void 0===e?null:e;return[function(){return a(b())},null===m?void 0:function(){return a(m())}]},[b,e,l,g]);var d=r(a,c[0],c[1]);\nu(function(){f.hasValue=!0;f.value=d},[d]);w(d);return d};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","import { createStore } from 'zustand/vanilla';\nexport * from 'zustand/vanilla';\nimport ReactExports from 'react';\nimport useSyncExternalStoreExports from 'use-sync-external-store/shim/with-selector.js';\n\nconst { useDebugValue } = ReactExports;\nconst { useSyncExternalStoreWithSelector } = useSyncExternalStoreExports;\nlet didWarnAboutEqualityFn = false;\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity, equalityFn) {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && equalityFn && !didWarnAboutEqualityFn) {\n console.warn(\n \"[DEPRECATED] Use `createWithEqualityFn` instead of `create` or use `useStoreWithEqualityFn` instead of `useStore`. They can be imported from 'zustand/traditional'. https://github.com/pmndrs/zustand/discussions/1937\"\n );\n didWarnAboutEqualityFn = true;\n }\n const slice = useSyncExternalStoreWithSelector(\n api.subscribe,\n api.getState,\n api.getServerState || api.getInitialState,\n selector,\n equalityFn\n );\n useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && typeof createState !== \"function\") {\n console.warn(\n \"[DEPRECATED] Passing a vanilla store will be unsupported in a future version. Instead use `import { useStore } from 'zustand'`.\"\n );\n }\n const api = typeof createState === \"function\" ? createStore(createState) : createState;\n const useBoundStore = (selector, equalityFn) => useStore(api, selector, equalityFn);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = (createState) => createState ? createImpl(createState) : createImpl;\nvar react = (createState) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] Default export is deprecated. Instead use `import { create } from 'zustand'`.\"\n );\n }\n return create(createState);\n};\n\nexport { create, react as default, useStore };\n","var baseIteratee = require('./_baseIteratee'),\n isArrayLike = require('./isArrayLike'),\n keys = require('./keys');\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = baseIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n}\n\nmodule.exports = createFind;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = baseFindIndex;\n","var toNumber = require('./toNumber');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nmodule.exports = toFinite;\n","var toFinite = require('./toFinite');\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nmodule.exports = toInteger;\n","var baseFindIndex = require('./_baseFindIndex'),\n baseIteratee = require('./_baseIteratee'),\n toInteger = require('./toInteger');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nmodule.exports = findIndex;\n","var createFind = require('./_createFind'),\n findIndex = require('./findIndex');\n\n/**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nmodule.exports = find;\n","var baseFlatten = require('./_baseFlatten');\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nmodule.exports = flatten;\n","var assignValue = require('./_assignValue'),\n copyObject = require('./_copyObject'),\n createAssigner = require('./_createAssigner'),\n isArrayLike = require('./isArrayLike'),\n isPrototype = require('./_isPrototype'),\n keys = require('./keys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\nvar assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n});\n\nmodule.exports = assign;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nmodule.exports = baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = strictIndexOf;\n","var baseFindIndex = require('./_baseFindIndex'),\n baseIsNaN = require('./_baseIsNaN'),\n strictIndexOf = require('./_strictIndexOf');\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nmodule.exports = baseIndexOf;\n","var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arrayIncludesWith;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nmodule.exports = noop;\n","var Set = require('./_Set'),\n noop = require('./noop'),\n setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nmodule.exports = createSet;\n","var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n cacheHas = require('./_cacheHas'),\n createSet = require('./_createSet'),\n setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseUniq;\n","var baseUniq = require('./_baseUniq');\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n}\n\nmodule.exports = uniq;\n","/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n}\n\nmodule.exports = baseSortBy;\n","var isSymbol = require('./isSymbol');\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n}\n\nmodule.exports = compareAscending;\n","var compareAscending = require('./_compareAscending');\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n}\n\nmodule.exports = compareMultiple;\n","var arrayMap = require('./_arrayMap'),\n baseGet = require('./_baseGet'),\n baseIteratee = require('./_baseIteratee'),\n baseMap = require('./_baseMap'),\n baseSortBy = require('./_baseSortBy'),\n baseUnary = require('./_baseUnary'),\n compareMultiple = require('./_compareMultiple'),\n identity = require('./identity'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(baseIteratee));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n}\n\nmodule.exports = baseOrderBy;\n","var baseFlatten = require('./_baseFlatten'),\n baseOrderBy = require('./_baseOrderBy'),\n baseRest = require('./_baseRest'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\nvar sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n});\n\nmodule.exports = sortBy;\n","/**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\nfunction compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = compact;\n","var baseGetTag = require('./_baseGetTag'),\n isArray = require('./isArray'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n","var arrayMap = require('./_arrayMap');\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n}\n\nmodule.exports = baseValues;\n","var baseValues = require('./_baseValues'),\n keys = require('./keys');\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n}\n\nmodule.exports = values;\n","var baseIndexOf = require('./_baseIndexOf'),\n isArrayLike = require('./isArrayLike'),\n isString = require('./isString'),\n toInteger = require('./toInteger'),\n values = require('./values');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\nfunction includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n}\n\nmodule.exports = includes;\n","class TemplateInterrogator {\n ORIENTATION = {\n LANDSCAPE: 'landscape',\n PORTRAIT: 'portrait',\n SQUARE: 'square'\n }\n\n FILTERS = {\n ORIENTATION: {\n LANDSCAPE: 'is-landscape',\n PORTRAIT: 'is-portrait',\n SQUARE: 'is-square',\n }\n };\n\n GROUP_BY = {\n NO_OF_PHOTOS: 'no-photos',\n }\n\n filterTemplate = (template, filters) => {\n const { noOfPhotos, orientations, section, wraps, side } = filters;\n\n if (section !== null\n && section > -1\n && !this.hasSection(template, section)) {\n\n return false;\n }\n\n if (side) if (template.templates[0].tags.includes(`${side}-page`)) return false;\n\n if (orientations) {\n if (!this.hasOrientation(template, orientations)) {\n return false;\n }\n }\n\n if (noOfPhotos && !this.isNoOfPhotos(template, noOfPhotos)) {\n return false;\n }\n\n if (wraps\n && wraps.length > 0\n && !this.hasWrap(template, wraps)) {\n return false;\n }\n\n return true;\n }\n\n filterTemplates = (templates, filters) => {\n return templates.filter((t) => { return this.filterTemplate(t, filters); });\n }\n\n filterTemplatesForThoseWithMultipleOrientations = (templateGroups) => {\n const tags = templateGroups.flatMap((group) => group.templates.flatMap((template) => template.tags));\n const nonUniqueAvailableOrientations = tags.filter((tag) => {\n return this.possibleOrientationFilters().indexOf(tag) !== -1;\n });\n\n const availableOrientations = new Set(nonUniqueAvailableOrientations);\n\n templateGroups.forEach((templateGroup) => {\n templateGroup.templates = templateGroup.templates\n .filter((template) => template.tags\n .some((tag) => availableOrientations.has(tag)));\n });\n\n return templateGroups;\n }\n\n groupTemplates = (templates, groupBy) => {\n return templates.reduce((memo, template) => {\n memo[template[groupBy]] || (memo[template[groupBy]] = []);\n memo[template[groupBy]].push(template);\n return memo;\n }, {});\n }\n\n hasSection = (template, section) => {\n return template.sections.includes(section);\n }\n\n hasOrientation = (template, orientations) => {\n return this.tagIntersect(template, orientations);\n }\n\n hasWrap = (template, wraps) => {\n return this.tagIntersect(template, wraps).length > 0;\n }\n\n tagIntersect = (template, tags) => {\n return Array.isArray(tags)\n ? template.tags.filter((t) => tags.includes(t))\n : template.tags.indexOf(tags) > -1;\n }\n\n isNoOfPhotos = (template, noOfPhotos) => {\n return template['no-photos'] === noOfPhotos;\n }\n\n isCover = (template) => {\n return template.tags.indexOf('cover') > -1;\n }\n\n orientationByTags = (tags) => {\n if (tags?.includes(this.FILTERS.ORIENTATION.LANDSCAPE)) {\n return this.ORIENTATION.LANDSCAPE;\n }\n\n if (tags?.includes(this.FILTERS.ORIENTATION.PORTRAIT)) {\n return this.ORIENTATION.PORTRAIT;\n }\n\n if (tags?.includes(this.FILTERS.ORIENTATION.SQUARE)) {\n return this.ORIENTATION.SQUARE;\n }\n\n return this.ORIENTATION.LANDSCAPE;\n }\n \n orientationFilter = (template) => {\n if (!template) return this.FILTERS.ORIENTATION.LANDSCAPE;\n\n const orientation = this.orientationByTags(template.tags);\n return this.orientationToFilter(orientation);\n }\n\n orientationToFilter = (orientation) => {\n switch (orientation) {\n case this.ORIENTATION.LANDSCAPE:\n return this.FILTERS.ORIENTATION.LANDSCAPE;\n case this.ORIENTATION.PORTRAIT:\n return this.FILTERS.ORIENTATION.PORTRAIT;\n case this.ORIENTATION.SQUARE:\n return this.FILTERS.ORIENTATION.SQUARE;\n }\n\n return this.FILTERS.ORIENTATION.LANDSCAPE;\n }\n\n orientationCompare = (t1, t2) => {\n const t1Orientation = this.orientationByTags(t1.tags);\n const t2Orientation = this.orientationByTags(t2.tags);\n\n if (t1Orientation === t2Orientation) {\n return 0;\n };\n\n if (t1Orientation > t2Orientation) {\n return 1;\n }\n\n return -1;\n }\n\n possibleOrientations = () => {\n return [\n this.ORIENTATION.LANDSCAPE,\n this.ORIENTATION.PORTRAIT,\n this.ORIENTATION.SQUARE,\n ];\n }\n\n possibleOrientationFilters = () => {\n return [\n this.FILTERS.ORIENTATION.LANDSCAPE,\n this.FILTERS.ORIENTATION.PORTRAIT,\n this.FILTERS.ORIENTATION.SQUARE,\n ];\n }\n\n wrapByTags = (tags) => {\n return tags.filter((tag) => {\n return tag.startsWith('wrap-');\n })\n }\n\n wrapFilter = (template) => {\n const wraps = this.wrapByTags(template.tags);\n return wraps;\n }\n}\n\nconst templateInterrogator = new TemplateInterrogator();\nexport default templateInterrogator;\n","\n// Import JS Modules\nimport { builderDispatch, WebUI, PrismUI } from '../../_utils/ui';\nimport translate from '../../_utils/tools/translate';\nimport flatten from 'lodash/flatten';\nimport map from 'lodash/map';\nimport assign from 'lodash/assign';\nimport uniq from 'lodash/uniq';\nimport sortBy from 'lodash/sortBy';\nimport keys from 'lodash/keys';\nimport compact from 'lodash/compact';\nimport find from 'lodash/find';\nimport includes from 'lodash/includes';\nimport templateInterrogator from '../misc/template-interrogator';\nimport { usePrismItemStore } from 'stores/usePrismItemStore';\n\n// -----------------------------------------------------------\n// TemplateStore\n// -----------------------------------------------------------\nvar TemplateStore = {\n fetch() {\n // need prismItem to be loaded here?\n const prismItem = usePrismItemStore.getState().prismItem;\n\n fetch(`/m/t/${prismItem.id}`, {\n credentials: 'same-origin',\n }).then((response) => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then((response) => response.json())\n .then((templates) => {\n this.templates = templates;\n this._template_cache = {};\n this._designs = {};\n this._layouts = {};\n\n this._all_templates = flatten(map(this.templates, (e) => map(e.templates, (template) => {\n const [design, layout, position] = TemplateStore.splitTemplateID(template.id);\n const info = assign({}, template, {\n design,\n layout,\n position,\n });\n\n TemplateStore._template_cache[template.id] = info;\n TemplateStore._designs[info.design] = TemplateStore._designs[info.design] || info;\n TemplateStore._layouts[info.layout] = TemplateStore._layouts[info.layout] || info;\n\n return info;\n })));\n\n builderDispatch.dispatch({ type: WebUI.TEMPLATES_LOADED });\n })\n .catch((e) => console.error(e));\n },\n templatesFiltered(filters) {\n const templates = flatten(map(this.templates, 'templates'));\n return templateInterrogator.filterTemplates(templates, { sections: templates, ...filters });\n },\n list() {\n return this.templates;\n },\n positions() {\n return uniq(sortBy(map(keys(TemplateStore._template_cache), (id) => TemplateStore._template_cache[id].position), (position) => position));\n },\n favourites() {\n return sortBy(map(keys(TemplateStore._designs), (design) => TemplateStore._designs[design]), (template) => template.id);\n },\n layouts() {\n return sortBy(map(keys(TemplateStore._layouts), (layout) => TemplateStore._layouts[layout]), (template) => template.id);\n },\n favouritesForPosition(positions, section) {\n const list = compact(keys(TemplateStore._designs)\n .map((design) => find(TemplateStore._all_templates,\n (template) => template.design === design\n && includes(template.sections, section)\n && includes(positions, template.position))));\n\n return sortBy(list, (template) => [parseInt(template.design, 10), template.id]);\n },\n layoutsForPosition(positions, section) {\n return sortBy(compact(map(keys(TemplateStore._layouts), (layout) => find(TemplateStore._all_templates, (template) => template.layout === layout\n && includes(template.sections, section)\n && includes(positions, template.position)))), (template) => [!includes(template.tags, 'popular'), template.id]);\n },\n templateExists(id) {\n return this.templates && this._template_cache[id];\n },\n // returns a template for a section that will have the maximum number of photo slots to fit the number specified.\n getTemplateByPhotoSlots(noOfPhotos, section, orientationTag) {\n let i; let max; const\n templates = this.templatesFiltered({\n section,\n orientations: orientationTag\n });\n\n if (templates.length < 1) return;\n\n for (i = 0; i < templates.length; i++) {\n if (max) { // keep in memory max templates available, so we can return without extra recursion in case the noOfPhotos exceeds it.\n if (max['no-photo'] < templates[i]['no-photos']) max = template[i];\n } else max = templates[i];\n\n // break the loop and return a template if there is a match\n if (templates[i]['no-photos'] == noOfPhotos) return templates[i];\n }\n\n if (max['no-photos'] > noOfPhotos) return max;\n\n // Call itself with - 1 photo count until a match is found.\n return this.getTemplateByPhotoSlots(noOfPhotos - 1, section);\n },\n wrapTitles: {\n 'wrap-white': 'White',\n 'wrap-black': 'Black',\n 'wrap-full': 'Gallery',\n 'wrap-gallery': 'Wrapped Edge',\n 'wrap-mirror': 'Mirrored Edge',\n 'wrap-color': `${translate('Colored')} Edge`,\n },\n currentWrap(template_id) {\n if (!template_id) {\n if (!window.activeView || !activeView.template) return;\n template_id = activeView.template.id;\n }\n\n return TemplateStore.wraps().find((template) => groupHasTemplate(template.group));\n\n function groupHasTemplate(group) {\n return group.templates.some((template) => template.id === template_id);\n }\n },\n getWrapGroup(type) {\n if (typeof type === 'object' && type.wrap) {\n return type;\n }\n\n return TemplateStore.wraps().find((template) => template.wrap == type);\n },\n templateGroup(template_id) {\n if (!template_id) return;\n\n let group = template_id.replace(/\\/[^\\/]*$/, '');\n if (group.length === 0) group = '.';\n return group;\n },\n templateName(template_id) {\n if (!template_id) return;\n return template_id.split(/\\//).pop();\n },\n templateForWrap(type, current_template_id) {\n const wrap = this.getWrapGroup(type);\n if (!wrap) {\n console.error('Unable to find wrapGroup %s in theme', type);\n return;\n }\n for (let i = 0; i < wrap.group.templates.length; i++) {\n const template = wrap.group.templates[i];\n if (this.templateName(template.id) === this.templateName(current_template_id)) {\n return template.id;\n }\n }\n console.error('Unable to find template of type %s that matches %s', type, current_template_id);\n },\n get hasWraps() {\n return TemplateStore.wraps().length > 0;\n },\n wraps() {\n const wraps = [];\n\n if (!this.templates) return wraps;\n\n for (let i = 0; i < this.templates.length; i++) {\n const group = this.templates[i];\n const wrap_type = groupIsWrap(group);\n\n if (wrap_type) {\n wraps.push({\n id: group.id,\n wrap: wrap_type,\n title: this.wrapTitles[wrap_type],\n group,\n });\n }\n }\n\n return wraps;\n\n function templateWrapTag(template) {\n if (!template || !template.tags) return null;\n for (let i = 0; i < template.tags.length; i++) {\n if (template.tags[i].match(/^wrap-/)) {\n return template.tags[i];\n }\n }\n }\n\n function groupIsWrap(group) {\n const initial = templateWrapTag(group.templates[0]);\n if (initial && group.templates.length) {\n return initial;\n }\n\n for (let i = 1; i < group.templates.length; i++) {\n const tag = templateWrapTag(group.templates[i]);\n if (tag !== initial) {\n return false;\n }\n }\n return initial;\n }\n },\n getPortrait() {\n const cur = activeView.template.id;\n let alt;\n if (cur.indexOf('landscape') > -1) {\n alt = cur.replace(/landscape/, 'portrait');\n }\n if (this.templateExists(alt)) {\n return alt;\n }\n alt = cur;\n if (cur.indexOf('portrait') === -1) {\n alt = `${cur}-portrait`;\n }\n if (this.templateExists(alt)) {\n return alt;\n }\n return cur;\n },\n getLandscape() {\n const cur = activeView.template.id;\n let alt;\n if (cur.indexOf('portrait') > -1) {\n alt = cur.replace(/portrait/, 'landscape');\n }\n if (this.templateExists(alt)) {\n return alt;\n }\n alt = cur.replace(/-portrait/, '');\n if (this.templateExists(alt)) {\n return alt;\n }\n return cur;\n },\n splitTemplateID(templateID) {\n const bits = templateID.split(/\\//);\n const layout = bits.pop(); let design; let side; let\n position = '*';\n\n // heuristic - this should only apply to albums\n if (bits[bits.length - 1] && (bits[bits.length - 1].match(/_(left|right|title)/))) {\n side = bits.pop().split(/_/);\n\n design = bits.join('/');\n if (design.length) design = `${design}/`;\n design = `${design + side[0]}_${side[1]}`;\n position = side[1];\n } else {\n design = bits.join('/');\n if (design.length) design = `${design}/`;\n }\n // console.log(\"%s: %s\", templateID, JSON.stringify([design, layout, position]))\n return [design, layout, position];\n },\n getPosition(templateID) {\n return this.splitTemplateID(templateID)[2];\n },\n getLayout(templateID) {\n return this.splitTemplateID(templateID)[1];\n },\n getDesign(templateID) {\n return this.splitTemplateID(templateID)[0];\n },\n getTemplateByDesignAndLayout(design, layout) {\n const info = find(this._all_templates, (template) => (template.design === design) && (template.layout === layout));\n if (info) {\n return info.id;\n }\n },\n getDesignEquivalent(originalTemplateID, newTemplateID) {\n const layout = this.getLayout(originalTemplateID);\n const design = this.getDesign(newTemplateID);\n const newID = this.getTemplateByDesignAndLayout(design, layout);\n\n return newID || newTemplateID;\n },\n getLayoutEquivalent(originalTemplateID, newTemplateID) {\n const layout = this.getLayout(newTemplateID);\n const design = this.getDesign(originalTemplateID);\n const newID = this.getTemplateByDesignAndLayout(design, layout);\n return newID || newTemplateID;\n },\n layoutsForActiveView() {\n let section = 0;\n let position = '*';\n\n const prismItem = usePrismItemStore.getState().prismItem;\n\n if (window.activeView && prismItem && prismItem.pages && prismItem.pages[activeView.pageIndex]) {\n const page = prismItem.pages[activeView.pageIndex];\n section = page.product_section;\n if (this.positions().indexOf(page['page-is'])) {\n position = page['page-is'];\n }\n if (page.template && page.template.id) {\n position = this.getPosition(page.template.id) || position;\n }\n }\n return this.layoutsForPosition([position], section) || [];\n },\n getOrientation(size) {\n // Some custom components won't have size (e.g. <Envelope />)\n if (!size) return templateInterrogator.ORIENTATION.LANDSCAPE;\n\n const ratio = (size.width / size.height).toFixed(1);\n\n if (ratio == 1.0) return templateInterrogator.ORIENTATION.SQUARE;\n if (ratio < 1.0) return templateInterrogator.ORIENTATION.PORTRAIT;\n if (ratio > 1.0) return templateInterrogator.ORIENTATION.LANDSCAPE;\n },\n};\n\nbuilderDispatch.register((payload) => {\n if (payload.type === PrismUI.THEME_CHANGED) {\n TemplateStore.fetch();\n }\n if (payload.type == PrismUI.ITEM_LOADED) {\n TemplateStore.fetch();\n }\n});\n\n// export default TemplateStore;\n\nexport default TemplateStore;\n","// Import JS Modules\nimport UrlBuilder from '../../_utils/url-building';\nimport { usePrismItemStore } from 'stores/usePrismItemStore';\n\nconst Utils = {\n dataURL(item, all = true) {\n const params = {\n _: (new Date()).getTime(),\n all: all ? 1 : undefined,\n };\n\n return `/m/d/${item.id}?${UrlBuilder.buildURLQuery(params)}`;\n },\n pageURL(item, index) {\n const params = {\n _: (new Date()).getTime(),\n };\n\n return `/m/p/${item.id}/${index}?${UrlBuilder.buildURLQuery(params)}`;\n },\n load() {\n $.mobile.loading('show', {\n text: 'Loading settings',\n textVisible: true,\n theme: 'c',\n });\n usePrismItemStore.getState().prismItem.loadActive = true;\n },\n mightHavePreview3D() {\n return usePrismItemStore.getState().prismItem && usePrismItemStore.getState().prismItem.pageCount === 1;\n }\n};\n\nexport default Utils;\n","\nconst PrismJSON = {\n ok(value) {\n let type = typeof value;\n if ((value instanceof Array) || (type === 'number' || type === 'string' || type === 'boolean' || type === 'object')) {\n return true;\n }\n return false;\n },\n decode(string) {\n return $.parseJSON(string);\n },\n encode(value) {\n let i; let key; let str; let _len;\n const type = typeof value;\n\n if (value === null || type === 'undefined') return 'null';\n if (value instanceof Array) {\n str = '';\n i = 0;\n while (i < value.length) {\n if (PrismJSON.ok(value[i])) {\n if (i > 0) str += ', ';\n str += PrismJSON.encode(value[i]);\n }\n i += 1;\n }\n return `[${str}]`;\n } if (type === 'number') {\n return String(value);\n } if (type === 'string') {\n return `\"${value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r')}\"`;\n } if (type === 'boolean') {\n return (value ? 'true' : 'false');\n } if (type === 'object') {\n str = '';\n const keys = ((function () {\n const _results = [];\n for (key in value) {\n if (value.hasOwnProperty(key) && PrismJSON.ok(value[key])) _results.push(key);\n }\n return _results;\n })()).sort();\n\n for (i = 0, _len = keys.length; i < _len; i++) {\n key = keys[i];\n if (i > 0) str += ', ';\n str += `${PrismJSON.encode(key)}: ${PrismJSON.encode(value[key])}`;\n }\n return `{${str}}`;\n }\n\n return 'null';\n },\n};\n\nexport default PrismJSON;\n","const containgActiveOrientation = ((template) => {\n const activeOrientation = (() => {\n const { tags } = window.activeView.template;\n return ['is-landscape', 'is-portrait', 'is-square'].find((tag) => tags.includes(tag));\n })();\n\n return template.tags.includes(activeOrientation);\n});\n\nexport default containgActiveOrientation;\n","import { usePrismItemStore } from 'stores/usePrismItemStore';\n\nclass PrismItemInterrogator {\n getCurrentSection = () => {\n const prismItem = usePrismItemStore.getState().prismItem;\n if (!window.activeView || !prismItem || !prismItem.pages || !prismItem.pages[activeView.pageIndex]) {\n return null;\n }\n\n // removing assignment to 0 for envelopes to not show any designs as it is not real section\n return prismItem.pages[activeView.pageIndex].product_section;\n }\n}\n\nconst prismItemInterrogator = new PrismItemInterrogator();\nexport default prismItemInterrogator;\n","\nimport TemplateStore from '../templates/template-store';\nimport containingActiveOrientation from '../edit-area/containing-active-orientation.js';\nimport prismItemInterrogator from '../misc/prism-item-interrogator';\n\n// I have barely little idea what the hell is going on here and it looks like\n// Taha didn't fare any better either, according to his comments.\n\n// Looking for function getTemplateOrientation(tags)? This has moved to template-inetrrogator.js\n\n// ------------------------------------------------------------------------------------------\n\n// Returns current active section\nfunction getCurrentSection() {\n return prismItemInterrogator.getCurrentSection();\n}\n\n// ------------------------------------------------------------------------------------------\n\nfunction getFoldersBySection(templates, edges) { // returns designs (aka folders) for specific section\n const wrap = TemplateStore.currentWrap();\n const activeSection = getCurrentSection();\n const folders = [];\n\n for (const template of templates) {\n if (template.suitable_for.indexOf(activeSection) === -1) continue;\n\n // Slim down for canvas wraps\n if (edges && wrap && wrap.group) {\n if (wrap.group.group !== template.group) {\n continue;\n }\n }\n\n folders.push(template);\n }\n\n return folders;\n}\n\n// ------------------------------------------------------------------------------------------\n\n// returns if current theme is for card theme\nfunction isCard(foldersBySection) {\n const [firstFolder] = (foldersBySection || []);\n\n if (firstFolder && firstFolder.templates.length > 0) {\n return firstFolder.templates[0].tags.indexOf('card') !== -1;\n }\n\n return false;\n}\n\n// ------------------------------------------------------------------------------------------\n\nfunction filterTemplates(templates, filter, section) {\n templates = templates.filter((template) => (filter === '*' || filter === template['no-photos']) && template.sections.includes(section));\n\n if (section !== 0) {\n templates = templates.filter((template) => containingActiveOrientation(template));\n }\n\n return templates.sort((a, b) => (a.name > b.name ? 1 : -1));\n}\n\nfunction getCurrentTemplateSlots() {\n if (!window.activeView || !activeView.template || !activeView.template.pso) {\n return 1;\n }\n\n return activeView.template.pso.filter((id) => !(id.match(/^optional-|:/))).length;\n}\n\n// ------------------------------------------------------------------------------------------\nfunction getCurrentTemplateOrientation() {\n if (!activeView.template) return null;\n return TemplateStore.getOrientation(activeView.template.size);\n}\n\n// ------------------------------------------------------------------------------------------\n\nfunction numberOfPhotosInTemplateText(number) {\n switch (number) {\n case 0:\n return 'Text only';\n case 1:\n return '1 photo';\n default:\n return `${number} photos`;\n }\n}\n\n// ------------------------------------------------------------------------------------------\nfunction numberOfTextSolotsInTemplateText(number) {\n switch (number) {\n case 0:\n return;\n case 1:\n return '1 text';\n default:\n return `${number} texts`;\n }\n}\n\n// ------------------------------------------------------------------------------------------\n\nexport {\n getCurrentSection,\n getFoldersBySection,\n isCard,\n filterTemplates,\n getCurrentTemplateSlots,\n getCurrentTemplateOrientation,\n numberOfPhotosInTemplateText,\n numberOfTextSolotsInTemplateText,\n};\n","const calendarEventTextRegex = /^text-[0-9]{4}-[0-9]{2}-[0-9]{2}/;\nconst calendarEventPhotoRegex = /^photo-[0-9]{4}-[0-9]{2}-[0-9]{2}/;\nconst optionalSlotRegex = /^optional-/;\nconst clonedSlotRegex = /^.*:/;\n\nfunction isCalendarEventTextSlot(slotID) {\n return slotID.match(calendarEventTextRegex);\n}\n\nfunction isCalendarEventPhotoSlot(slotID) {\n return slotID.match(calendarEventPhotoRegex);\n}\n\nfunction isOptionalSlot(slotID) {\n return slotID.match(optionalSlotRegex);\n}\n\nfunction isClonedSlot(slotID) {\n return slotID.match(clonedSlotRegex);\n}\n\nexport { isCalendarEventTextSlot, isCalendarEventPhotoSlot, isOptionalSlot, isClonedSlot };\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n","var copyObject = require('./_copyObject'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","var copyObject = require('./_copyObject'),\n getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n","var arrayPush = require('./_arrayPush'),\n getPrototype = require('./_getPrototype'),\n getSymbols = require('./_getSymbols'),\n stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nmodule.exports = getSymbolsIn;\n","var copyObject = require('./_copyObject'),\n getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbolsIn = require('./_getSymbolsIn'),\n keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nmodule.exports = initCloneArray;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nmodule.exports = cloneRegExp;\n","var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n cloneDataView = require('./_cloneDataView'),\n cloneRegExp = require('./_cloneRegExp'),\n cloneSymbol = require('./_cloneSymbol'),\n cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nmodule.exports = initCloneByTag;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n","var baseIsMap = require('./_baseIsMap'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","var baseIsSet = require('./_baseIsSet'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n","var Stack = require('./_Stack'),\n arrayEach = require('./_arrayEach'),\n assignValue = require('./_assignValue'),\n baseAssign = require('./_baseAssign'),\n baseAssignIn = require('./_baseAssignIn'),\n cloneBuffer = require('./_cloneBuffer'),\n copyArray = require('./_copyArray'),\n copySymbols = require('./_copySymbols'),\n copySymbolsIn = require('./_copySymbolsIn'),\n getAllKeys = require('./_getAllKeys'),\n getAllKeysIn = require('./_getAllKeysIn'),\n getTag = require('./_getTag'),\n initCloneArray = require('./_initCloneArray'),\n initCloneByTag = require('./_initCloneByTag'),\n initCloneObject = require('./_initCloneObject'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isMap = require('./isMap'),\n isObject = require('./isObject'),\n isSet = require('./isSet'),\n keys = require('./keys'),\n keysIn = require('./keysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nmodule.exports = baseClone;\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = clone;\n","var identity = require('./identity');\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n return typeof value == 'function' ? value : identity;\n}\n\nmodule.exports = castFunction;\n","var arrayEach = require('./_arrayEach'),\n baseEach = require('./_baseEach'),\n castFunction = require('./_castFunction'),\n isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, castFunction(iteratee));\n}\n\nmodule.exports = forEach;\n","module.exports = require('./forEach');\n","import assign from 'lodash/assign';\nimport find from 'lodash/find';\nimport clone from 'lodash/clone';\nimport each from 'lodash/each';\nimport includes from 'lodash/includes';\nimport TemplateCache from './template-cache';\nimport { findInArray } from '../utils/stores';\n\nconst templateData = {};\n\ntemplateData.setPhoto = function (pageData, templateData, slot, properties) {\n const currentSlot = findInArray(pageData.slots, 'id', slot.id);\n const meta = templateData.photo_slots[slot.id];\n\n slot = assign({ image: false, type: 'image' }, slot);\n\n if (currentSlot) {\n slot = assign(currentSlot, slot);\n } else {\n pageData.slots.push(slot);\n }\n\n slot.data = slot.data || TemplateCache.textSlotMetaToSlotData(meta);\n if (properties) {\n assign(slot.data, properties);\n }\n\n return pageData;\n};\n\ntemplateData.getPhoto = function (pageData, slotId) {\n return find(pageData.slots || [], 'id', slotId);\n};\n\ntemplateData.copyData = function (pageDataA, templateDataA, pageDataB, templateDataB) {\n const emptyImgSlots = clone(templateDataB.pso.filter((k) => k !== 'optional-bg'));\n const emptyTxtSlots = clone(templateDataB.tso);\n\n each(pageDataA.slots, (slot) => {\n if (slot.image && slot.type === 'image') {\n let nextSlotId, newSlot;\n\n // treat the optional-bg differently from the rest of the photo slots\n if (slot.id == 'optional-bg' && templateDataB.pso.filter((k) => k === 'optional-bg').length > 0) {\n nextSlotId = templateDataB.pso.find((k) => k === 'optional-bg');\n } else if (emptyImgSlots.length > 0) {\n nextSlotId = emptyImgSlots.shift();\n }\n\n if (!nextSlotId) return true; // Will tell lodash each to continue with the next iteration\n\n newSlot = assign({}, slot, { id: nextSlotId });\n pageDataB = templateData.setPhoto(pageDataB, templateDataB, newSlot);\n } else if (slot.type === 'text') {\n // resize slots to fit template?\n if (includes(templateDataA.tso, slot.id)) {\n // copy to equivalent slot\n if (includes(templateDataB.tso, slot.id)) {\n pageDataB.slots.push(slot);\n }\n } else {\n // copy as new user text slot\n pageDataB.slots.push(slot);\n }\n }\n });\n\n return pageDataB;\n};\n\nexport default templateData;\n","import get from 'lodash/get';\nimport TemplateStore from '../../templates/template-store';\nimport templateInterrogator from '../../misc/template-interrogator';\nimport prismItemInterrogator from '../../misc/prism-item-interrogator';\nimport { useTemplateSelectStore } from 'stores/useTemplateStore';\n\nclass Shuffle {\n static get can() {\n if (!get(window, ['activeView', 'template', 'photo_slots'])) {\n return false;\n }\n\n return Shuffle.layouts.length > 1;\n }\n\n static do() {\n if (!this.can) return;\n\n useTemplateSelectStore.getState().updateTemplateSelectStore({\n templateID: activeView.template.id,\n orientation: Shuffle.activeViewOrientation,\n shuffle: true,\n layouts: Shuffle.layouts,\n });\n }\n\n static get photoSlotCount() {\n return Object.keys(activeView.template.photo_slots).filter(\n k => k !== 'optional-bg'\n ).length;\n }\n\n static get activeViewOrientation() {\n return TemplateStore.getOrientation(activeView.template.size);\n }\n\n static get layouts() {\n const orientationFilter = templateInterrogator.orientationFilter(\n activeView.template\n );\n const wrapFilter = templateInterrogator.wrapFilter(activeView.template);\n\n const result = TemplateStore.templatesFiltered({\n noOfPhotos: Shuffle.photoSlotCount,\n section: prismItemInterrogator.getCurrentSection(),\n orientations: orientationFilter,\n wraps: wrapFilter,\n });\n\n return result;\n }\n\n static get nextLayout() {\n const layouts = Shuffle.layouts;\n\n if (!layouts || layouts.length === 0) {\n return null;\n } else if (layouts.length === 1) {\n return layouts[0];\n }\n\n const currentLayoutIndex = layouts.findIndex(\n layout => layout.id === activeView.template.id\n );\n const nextLayoutIndex =\n currentLayoutIndex < layouts.length - 1 ? currentLayoutIndex + 1 : 0;\n\n return layouts[nextLayoutIndex];\n }\n}\n\n// --------------------------------------------------------------------\n\nexport default Shuffle;\n","/* global activeView */\n\n\n// Import JS Modules\nimport { builderDispatch, WebUI, PrismUI } from '../../_utils/ui';\nimport TemplateCache from '../templates/template-cache';\nimport TemplateData from '../templates/template-data';\nimport TemplateStore from '../templates/template-store';\nimport { getCurrentSection } from '../trays/favourites-tray-helpers';\nimport Shuffle from '../prism/activeview-manipulations/shuffle';\nimport { usePrismItemStore } from 'stores/usePrismItemStore';\n\n// --------------------------------------------------------------------\n\nbuilderDispatch.register((payload) => {\n switch (payload.type) {\n case WebUI.TEMPLATE_CHANGED:\n handleTemplateChanged();\n break;\n case WebUI.PAGES_CHANGED:\n handlePagesChanged();\n break;\n }\n});\n\n\nexport function handleSelectTemplate({ templateID, shuffle }) {\n if (activeView.customPage) {\n return;\n }\n \n if (window.activeView.template && activeView.template.id === templateID && !shuffle) {\n return;\n }\n\n if (shuffle) {\n const nextLayout = Shuffle.nextLayout;\n templateID = TemplateStore.getDesignEquivalent(nextLayout.id, nextLayout.id);\n }\n\n TemplateCache.get(templateID, (templateData) => {\n // transform page into\n if (TemplateCache.templatesMatch(activeView.template, templateData)) {\n activeView.suppressSave('change-template-set-data', (view) => {\n view.deleteAllOverrideImageSlots();\n view.repositionTextSlots(templateData);\n const data = view.getData(false);\n data.templateID = templateData.id;\n view.setData(data);\n });\n\n } else {\n // XXX: image orientation, colour, etc. and user text\n activeView.suppressSave('change-template-set-images', (view) => {\n view.deleteAllOverrideImageSlots();\n const [previousImages, previousTexts] = [view.getImages(), view.getTexts()];\n\n view.loadTemplate(templateData);\n view.setImages(previousImages);\n view.setTexts(previousTexts);\n });\n }\n activeView.do_save();\n\n (() => {\n const tmr = setInterval(() => {\n // hang on a moment until getCurrentSection returns a usuable value\n const activeSection = getCurrentSection();\n if (typeof activeSection !== 'undefined') {\n clearInterval(tmr);\n\n builderDispatch.dispatch({\n type: WebUI.TEMPLATE_CHANGED,\n template: templateData,\n });\n }\n }, 10);\n })();\n }, (error) => {\n // report error\n console.error(error);\n });\n}\n\nfunction handleTemplateChanged() {\n const prismItem = usePrismItemStore.getState().prismItem;\n\n if (wkData.product.type !== 'wmcard' || typeof prismItem === 'undefined' || typeof window.activeView === 'undefined') {\n return;\n }\n\n const promises = [];\n\n // start loading\n promises.push(\n builderDispatch.delayedDispatch({\n type: PrismUI.MODAL_MESSAGE,\n }),\n );\n\n for (let i = 0; i < prismItem.pageCount; i++) {\n if (activeView.pageIndex == i) {\n continue;\n }\n\n promises.push(new Promise((resolve) => {\n usePrismItemStore.getState().pageWithTemplate(i).then(({ page, template }) => {\n const orientations = ['is-portrait', 'is-landscape', 'is-square'];\n const orientation = orientations.find((orientation) => activeView.template.tags.includes(orientation) && !template.tags.includes(orientation));\n\n if (!orientation) {\n resolve();\n return;\n }\n\n const { id: newTemplateID } = (() => {\n const availableTemplates = TemplateStore.templatesFiltered({\n section: page.section,\n orientations: orientation\n });\n const availableTemplatesWithSameNumberOfPhotos = availableTemplates.filter((availableTemplate) => availableTemplate['no-photos'] === template.pso.filter((k) => k !== 'optional-bg').length);\n\n return availableTemplatesWithSameNumberOfPhotos[0] || availableTemplates[0] || {};\n })();\n\n if (typeof newTemplateID === 'undefined') {\n resolve();\n return;\n }\n\n TemplateCache.get(newTemplateID, (templateB) => {\n let updatedPage = {\n ...page,\n templateID: newTemplateID,\n templateId: newTemplateID,\n template: null,\n };\n\n updatedPage = TemplateData.copyData(page, template, updatedPage, templateB);\n\n usePrismItemStore.getState().savePage(page.index, updatedPage).then(() => resolve());\n });\n });\n }));\n }\n\n Promise.all(promises).then(() => {\n // stop loading\n builderDispatch.delayedDispatch({\n type: PrismUI.MODAL_MESSAGE,\n action: 'hide',\n });\n });\n}\n\nfunction handlePagesChanged() {\n const prismItem = usePrismItemStore.getState().prismItem;\n for (const index in prismItem.pages) {\n const page = prismItem.pages[index];\n TemplateCache.get(page.templateID);\n }\n}\n","import { create } from 'zustand';\nimport { handleSelectTemplate } from '../dispatcher-methods/register-page-change';\n\nexport const useTemplateSelectStore = create(set => ({\n templateID: '',\n orientation: '',\n shuffle: false,\n layouts: null,\n updateTemplateSelectStore: payload => {\n set(payload);\n\n const payloadItems = Object.keys(payload);\n\n if (payloadItems.includes('templateID')) {\n const templateID = payload['templateID'];\n handleSelectTemplate({ templateID });\n\n if (payloadItems.includes('shuffle')) {\n const shuffle = payload['shuffle'];\n handleSelectTemplate({ templateID, shuffle });\n }\n }\n },\n}));\n","const wkDataInterrogator = {\n isAlbum() {\n return wkData.product.type === 'album';\n },\n\n isCalendar() {\n return window.wkData.product.type === 'calendar';\n }\n};\n\nexport default wkDataInterrogator;\n","export default function isCard() {\n return ['wmcard', 'card'].includes(wkData.product.type);\n}\n","import { builderDispatch, PrismUI } from '../../_utils/ui';\nimport isCard from '../utils/is-card';\nimport { usePrismItemStore } from './usePrismItemStore';\n\n\nexport class ThemeStore {\n constructor() {\n this.themes = [];\n this.fetching = false;\n }\n\n async fetch() {\n this.themes = [];\n this.fetching = true;\n\n const [_, themes, products] = await Promise.all([\n this.dispatchThemes(),\n this.getThemes(),\n this.getProducts(),\n ]);\n\n this.themes = this.filterThemes(themes, products);\n this.fetching = false;\n\n this.dispatchThemes();\n\n return this.themes;\n }\n\n async length() {\n // Fetch the themes if they don't exist\n const themes = this.themes.length > 0\n ? this.themes\n : await this.fetch();\n\n return themes.length;\n }\n\n async some() {\n return (await this.length()) > 0;\n }\n\n filterThemes(themes, products) {\n // Return all if it's not a card\n if (!isCard()) return this.orderByBestSeller(themes);\n\n const filters = this.getCurrentProductFilters(products);\n\n const filtered = themes.filter((theme) =>\n // return true if one or more of the filters matches\n // the current product\n this\n .getProductFiltersByDesignCode(products, theme.design_code)\n .some((f) => filters.includes(f)));\n\n // If there are no matches then return them all\n return filtered.length > 0\n ? this.orderByBestSeller(filtered)\n : themes;\n }\n\n orderByBestSeller(items) {\n return items.sort((a, b) => ((a.sales_total < b.sales_total) ? 1 : -1));\n }\n\n async getThemes() {\n const response = await fetch(wkData.themes_url, {\n credentials: 'same-origin',\n });\n\n if (!response.ok) throw new Error(response.statusText);\n\n const { themes } = await response.json();\n return themes || [];\n }\n\n async getProducts() {\n const url = new URL(wkData.info_url);\n const path = url.pathname;\n const response = await fetch(`${path}/themes.json`, {\n credentials: 'same-origin',\n });\n\n if (!response.ok) throw new Error(response.statusText);\n\n const { products } = await response.json();\n return products || [];\n }\n\n async dispatchThemes() {\n return builderDispatch.delayedDispatch({\n type: PrismUI.THEMES_LOADED,\n themes: this.themes,\n });\n }\n\n getProductFiltersByDesignCode(products, code) {\n const product = products.find((p) => p.design_code === code);\n return Object.keys(product ? product.filters : {});\n }\n\n getCurrentProductFilters(products) {\n // Get a list of filters for the current prism item\n // but exclude any that we're not interested in\n const prismItem = usePrismItemStore.getState().prismItem;\n \n return this\n .getProductFiltersByDesignCode(products, prismItem.design_code)\n .filter((filter) => this.cardFilters.includes(filter));\n }\n\n get cardFilters() {\n return [\n 'baby',\n 'birthday',\n 'business',\n 'christmas_and_holiday',\n 'espanol_card',\n 'everyday',\n 'graduation',\n 'licensed_character',\n 'religiou',\n 'seasonal',\n 'specialty_card',\n 'thank_you_card',\n 'wedding',\n ];\n }\n}\n\nexport const themeStore = new ThemeStore();\n","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.21';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function',\n INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading whitespace. */\n var reTrimStart = /^\\s+/;\n\n /** Used to match a single whitespace character. */\n var reWhitespace = /\\s/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /**\n * Used to validate the `validate` option in `_.template` variable.\n *\n * Forbids characters which could potentially change the meaning of the function argument definition:\n * - \"(),\" (modification of function parameters)\n * - \"=\" (default value)\n * - \"[]{}\" (destructuring of function parameters)\n * - \"/\" (beginning of a comment)\n * - whitespace\n */\n var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n 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',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** 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/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n 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 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\n function baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\n function trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n var low = 0,\n high = array == null ? 0 : array.length;\n if (high === 0) {\n return 0;\n }\n\n value = iteratee(value);\n var valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '<p>' + func(text) + '</p>';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '<p>fred, barney, & pebbles</p>'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('<body>');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<b><%- value %></b>');\n * compiled({ 'value': '<script>' });\n * // => '<b><script></b>'\n *\n * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the internal `print` function in \"evaluate\" delimiters.\n * var compiled = _.template('<% print(\"hello \" + user); %>!');\n * compiled({ 'user': 'barney' });\n * // => 'hello barney!'\n *\n * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n * // Disable support by replacing the \"interpolate\" delimiter.\n * var compiled = _.template('hello ${ user }!');\n * compiled({ 'user': 'pebbles' });\n * // => 'hello pebbles!'\n *\n * // Use backslashes to treat delimiters as plain text.\n * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n * compiled({ 'value': 'ignored' });\n * // => '<%- value %>'\n *\n * // Use the `imports` option to import `jQuery` as `jq`.\n * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n * compiled(data);\n * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n *\n * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n * compiled.source;\n * // => function(data) {\n * // var __t, __p = '';\n * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n * // return __p;\n * // }\n *\n * // Use custom template delimiters.\n * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n * var compiled = _.template('hello {{ user }}!');\n * compiled({ 'user': 'mustache' });\n * // => 'hello mustache!'\n *\n * // Use the `source` property to inline compiled templates for meaningful\n * // line numbers in error messages and stack traces.\n * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n * var JST = {\\\n * \"main\": ' + _.template(mainText).source + '\\\n * };\\\n * ');\n */\n function template(string, options, guard) {\n // Based on John Resig's `tmpl` implementation\n // (http://ejohn.org/blog/javascript-micro-templating/)\n // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n var settings = lodash.templateSettings;\n\n if (guard && isIterateeCall(string, options, guard)) {\n options = undefined;\n }\n string = toString(string);\n options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n importsKeys = keys(imports),\n importsValues = baseValues(imports, importsKeys);\n\n var isEscaping,\n isEvaluating,\n index = 0,\n interpolate = options.interpolate || reNoMatch,\n source = \"__p += '\";\n\n // Compile the regexp to match each delimiter.\n var reDelimiters = RegExp(\n (options.escape || reNoMatch).source + '|' +\n interpolate.source + '|' +\n (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n (options.evaluate || reNoMatch).source + '|$'\n , 'g');\n\n // Use a sourceURL for easier debugging.\n // The sourceURL gets injected into the source that's eval-ed, so be careful\n // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n // and escape the comment, thus injecting code that gets evaled.\n var sourceURL = '//# sourceURL=' +\n (hasOwnProperty.call(options, 'sourceURL')\n ? (options.sourceURL + '').replace(/\\s/g, ' ')\n : ('lodash.templateSources[' + (++templateCounter) + ']')\n ) + '\\n';\n\n string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n interpolateValue || (interpolateValue = esTemplateValue);\n\n // Escape characters that can't be included in string literals.\n source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n // Replace delimiters with snippets.\n if (escapeValue) {\n isEscaping = true;\n source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n }\n if (evaluateValue) {\n isEvaluating = true;\n source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n }\n if (interpolateValue) {\n source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n }\n index = offset + match.length;\n\n // The JS engine embedded in Adobe products needs `match` returned in\n // order to produce the correct `offset` value.\n return match;\n });\n\n source += \"';\\n\";\n\n // If `variable` is not specified wrap a with-statement around the generated\n // code to add the data object to the top of the scope chain.\n var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n if (!variable) {\n source = 'with (obj) {\\n' + source + '\\n}\\n';\n }\n // Throw an error if a forbidden character was found in `variable`, to prevent\n // potential command injection attacks.\n else if (reForbiddenIdentifierChars.test(variable)) {\n throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n }\n\n // Cleanup code by stripping empty strings.\n source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n .replace(reEmptyStringMiddle, '$1')\n .replace(reEmptyStringTrailing, '$1;');\n\n // Frame code as the function body.\n source = 'function(' + (variable || 'obj') + ') {\\n' +\n (variable\n ? ''\n : 'obj || (obj = {});\\n'\n ) +\n \"var __t, __p = ''\" +\n (isEscaping\n ? ', __e = _.escape'\n : ''\n ) +\n (isEvaluating\n ? ', __j = Array.prototype.join;\\n' +\n \"function print() { __p += __j.call(arguments, '') }\\n\"\n : ';\\n'\n ) +\n source +\n 'return __p\\n}';\n\n var result = attempt(function() {\n return Function(importsKeys, sourceURL + 'return ' + source)\n .apply(undefined, importsValues);\n });\n\n // Provide the compiled function's source by its `toString` method or\n // the `source` property as a convenience for inlining compiled templates.\n result.source = source;\n if (isError(result)) {\n throw result;\n }\n return result;\n }\n\n /**\n * Converts `string`, as a whole, to lower case just like\n * [String#toLowerCase](https://mdn.io/toLowerCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.toLower('--Foo-Bar--');\n * // => '--foo-bar--'\n *\n * _.toLower('fooBar');\n * // => 'foobar'\n *\n * _.toLower('__FOO_BAR__');\n * // => '__foo_bar__'\n */\n function toLower(value) {\n return toString(value).toLowerCase();\n }\n\n /**\n * Converts `string`, as a whole, to upper case just like\n * [String#toUpperCase](https://mdn.io/toUpperCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.toUpper('--foo-bar--');\n * // => '--FOO-BAR--'\n *\n * _.toUpper('fooBar');\n * // => 'FOOBAR'\n *\n * _.toUpper('__foo_bar__');\n * // => '__FOO_BAR__'\n */\n function toUpper(value) {\n return toString(value).toUpperCase();\n }\n\n /**\n * Removes leading and trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trim(' abc ');\n * // => 'abc'\n *\n * _.trim('-_-abc-_-', '_-');\n * // => 'abc'\n *\n * _.map([' foo ', ' bar '], _.trim);\n * // => ['foo', 'bar']\n */\n function trim(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return baseTrim(string);\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n chrSymbols = stringToArray(chars),\n start = charsStartIndex(strSymbols, chrSymbols),\n end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n return castSlice(strSymbols, start, end).join('');\n }\n\n /**\n * Removes trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimEnd(' abc ');\n * // => ' abc'\n *\n * _.trimEnd('-_-abc-_-', '_-');\n * // => '-_-abc'\n */\n function trimEnd(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.slice(0, trimmedEndIndex(string) + 1);\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n return castSlice(strSymbols, 0, end).join('');\n }\n\n /**\n * Removes leading whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimStart(' abc ');\n * // => 'abc '\n *\n * _.trimStart('-_-abc-_-', '_-');\n * // => 'abc-_-'\n */\n function trimStart(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimStart, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n start = charsStartIndex(strSymbols, stringToArray(chars));\n\n return castSlice(strSymbols, start).join('');\n }\n\n /**\n * Truncates `string` if it's longer than the given maximum string length.\n * The last characters of the truncated string are replaced with the omission\n * string which defaults to \"...\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to truncate.\n * @param {Object} [options={}] The options object.\n * @param {number} [options.length=30] The maximum string length.\n * @param {string} [options.omission='...'] The string to indicate text is omitted.\n * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n * @returns {string} Returns the truncated string.\n * @example\n *\n * _.truncate('hi-diddly-ho there, neighborino');\n * // => 'hi-diddly-ho there, neighbo...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': ' '\n * });\n * // => 'hi-diddly-ho there,...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': /,? +/\n * });\n * // => 'hi-diddly-ho there...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'omission': ' [...]'\n * });\n * // => 'hi-diddly-ho there, neig [...]'\n */\n function truncate(string, options) {\n var length = DEFAULT_TRUNC_LENGTH,\n omission = DEFAULT_TRUNC_OMISSION;\n\n if (isObject(options)) {\n var separator = 'separator' in options ? options.separator : separator;\n length = 'length' in options ? toInteger(options.length) : length;\n omission = 'omission' in options ? baseToString(options.omission) : omission;\n }\n string = toString(string);\n\n var strLength = string.length;\n if (hasUnicode(string)) {\n var strSymbols = stringToArray(string);\n strLength = strSymbols.length;\n }\n if (length >= strLength) {\n return string;\n }\n var end = length - stringSize(omission);\n if (end < 1) {\n return omission;\n }\n var result = strSymbols\n ? castSlice(strSymbols, 0, end).join('')\n : string.slice(0, end);\n\n if (separator === undefined) {\n return result + omission;\n }\n if (strSymbols) {\n end += (result.length - end);\n }\n if (isRegExp(separator)) {\n if (string.slice(end).search(separator)) {\n var match,\n substring = result;\n\n if (!separator.global) {\n separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n }\n separator.lastIndex = 0;\n while ((match = separator.exec(substring))) {\n var newEnd = match.index;\n }\n result = result.slice(0, newEnd === undefined ? end : newEnd);\n }\n } else if (string.indexOf(baseToString(separator), end) != end) {\n var index = result.lastIndexOf(separator);\n if (index > -1) {\n result = result.slice(0, index);\n }\n }\n return result + omission;\n }\n\n /**\n * The inverse of `_.escape`; this method converts the HTML entities\n * `&`, `<`, `>`, `"`, and `'` in `string` to\n * their corresponding characters.\n *\n * **Note:** No other HTML entities are unescaped. To unescape additional\n * HTML entities use a third-party library like [_he_](https://mths.be/he).\n *\n * @static\n * @memberOf _\n * @since 0.6.0\n * @category String\n * @param {string} [string=''] The string to unescape.\n * @returns {string} Returns the unescaped string.\n * @example\n *\n * _.unescape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function unescape(string) {\n string = toString(string);\n return (string && reHasEscapedHtml.test(string))\n ? string.replace(reEscapedHtml, unescapeHtmlChar)\n : string;\n }\n\n /**\n * Converts `string`, as space separated words, to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.upperCase('--foo-bar');\n * // => 'FOO BAR'\n *\n * _.upperCase('fooBar');\n * // => 'FOO BAR'\n *\n * _.upperCase('__foo_bar__');\n * // => 'FOO BAR'\n */\n var upperCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toUpperCase();\n });\n\n /**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\n var upperFirst = createCaseFirst('toUpperCase');\n\n /**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\n function words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Attempts to invoke `func`, returning either the result or the caught error\n * object. Any additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Function} func The function to attempt.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {*} Returns the `func` result or error object.\n * @example\n *\n * // Avoid throwing errors for invalid selectors.\n * var elements = _.attempt(function(selector) {\n * return document.querySelectorAll(selector);\n * }, '>_>');\n *\n * if (_.isError(elements)) {\n * elements = [];\n * }\n */\n var attempt = baseRest(function(func, args) {\n try {\n return apply(func, undefined, args);\n } catch (e) {\n return isError(e) ? e : new Error(e);\n }\n });\n\n /**\n * Binds methods of an object to the object itself, overwriting the existing\n * method.\n *\n * **Note:** This method doesn't set the \"length\" property of bound functions.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Object} object The object to bind and assign the bound methods to.\n * @param {...(string|string[])} methodNames The object method names to bind.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var view = {\n * 'label': 'docs',\n * 'click': function() {\n * console.log('clicked ' + this.label);\n * }\n * };\n *\n * _.bindAll(view, ['click']);\n * jQuery(element).on('click', view.click);\n * // => Logs 'clicked docs' when clicked.\n */\n var bindAll = flatRest(function(object, methodNames) {\n arrayEach(methodNames, function(key) {\n key = toKey(key);\n baseAssignValue(object, key, bind(object[key], object));\n });\n return object;\n });\n\n /**\n * Creates a function that iterates over `pairs` and invokes the corresponding\n * function of the first predicate to return truthy. The predicate-function\n * pairs are invoked with the `this` binding and arguments of the created\n * function.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Array} pairs The predicate-function pairs.\n * @returns {Function} Returns the new composite function.\n * @example\n *\n * var func = _.cond([\n * [_.matches({ 'a': 1 }), _.constant('matches A')],\n * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n * [_.stubTrue, _.constant('no match')]\n * ]);\n *\n * func({ 'a': 1, 'b': 2 });\n * // => 'matches A'\n *\n * func({ 'a': 0, 'b': 1 });\n * // => 'matches B'\n *\n * func({ 'a': '1', 'b': '2' });\n * // => 'no match'\n */\n function cond(pairs) {\n var length = pairs == null ? 0 : pairs.length,\n toIteratee = getIteratee();\n\n pairs = !length ? [] : arrayMap(pairs, function(pair) {\n if (typeof pair[1] != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return [toIteratee(pair[0]), pair[1]];\n });\n\n return baseRest(function(args) {\n var index = -1;\n while (++index < length) {\n var pair = pairs[index];\n if (apply(pair[0], this, args)) {\n return apply(pair[1], this, args);\n }\n }\n });\n }\n\n /**\n * Creates a function that invokes the predicate properties of `source` with\n * the corresponding property values of a given object, returning `true` if\n * all predicates return truthy, else `false`.\n *\n * **Note:** The created function is equivalent to `_.conformsTo` with\n * `source` partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 2, 'b': 1 },\n * { 'a': 1, 'b': 2 }\n * ];\n *\n * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n * // => [{ 'a': 1, 'b': 2 }]\n */\n function conforms(source) {\n return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\n function constant(value) {\n return function() {\n return value;\n };\n }\n\n /**\n * Checks `value` to determine whether a default value should be returned in\n * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n * or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Util\n * @param {*} value The value to check.\n * @param {*} defaultValue The default value.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * _.defaultTo(1, 10);\n * // => 1\n *\n * _.defaultTo(undefined, 10);\n * // => 10\n */\n function defaultTo(value, defaultValue) {\n return (value == null || value !== value) ? defaultValue : value;\n }\n\n /**\n * Creates a function that returns the result of invoking the given functions\n * with the `this` binding of the created function, where each successive\n * invocation is supplied the return value of the previous.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flowRight\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flow([_.add, square]);\n * addSquare(1, 2);\n * // => 9\n */\n var flow = createFlow();\n\n /**\n * This method is like `_.flow` except that it creates a function that\n * invokes the given functions from right to left.\n *\n * @static\n * @since 3.0.0\n * @memberOf _\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flow\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flowRight([square, _.add]);\n * addSquare(1, 2);\n * // => 9\n */\n var flowRight = createFlow(true);\n\n /**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\n function identity(value) {\n return value;\n }\n\n /**\n * Creates a function that invokes `func` with the arguments of the created\n * function. If `func` is a property name, the created function returns the\n * property value for a given element. If `func` is an array or object, the\n * created function returns `true` for elements that contain the equivalent\n * source properties, otherwise it returns `false`.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Util\n * @param {*} [func=_.identity] The value to convert to a callback.\n * @returns {Function} Returns the callback.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, _.iteratee(['user', 'fred']));\n * // => [{ 'user': 'fred', 'age': 40 }]\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, _.iteratee('user'));\n * // => ['barney', 'fred']\n *\n * // Create custom iteratee shorthands.\n * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n * return !_.isRegExp(func) ? iteratee(func) : function(string) {\n * return func.test(string);\n * };\n * });\n *\n * _.filter(['abc', 'def'], /ef/);\n * // => ['def']\n */\n function iteratee(func) {\n return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between a given\n * object and `source`, returning `true` if the given object has equivalent\n * property values, else `false`.\n *\n * **Note:** The created function is equivalent to `_.isMatch` with `source`\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * **Note:** Multiple values can be checked by combining several matchers\n * using `_.overSome`\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n *\n * // Checking for several possible values\n * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n */\n function matches(source) {\n return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between the\n * value at `path` of a given object to `srcValue`, returning `true` if the\n * object value is equivalent, else `false`.\n *\n * **Note:** Partial comparisons will match empty array and empty object\n * `srcValue` values against any array or object value, respectively. See\n * `_.isEqual` for a list of supported value comparisons.\n *\n * **Note:** Multiple values can be checked by combining several matchers\n * using `_.overSome`\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.find(objects, _.matchesProperty('a', 4));\n * // => { 'a': 4, 'b': 5, 'c': 6 }\n *\n * // Checking for several possible values\n * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n */\n function matchesProperty(path, srcValue) {\n return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that invokes the method at `path` of a given object.\n * Any additional arguments are provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': _.constant(2) } },\n * { 'a': { 'b': _.constant(1) } }\n * ];\n *\n * _.map(objects, _.method('a.b'));\n * // => [2, 1]\n *\n * _.map(objects, _.method(['a', 'b']));\n * // => [2, 1]\n */\n var method = baseRest(function(path, args) {\n return function(object) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * The opposite of `_.method`; this method creates a function that invokes\n * the method at a given path of `object`. Any additional arguments are\n * provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Object} object The object to query.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var array = _.times(3, _.constant),\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n * // => [2, 0]\n */\n var methodOf = baseRest(function(object, args) {\n return function(path) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * Adds all own enumerable string keyed function properties of a source\n * object to the destination object. If `object` is a function, then methods\n * are added to its prototype as well.\n *\n * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n * avoid conflicts caused by modifying the original.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Function|Object} [object=lodash] The destination object.\n * @param {Object} source The object of functions to add.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n * @returns {Function|Object} Returns `object`.\n * @example\n *\n * function vowels(string) {\n * return _.filter(string, function(v) {\n * return /[aeiou]/i.test(v);\n * });\n * }\n *\n * _.mixin({ 'vowels': vowels });\n * _.vowels('fred');\n * // => ['e']\n *\n * _('fred').vowels().value();\n * // => ['e']\n *\n * _.mixin({ 'vowels': vowels }, { 'chain': false });\n * _('fred').vowels();\n * // => ['e']\n */\n function mixin(object, source, options) {\n var props = keys(source),\n methodNames = baseFunctions(source, props);\n\n if (options == null &&\n !(isObject(source) && (methodNames.length || !props.length))) {\n options = source;\n source = object;\n object = this;\n methodNames = baseFunctions(source, keys(source));\n }\n var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n isFunc = isFunction(object);\n\n arrayEach(methodNames, function(methodName) {\n var func = source[methodName];\n object[methodName] = func;\n if (isFunc) {\n object.prototype[methodName] = function() {\n var chainAll = this.__chain__;\n if (chain || chainAll) {\n var result = object(this.__wrapped__),\n actions = result.__actions__ = copyArray(this.__actions__);\n\n actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n result.__chain__ = chainAll;\n return result;\n }\n return func.apply(object, arrayPush([this.value()], arguments));\n };\n }\n });\n\n return object;\n }\n\n /**\n * Reverts the `_` variable to its previous value and returns a reference to\n * the `lodash` function.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @returns {Function} Returns the `lodash` function.\n * @example\n *\n * var lodash = _.noConflict();\n */\n function noConflict() {\n if (root._ === this) {\n root._ = oldDash;\n }\n return this;\n }\n\n /**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\n function noop() {\n // No operation performed.\n }\n\n /**\n * Creates a function that gets the argument at index `n`. If `n` is negative,\n * the nth argument from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [n=0] The index of the argument to return.\n * @returns {Function} Returns the new pass-thru function.\n * @example\n *\n * var func = _.nthArg(1);\n * func('a', 'b', 'c', 'd');\n * // => 'b'\n *\n * var func = _.nthArg(-2);\n * func('a', 'b', 'c', 'd');\n * // => 'c'\n */\n function nthArg(n) {\n n = toInteger(n);\n return baseRest(function(args) {\n return baseNth(args, n);\n });\n }\n\n /**\n * Creates a function that invokes `iteratees` with the arguments it receives\n * and returns their results.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to invoke.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.over([Math.max, Math.min]);\n *\n * func(1, 2, 3, 4);\n * // => [4, 1]\n */\n var over = createOver(arrayMap);\n\n /**\n * Creates a function that checks if **all** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * Following shorthands are possible for providing predicates.\n * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overEvery([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => false\n *\n * func(NaN);\n * // => false\n */\n var overEvery = createOver(arrayEvery);\n\n /**\n * Creates a function that checks if **any** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * Following shorthands are possible for providing predicates.\n * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overSome([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => true\n *\n * func(NaN);\n * // => false\n *\n * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\n */\n var overSome = createOver(arraySome);\n\n /**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\n function property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n }\n\n /**\n * The opposite of `_.property`; this method creates a function that returns\n * the value at a given path of `object`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var array = [0, 1, 2],\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n * // => [2, 0]\n */\n function propertyOf(object) {\n return function(path) {\n return object == null ? undefined : baseGet(object, path);\n };\n }\n\n /**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\n var range = createRange();\n\n /**\n * This method is like `_.range` except that it populates values in\n * descending order.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.range\n * @example\n *\n * _.rangeRight(4);\n * // => [3, 2, 1, 0]\n *\n * _.rangeRight(-4);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 5);\n * // => [4, 3, 2, 1]\n *\n * _.rangeRight(0, 20, 5);\n * // => [15, 10, 5, 0]\n *\n * _.rangeRight(0, -4, -1);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.rangeRight(0);\n * // => []\n */\n var rangeRight = createRange(true);\n\n /**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\n function stubArray() {\n return [];\n }\n\n /**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\n function stubFalse() {\n return false;\n }\n\n /**\n * This method returns a new empty object.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Object} Returns the new empty object.\n * @example\n *\n * var objects = _.times(2, _.stubObject);\n *\n * console.log(objects);\n * // => [{}, {}]\n *\n * console.log(objects[0] === objects[1]);\n * // => false\n */\n function stubObject() {\n return {};\n }\n\n /**\n * This method returns an empty string.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {string} Returns the empty string.\n * @example\n *\n * _.times(2, _.stubString);\n * // => ['', '']\n */\n function stubString() {\n return '';\n }\n\n /**\n * This method returns `true`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `true`.\n * @example\n *\n * _.times(2, _.stubTrue);\n * // => [true, true]\n */\n function stubTrue() {\n return true;\n }\n\n /**\n * Invokes the iteratee `n` times, returning an array of the results of\n * each invocation. The iteratee is invoked with one argument; (index).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.times(3, String);\n * // => ['0', '1', '2']\n *\n * _.times(4, _.constant(0));\n * // => [0, 0, 0, 0]\n */\n function times(n, iteratee) {\n n = toInteger(n);\n if (n < 1 || n > MAX_SAFE_INTEGER) {\n return [];\n }\n var index = MAX_ARRAY_LENGTH,\n length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n iteratee = getIteratee(iteratee);\n n -= MAX_ARRAY_LENGTH;\n\n var result = baseTimes(length, iteratee);\n while (++index < n) {\n iteratee(index);\n }\n return result;\n }\n\n /**\n * Converts `value` to a property path array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {*} value The value to convert.\n * @returns {Array} Returns the new property path array.\n * @example\n *\n * _.toPath('a.b.c');\n * // => ['a', 'b', 'c']\n *\n * _.toPath('a[0].b.c');\n * // => ['a', '0', 'b', 'c']\n */\n function toPath(value) {\n if (isArray(value)) {\n return arrayMap(value, toKey);\n }\n return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n }\n\n /**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\n function uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Adds two numbers.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {number} augend The first number in an addition.\n * @param {number} addend The second number in an addition.\n * @returns {number} Returns the total.\n * @example\n *\n * _.add(6, 4);\n * // => 10\n */\n var add = createMathOperation(function(augend, addend) {\n return augend + addend;\n }, 0);\n\n /**\n * Computes `number` rounded up to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round up.\n * @param {number} [precision=0] The precision to round up to.\n * @returns {number} Returns the rounded up number.\n * @example\n *\n * _.ceil(4.006);\n * // => 5\n *\n * _.ceil(6.004, 2);\n * // => 6.01\n *\n * _.ceil(6040, -2);\n * // => 6100\n */\n var ceil = createRound('ceil');\n\n /**\n * Divide two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} dividend The first number in a division.\n * @param {number} divisor The second number in a division.\n * @returns {number} Returns the quotient.\n * @example\n *\n * _.divide(6, 4);\n * // => 1.5\n */\n var divide = createMathOperation(function(dividend, divisor) {\n return dividend / divisor;\n }, 1);\n\n /**\n * Computes `number` rounded down to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round down.\n * @param {number} [precision=0] The precision to round down to.\n * @returns {number} Returns the rounded down number.\n * @example\n *\n * _.floor(4.006);\n * // => 4\n *\n * _.floor(0.046, 2);\n * // => 0.04\n *\n * _.floor(4060, -2);\n * // => 4000\n */\n var floor = createRound('floor');\n\n /**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\n function max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n }\n\n /**\n * This method is like `_.max` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\n function maxBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n : undefined;\n }\n\n /**\n * Computes the mean of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the mean.\n * @example\n *\n * _.mean([4, 2, 8, 6]);\n * // => 5\n */\n function mean(array) {\n return baseMean(array, identity);\n }\n\n /**\n * This method is like `_.mean` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be averaged.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the mean.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.meanBy(objects, function(o) { return o.n; });\n * // => 5\n *\n * // The `_.property` iteratee shorthand.\n * _.meanBy(objects, 'n');\n * // => 5\n */\n function meanBy(array, iteratee) {\n return baseMean(array, getIteratee(iteratee, 2));\n }\n\n /**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\n function min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n }\n\n /**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\n function minBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n : undefined;\n }\n\n /**\n * Multiply two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} multiplier The first number in a multiplication.\n * @param {number} multiplicand The second number in a multiplication.\n * @returns {number} Returns the product.\n * @example\n *\n * _.multiply(6, 4);\n * // => 24\n */\n var multiply = createMathOperation(function(multiplier, multiplicand) {\n return multiplier * multiplicand;\n }, 1);\n\n /**\n * Computes `number` rounded to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round.\n * @param {number} [precision=0] The precision to round to.\n * @returns {number} Returns the rounded number.\n * @example\n *\n * _.round(4.006);\n * // => 4\n *\n * _.round(4.006, 2);\n * // => 4.01\n *\n * _.round(4060, -2);\n * // => 4100\n */\n var round = createRound('round');\n\n /**\n * Subtract two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {number} minuend The first number in a subtraction.\n * @param {number} subtrahend The second number in a subtraction.\n * @returns {number} Returns the difference.\n * @example\n *\n * _.subtract(6, 4);\n * // => 2\n */\n var subtract = createMathOperation(function(minuend, subtrahend) {\n return minuend - subtrahend;\n }, 0);\n\n /**\n * Computes the sum of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the sum.\n * @example\n *\n * _.sum([4, 2, 8, 6]);\n * // => 20\n */\n function sum(array) {\n return (array && array.length)\n ? baseSum(array, identity)\n : 0;\n }\n\n /**\n * This method is like `_.sum` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be summed.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the sum.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.sumBy(objects, function(o) { return o.n; });\n * // => 20\n *\n * // The `_.property` iteratee shorthand.\n * _.sumBy(objects, 'n');\n * // => 20\n */\n function sumBy(array, iteratee) {\n return (array && array.length)\n ? baseSum(array, getIteratee(iteratee, 2))\n : 0;\n }\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return wrapped values in chain sequences.\n lodash.after = after;\n lodash.ary = ary;\n lodash.assign = assign;\n lodash.assignIn = assignIn;\n lodash.assignInWith = assignInWith;\n lodash.assignWith = assignWith;\n lodash.at = at;\n lodash.before = before;\n lodash.bind = bind;\n lodash.bindAll = bindAll;\n lodash.bindKey = bindKey;\n lodash.castArray = castArray;\n lodash.chain = chain;\n lodash.chunk = chunk;\n lodash.compact = compact;\n lodash.concat = concat;\n lodash.cond = cond;\n lodash.conforms = conforms;\n lodash.constant = constant;\n lodash.countBy = countBy;\n lodash.create = create;\n lodash.curry = curry;\n lodash.curryRight = curryRight;\n lodash.debounce = debounce;\n lodash.defaults = defaults;\n lodash.defaultsDeep = defaultsDeep;\n lodash.defer = defer;\n lodash.delay = delay;\n lodash.difference = difference;\n lodash.differenceBy = differenceBy;\n lodash.differenceWith = differenceWith;\n lodash.drop = drop;\n lodash.dropRight = dropRight;\n lodash.dropRightWhile = dropRightWhile;\n lodash.dropWhile = dropWhile;\n lodash.fill = fill;\n lodash.filter = filter;\n lodash.flatMap = flatMap;\n lodash.flatMapDeep = flatMapDeep;\n lodash.flatMapDepth = flatMapDepth;\n lodash.flatten = flatten;\n lodash.flattenDeep = flattenDeep;\n lodash.flattenDepth = flattenDepth;\n lodash.flip = flip;\n lodash.flow = flow;\n lodash.flowRight = flowRight;\n lodash.fromPairs = fromPairs;\n lodash.functions = functions;\n lodash.functionsIn = functionsIn;\n lodash.groupBy = groupBy;\n lodash.initial = initial;\n lodash.intersection = intersection;\n lodash.intersectionBy = intersectionBy;\n lodash.intersectionWith = intersectionWith;\n lodash.invert = invert;\n lodash.invertBy = invertBy;\n lodash.invokeMap = invokeMap;\n lodash.iteratee = iteratee;\n lodash.keyBy = keyBy;\n lodash.keys = keys;\n lodash.keysIn = keysIn;\n lodash.map = map;\n lodash.mapKeys = mapKeys;\n lodash.mapValues = mapValues;\n lodash.matches = matches;\n lodash.matchesProperty = matchesProperty;\n lodash.memoize = memoize;\n lodash.merge = merge;\n lodash.mergeWith = mergeWith;\n lodash.method = method;\n lodash.methodOf = methodOf;\n lodash.mixin = mixin;\n lodash.negate = negate;\n lodash.nthArg = nthArg;\n lodash.omit = omit;\n lodash.omitBy = omitBy;\n lodash.once = once;\n lodash.orderBy = orderBy;\n lodash.over = over;\n lodash.overArgs = overArgs;\n lodash.overEvery = overEvery;\n lodash.overSome = overSome;\n lodash.partial = partial;\n lodash.partialRight = partialRight;\n lodash.partition = partition;\n lodash.pick = pick;\n lodash.pickBy = pickBy;\n lodash.property = property;\n lodash.propertyOf = propertyOf;\n lodash.pull = pull;\n lodash.pullAll = pullAll;\n lodash.pullAllBy = pullAllBy;\n lodash.pullAllWith = pullAllWith;\n lodash.pullAt = pullAt;\n lodash.range = range;\n lodash.rangeRight = rangeRight;\n lodash.rearg = rearg;\n lodash.reject = reject;\n lodash.remove = remove;\n lodash.rest = rest;\n lodash.reverse = reverse;\n lodash.sampleSize = sampleSize;\n lodash.set = set;\n lodash.setWith = setWith;\n lodash.shuffle = shuffle;\n lodash.slice = slice;\n lodash.sortBy = sortBy;\n lodash.sortedUniq = sortedUniq;\n lodash.sortedUniqBy = sortedUniqBy;\n lodash.split = split;\n lodash.spread = spread;\n lodash.tail = tail;\n lodash.take = take;\n lodash.takeRight = takeRight;\n lodash.takeRightWhile = takeRightWhile;\n lodash.takeWhile = takeWhile;\n lodash.tap = tap;\n lodash.throttle = throttle;\n lodash.thru = thru;\n lodash.toArray = toArray;\n lodash.toPairs = toPairs;\n lodash.toPairsIn = toPairsIn;\n lodash.toPath = toPath;\n lodash.toPlainObject = toPlainObject;\n lodash.transform = transform;\n lodash.unary = unary;\n lodash.union = union;\n lodash.unionBy = unionBy;\n lodash.unionWith = unionWith;\n lodash.uniq = uniq;\n lodash.uniqBy = uniqBy;\n lodash.uniqWith = uniqWith;\n lodash.unset = unset;\n lodash.unzip = unzip;\n lodash.unzipWith = unzipWith;\n lodash.update = update;\n lodash.updateWith = updateWith;\n lodash.values = values;\n lodash.valuesIn = valuesIn;\n lodash.without = without;\n lodash.words = words;\n lodash.wrap = wrap;\n lodash.xor = xor;\n lodash.xorBy = xorBy;\n lodash.xorWith = xorWith;\n lodash.zip = zip;\n lodash.zipObject = zipObject;\n lodash.zipObjectDeep = zipObjectDeep;\n lodash.zipWith = zipWith;\n\n // Add aliases.\n lodash.entries = toPairs;\n lodash.entriesIn = toPairsIn;\n lodash.extend = assignIn;\n lodash.extendWith = assignInWith;\n\n // Add methods to `lodash.prototype`.\n mixin(lodash, lodash);\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return unwrapped values in chain sequences.\n lodash.add = add;\n lodash.attempt = attempt;\n lodash.camelCase = camelCase;\n lodash.capitalize = capitalize;\n lodash.ceil = ceil;\n lodash.clamp = clamp;\n lodash.clone = clone;\n lodash.cloneDeep = cloneDeep;\n lodash.cloneDeepWith = cloneDeepWith;\n lodash.cloneWith = cloneWith;\n lodash.conformsTo = conformsTo;\n lodash.deburr = deburr;\n lodash.defaultTo = defaultTo;\n lodash.divide = divide;\n lodash.endsWith = endsWith;\n lodash.eq = eq;\n lodash.escape = escape;\n lodash.escapeRegExp = escapeRegExp;\n lodash.every = every;\n lodash.find = find;\n lodash.findIndex = findIndex;\n lodash.findKey = findKey;\n lodash.findLast = findLast;\n lodash.findLastIndex = findLastIndex;\n lodash.findLastKey = findLastKey;\n lodash.floor = floor;\n lodash.forEach = forEach;\n lodash.forEachRight = forEachRight;\n lodash.forIn = forIn;\n lodash.forInRight = forInRight;\n lodash.forOwn = forOwn;\n lodash.forOwnRight = forOwnRight;\n lodash.get = get;\n lodash.gt = gt;\n lodash.gte = gte;\n lodash.has = has;\n lodash.hasIn = hasIn;\n lodash.head = head;\n lodash.identity = identity;\n lodash.includes = includes;\n lodash.indexOf = indexOf;\n lodash.inRange = inRange;\n lodash.invoke = invoke;\n lodash.isArguments = isArguments;\n lodash.isArray = isArray;\n lodash.isArrayBuffer = isArrayBuffer;\n lodash.isArrayLike = isArrayLike;\n lodash.isArrayLikeObject = isArrayLikeObject;\n lodash.isBoolean = isBoolean;\n lodash.isBuffer = isBuffer;\n lodash.isDate = isDate;\n lodash.isElement = isElement;\n lodash.isEmpty = isEmpty;\n lodash.isEqual = isEqual;\n lodash.isEqualWith = isEqualWith;\n lodash.isError = isError;\n lodash.isFinite = isFinite;\n lodash.isFunction = isFunction;\n lodash.isInteger = isInteger;\n lodash.isLength = isLength;\n lodash.isMap = isMap;\n lodash.isMatch = isMatch;\n lodash.isMatchWith = isMatchWith;\n lodash.isNaN = isNaN;\n lodash.isNative = isNative;\n lodash.isNil = isNil;\n lodash.isNull = isNull;\n lodash.isNumber = isNumber;\n lodash.isObject = isObject;\n lodash.isObjectLike = isObjectLike;\n lodash.isPlainObject = isPlainObject;\n lodash.isRegExp = isRegExp;\n lodash.isSafeInteger = isSafeInteger;\n lodash.isSet = isSet;\n lodash.isString = isString;\n lodash.isSymbol = isSymbol;\n lodash.isTypedArray = isTypedArray;\n lodash.isUndefined = isUndefined;\n lodash.isWeakMap = isWeakMap;\n lodash.isWeakSet = isWeakSet;\n lodash.join = join;\n lodash.kebabCase = kebabCase;\n lodash.last = last;\n lodash.lastIndexOf = lastIndexOf;\n lodash.lowerCase = lowerCase;\n lodash.lowerFirst = lowerFirst;\n lodash.lt = lt;\n lodash.lte = lte;\n lodash.max = max;\n lodash.maxBy = maxBy;\n lodash.mean = mean;\n lodash.meanBy = meanBy;\n lodash.min = min;\n lodash.minBy = minBy;\n lodash.stubArray = stubArray;\n lodash.stubFalse = stubFalse;\n lodash.stubObject = stubObject;\n lodash.stubString = stubString;\n lodash.stubTrue = stubTrue;\n lodash.multiply = multiply;\n lodash.nth = nth;\n lodash.noConflict = noConflict;\n lodash.noop = noop;\n lodash.now = now;\n lodash.pad = pad;\n lodash.padEnd = padEnd;\n lodash.padStart = padStart;\n lodash.parseInt = parseInt;\n lodash.random = random;\n lodash.reduce = reduce;\n lodash.reduceRight = reduceRight;\n lodash.repeat = repeat;\n lodash.replace = replace;\n lodash.result = result;\n lodash.round = round;\n lodash.runInContext = runInContext;\n lodash.sample = sample;\n lodash.size = size;\n lodash.snakeCase = snakeCase;\n lodash.some = some;\n lodash.sortedIndex = sortedIndex;\n lodash.sortedIndexBy = sortedIndexBy;\n lodash.sortedIndexOf = sortedIndexOf;\n lodash.sortedLastIndex = sortedLastIndex;\n lodash.sortedLastIndexBy = sortedLastIndexBy;\n lodash.sortedLastIndexOf = sortedLastIndexOf;\n lodash.startCase = startCase;\n lodash.startsWith = startsWith;\n lodash.subtract = subtract;\n lodash.sum = sum;\n lodash.sumBy = sumBy;\n lodash.template = template;\n lodash.times = times;\n lodash.toFinite = toFinite;\n lodash.toInteger = toInteger;\n lodash.toLength = toLength;\n lodash.toLower = toLower;\n lodash.toNumber = toNumber;\n lodash.toSafeInteger = toSafeInteger;\n lodash.toString = toString;\n lodash.toUpper = toUpper;\n lodash.trim = trim;\n lodash.trimEnd = trimEnd;\n lodash.trimStart = trimStart;\n lodash.truncate = truncate;\n lodash.unescape = unescape;\n lodash.uniqueId = uniqueId;\n lodash.upperCase = upperCase;\n lodash.upperFirst = upperFirst;\n\n // Add aliases.\n lodash.each = forEach;\n lodash.eachRight = forEachRight;\n lodash.first = head;\n\n mixin(lodash, (function() {\n var source = {};\n baseForOwn(lodash, function(func, methodName) {\n if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n source[methodName] = func;\n }\n });\n return source;\n }()), { 'chain': false });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The semantic version number.\n *\n * @static\n * @memberOf _\n * @type {string}\n */\n lodash.VERSION = VERSION;\n\n // Assign default placeholders.\n arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n lodash[methodName].placeholder = lodash;\n });\n\n // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n arrayEach(['drop', 'take'], function(methodName, index) {\n LazyWrapper.prototype[methodName] = function(n) {\n n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n var result = (this.__filtered__ && !index)\n ? new LazyWrapper(this)\n : this.clone();\n\n if (result.__filtered__) {\n result.__takeCount__ = nativeMin(n, result.__takeCount__);\n } else {\n result.__views__.push({\n 'size': nativeMin(n, MAX_ARRAY_LENGTH),\n 'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n });\n }\n return result;\n };\n\n LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n return this.reverse()[methodName](n).reverse();\n };\n });\n\n // Add `LazyWrapper` methods that accept an `iteratee` value.\n arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n var type = index + 1,\n isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n LazyWrapper.prototype[methodName] = function(iteratee) {\n var result = this.clone();\n result.__iteratees__.push({\n 'iteratee': getIteratee(iteratee, 3),\n 'type': type\n });\n result.__filtered__ = result.__filtered__ || isFilter;\n return result;\n };\n });\n\n // Add `LazyWrapper` methods for `_.head` and `_.last`.\n arrayEach(['head', 'last'], function(methodName, index) {\n var takeName = 'take' + (index ? 'Right' : '');\n\n LazyWrapper.prototype[methodName] = function() {\n return this[takeName](1).value()[0];\n };\n });\n\n // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n arrayEach(['initial', 'tail'], function(methodName, index) {\n var dropName = 'drop' + (index ? '' : 'Right');\n\n LazyWrapper.prototype[methodName] = function() {\n return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n };\n });\n\n LazyWrapper.prototype.compact = function() {\n return this.filter(identity);\n };\n\n LazyWrapper.prototype.find = function(predicate) {\n return this.filter(predicate).head();\n };\n\n LazyWrapper.prototype.findLast = function(predicate) {\n return this.reverse().find(predicate);\n };\n\n LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n if (typeof path == 'function') {\n return new LazyWrapper(this);\n }\n return this.map(function(value) {\n return baseInvoke(value, path, args);\n });\n });\n\n LazyWrapper.prototype.reject = function(predicate) {\n return this.filter(negate(getIteratee(predicate)));\n };\n\n LazyWrapper.prototype.slice = function(start, end) {\n start = toInteger(start);\n\n var result = this;\n if (result.__filtered__ && (start > 0 || end < 0)) {\n return new LazyWrapper(result);\n }\n if (start < 0) {\n result = result.takeRight(-start);\n } else if (start) {\n result = result.drop(start);\n }\n if (end !== undefined) {\n end = toInteger(end);\n result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n }\n return result;\n };\n\n LazyWrapper.prototype.takeRightWhile = function(predicate) {\n return this.reverse().takeWhile(predicate).reverse();\n };\n\n LazyWrapper.prototype.toArray = function() {\n return this.take(MAX_ARRAY_LENGTH);\n };\n\n // Add `LazyWrapper` methods to `lodash.prototype`.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n isTaker = /^(?:head|last)$/.test(methodName),\n lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n retUnwrapped = isTaker || /^find/.test(methodName);\n\n if (!lodashFunc) {\n return;\n }\n lodash.prototype[methodName] = function() {\n var value = this.__wrapped__,\n args = isTaker ? [1] : arguments,\n isLazy = value instanceof LazyWrapper,\n iteratee = args[0],\n useLazy = isLazy || isArray(value);\n\n var interceptor = function(value) {\n var result = lodashFunc.apply(lodash, arrayPush([value], args));\n return (isTaker && chainAll) ? result[0] : result;\n };\n\n if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n isLazy = useLazy = false;\n }\n var chainAll = this.__chain__,\n isHybrid = !!this.__actions__.length,\n isUnwrapped = retUnwrapped && !chainAll,\n onlyLazy = isLazy && !isHybrid;\n\n if (!retUnwrapped && useLazy) {\n value = onlyLazy ? value : new LazyWrapper(this);\n var result = func.apply(value, args);\n result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n return new LodashWrapper(result, chainAll);\n }\n if (isUnwrapped && onlyLazy) {\n return func.apply(this, args);\n }\n result = this.thru(interceptor);\n return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n };\n });\n\n // Add `Array` methods to `lodash.prototype`.\n arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n var func = arrayProto[methodName],\n chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n lodash.prototype[methodName] = function() {\n var args = arguments;\n if (retUnwrapped && !this.__chain__) {\n var value = this.value();\n return func.apply(isArray(value) ? value : [], args);\n }\n return this[chainName](function(value) {\n return func.apply(isArray(value) ? value : [], args);\n });\n };\n });\n\n // Map minified method names to their real names.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var lodashFunc = lodash[methodName];\n if (lodashFunc) {\n var key = lodashFunc.name + '';\n if (!hasOwnProperty.call(realNames, key)) {\n realNames[key] = [];\n }\n realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n }\n });\n\n realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n 'name': 'wrapper',\n 'func': undefined\n }];\n\n // Add methods to `LazyWrapper`.\n LazyWrapper.prototype.clone = lazyClone;\n LazyWrapper.prototype.reverse = lazyReverse;\n LazyWrapper.prototype.value = lazyValue;\n\n // Add chain sequence methods to the `lodash` wrapper.\n lodash.prototype.at = wrapperAt;\n lodash.prototype.chain = wrapperChain;\n lodash.prototype.commit = wrapperCommit;\n lodash.prototype.next = wrapperNext;\n lodash.prototype.plant = wrapperPlant;\n lodash.prototype.reverse = wrapperReverse;\n lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n // Add lazy aliases.\n lodash.prototype.first = lodash.prototype.head;\n\n if (symIterator) {\n lodash.prototype[symIterator] = wrapperToIterator;\n }\n return lodash;\n });\n\n /*--------------------------------------------------------------------------*/\n\n // Export lodash.\n var _ = runInContext();\n\n // Some AMD build optimizers, like r.js, check for condition patterns like:\n if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n // Expose Lodash on the global object to prevent errors when Lodash is\n // loaded by a script tag in the presence of an AMD loader.\n // See http://requirejs.org/docs/errors.html#mismatch for more details.\n // Use `_.noConflict` to remove Lodash from the global object.\n root._ = _;\n\n // Define as an anonymous module so, through path mapping, it can be\n // referenced as the \"underscore\" module.\n define(function() {\n return _;\n });\n }\n // Check for `exports` after `define` in case a build optimizer adds it.\n else if (freeModule) {\n // Export for Node.js.\n (freeModule.exports = _)._ = _;\n // Export for CommonJS support.\n freeExports._ = _;\n }\n else {\n // Export to the global object.\n root._ = _;\n }\n}.call(this));\n","import { themeStore } from \"stores/themes\";\nimport { partition } from \"lodash\";\n\nexport const fetchFavourites = async () => {\n if (typeof App === 'undefined' || !App.order.logged_in()) return false;\n\n await themeStore.some();\n const [favourited] = partition(themeStore.themes, 'favourite');\n\n return favourited;\n}","'use strict';\n\n// Import Libraries\nimport React from 'react';\n\n// --------------------------------------------------------------------\n\nconst TYPES = {\n design: 'design',\n photos: 'photos',\n layouts: 'layouts',\n favourites: 'favourites',\n colours: 'colours',\n text: 'text',\n events: 'events',\n options: 'options',\n wraps: 'wraps',\n stickers: 'stickers',\n patterns: 'patterns',\n};\n\n// --------------------------------------------------------------------\n\nclass TrayBase extends React.PureComponent {\n constructor(props) {\n super(props);\n }\n\n get name() {\n return this.props.name;\n }\n\n get type() {\n return TYPES[this.name];\n }\n}\n\n// --------------------------------------------------------------------\n\nexport {\n TYPES,\n TrayBase\n};\n","\n// Import JS Modules\nimport TemplateStore from '../templates/template-store';\nimport { stickerStore, patternStore } from '../utils/stores';\nimport wkDataInterrogator from '../misc/wk-data-interrogator';\nimport { fetchFavourites } from '../utils/fetch-favourites';\nimport { TYPES } from \"../common/tray-base\";\nimport templateInterrogator from '../misc/template-interrogator';\nimport prismItemInterrogator from '../misc/prism-item-interrogator';\nimport { usePrismItemStore } from 'stores/usePrismItemStore';\n\n\nfunction designCode() {\n const prismItem = usePrismItemStore.getState().prismItem\n return prismItem && prismItem.design_code || '';\n}\n\nfunction isCustomColor() {\n return designCode().indexOf('.customcolor') > 0;\n}\n\nfunction isCollage() {\n const code = designCode();\n return (code.indexOf('.collage') === (code.length - 8))\n || (code.indexOf('.collage.') !== -1)\n || (code.indexOf('collage.') === 0);\n}\n\nasync function hasEventsTray() {\n return window.wkData && isCalendar() && (await usePrismItemStore.getState().setDayEventsSlots()).length > 0;\n}\n\nfunction isAlbum() {\n return wkDataInterrogator.isAlbum();\n}\n\nfunction isCalendar() {\n return wkDataInterrogator.isCalendar();\n}\n\nfunction isCanvas() {\n return (wkData.product\n && wkData.product.type === 'framedcanvas'\n || wkData.product.type === 'canvaswrap');\n}\n\nfunction isMultiPageCardProduct() {\n const productType = 'wmcard';\n\n return wkData.product['max-pages'] > 1 && wkData.product.type === productType;\n}\n\nfunction isMultiPageStandardProduct() {\n const nonMultiPageProductTypes = ['album', 'wmcard', 'calendar'];\n return wkData.product['max-pages'] > 1 && nonMultiPageProductTypes.every((productType) => wkData.product.type !== productType);\n}\n\nfunction hasLayoutsTray() {\n const templateGroups = TemplateStore.list();\n if (!templateGroups) return false;\n\n const orientationFilter = templateInterrogator.orientationFilter(window.activeView.template);\n const availableFilteredTemplates = TemplateStore.templatesFiltered({\n section: prismItemInterrogator.getCurrentSection(),\n orientations: orientationFilter,\n });\n\n if (orientationFilter === \"is-landscape\" || orientationFilter === \"is-portrait\") return true;\n if (availableFilteredTemplates.length >= 2) return true;\n if (isCollage() || isCustomColor()) return true;\n if (activeView && typeof activeView.hasOptionalBackground === 'function' && activeView.hasOptionalBackground()) return true;\n\n return false;\n}\n\n\nfunction hasEdgesTray() {\n return wkData.product.type === 'canvaswrap'\n && wkData.vars.length === 0\n && TemplateStore.wraps();\n}\n\nasync function hasColourTray() {\n if(!window.activeView) return false;\n\n if (window.activeView\n && typeof activeView.hasOptionalBackground === 'function'\n && activeView.hasOptionalBackground()) {\n return true;\n }\n\n try {\n if (await hasStickersTray()) {\n return true;\n }\n } catch (error) {\n console.error('Error checking stickers tray:', error);\n }\n \n try {\n if (await hasPatternsTray()) {\n return true;\n }\n } catch (error) {\n console.error('Error checking patterns tray:', error);\n }\n \n}\n\nfunction hasWrapsTray() {\n return TemplateStore.hasWraps;\n}\n\nfunction* chicletVariables() {\n for (const variable of wkData.vars) {\n if (variable.builder_chiclet_option && variable.options.length > 1) {\n yield variable;\n }\n }\n}\n\nfunction* chicletCardVariables() {\n for (const variable of wkData.vars) {\n if (variable.builder_chiclet_option) {\n yield variable;\n }\n }\n}\n\nfunction chicletVariablesPrimary() {\n // there are no top level (have their own chiclets) if wkData.product_tray_enabled\n if (wkData.product_tray_enabled) {\n return [];\n }\n\n return Array.from(chicletVariables())\n .filter(variableWouldBePrimary);\n}\n\nfunction chicletVariablesSecondary() {\n const variables = Array.from(chicletVariables());\n\n return variables;\n}\n\nfunction findVariable(name) {\n return [...chicletVariables()].find((v) => v.name === name);\n}\n\nfunction findCardVariable(name) {\n return [...chicletCardVariables()].find((v) => v.name === name);\n}\n\nfunction hasVariablesTray() {\n return [...chicletVariablesSecondary()].length > 0;\n}\n\nfunction variableWouldBePrimary({ name: variableName }) {\n return ['frame', 'cover'].some((chicletName) => variableName.match(new RegExp(chicletName, 'i')));\n}\n\nasync function hasFavouritesTray() {\n const favourites = await fetchFavourites();\n return favourites?.length > 0;\n}\n\nasync function hasStickersTray() {\n return await stickerStore.some();\n}\n\nasync function hasPatternsTray() {\n return await patternStore.some();\n}\n\nfunction isPartOfDesignTray(activeTray) {\n const validTypes = [\n // TYPES.text,\n TYPES.photos,\n TYPES.favourites,\n TYPES.colours,\n TYPES.layouts\n ];\n\n return validTypes.includes(activeTray);\n}\n\nexport {\n hasFavouritesTray,\n hasLayoutsTray,\n hasEdgesTray,\n hasColourTray,\n hasEventsTray,\n isAlbum,\n isCalendar,\n isCanvas,\n isMultiPageCardProduct,\n isMultiPageStandardProduct,\n chicletVariables,\n chicletCardVariables,\n chicletVariablesPrimary,\n chicletVariablesSecondary,\n findVariable,\n findCardVariable,\n hasVariablesTray,\n hasWrapsTray,\n hasStickersTray,\n hasPatternsTray,\n isPartOfDesignTray\n};\n","import { PrismUI, builderDispatch } from '../../_utils/ui';\nimport { prismAction } from './stores';\nimport { usePrismItemStore } from 'stores/usePrismItemStore';\n\nfunction autofillOnImageUploadNormal(imageList, autofillTarget, autofillStrategy) {\n const options = {\n clear_existing: autofillTarget === 'all'\n };\n\n switch (autofillStrategy) {\n case 'by_name':\n options.image_ids = imageListSortedByName().map(image => image.id);\n break;\n case 'by_date':\n options.strategy = 'by_date';\n break;\n default:\n options.image_ids = Array.from(imageList, image => image.id);\n break;\n }\n\n builderDispatch.delayedDispatch({ type: PrismUI.EVENT_AUTO_FILL }).\n then(() => {\n prismAction.autofill(options);\n });\n}\n\nfunction imageListSortedByName() {\n const prismItem = usePrismItemStore.getState().prismItem;\n return prismItem.imageList.sort((imageA, imageB) => {\n const nameA = imageA.name.substr(0, imageA.name.lastIndexOf('.')) || imageA.name;\n const nameB = imageB.name.substr(0, imageB.name.lastIndexOf('.')) || imageB.name;\n\n if (Number(nameA)) {\n if (Number(nameB)) {\n return nameA < nameB ? -1 : 1;\n }\n\n return -1;\n }\n\n if (Number(nameB)) return 1;\n return nameA < nameB ? -1 : 1;\n });\n}\n\nexport { autofillOnImageUploadNormal };\n","import get from 'lodash/get';\n\n// -----------------------------------------------------------\n\nconst DEFAULT_THRESHOLD = 150;\n\nclass DpiThreshold {\n constructor(dpi) {\n this.dpi = dpi || Infinity;\n }\n\n get isTooLow() {\n return this.dpi < DpiThreshold.lowThreshold;\n }\n\n static get lowThreshold() {\n return get(wkData, 'poor_dpi_threshold', DEFAULT_THRESHOLD);\n }\n}\n\n// -----------------------------------------------------------\n\nexport default DpiThreshold;\n","import { create } from 'zustand';\nimport flatMap from 'lodash/flatMap';\nimport find from 'lodash/find';\nimport { PrismUI, builderDispatch, WebUI } from '../../_utils/ui';\nimport fetchImage from '../../_utils/fetch-image';\nimport IU from '../../_utils/img/img-utils';\nimport TemplateCache from '../templates/template-cache';\nimport TemplateStore from '../templates/template-store';\nimport Utils from '../utils/utils';\nimport PrismJSON from '../prism/prism-json-encoder';\nimport { getCurrentSection } from '../trays/favourites-tray-helpers';\nimport {\n isCalendarEventPhotoSlot,\n isOptionalSlot,\n isClonedSlot,\n} from '../utils/special-slots';\nimport genericHelpers from '../../_utils/generic-helpers';\nimport { useTemplateSelectStore } from './useTemplateStore';\nimport {\n isCanvas,\n isCalendar,\n isMultiPageStandardProduct,\n isMultiPageCardProduct,\n} from '../trays/tray-determiner';\nimport { autofillOnImageUploadNormal } from '../utils/autofill';\nimport DpiThreshold from '../utils/dpi-threshold';\n\nconst { urlMunge } = IU.imgHelpers;\n\nexport const usePrismItemStore = create((set, get) => ({\n prismItem: {\n id: '',\n data: null,\n currentPage: 0,\n pageCount: 0,\n activeSaves: {},\n imageList: [],\n loadActive: false,\n _fireSaves: {},\n },\n prismItemLoaded: false,\n imagesUploadProgress: {\n current: 0,\n totalFiles: 0,\n },\n failedImagesUploaded: [],\n trackProgress: () => {\n const { current, totalFiles } = get().imagesUploadProgress;\n\n if (current === totalFiles) {\n builderDispatch.dispatch({\n type: WebUI.UPLOAD_DONE,\n number_of_files: totalFiles,\n });\n } else {\n set({\n imagesUploadProgress: {\n current: current + 1,\n totalFiles: totalFiles,\n },\n });\n }\n },\n isLayflat: () => {\n return flatMap(\n get().prismItem.pages,\n page => (page.template || {}).tags || []\n ).includes('layflat');\n },\n minPagesReached: () => {\n return (\n get().prismItem.product &&\n get().prismItem.pageCount <= get().prismItem.product.minPages\n );\n },\n maxPagesReached: () => {\n return (\n get().prismItem.product &&\n get().prismItem.pageCount >= get().prismItem.product.maxPages\n );\n },\n selectTheme: () => {},\n listPages: () => {\n return Object.keys(get().prismItem.pages || {}).map(\n p => get().prismItem.pages[p]\n );\n },\n totalNumberPhotoSlots: () => {\n return this.listPages().reduce(\n (total, page) =>\n total +\n (page.slots || []).filter(\n slot =>\n slot.type === 'image' ||\n (slot.type === 'stackable' && slot.content_type === 'image')\n ).length,\n 0\n );\n },\n onlyHasOnePhotoSlot: () => {\n return this.totalNumberPhotoSlots() === 1;\n },\n fireSave: (view, callback = null) => {\n view = view || activeView;\n\n const { pageIndex } = view;\n const data = view.getData(true);\n\n get().prismItem.pages[pageIndex] = {\n ...get().prismItem.pages[pageIndex],\n data,\n };\n\n get().prismItem._fireSaves = get().prismItem._fireSaves || {};\n get().prismItem._fireSaves[pageIndex] =\n get().prismItem._fireSaves[pageIndex] || [];\n get().prismItem._fireSaves[pageIndex].unshift(view);\n\n if (get().prismItem._fireSaves[pageIndex].length > 1) {\n return;\n }\n\n get()\n .savePage(pageIndex, data)\n .then(() => {\n const nextView = get().prismItem._fireSaves[pageIndex].shift();\n const thereWasMore = get().prismItem._fireSaves[pageIndex].length > 0;\n\n get().prismItem._fireSaves[pageIndex] = [];\n\n if (thereWasMore) {\n get().fireSave(nextView);\n } else {\n if (callback) callback();\n }\n });\n },\n setDayEventsSlots: async () => {\n const pagesWithDailyTextSlots = [];\n\n for (let i = 0; i < get().prismItem.pageCount; i++) {\n const { page, template } = await get().pageWithTemplate(i);\n const pageWithDailyTextSlots = {};\n\n for (const slotId in template.text_slots) {\n if (/text-\\d\\d\\d\\d-\\d\\d-\\d\\d/gi.exec(slotId)) {\n let slot;\n\n for (let x = 0; x < page.slots.length; x++) {\n if (page.slots[x].id === slotId) {\n slot = page.slots[x];\n break;\n }\n }\n\n pageWithDailyTextSlots[slotId] = !!(slot && slot.image);\n }\n }\n\n if (Object.keys(pageWithDailyTextSlots).length > 0) {\n pagesWithDailyTextSlots.push(pageWithDailyTextSlots);\n }\n }\n\n return pagesWithDailyTextSlots;\n },\n refreshImages: async () => {\n const prismItemId = get().prismItem.id;\n\n if (!prismItemId) return;\n\n const url = `/m/i/${prismItemId}`;\n\n const data = await fetch(url, {\n credentials: 'same-origin',\n });\n\n return new Promise(resolve => {\n const url = `/m/i/${prismItemId}`;\n\n fetch(url, {\n credentials: 'same-origin',\n })\n .then(response => response.json())\n .then(data => {\n set(({ prismItem }) => ({\n prismItem: { ...prismItem, imageList: data },\n }));\n return data;\n })\n .then(data => resolve(data));\n });\n },\n hasSingleImageSlot: () => {\n if (!window.activeView) {\n return false;\n }\n\n const imageSlots = window.activeView.slots.filter(slot => slot.isImage);\n\n return imageSlots.length === 1;\n },\n autoFillImageUponUpload: () => {\n const autoFillCriteria =\n get().prismItem.imageList.length &&\n get().hasSingleImageSlot() &&\n !isMultiPageStandardProduct();\n\n if (autoFillCriteria) {\n if (isMultiPageCardProduct() || isCalendar()) {\n const firstImageOnly = get().prismItem.imageList[0];\n\n const imageList = [firstImageOnly];\n autofillOnImageUploadNormal(imageList);\n } else {\n const imageList = get().prismItem.imageList;\n autofillOnImageUploadNormal(imageList);\n }\n }\n },\n addNewImagesToItem: imagesList => {\n let changed = false;\n\n for (let i = 0; i < imagesList.length; i++) {\n const slotId = activeView.findFirstAvailableImageSlot();\n\n // break if no slot is available\n if (!slotId) break;\n\n // set the image in the available slot\n const img = fetchImage(urlMunge(imagesList[i].url), 'use-credentials');\n activeView.setImageById(slotId, img, {\n image: imagesList[i].id,\n });\n changed = true;\n }\n\n // If a change happened, save\n if (changed) activeView.do_save();\n },\n checkSlots: () => {\n let filledImageSlot = false;\n let emptyImageSlot = false;\n let unchangedDefaultText = false;\n let spineTextSlotPresent = false;\n let lowDpiImage = false;\n let emptyPage = false;\n let orientationMismatch = false;\n const pagePromises = Object.entries(get().prismItem.pages)\n .filter(([key, _]) => isFinite(key))\n .map(([_, page]) => evaluatePage(page));\n\n // when ALL the pagePromises are resolved\n return Promise.all(pagePromises).then(() => ({\n filledImageSlot,\n emptyImageSlot,\n unchangedDefaultText,\n spineTextSlotPresent,\n lowDpiImage,\n emptyPage,\n orientationMismatch,\n }));\n\n function isSkippableSlot(slot) {\n return [isCalendarEventPhotoSlot, isOptionalSlot, isClonedSlot].some(\n check => check(slot.id)\n );\n }\n\n function evaluatePage(page) {\n if (\n [\n filledImageSlot,\n emptyImageSlot,\n unchangedDefaultText,\n spineTextSlotPresent,\n lowDpiImage,\n emptyPage,\n orientationMismatch,\n ].every(Boolean)\n ) {\n // there's no need checking anything if we already know all items are true\n return Promise.resolve();\n }\n\n return new Promise(resolve => {\n TemplateCache.get(page.templateID, template => {\n if (!emptyPage && page.slots.length < 1) {\n emptyPage = true;\n }\n\n // Check all slots (predefined template slots as well as user added image slots) to see if\n // any of them have been filled\n if (!filledImageSlot || !lowDpiImage || orientationMismatch) {\n for (const slot of page.slots) {\n // Some special slots can be skipped as we don't want to include them in the checks, we do need to check\n\n let isFrontOrBack = false;\n if (slot.id === 'optional-front' || slot.id === 'optional-back') {\n isFrontOrBack = true;\n }\n\n if (isSkippableSlot(slot) && isFrontOrBack == false) {\n continue;\n }\n\n if (!slot.data.layout) {\n const coord = get().listPages()?.[page?.index]\n ?.template?.photo_slots?.[slot?.id]?.['pixel-coords'] ?? [\n 0, 0, 1, 1,\n ];\n\n const [x, y, w, h] = coord;\n slot.data.layout = { x, y, w, h };\n } else {\n console.warn(\n 'Template layout is missing for page index:',\n page?.index,\n 'or slot id:',\n slot?.id,\n );\n }\n\n if (slot.image && slot.data.layout) {\n filledImageSlot = true;\n\n const {\n layout: { w, h },\n angle,\n imgId,\n } = slot.data;\n const photoData = get().prismItem.imageList.find(\n image => image.id === Number(imgId)\n );\n if (!photoData) return;\n\n if (\n !genericHelpers.imageMatchesSlotOrientation(photoData, {\n w,\n h,\n angle,\n })\n ) {\n orientationMismatch = true;\n }\n\n if (lowDpiImage === false) {\n if (slot.data.lowDpi) {\n lowDpiImage = true;\n } else {\n const dpi = genericHelpers.getImageOutputDpiWithSlotData(\n slot.data,\n photoData\n );\n lowDpiImage = slot.data.lowDpi = new DpiThreshold(\n dpi\n ).isTooLow;\n }\n }\n }\n\n // Only check predefined slots to see if any of them are empty, stackable slots are\n // allowed to be empty.\n if (template.photo_slots[slot.id] && !slot.image) {\n emptyImageSlot = true;\n }\n }\n }\n\n // Only check predefined text slots to see if any of them still contain their default text\n // value\n if (!unchangedDefaultText && Object.keys(template.text_slots).length) {\n for (const slotId in template.text_slots) {\n const slot = find(page.slots, { id: slotId })\n ? find(page.slots, { id: slotId })\n : find(page.slots, { id: 'override-text-' + slotId });\n \n if (slot && isSkippableSlot(slot)) {\n return;\n }\n\n const templateSlot = template.text_slots[slotId];\n const slotsExist = slot && templateSlot ? true : false;\n\n if (\n slotsExist &&\n templateSlot.default.localeCompare(slot.data.string, undefined, {sensitivity: 'base',}) === 0\n ) {\n unchangedDefaultText = true;\n };\n\n break;\n }\n }\n\n // Check if album has a spine text slot\n if (!spineTextSlotPresent) {\n for (const slotId in template.text_slots) {\n if (slotId === 'spine-text') {\n spineTextSlotPresent = true;\n }\n }\n }\n\n resolve();\n });\n });\n }\n },\n\n\n populateItemsImagesAfterUpload: imageData => {\n if (imageData.length === 0) return;\n\n const newImageIds = imageData.map(i => i.id);\n const newImages = get().prismItem.imageList.filter(\n i => newImageIds.indexOf(i.id) >= 0\n );\n\n get().addNewImagesToItem(newImages);\n },\n // Add images from the list to empty slots in a collage project\n addNewImagesToItem: imagesList => {\n let changed = false;\n\n for (let i = 0; i < imagesList.length; i++) {\n const slotId = activeView.findFirstAvailableImageSlot();\n\n // break if no slot is available\n if (!slotId) break;\n\n // set the image in the available slot\n const img = fetchImage(urlMunge(imagesList[i].url), 'use-credentials');\n activeView.setImageById(slotId, img, {\n image: imagesList[i].id,\n });\n changed = true;\n }\n\n // If a change happened, save\n if (changed) activeView.do_save();\n },\n findImage: ref => {\n for (let i = 0; i < get().prismItem.imageList.length; i++) {\n const image = get().prismItem.imageList[i];\n\n if (ref.image == image.id) {\n let { filter } = ref.data;\n if (!filter) filter = 'colour';\n ref.data.url = image.urls[filter];\n }\n }\n return ref;\n },\n usedImages: () => {\n const used = [];\n for (let i = 0; i < get().prismItem.pageCount; i++) {\n if (get().prismItem.pages[i] && get().prismItem.pages[i].slots) {\n const pg = get().prismItem.pages[i];\n for (let j = 0; j < get().prismItem.pages[i].slots.length; j++) {\n const { image } = pg.slots[j];\n if (image && used.indexOf(image) === -1) {\n used.push(image);\n }\n }\n }\n }\n return used;\n },\n pageWithTemplate: index => {\n return new Promise((resolve, reject) => {\n get().getPage(index, page => {\n TemplateCache.get(\n page.templateID,\n template => {\n resolve({ page, template });\n },\n () => {\n reject(new Error(`Failed to load template ${page.templateID}`));\n }\n );\n });\n });\n },\n getPage: (index, callback) => {\n callback(get().prismItem.pages[index]);\n },\n savePage: (index, data, options = {}) => {\n if (typeof index === 'undefined') {\n return Promise.resolve();\n }\n\n const saveID = `save-${parseInt(\n Math.random() * 1000,\n 10\n )}-${index}-${new Date().getTime()}`;\n\n $(window).trigger('prism-page-save-start', { index, saveID });\n\n if (builderDispatch) {\n builderDispatch.delayedDispatch({\n type: PrismUI.SAVE_START,\n saveID,\n pageIndex: index,\n prismItem: get().prismItem,\n });\n }\n\n if (wkData && wkData.values) {\n const overlays = {};\n\n for (const { id, name } of wkData.vars) {\n if (wkData.values[id]) {\n overlays[name] = wkData.values[id];\n }\n }\n\n data.overlays = overlays;\n }\n\n const formData = new FormData();\n formData.append('data', PrismJSON.encode(data));\n\n return fetch(Utils.pageURL(get().prismItem, index), {\n method: 'POST',\n body: formData,\n credentials: 'same-origin',\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(data => {\n const { doNotSave = false } = options;\n\n if (!doNotSave) {\n const pages = get().prismItem.pages;\n pages[index] = data;\n set(({ prismItem }) => ({\n prismItem: { ...prismItem, pages: pages },\n }));\n }\n\n $(window).trigger('prism-page-save-done', { index, saveID });\n\n if (builderDispatch) {\n builderDispatch.delayedDispatch({\n type: PrismUI.SAVE_DONE,\n saveID,\n pageIndex: index,\n prismItem: get().prismItem,\n });\n }\n })\n .catch(e => console.error(e));\n },\n // Given a number of files to fit, will select and apply the correct template for the current page.\n selectTemplateToFitImages: (nOfFiles, orientationTag) => {\n if (nOfFiles < 1) return;\n\n const activeSection = getCurrentSection();\n if (!activeSection) return; // Return if we are unable to select the correct section for getting the right templates\n\n const template = TemplateStore.getTemplateByPhotoSlots(\n nOfFiles,\n activeSection,\n orientationTag\n );\n\n // Fire an event to apply the chosen template\n useTemplateSelectStore\n .getState()\n .updateTemplateSelectStore({ templateID: template.id });\n },\n updatePrismLoaded: () => set(() => ({ prismItemLoaded: true })),\n updateId: id =>\n set(({ prismItem }) => ({ prismItem: { ...prismItem, id: id } })),\n updateLoadActive: loadActive =>\n set(({ prismItem }) => ({\n prismItem: { ...prismItem, loadActive: loadActive },\n })),\n updateImageList: imageList => {\n set(({ prismItem }) => ({\n prismItem: { ...prismItem, imageList: imageList },\n }));\n },\n updatePrismItem: props =>\n set(({ prismItem }) => ({ prismItem: { ...prismItem, ...props } })),\n}));\n","\n// Import JS Modules\nimport { builderDispatch, PrismUI } from '../../_utils/ui';\nimport { usePrismItemStore } from 'stores/usePrismItemStore';\n\nvar TemplateCache = {\n store: {},\n fetches: {},\n reset() {\n TemplateCache.store = {};\n },\n textSlotMetaToSlotData(meta) {\n return ({\n align: meta.align,\n fontColour: meta.fill,\n fontName: meta.font,\n fontSize: meta.size,\n fontWeight: meta.weight,\n renderer: 'default',\n valign: meta.valign,\n stroke: meta.stroke,\n zoom: 1,\n x: meta['pixel-coords'][0],\n y: meta['pixel-coords'][1],\n w: meta['pixel-coords'][2],\n h: meta['pixel-coords'][3],\n });\n },\n get(id, onSuccessCallback, onFailureCallback) {\n if (id === '@blank') {\n return;\n }\n\n if (this.store[id]) {\n if (typeof onSuccessCallback === 'function') {\n window.requestAnimationFrame(() => {\n onSuccessCallback(this.store[id]);\n });\n }\n\n return;\n }\n\n if (!this.fetches[id]) {\n fetch(`/m/t/${usePrismItemStore.getState().prismItem.id}`, {\n credentials: 'same-origin',\n }).then((response) => response.json())\n .then((groups) => {\n const group = groups.find((group) => {\n return group.templates.find((template) => {\n return template.id === id;\n });\n });\n const template = group.templates.find((template) => {\n return template.id === id;\n })\n\n this.fetchThemeData(id, template.theme)\n }).catch((e) => console.error(e));\n }\n\n this.fetches[id] = (this.fetches[id] || []);\n if (onSuccessCallback || onFailureCallback) {\n this.fetches[id].push({ success: onSuccessCallback, failure: onFailureCallback });\n }\n },\n slotSignature(template) {\n if (!template || !template.pso || !template.tso) {\n console.log('Invalid template: %o', template);\n return null;\n }\n return `${template.pso.sort().filter((el) => el.indexOf(':') === -1).join(';')};${template.tso.sort().join(';')}`;\n },\n templatesMatch(a, b) {\n\n return a && (this.slotSignature(a) === this.slotSignature(b));\n },\n fetchThemeData(id, theme) {\n fetch(`/m/td/${usePrismItemStore.getState().prismItem.id}/${theme}/${id}`, {\n credentials: 'same-origin',\n }).then((response) => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then((response) => response.json())\n .then((data) => {\n this.store[id] = data;\n\n this.fetches[id].forEach(({ success }) => {\n if (typeof success === 'function') {\n success(data);\n }\n });\n\n delete this.fetches[id];\n })\n .catch((e) => console.error(e));\n }\n};\n\nbuilderDispatch.register((payload) => {\n if (payload.type === PrismUI.THEME_CHANGED) {\n TemplateCache.reset();\n }\n});\n\nexport default TemplateCache;\n","'use strict';\n\n// Import Libraries\nimport React from 'react';\nimport classNames from 'classnames';\n// Import JS Modules\nimport { builderDispatch, PrismUI } from '../../_utils/ui';\n\nclass EnvelopePage extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n size: this.envelopeSize()\n };\n\n this.handleClick = this.handleClick.bind(this);\n }\n\n componentDidMount() {\n this.token = builderDispatch.register((payload) => {\n switch (payload.type) {\n case PrismUI.ITEM_LOADED:\n this.setState({ size: this.envelopeSize() });\n break;\n case PrismUI.TRIGGER_ENVELOPE_ADDRESS_FORM:\n payload.payload !== 'blank' ? this.handleClick() : null;\n break;\n }\n });\n }\n\n componentWillUnmount() {\n builderDispatch.unregister(this.token);\n }\n\n render() {\n return (\n <div className=\"envelope-page w-100 mb-sm-2\">\n <div className={classNames(`envelope-bg envelope-bg-${ this.state.size }`, { blank: this.blank })}\n onClick={ this.handleClick }>\n <div className={ `address-wrapper align-${ this.state.size }` }>\n { this.renderAddress() }\n </div>\n </div>\n </div>\n );\n }\n\n renderAddress() {\n if (this.useAddress()) {\n const { name, streetAdd1, streetAdd2, city, state, zip } = this.address();\n\n return (\n <button className='btn btn-link address'\n aria-label={`Edit address, ${name} ${streetAdd1 } ${streetAdd2} ${this.addressLine(city, state)} ${zip}}`}>\n <span className='d-block'>{ name }</span>\n <span className='d-block'>{ streetAdd1 } { streetAdd2 }</span>\n <span className='d-block'>{ this.addressLine(city, state) } { zip }</span>\n </button>\n );\n }\n\n return (\n <button className='btn btn-link no-address'\n aria-label='Enter address here'>\n <div>Enter address here… (required)</div>\n </button>\n );\n }\n\n handleClick() {\n this.props.onClick && this.props.onClick();\n }\n\n address() {\n return wkData.values.returnAddress || {};\n }\n\n useAddress() {\n return !!wkData.values.useReturnAddress;\n }\n\n addressLine(...strings) {\n return strings.filter(Boolean).join(', ');\n }\n\n envelopeSize() {\n return wkData.product.title.split(' ')[0];\n }\n\n envelopeBgSrc() {\n return '/images/' + this.envelopeSize() + '_envelope.png';\n }\n\n get blank() {\n return !wkData.features.includes('ReturnAddress');\n }\n}\n\nexport default EnvelopePage;\n","\n// Import Libraries\n// Import JS Modules\nimport partition from 'lodash/partition';\nimport get from 'lodash/get';\nimport TemplateCache from '../templates/template-cache';\nimport EnvelopePage from '../misc/envelope-page';\nimport { usePrismItemStore } from 'stores/usePrismItemStore';\n\nconst PageSpreads = function (prismItem) {\n this.prismItem = prismItem;\n};\nwindow.PageSpreads = PageSpreads;\n\nconst Spread = function (obj) {\n Object.assign(this, obj);\n\n const keys = ['left', 'right'];\n\n this.includesPage = function (index) {\n for (const key of keys) {\n const { page } = this[key] || {};\n\n if (page && (page.index === index)) return key;\n }\n };\n\n this.pages = function () {\n const list = [];\n\n for (const key of keys) {\n const { page } = this[key] || {};\n\n if (page) list.push(page.index);\n }\n\n return list;\n };\n\n this.pageSize = function (data) {\n if (data && data.template && data.template.size) return data.template.size;\n\n const id = data.template && data.template.id;\n if (id && TemplateCache.store[id]) return TemplateCache.store[id]['pixel-size'];\n\n for (const key of keys) {\n const { page } = this[key] || {};\n\n if (page && page.template) {\n return page.template.size || page.template['pixel-size'];\n }\n }\n };\n\n this.blankData = function (data) {\n return ({\n slots: [],\n blank: true,\n template: {\n id: '@blank',\n prefix: 'about:blank',\n over: 'about:blank',\n back: 'about:blank',\n overlays: [],\n pso: [],\n tso: [],\n size: this.pageSize(data),\n },\n });\n };\n\n this.hasInvisible = function () {\n return keys.some((key) => get(this, [key, 'hint']) === 'invisible');\n };\n\n this.numberOfImages = function() {\n const pagesIndex = this.pages();\n const listPages = usePrismItemStore.getState().listPages();\n return listPages.reduce((total, page) => {\n if (pagesIndex.includes(page.index)) {\n return total + (page.slots || []).filter((slot) => slot.image).length;\n }\n return total;\n }, 0);\n }\n};\n\nPageSpreads.prototype.section = function (index, property) {\n if (!this.prismItem.product) {\n return;\n }\n\n if (!this.prismItem.product.sections) {\n return;\n }\n\n const section = this.prismItem.product.sections[index];\n if (property) {\n return section && section[property];\n }\n\n return section;\n};\n\nPageSpreads.prototype.firstSectionIsWindowCover = function () {\n const [cover] = get(this.prismItem, 'product.sections', [{ hints: [] }]);\n\n return cover.hints.includes('window-cover');\n};\n\nPageSpreads.prototype.hasEnvelope = function () {\n return window.wkData.values.hasEnvelopeOption;\n};\n\nPageSpreads.prototype.find = function (pageNo) {\n pageNo = parseInt(pageNo, 10);\n\n return this.listWithoutInvisibles().spreads.find((spread) => spread.includesPage(pageNo));\n};\n\nPageSpreads.prototype.pageList = function () {\n const pages = [];\n\n for (let i = 0; i < this.prismItem.pageCount; i++) {\n pages[i] = this.prismItem.pages[i];\n }\n\n return pages;\n};\n\nPageSpreads.prototype.list = function () {\n const firstSectionIsWindowCover = this.firstSectionIsWindowCover();\n const hasEnvelope = this.hasEnvelope();\n const pages = this.pageList();\n const list = [];\n let pageNum;\n\n if (firstSectionIsWindowCover) {\n const pg = pages.shift();\n pageNum = pg.index;\n\n list.push(new Spread({\n spread: list.length,\n left: { page: null, hint: 'invisible' },\n right: { page: { ...pg, valid: true, title: 'Cover' } },\n title: 'Cover',\n }));\n\n list.push(new Spread({\n spread: list.length,\n left: { page: null, hint: 'hatch' },\n right: { page: { ...pg, valid: true }, hint: 'open-cover' },\n title: pageNum,\n }));\n }\n\n while (pages.length) {\n const spread = new Spread({ spread: list.length });\n const pg = pages.shift();\n pageNum = pg.index;\n let key;\n\n if ((wkData.product.type != 'wmcard') && (pg['page-is'] == 'left')) {\n let pg2;\n\n if (pages[0] && pages[0].index == pg['page-pair']) {\n pg2 = pages.shift();\n }\n\n spread.left = { page: pg, hint: 'default' };\n if (firstSectionIsWindowCover) {\n pg.title = pageNum;\n }\n\n if (pg2) {\n spread.right = { page: pg2, hint: 'default' };\n if (firstSectionIsWindowCover) {\n pg2.title = pageNum;\n }\n } else {\n spread.right = { hint: 'blank' };\n }\n } else {\n switch (wkData.product.type) {\n case 'album':\n key = ({ left: 'left', right: 'right' })[pg['page-is']] || 'left';\n spread[key] = { page: pg, hint: 'default' };\n\n if (firstSectionIsWindowCover) {\n pg.title = pageNum;\n }\n\n if (pg['page-is'] == 'left') {\n spread.right = { hint: 'blank' };\n }\n if (pg['page-is'] == 'right') {\n spread.left = { hint: 'blank' };\n }\n break;\n default:\n spread.right = { page: pg, hint: 'default' };\n break;\n }\n }\n\n [spread.left, spread.right].filter(Boolean).forEach((side) => {\n side.page = (({ page }) => (\n (typeof page !== 'undefined') ?\n { ...page, valid: true } : { name: 'Inside Cover' }\n ))(side);\n\n side.page.title = (side.page.title || '').toString();\n });\n\n list.push(spread);\n }\n\n if (hasEnvelope) {\n list.push(new Spread({\n spread: list.length,\n left: { page: null, hint: 'invisible' },\n right: {\n page: { name: 'Envelope', title: 'Envelope', template: {} },\n customComponent: EnvelopePage,\n },\n }));\n }\n\n list.forEach((spread) => {\n spread.title = (({ left, right }) => {\n [left, right] = [left, right].map((side) => get(side, 'page.name', ''));\n\n if (left.toLowerCase() === 'cover') {\n return left;\n }\n\n return [left, right]\n .filter(Boolean)\n .join(' - ')\n .replace(/Page /g, '');\n })(spread);\n });\n\n return list;\n};\n\nPageSpreads.prototype.listWithoutInvisibles = function () {\n const [invisibles, spreads] = partition(this.list(), (s) => s.hasInvisible());\n\n return {\n spreads,\n numberOfInvisibles: invisibles.length,\n };\n};\n\nexport default PageSpreads;\n","// Import JS Modules\nimport UrlBuilder from '../../_utils/url-building';\nimport { usePrismItemStore } from './usePrismItemStore';\n\n\n// --------------------------------------------------------------------\n\nclass EmbellishmentStoreBase {\n constructor() {\n this.categoriesList = null;\n }\n\n async some() {\n const categories = this.categoriesList || await this.fetchCategories();\n\n return categories.length > 0;\n }\n\n async getEmbellishments(query) {\n // is the query a category id?\n const category = this.categoriesList.find((c) => c.id === query);\n\n const [title, url] = category\n ? [category.title, category.feed, category.title] // the query is a category id\n : [query, this.tagsUrl(query)]; // otherwise perform a tags search\n\n return {\n title,\n items: await this.fetchEmbellishments(url),\n };\n }\n\n async fetchCategories() {\n this.categoriesList = await this._fetch(this.categoriesUrl) || [];\n\n return this.categoriesList;\n }\n\n async fetchEmbellishments(url) {\n const data = await this._fetch(url);\n\n let embellishments = [].concat(\n data.embellishments.map((embellishment) => ({\n ...embellishment,\n type: data.types[embellishment.type],\n }))\n );\n\n if (data.pages.next) {\n embellishments = embellishments.concat(await this.fetchEmbellishments(data.pages.next));\n }\n\n return embellishments;\n }\n\n async _fetch(url) {\n if (!url) {\n return;\n }\n\n const response = await fetch(url, {\n mode: 'cors',\n credentials: 'omit',\n });\n\n if (!response.ok) {\n throw new Error(response.statusText);\n }\n\n return await response.json();\n }\n\n get categoriesUrl() {\n if (this.baseUrl) {\n return `${this.baseUrl}/api/categories?${this.buildURLQuery()}`;\n }\n }\n\n tagsUrl(query) {\n const queryString = this.buildURLQuery({\n tag: query,\n });\n\n return `${this.baseUrl}/api/feed?${queryString}`;\n }\n\n buildURLQuery(params = {}) {\n return UrlBuilder.buildURLQuery({\n type: this.type,\n design_code: this.designCode,\n rights_holder: this.rightsHolder,\n ...params,\n });\n }\n\n get baseUrl() {\n return (wkData.embellishments_service || {}).url;\n }\n\n get designCode() {\n return usePrismItemStore.getState().prismItem.design_code;\n }\n\n get rightsHolder() {\n return wkData.embellishments_service.rights_holder;\n }\n}\n\nclass StickerStore extends EmbellishmentStoreBase {\n get type() {\n return 'sticker';\n }\n}\n\nclass PatternStore extends EmbellishmentStoreBase {\n get type() {\n return 'pattern';\n }\n}\n\n// --------------------------------------------------------------------\n\nexport {\n StickerStore,\n PatternStore,\n};\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","import { EventEmitter as Emitter } from 'eventemitter3';\n\n\nexport const eventEmitter = new Emitter();\n\nexport const EventEmitter = {\n on: (event, callback) => eventEmitter.on(event, callback),\n once: (event, callback) => eventEmitter.once(event, callback),\n off: (event, callback) => eventEmitter.off(event, callback),\n emit: (event, payload) => eventEmitter.emit(event, payload),\n};\n","// Import JS Modules\nimport { builderDispatch, WebUI, PrismUI } from '../../_utils/ui';\nimport get from 'lodash/get';\nimport remove from 'lodash/remove';\nimport objectToFormData from '../../_utils/object-to-form-data-util';\nimport PageSpreads from '../edit-area/page-spreads';\nimport Utils from './utils';\nimport { usePrismItemStore } from 'stores/usePrismItemStore';\nimport { StickerStore, PatternStore } from 'stores/embellishments';\nimport { EventEmitter } from 'wk-event-emitter';\n\n\n// --------------------------------------------------------------------\n\n$.mobile = {\n loading() {},\n};\n$.fn.listview = function() {};\n\nconst RETRY_PERIOD = 1000;\nconst MAX_RETRIALS = 20;\n\nfunction loadPrismItem(vars, options = {}, skipAddToStack = false) {\n const { initialPage } = options;\n builderDispatch.dispatch({\n type: PrismUI.ITEM_COPYING,\n });\n\n if (!vars.hasOwnProperty('id')) {\n return Promise.reject();\n }\n\n const dateIdentifier = Date.now();\n if (skipAddToStack && activeView) {\n activeView.historyStack.skipStep(dateIdentifier);\n }\n\n Utils.load();\n usePrismItemStore\n .getState()\n .refreshImages()\n .catch(() => {});\n usePrismItemStore.getState().updateId(vars.id);\n usePrismItemStore.getState().updateLoadActive(true);\n\n return new Promise((resolve, reject) => {\n perform({\n url: Utils.dataURL(vars),\n resolve,\n reject,\n });\n }).finally(() => {\n builderDispatch.dispatch({\n type: PrismUI.ITEM_COPYING_FINISHED,\n });\n });\n\n function perform({ url, resolve, reject, attempt = 0 }) {\n fetch(url, {\n credentials: 'same-origin',\n })\n .then(response => {\n if (response.ok) {\n return response.json();\n }\n\n throw new Error(response.statusText);\n })\n .then(data => {\n if (data.copy && data.copy.status) {\n switch (data.copy.status) {\n case 'queued':\n case 'working':\n builderDispatch.dispatch({\n type: PrismUI.ITEM_COPYING,\n data: data.copy,\n });\n\n if (attempt < MAX_RETRIALS) {\n setTimeout(() => {\n perform({\n url,\n resolve,\n reject,\n attempt: ++attempt,\n });\n }, RETRY_PERIOD);\n } else {\n reject('Transformation timed out');\n }\n break;\n case 'completed':\n case undefined: // This is the default returned value upon completion!\n resolve();\n break;\n default:\n reject('Transformation failure');\n break;\n }\n } else {\n if (initialPage) data.currentPage = initialPage;\n builderDispatch.dispatch({\n type: PrismUI.DO_ITEM_LOAD,\n data,\n dateIdentifier,\n });\n\n resolve();\n }\n })\n .catch(error => {\n usePrismItemStore.getState().updateLoadActive(false);\n reject(error.message);\n });\n }\n}\n\n// Details\ntry {\n window.prismViews = window.prismViews || {};\n} catch (e) {}\n\nconst PrismInfo = {\n get prismItem() {\n return usePrismItemStore.getState().prismItem;\n },\n get pages() {\n return usePrismItemStore.getState().prismItem.pages;\n },\n get sections() {\n return usePrismItemStore.getState().prismItem.product.sections;\n },\n\n hasDoubleSpread() {\n for (const key in this.pages) {\n if (typeof this.pages[key]['page-pair'] === 'number') return true;\n }\n\n return false;\n },\n\n canAddPages() {\n return usePrismItemStore.getState().maxPagesReached();\n },\n\n canReorder() {\n return this.sections.some(section => section.max > 1);\n },\n\n hasFirstPage() {\n const tags = get(this.sections[0], 'tags', []);\n\n return tags.includes('first-page');\n },\n};\n\nconst prismAction = {\n notifyableOperations: ['autofill', 'set_theme', 'add_page', 'delete_page'],\n updatePages({ pages, pageCount, currentPage }) {\n if (!pages) {\n return;\n }\n\n usePrismItemStore.getState().updatePrismItem({ pages, pageCount });\n\n builderDispatch.dispatch({\n type: WebUI.PAGES_CHANGED,\n detail: 'prismAction.updatePages handler',\n });\n\n if (currentPage > -1) {\n const index = (window.activeView && window.activeView.pageIndex) || 0;\n builderDispatch.delayedDispatch({\n type: WebUI.DO_SHOW_SPREAD,\n spread: new PageSpreads(usePrismItemStore.getState().prismItem).find(\n index\n ),\n });\n\n builderDispatch.dispatch({\n type: WebUI.HIDE_CUSTOM_PAGE,\n });\n }\n },\n deleteImage(imageId) {\n const pageGetPromises = [];\n const masterDeferred = $.Deferred();\n\n for (let i = 0; i < usePrismItemStore.getState().prismItem.pageCount; i++) {\n (function(i) {\n const deferred = $.Deferred();\n let removed;\n\n pageGetPromises.push(deferred.promise());\n\n usePrismItemStore.getState().getPage(i, page => {\n const { slots } = page;\n removed = remove(slots, slot => slot.data.imgId == imageId);\n\n if (removed.length < 1) {\n deferred.resolve();\n return;\n }\n page.slots = slots;\n usePrismItemStore\n .getState()\n .savePage(i, page)\n .then(() => {\n deferred.resolve();\n });\n\n if (window.activeView && activeView.pageIndex == i) {\n activeView.deleteImage(imageId);\n } else {\n EventEmitter.emit(PrismUI.PAGE_CHANGED_OUTSIDE_EDITOR, { page });\n }\n });\n })(i);\n }\n\n $.when.apply(null, pageGetPromises).then(() => {\n masterDeferred.resolve();\n });\n\n return masterDeferred.promise();\n },\n post(operation, url, data, callback) {\n const shouldNotify = this.notifyableOperations.includes(operation);\n\n if (shouldNotify) {\n builderDispatch.delayedDispatch({\n type: PrismUI.MODAL_MESSAGE,\n });\n }\n\n fetch(url, {\n method: 'POST',\n body: objectToFormData(data),\n credentials: 'same-origin',\n }).then(response => this.handleResponse(response, shouldNotify, callback));\n },\n postJSON(operation, url, data, callback) {\n const shouldNotify = this.notifyableOperations.includes(operation);\n\n if (shouldNotify) {\n builderDispatch.delayedDispatch({\n type: PrismUI.MODAL_MESSAGE,\n });\n }\n\n fetch(url, {\n method: 'POST',\n body: JSON.stringify(data),\n headers: {\n 'Content-Type': 'application/json',\n },\n credentials: 'same-origin',\n }).then(response => this.handleResponse(response, shouldNotify, callback));\n },\n async handleResponse(response, shouldNotify, callback) {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n\n try {\n const data = await response.json();\n\n this.updatePages(data);\n\n if (shouldNotify) {\n builderDispatch.dispatch({\n type: PrismUI.MODAL_MESSAGE,\n action: 'hide',\n });\n }\n\n if (typeof callback === 'function') {\n callback(data);\n }\n } catch (error) {\n console.error(error);\n }\n },\n autofill(payload, callback) {\n this.postJSON(\n 'autofill',\n `/m/a/${usePrismItemStore.getState().prismItem.id}/autofill`,\n payload,\n callback\n );\n },\n autoclear(payload, callback) {\n this.postJSON(\n 'autoclear',\n `/m/a/${usePrismItemStore.getState().prismItem.id}/autoclear`,\n payload,\n callback\n );\n },\n clear(callback) {\n this.post(\n 'clear',\n `/m/a/${usePrismItemStore.getState().prismItem.id}/clear`,\n {},\n callback\n );\n },\n\n add_page(position, callback, index) {\n if (typeof index === 'undefined') {\n const isLeftSide = (({ pageIndex }) =>\n // some covers are really a first page\n // and that knocks the pages' indexing off by one\n PrismInfo.hasFirstPage() ? pageIndex % 2 !== 0 : pageIndex % 2 === 0)(\n activeView\n );\n\n position =\n {\n left: 'before',\n right: 'after',\n }[position] || (isLeftSide ? 'before' : 'after');\n\n index = (({ pageIndex }) => {\n if (usePrismItemStore.getState().isLayflat()) {\n return pageIndex;\n }\n\n if (position === 'before') {\n pageIndex -= isLeftSide ? 0 : 1;\n }\n\n if (position === 'after') {\n pageIndex += isLeftSide ? 1 : 0;\n }\n\n return pageIndex;\n })(activeView);\n }\n\n this.post(\n 'add_page',\n `/m/a/${usePrismItemStore.getState().prismItem.id}/add_pages`,\n { index, position },\n callback\n );\n },\n\n delete_page(callback, pageIndex = null) {\n const index = (({ pageIndex: pageIndexActiveView }) => {\n pageIndex = pageIndex || pageIndexActiveView;\n if (usePrismItemStore.getState().isLayflat()) {\n return pageIndex;\n }\n\n // some covers are really a first page\n // and that knocks the pages' indexing off by one\n const isLeftSide = PrismInfo.hasFirstPage()\n ? pageIndex % 2 !== 0\n : pageIndex % 2 === 0;\n\n return pageIndex - (isLeftSide ? 0 : 1);\n })(activeView);\n\n this.post(\n 'delete_page',\n `/m/a/${usePrismItemStore.getState().prismItem.id}/delete_pages`,\n { index },\n callback\n );\n },\n set_theme(theme, callback) {\n this.post(\n 'write',\n `/project_edit/write/${usePrismItemStore.getState().prismItem.id}`,\n { theme },\n () => {\n this.post(\n 'set_theme',\n `/m/a/${usePrismItemStore.getState().prismItem.id}/set_theme`,\n { theme, index: usePrismItemStore.getState().prismItem.currentPage },\n data => {\n usePrismItemStore.setState(({ prismItem }) => ({\n ...prismItem,\n theme: data.theme,\n design_code: data.design_code,\n }));\n\n if (typeof callback === 'function') {\n callback(data);\n }\n\n builderDispatch.dispatch({\n type: PrismUI.THEME_CHANGED,\n theme,\n });\n }\n );\n }\n );\n },\n save_wkdata(callback) {\n this.post(\n 'save_wkdata',\n wkData.write_url,\n { values: wkData.values },\n callback\n );\n },\n};\n\nconst ThumbnailStore = {\n any() {\n return !this.empty();\n },\n empty() {\n return (\n usePrismItemStore.getState().prismItem &&\n (usePrismItemStore.getState().prismItem.imageList || []).length === 0\n );\n },\n list() {\n if (\n usePrismItemStore.getState().prismItem &&\n usePrismItemStore.getState().prismItem.imageList\n ) {\n const usedImageIds = usePrismItemStore\n .getState()\n .usedImages()\n .reduce((memo, usedImageId) => {\n memo[usedImageId] = true;\n return memo;\n }, {});\n\n return usePrismItemStore.getState().prismItem.imageList.map(image =>\n Object.assign(image, {\n used: usedImageIds[image.id] === true,\n })\n );\n }\n\n return [];\n },\n id(image) {\n if (typeof image === 'number') return image;\n\n if (image.imgId) {\n return image.imgId;\n }\n\n return image.id;\n },\n remove(image) {\n const id = this.id(image);\n\n fetch(\n `/edt/img/del/${usePrismItemStore.getState().prismItem.sec}/${\n usePrismItemStore.getState().prismItem.id\n }/${id}`,\n {\n method: 'POST',\n credentials: 'same-origin',\n }\n )\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n // removing image reference from WK\n fetch(\n `/image_references/${\n usePrismItemStore.getState().prismItem.id\n }/${id}`,\n {\n method: 'DELETE',\n credentials: 'same-origin',\n }\n ).catch(e => console.error(e));\n\n return response;\n })\n .then(() => {\n const newList = [];\n\n for (const image of ThumbnailStore.list()) {\n if (ThumbnailStore.id(image) === id) {\n continue;\n }\n\n newList.push(image);\n }\n\n usePrismItemStore.getState().updateImageList(newList);\n })\n .catch(e => console.error(e));\n },\n};\n\nconst FontStore = {\n fetch() {\n fetch(`/m/a/${usePrismItemStore.getState().prismItem.id}/fonts`, {\n credentials: 'same-origin',\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(data => {\n FontStore.list = data;\n builderDispatch.dispatch({ type: PrismUI.FONTS_LOADED });\n })\n .catch(e => console.error(e));\n },\n list: [],\n};\n\nlet globalResize;\n\nfunction didMountResizable(self, delay) {\n if (!globalResize) {\n globalResize = true;\n window.addEventListener('resize', () => {\n window.setTimeout(() => {\n builderDispatch.dispatch({\n type: WebUI.RESIZE,\n });\n // self.forceUpdate();\n }, 200);\n });\n }\n self.resizeHandler = builderDispatch.register(payload => {\n if (payload.type === WebUI.RESIZE) {\n if (delay) {\n setTimeout(() => {\n self.forceUpdate();\n }, 200);\n } else self.forceUpdate();\n }\n });\n setTimeout(() => {\n self.forceUpdate();\n }, 200);\n}\n\nfunction willUnmountResizable(self) {\n if (self.resizeHandler) {\n builderDispatch.unregister(self.resizeHandler);\n }\n self.resizeHandler = undefined;\n}\n\nfunction findInArray(array, property, value) {\n for (let i = 0; i < array.length; i++) {\n if (array[i] && array[i][property] && array[i][property] == value) {\n return array[i];\n }\n }\n}\n\nexport const stickerStore = new StickerStore();\nexport const patternStore = new PatternStore();\n\nexport {\n PrismInfo,\n findInArray,\n willUnmountResizable,\n didMountResizable,\n prismAction,\n ThumbnailStore,\n FontStore,\n loadPrismItem,\n};\n","import { create } from 'zustand';\n\n// CAUTION: This is only temporary and may fail in the future if Safari changes their private mode behavior\nexport const useGenStore = create(() => ({\n isSafariPrivate: false,\n}));\n","\n// Import JS Modules\nimport { builderDispatch, PrismUI } from '../../../_utils/ui';\nimport LoaderAdditionalOptions from '../../../_photo-loader/additional-options';\nimport { usePrismItemStore } from 'stores/usePrismItemStore';\n\n// --------------------------------------------------------------------\n\nfunction uploadUrl() {\n const prismItem = usePrismItemStore.getState().prismItem;\n \n return `/edt/img/add/${prismItem.sec}/${prismItem.num}?json=1`;\n}\n\nfunction fireAddPhotos() {\n builderDispatch.delayedDispatch({\n type: PrismUI.HIDE_OVERLAY\n })\n\n builderDispatch.delayedDispatch({\n type: PrismUI.ADD_PHOTOS,\n upload_url: uploadUrl(),\n callToActionButtonText: 'Add Photos',\n callToActionButtonEvent: 'event_add_photos',\n add_title_text: 'photos will be added to your product',\n });\n}\n\n// --------------------------------------------------------------------\n\nexport {\n fireAddPhotos,\n uploadUrl,\n};\n"],"names":["last","array","length","last_1","baseSlice","start","end","index","result","_baseSlice","baseGet","require$$0","require$$1","parent","object","path","_parent","castPath","require$$2","toKey","require$$3","baseUnset","_baseUnset","isIndex","arrayProto","splice","basePullAt","indexes","lastIndex","previous","_basePullAt","baseIteratee","remove","predicate","value","remove_1","objectToFormData","obj","rootName","formData","appendFormData","data","rootData","i","key","arrayAggregator","setter","iteratee","accumulator","_arrayAggregator","baseEach","baseAggregator","collection","_baseAggregator","isArray","createAggregator","initializer","func","_createAggregator","partition","partition_1","createStoreImpl","createState","state","listeners","setState","partial","replace","nextState","previousState","listener","getState","api","initialState","createStore","e","h","a","b","k","l","m","n","p","q","d","f","g","r","t","u","useSyncExternalStoreShim_production_min","shimModule","v","w","withSelector_production_min","c","withSelectorModule","useDebugValue","ReactExports","useSyncExternalStoreWithSelector","useSyncExternalStoreExports","identity","arg","useStore","selector","equalityFn","slice","createImpl","useBoundStore","create","isArrayLike","keys","createFind","findIndexFunc","fromIndex","iterable","_createFind","baseFindIndex","fromRight","_baseFindIndex","toNumber","INFINITY","MAX_INTEGER","toFinite","sign","toFinite_1","toInteger","remainder","toInteger_1","nativeMax","findIndex","findIndex_1","find","find_1","baseFlatten","flatten","flatten_1","assignValue","copyObject","createAssigner","isPrototype","require$$4","require$$5","objectProto","hasOwnProperty","assign","source","assign_1","baseIsNaN","_baseIsNaN","strictIndexOf","_strictIndexOf","baseIndexOf","_baseIndexOf","arrayIncludes","_arrayIncludes","arrayIncludesWith","comparator","_arrayIncludesWith","noop","noop_1","Set","setToArray","createSet","values","_createSet","SetCache","cacheHas","LARGE_ARRAY_SIZE","baseUniq","includes","isCommon","seen","set","outer","computed","seenIndex","_baseUniq","uniq","uniq_1","baseSortBy","comparer","_baseSortBy","isSymbol","compareAscending","other","valIsDefined","valIsNull","valIsReflexive","valIsSymbol","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","_compareAscending","compareMultiple","orders","objCriteria","othCriteria","ordersLength","order","_compareMultiple","arrayMap","baseMap","baseUnary","require$$6","require$$7","require$$8","baseOrderBy","iteratees","criteria","_baseOrderBy","baseRest","isIterateeCall","sortBy","sortBy_1","compact","resIndex","compact_1","baseGetTag","isObjectLike","stringTag","isString","isString_1","baseValues","props","_baseValues","values_1","guard","includes_1","TemplateInterrogator","__publicField","template","filters","noOfPhotos","orientations","section","wraps","side","templates","templateGroups","nonUniqueAvailableOrientations","group","tag","availableOrientations","templateGroup","groupBy","memo","tags","orientation","t1","t2","t1Orientation","t2Orientation","templateInterrogator","TemplateStore","prismItem","usePrismItemStore","response","map","design","layout","position","info","builderDispatch","WebUI","id","positions","list","orientationTag","max","translate","template_id","groupHasTemplate","type","current_template_id","wrap","wrap_type","groupIsWrap","templateWrapTag","initial","cur","alt","templateID","bits","originalTemplateID","newTemplateID","page","size","ratio","payload","PrismUI","Utils","item","all","params","UrlBuilder","PrismJSON","string","str","_len","_results","containgActiveOrientation","activeOrientation","PrismItemInterrogator","prismItemInterrogator","getCurrentSection","getFoldersBySection","edges","activeSection","folders","filterTemplates","filter","containingActiveOrientation","getCurrentTemplateSlots","getCurrentTemplateOrientation","numberOfPhotosInTemplateText","number","numberOfTextSolotsInTemplateText","calendarEventTextRegex","calendarEventPhotoRegex","optionalSlotRegex","clonedSlotRegex","isCalendarEventTextSlot","slotID","isCalendarEventPhotoSlot","isOptionalSlot","isClonedSlot","arrayEach","_arrayEach","baseAssign","_baseAssign","keysIn","baseAssignIn","_baseAssignIn","getSymbols","copySymbols","_copySymbols","arrayPush","getPrototype","stubArray","nativeGetSymbols","getSymbolsIn","_getSymbolsIn","copySymbolsIn","_copySymbolsIn","baseGetAllKeys","getAllKeysIn","_getAllKeysIn","initCloneArray","_initCloneArray","cloneArrayBuffer","cloneDataView","dataView","isDeep","buffer","_cloneDataView","reFlags","cloneRegExp","regexp","_cloneRegExp","Symbol","symbolProto","symbolValueOf","cloneSymbol","symbol","_cloneSymbol","cloneTypedArray","boolTag","dateTag","mapTag","numberTag","regexpTag","setTag","symbolTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","initCloneByTag","Ctor","_initCloneByTag","getTag","baseIsMap","_baseIsMap","nodeUtil","nodeIsMap","isMap","isMap_1","baseIsSet","_baseIsSet","nodeIsSet","isSet","isSet_1","Stack","cloneBuffer","copyArray","getAllKeys","require$$9","require$$10","require$$11","require$$12","require$$13","initCloneObject","require$$14","require$$15","isBuffer","require$$16","require$$17","isObject","require$$18","require$$19","require$$20","require$$21","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","argsTag","arrayTag","errorTag","funcTag","genTag","objectTag","weakMapTag","cloneableTags","baseClone","bitmask","customizer","stack","isFlat","isFull","isArr","isFunc","stacked","subValue","keysFunc","_baseClone","clone","clone_1","castFunction","_castFunction","forEach","forEach_1","each","templateData","pageData","slot","properties","currentSlot","findInArray","meta","TemplateCache","slotId","pageDataA","templateDataA","pageDataB","templateDataB","emptyImgSlots","nextSlotId","newSlot","Shuffle","get","useTemplateSelectStore","orientationFilter","wrapFilter","layouts","currentLayoutIndex","nextLayoutIndex","handleTemplateChanged","handlePagesChanged","handleSelectTemplate","shuffle","nextLayout","view","previousImages","previousTexts","tmr","error","promises","resolve","availableTemplates","availableTemplate","templateB","updatedPage","TemplateData","payloadItems","wkDataInterrogator","isCard","ThemeStore","_","themes","products","filtered","theme","items","code","product","themeStore","undefined","VERSION","CORE_ERROR_TEXT","FUNC_ERROR_TEXT","INVALID_TEMPL_VAR_ERROR_TEXT","HASH_UNDEFINED","MAX_MEMOIZE_SIZE","PLACEHOLDER","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","WRAP_BIND_FLAG","WRAP_BIND_KEY_FLAG","WRAP_CURRY_BOUND_FLAG","WRAP_CURRY_FLAG","WRAP_CURRY_RIGHT_FLAG","WRAP_PARTIAL_FLAG","WRAP_PARTIAL_RIGHT_FLAG","WRAP_ARY_FLAG","WRAP_REARG_FLAG","WRAP_FLIP_FLAG","DEFAULT_TRUNC_LENGTH","DEFAULT_TRUNC_OMISSION","HOT_COUNT","HOT_SPAN","LAZY_FILTER_FLAG","LAZY_MAP_FLAG","LAZY_WHILE_FLAG","MAX_SAFE_INTEGER","NAN","MAX_ARRAY_LENGTH","MAX_ARRAY_INDEX","HALF_MAX_ARRAY_LENGTH","wrapFlags","asyncTag","domExcTag","nullTag","promiseTag","proxyTag","undefinedTag","weakSetTag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrimStart","reWhitespace","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reForbiddenIdentifierChars","reEscapeChar","reEsTemplate","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsAstralRange","rsComboMarksRange","reComboHalfMarksRange","rsComboSymbolsRange","rsComboRange","rsDingbatRange","rsLowerRange","rsMathOpRange","rsNonCharRange","rsPunctuationRange","rsSpaceRange","rsUpperRange","rsVarRange","rsBreakRange","rsApos","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsModifier","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsZWJ","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","reOptMod","rsOptVar","rsOptJoin","rsOrdLower","rsOrdUpper","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","deburredLetters","htmlEscapes","htmlUnescapes","stringEscapes","freeParseFloat","freeParseInt","freeGlobal","global","freeSelf","root","freeExports","exports","freeModule","module","moduleExports","freeProcess","types","nodeIsArrayBuffer","nodeIsDate","nodeIsRegExp","nodeIsTypedArray","apply","thisArg","args","arrayEachRight","arrayEvery","arrayFilter","offset","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","asciiToArray","asciiWords","baseFindKey","eachFunc","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","current","baseTimes","baseToPairs","baseTrim","trimmedEndIndex","cache","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","countHolders","placeholder","deburrLetter","escapeHtmlChar","escapeStringChar","chr","getValue","hasUnicode","hasUnicodeWord","iteratorToArray","iterator","mapToArray","overArg","transform","replaceHolders","setToPairs","strictLastIndexOf","stringSize","unicodeSize","stringToArray","unicodeToArray","unescapeHtmlChar","unicodeWords","runInContext","context","Array","Date","Error","Function","Math","Object","RegExp","String","TypeError","funcProto","coreJsData","funcToString","idCounter","maskSrcKey","uid","nativeObjectToString","objectCtorString","oldDash","reIsNative","Buffer","Uint8Array","allocUnsafe","objectCreate","propertyIsEnumerable","spreadableSymbol","symIterator","symToStringTag","defineProperty","getNative","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeCeil","nativeFloor","nativeIsBuffer","nativeIsFinite","nativeJoin","nativeKeys","nativeMin","nativeNow","nativeParseInt","nativeRandom","nativeReverse","DataView","Map","Promise","WeakMap","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolToString","lodash","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","proto","baseLodash","chainAll","lazyClone","lazyReverse","lazyValue","dir","isRight","arrLength","getView","iterLength","takeCount","baseWrapperValue","iterIndex","Hash","entries","entry","hashClear","hashDelete","hashGet","hashHas","hashSet","ListCache","listCacheClear","listCacheDelete","assocIndexOf","listCacheGet","listCacheHas","listCacheSet","MapCache","mapCacheClear","mapCacheDelete","getMapData","mapCacheGet","mapCacheHas","mapCacheSet","setCacheAdd","setCacheHas","stackClear","stackDelete","stackGet","stackHas","stackSet","pairs","arrayLikeKeys","inherited","isArg","isArguments","isBuff","isType","isTypedArray","skipIndexes","arraySample","baseRandom","arraySampleSize","shuffleSelf","baseClamp","arrayShuffle","assignMergeValue","eq","baseAssignValue","objValue","baseAt","paths","skip","lower","upper","baseConforms","baseConformsTo","baseDelay","wait","setTimeout","baseDifference","valuesLength","valuesIndex","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","baseFill","toLength","baseFilter","depth","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","isFunction","symbolsFunc","getRawTag","objectToString","baseGt","baseHas","baseHasIn","baseInRange","baseIntersection","arrays","othLength","othIndex","caches","maxLength","baseInverter","baseInvoke","baseIsArguments","baseIsArrayBuffer","baseIsDate","baseIsEqual","baseIsEqualDeep","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","baseIsMatch","matchData","noCustomizer","srcValue","baseIsNative","isMasked","pattern","baseIsRegExp","baseIsTypedArray","isLength","baseMatchesProperty","baseMatches","property","baseKeys","baseKeysIn","nativeKeysIn","isProto","baseLt","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","baseMergeDeep","newValue","safeGet","mergeFunc","isTyped","isArrayLikeObject","isPlainObject","toPlainObject","baseNth","getIteratee","basePick","basePickBy","baseSet","basePropertyDeep","basePullAll","indexOf","baseRange","step","baseRepeat","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","constant","baseShuffle","baseSome","baseSortedIndex","retHighest","low","high","mid","baseSortedIndexBy","valIsNaN","valIsUndefined","setLow","baseSortedUniq","baseToNumber","baseToString","baseUpdate","updater","baseWhile","isDrop","actions","action","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","stringToPath","toString","castRest","castSlice","clearTimeout","arrayBuffer","typedArray","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","assigner","sources","createBind","isBind","createCtor","wrapper","fn","createCaseFirst","methodName","trailing","createCompounder","callback","words","deburr","thisBinding","createCurry","arity","getHolder","createRecurry","createHybrid","createFlow","flatRest","funcs","prereq","getFuncName","funcName","getData","isLaziable","partialsRight","holdersRight","argPos","ary","isAry","isBindKey","isFlip","holdersCount","newHolders","reorder","createInverter","toIteratee","createMathOperation","operator","defaultValue","createOver","arrayFunc","createPadding","chars","charsLength","createPartial","createRange","createRelationalOperation","wrapFunc","isCurry","newHoldersRight","newPartials","newPartialsRight","newData","setData","setWrapToString","createRound","precision","pair","createToPairs","createWrap","mergeData","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","isPartial","arrStacked","othStacked","arrValue","othValue","compared","convert","objProps","objLength","othProps","objStacked","skipCtor","objCtor","othCtor","otherFunc","isKeyable","isOwn","unmasked","ctorString","transforms","getWrapDetails","match","hasPath","hasFunc","insertWrapDetails","details","isMaskable","stubFalse","memoizeCapped","memoize","srcBitmask","newBitmask","isCombo","otherArgs","oldArray","shortOut","reference","updateWrapDetails","count","lastCalled","stamp","remaining","rand","quote","subString","chunk","concat","difference","differenceBy","differenceWith","drop","dropRight","dropRightWhile","dropWhile","fill","findLastIndex","flattenDeep","flattenDepth","fromPairs","head","intersection","mapped","intersectionBy","intersectionWith","join","separator","lastIndexOf","nth","pull","pullAll","pullAllBy","pullAllWith","pullAt","reverse","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","sortedUniq","sortedUniqBy","tail","take","takeRight","takeRightWhile","takeWhile","union","unionBy","unionWith","uniqBy","uniqWith","unzip","unzipWith","without","xor","xorBy","xorWith","zip","zipObject","zipObjectDeep","zipWith","chain","tap","interceptor","thru","wrapperAt","wrapperChain","wrapperCommit","wrapperNext","toArray","done","wrapperToIterator","wrapperPlant","wrapperReverse","wrapped","wrapperValue","countBy","every","findLast","flatMap","flatMapDeep","flatMapDepth","forEachRight","invokeMap","keyBy","orderBy","reduce","reduceRight","reject","negate","sample","sampleSize","some","now","after","before","bind","bindKey","curry","curryRight","debounce","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","time","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","flush","debounced","isInvoking","defer","delay","flip","resolver","memoized","once","overArgs","funcsLength","partialRight","rearg","rest","spread","throttle","unary","castArray","cloneWith","cloneDeep","cloneDeepWith","conformsTo","gt","gte","isArrayBuffer","isBoolean","isDate","isElement","isEmpty","isEqual","isEqualWith","isError","isFinite","isInteger","isMatch","isMatchWith","isNaN","isNumber","isNative","isNull","isNil","isRegExp","isSafeInteger","isUndefined","isWeakMap","isWeakSet","lt","lte","isBinary","toSafeInteger","assignIn","assignInWith","assignWith","at","prototype","defaults","propsIndex","propsLength","defaultsDeep","mergeWith","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","functions","functionsIn","has","invert","invertBy","invoke","mapKeys","mapValues","merge","omit","omitBy","pickBy","pick","prop","setWith","toPairs","toPairsIn","isArrLike","unset","update","updateWith","valuesIn","clamp","inRange","random","floating","temp","camelCase","word","capitalize","upperFirst","endsWith","target","escape","escapeRegExp","kebabCase","lowerCase","lowerFirst","pad","strLength","padEnd","padStart","parseInt","radix","repeat","snakeCase","split","limit","startCase","startsWith","settings","imports","importsKeys","importsValues","isEscaping","isEvaluating","interpolate","reDelimiters","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","variable","attempt","toLower","toUpper","trim","trimEnd","trimStart","truncate","omission","substring","newEnd","unescape","upperCase","bindAll","methodNames","cond","conforms","defaultTo","flow","flowRight","matches","matchesProperty","method","methodOf","mixin","noConflict","nthArg","over","overEvery","overSome","propertyOf","range","rangeRight","stubObject","stubString","stubTrue","times","toPath","uniqueId","prefix","add","augend","addend","ceil","divide","dividend","divisor","floor","maxBy","mean","meanBy","min","minBy","multiply","multiplier","multiplicand","round","subtract","minuend","subtrahend","sum","sumBy","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","this","fetchFavourites","favourited","TYPES","TrayBase","React","designCode","isCustomColor","isCollage","hasEventsTray","isCalendar","isAlbum","isCanvas","isMultiPageCardProduct","productType","isMultiPageStandardProduct","nonMultiPageProductTypes","hasLayoutsTray","availableFilteredTemplates","hasEdgesTray","hasColourTray","hasStickersTray","hasPatternsTray","hasWrapsTray","chicletVariables","chicletCardVariables","chicletVariablesSecondary","findVariable","name","findCardVariable","hasVariablesTray","hasFavouritesTray","favourites","stickerStore","patternStore","isPartOfDesignTray","activeTray","autofillOnImageUploadNormal","imageList","autofillTarget","autofillStrategy","imageListSortedByName","image","prismAction","imageA","imageB","nameA","nameB","DEFAULT_THRESHOLD","DpiThreshold","dpi","urlMunge","IU","totalFiles","total","pageIndex","nextView","thereWasMore","pagesWithDailyTextSlots","pageWithDailyTextSlots","x","prismItemId","url","imagesList","changed","img","fetchImage","filledImageSlot","emptyImageSlot","unchangedDefaultText","spineTextSlotPresent","lowDpiImage","emptyPage","orientationMismatch","pagePromises","evaluatePage","isSkippableSlot","check","isFrontOrBack","coord","_e","_d","_c","_b","_a","y","angle","imgId","photoData","genericHelpers","templateSlot","imageData","newImageIds","newImages","ref","used","pg","j","saveID","overlays","doNotSave","pages","nOfFiles","loadActive","onSuccessCallback","onFailureCallback","groups","el","success","TemplateCache$1","EnvelopePage","classNames","streetAdd1","streetAdd2","city","strings","PageSpreads","Spread","pagesIndex","cover","pageNo","firstSectionIsWindowCover","hasEnvelope","pageNum","pg2","left","right","invisibles","spreads","s","EmbellishmentStoreBase","query","category","title","embellishments","embellishment","queryString","StickerStore","PatternStore","Events","EE","addListener","emitter","event","evt","clearEvent","EventEmitter","names","events","handlers","ee","a1","a2","a3","a4","a5","len","eventEmitter","Emitter","RETRY_PERIOD","MAX_RETRIALS","loadPrismItem","vars","skipAddToStack","initialPage","dateIdentifier","perform","PrismInfo","pageCount","currentPage","imageId","pageGetPromises","masterDeferred","deferred","removed","slots","operation","shouldNotify","isLeftSide","pageIndexActiveView","ThumbnailStore","usedImageIds","usedImageId","newList","FontStore","useGenStore","uploadUrl","fireAddPhotos"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,80,91]}