{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap c33107b1d41682e794d0","webpack:///vue-directive-image-previewer.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_global.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_descriptors.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_has.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_hide.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_object-dp.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_to-iobject.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_wks.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_core.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_fails.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_is-object.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_an-object.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_library.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_object-keys.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_object-pie.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_property-desc.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_uid.js","webpack:///(webpack)/buildin/global.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_defined.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_enum-bug-keys.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_export.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_iterators.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_object-gops.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_set-to-string-tag.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_shared-key.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_shared.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_to-integer.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_to-object.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_to-primitive.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_wks-define.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_wks-ext.js","webpack:///src/imagePreviewer.vue","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_cof.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_dom-create.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_ie8-dom-define.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_iobject.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_iter-define.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_object-create.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_object-gopn.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_object-keys-internal.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_redefine.js","webpack:///./src/index.js","webpack:///./example/publish.js","webpack:///./~/_babel-runtime@6.26.0@babel-runtime/core-js/object/assign.js","webpack:///./~/_babel-runtime@6.26.0@babel-runtime/core-js/symbol.js","webpack:///./~/_babel-runtime@6.26.0@babel-runtime/core-js/symbol/iterator.js","webpack:///./~/_babel-runtime@6.26.0@babel-runtime/helpers/extends.js","webpack:///./~/_babel-runtime@6.26.0@babel-runtime/helpers/typeof.js","webpack:///./~/_core-js@2.6.9@core-js/library/fn/object/assign.js","webpack:///./~/_core-js@2.6.9@core-js/library/fn/symbol/index.js","webpack:///./~/_core-js@2.6.9@core-js/library/fn/symbol/iterator.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_a-function.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_add-to-unscopables.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_array-includes.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_ctx.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_enum-keys.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_html.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_is-array.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_iter-create.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_iter-step.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_meta.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_object-assign.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_object-dps.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_object-gopd.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_object-gopn-ext.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_object-gpo.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_string-at.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_to-absolute-index.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/_to-length.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/es6.array.iterator.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/es6.object.assign.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/es6.string.iterator.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/es6.symbol.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/es7.symbol.async-iterator.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/es7.symbol.observable.js","webpack:///./~/_core-js@2.6.9@core-js/library/modules/web.dom.iterable.js","webpack:///./~/_lodash@4.17.15@lodash/lodash.js","webpack:///./~/_process@0.11.10@process/browser.js","webpack:///./~/_setimmediate@1.0.5@setimmediate/setImmediate.js","webpack:///./~/_timers-browserify@2.0.11@timers-browserify/main.js","webpack:///./src/imagePreviewer.vue?562d","webpack:///./~/_vue-loader@13.7.3@vue-loader/lib/component-normalizer.js","webpack:///./src/imagePreviewer.vue?a4f4","webpack:///./~/_vue@2.6.10@vue/dist/vue.esm.js","webpack:///(webpack)/buildin/module.js"],"names":["root","factory","exports","module","define","amd","this","__webpack_require__","moduleId","installedModules","i","l","modules","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","global","window","Math","self","Function","__g","a","it","key","dP","createDesc","f","anObject","IE8_DOM_DEFINE","toPrimitive","O","P","Attributes","e","TypeError","IObject","defined","store","uid","Symbol","USE_SYMBOL","core","version","__e","exec","isObject","$keys","enumBugKeys","keys","propertyIsEnumerable","bitmap","writable","id","px","random","concat","undefined","toString","g","eval","split","ctx","hide","has","$export","type","source","own","out","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","S","IS_PROTO","IS_BIND","B","IS_WRAP","W","expProto","target","C","b","arguments","length","apply","virtual","R","U","getOwnPropertySymbols","def","TAG","tag","stat","shared","push","mode","copyright","ceil","floor","isNaN","fn","val","valueOf","LIBRARY","wksExt","$Symbol","charAt","__webpack_exports__","__WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_typeof__","__WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_typeof___default","__WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_extends__","__WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_extends___default","duration","slice","document","is","createElement","cof","redefine","Iterators","$iterCreate","setToStringTag","getPrototypeOf","ITERATOR","BUGGY","returnThis","Base","NAME","Constructor","next","DEFAULT","IS_SET","FORCED","methods","IteratorPrototype","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","dPs","IE_PROTO","Empty","createDict","iframeDocument","iframe","style","display","appendChild","src","contentWindow","open","write","lt","close","create","Properties","result","hiddenKeys","getOwnPropertyNames","toIObject","arrayIndexOf","names","ImagePreviewer","Vue","extend","imagePreviewer","install","options","copy","directive","el","binding","vnode","background","cursor","animate","zIndex","maxWidth","maxHeight","previewSize","_clickHandler","removeEventListener","handleClick","merge","addEventListener","handleClose","vm","sourceDom","visibility","$destroy","body","removeChild","$el","bindingSrc","evt","instance","data","attrs","componentInstance","rect","getBoundingClientRect","width","height","top","left","pictureSize","$mount","dom","$on","$nextTick","setTimeout","_assign","_assign2","obj","default","_interopRequireDefault","_iterator","_iterator2","_symbol","_symbol2","_typeof","constructor","assign","toLength","toAbsoluteIndex","IS_INCLUDES","$this","fromIndex","index","aFunction","that","getKeys","gOPS","pIE","getSymbols","symbols","isEnum","documentElement","Array","isArray","arg","descriptor","done","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","fastKey","getWeak","onFreeze","meta","NEED","KEY","DESCRIPTORS","toObject","$assign","A","K","forEach","k","join","T","aLen","j","defineProperties","gOPD","getOwnPropertyDescriptor","gOPN","windowNames","getWindowNames","ObjectProto","toInteger","TO_STRING","pos","String","charCodeAt","max","min","addToUnscopables","step","iterated","_t","_i","_k","Arguments","$at","point","$fails","wks","wksDefine","enumKeys","_create","gOPNExt","$GOPD","$GOPS","$DP","$JSON","JSON","_stringify","stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","USE_NATIVE","QObject","setter","findChild","setSymbolDesc","D","protoDesc","wrap","sym","isSymbol","iterator","$defineProperty","$defineProperties","$create","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","$set","set","es6Symbols","wellKnownSymbols","keyFor","useSetter","useSimple","FAILS_ON_PRIMITIVES","replacer","$replacer","args","TO_STRING_TAG","DOMIterables","Collection","func","thisArg","arrayAggregator","array","iteratee","accumulator","arrayEach","arrayEachRight","arrayEvery","predicate","arrayFilter","resIndex","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","arrayPush","offset","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiToArray","string","asciiWords","match","reAsciiWord","baseFindKey","collection","eachFunc","baseFindIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","NAN","baseProperty","basePropertyOf","baseReduce","baseSortBy","comparer","sort","current","baseTimes","baseToPairs","props","baseUnary","baseValues","cacheHas","cache","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","countHolders","placeholder","escapeStringChar","chr","stringEscapes","getValue","hasUnicode","reHasUnicode","test","hasUnicodeWord","reHasUnicodeWord","iteratorToArray","mapToArray","map","size","overArg","transform","replaceHolders","PLACEHOLDER","setToArray","setToPairs","strictLastIndexOf","stringSize","unicodeSize","asciiSize","stringToArray","unicodeToArray","reUnicode","lastIndex","unicodeWords","reUnicodeWord","LARGE_ARRAY_SIZE","CORE_ERROR_TEXT","FUNC_ERROR_TEXT","HASH_UNDEFINED","MAX_MEMOIZE_SIZE","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","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","INFINITY","MAX_SAFE_INTEGER","MAX_INTEGER","MAX_ARRAY_LENGTH","MAX_ARRAY_INDEX","HALF_MAX_ARRAY_LENGTH","wrapFlags","argsTag","arrayTag","asyncTag","boolTag","dateTag","domExcTag","errorTag","funcTag","genTag","mapTag","numberTag","nullTag","objectTag","proxyTag","regexpTag","setTag","stringTag","symbolTag","undefinedTag","weakMapTag","weakSetTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","RegExp","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrim","reTrimStart","reTrimEnd","reWrapComment","reWrapDetails","reSplitDetails","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsComboRange","rsComboMarksRange","rsBreakRange","rsMathOpRange","rsBreak","rsCombo","rsLower","rsMisc","rsFitz","rsRegional","rsSurrPair","rsUpper","rsMiscLower","reOptMod","rsModifier","rsOptJoin","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","rsMiscUpper","contextProps","templateCounter","typedArrayTags","cloneableTags","deburredLetters","htmlEscapes","htmlUnescapes","freeParseFloat","parseFloat","freeParseInt","parseInt","freeGlobal","freeSelf","freeExports","nodeType","freeModule","moduleExports","freeProcess","process","nodeUtil","types","require","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","isDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","deburrLetter","escapeHtmlChar","unescapeHtmlChar","_","runInContext","context","lodash","isObjectLike","LazyWrapper","LodashWrapper","wrapperClone","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","lazyClone","copyArray","lazyReverse","clone","lazyValue","dir","isArr","isRight","arrLength","view","getView","start","end","iteratees","iterLength","takeCount","nativeMin","baseWrapperValue","outer","iterIndex","computed","Hash","clear","entry","hashClear","__data__","nativeCreate","hashDelete","hashGet","hashHas","hashSet","ListCache","listCacheClear","listCacheDelete","assocIndexOf","pop","splice","listCacheGet","listCacheHas","listCacheSet","MapCache","mapCacheClear","Map","mapCacheDelete","getMapData","mapCacheGet","mapCacheHas","mapCacheSet","SetCache","add","setCacheAdd","setCacheHas","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","pairs","arrayLikeKeys","inherited","isArg","isArguments","isBuff","isBuffer","isType","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","baseClamp","arrayShuffle","assignMergeValue","eq","baseAssignValue","assignValue","objValue","baseAggregator","baseEach","baseAssign","copyObject","baseAssignIn","keysIn","baseAt","paths","skip","number","lower","upper","baseClone","bitmask","customizer","stack","isDeep","isFlat","isFull","initCloneArray","getTag","isFunc","cloneBuffer","initCloneObject","copySymbolsIn","copySymbols","initCloneByTag","stacked","subValue","keysFunc","getAllKeysIn","getAllKeys","baseConforms","baseConformsTo","baseDelay","wait","baseDifference","includes","isCommon","valuesLength","valuesIndex","baseEvery","baseExtremum","baseFill","baseFilter","baseFlatten","depth","isStrict","isFlattenable","baseForOwn","baseFor","baseForOwnRight","baseForRight","baseFunctions","isFunction","baseGet","path","castPath","toKey","baseGetAllKeys","symbolsFunc","baseGetTag","symToStringTag","getRawTag","objectToString","baseGt","other","baseHas","baseHasIn","baseInRange","nativeMax","baseIntersection","arrays","othLength","othIndex","caches","maxLength","Infinity","seen","baseInverter","baseInvoke","parent","last","baseIsArguments","baseIsArrayBuffer","baseIsDate","baseIsEqual","baseIsEqualDeep","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","baseIsMap","baseIsMatch","matchData","noCustomizer","srcValue","baseIsNative","isMasked","reIsNative","toSource","baseIsRegExp","baseIsSet","baseIsTypedArray","isLength","baseIteratee","identity","baseMatchesProperty","baseMatches","baseKeys","isPrototype","nativeKeys","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","isArrayLike","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","baseMergeDeep","newValue","safeGet","mergeFunc","isTyped","isArrayLikeObject","cloneTypedArray","isPlainObject","toPlainObject","baseNth","baseOrderBy","orders","getIteratee","compareMultiple","basePick","basePickBy","baseSet","basePropertyDeep","basePullAll","indexOf","basePullAt","indexes","previous","baseUnset","nativeFloor","nativeRandom","baseRange","nativeCeil","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","nested","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","low","high","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","symbolToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","actions","action","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castSlice","buffer","allocUnsafe","cloneArrayBuffer","arrayBuffer","byteLength","Uint8Array","cloneDataView","dataView","byteOffset","cloneRegExp","regexp","cloneSymbol","symbol","symbolValueOf","typedArray","compareAscending","valIsDefined","valIsReflexive","objCriteria","criteria","othCriteria","ordersLength","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","getSymbolsIn","createAggregator","initializer","createAssigner","assigner","sources","guard","isIterateeCall","createBaseEach","iterable","createBaseFor","createBind","wrapper","Ctor","isBind","createCtor","createCaseFirst","methodName","trailing","createCompounder","callback","words","deburr","replace","thisBinding","baseCreate","createCurry","arity","getHolder","createRecurry","createHybrid","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","reverse","getFuncName","funcName","getData","isLaziable","plant","partialsRight","holdersRight","argPos","ary","holdersCount","newHolders","isBindKey","reorder","isFlip","isAry","createInverter","toIteratee","createMathOperation","operator","defaultValue","createOver","arrayFunc","createPadding","chars","charsLength","createPartial","createRange","toFinite","createRelationalOperation","toNumber","wrapFunc","isCurry","newHoldersRight","newPartials","newPartialsRight","newData","setData","setWrapToString","createRound","precision","nativeIsFinite","pair","createToPairs","createWrap","mergeData","baseSetData","customDefaultsAssignIn","objectProto","customDefaultsMerge","customOmitClone","isPartial","arrValue","othValue","compared","message","convert","objProps","objLength","skipCtor","objCtor","othCtor","flatten","realNames","otherFunc","isKeyable","getNative","isOwn","unmasked","nativeObjectToString","transforms","getWrapDetails","hasPath","hasFunc","input","getPrototype","insertWrapDetails","details","spreadableSymbol","maskSrcKey","srcBitmask","newBitmask","isCombo","otherArgs","oldArray","reference","updateWrapDetails","shortOut","count","lastCalled","stamp","nativeNow","remaining","rand","funcToString","chunk","compact","drop","dropRight","dropRightWhile","dropWhile","fill","findIndex","findLastIndex","flattenDeep","flattenDepth","fromPairs","head","initial","separator","nativeJoin","lastIndexOf","nth","pullAll","pullAllBy","pullAllWith","remove","nativeReverse","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","sortedUniq","sortedUniqBy","tail","take","takeRight","takeRightWhile","takeWhile","uniq","uniqBy","uniqWith","unzip","group","unzipWith","zipObject","zipObjectDeep","chain","tap","interceptor","wrapperChain","wrapperCommit","wrapperNext","toArray","wrapperToIterator","wrapperPlant","wrapperReverse","wrapped","wrapperValue","every","filter","flatMap","flatMapDeep","flatMapDepth","forEachRight","baseEachRight","isString","orderBy","reduce","reduceRight","reject","negate","sample","sampleSize","shuffle","some","after","before","curry","curryRight","debounce","invokeFunc","time","lastArgs","lastThis","lastInvokeTime","leadingEdge","timerId","timerExpired","leading","remainingWait","timeSinceLastCall","lastCallTime","timeSinceLastInvoke","timeWaiting","maxing","maxWait","shouldInvoke","now","trailingEdge","cancel","clearTimeout","flush","debounced","isInvoking","flip","memoize","resolver","memoized","Cache","once","rest","spread","throttle","unary","partial","castArray","cloneWith","cloneDeep","cloneDeepWith","conformsTo","isBoolean","isElement","isEmpty","isEqual","isEqualWith","isError","isFinite","isInteger","isMatch","isMatchWith","isNumber","isNative","isMaskable","Error","isNull","isNil","objectCtorString","isSafeInteger","isUndefined","isWeakMap","isWeakSet","symIterator","remainder","isBinary","toSafeInteger","properties","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","functions","functionsIn","mapKeys","mapValues","omitBy","pickBy","prop","setWith","isArrLike","unset","update","updateWith","valuesIn","clamp","inRange","floating","temp","capitalize","upperFirst","toLowerCase","endsWith","position","escape","escapeRegExp","pad","strLength","padEnd","padStart","radix","nativeParseInt","repeat","limit","startsWith","template","settings","templateSettings","assignInWith","isEscaping","isEvaluating","imports","importsKeys","importsValues","interpolate","reDelimiters","evaluate","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","variable","attempt","toLower","toUpper","toUpperCase","trim","trimEnd","trimStart","truncate","omission","search","substring","newEnd","unescape","pattern","cond","conforms","constant","defaultTo","matches","matchesProperty","mixin","methodNames","noConflict","oldDash","noop","nthArg","propertyOf","stubArray","stubFalse","stubObject","stubString","stubTrue","times","toPath","uniqueId","prefix","idCounter","maxBy","mean","meanBy","minBy","sum","sumBy","defaults","pick","Date","arrayProto","funcProto","coreJsData","Buffer","objectCreate","isConcatSpreadable","toStringTag","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeGetSymbols","nativeIsBuffer","DataView","Promise","Set","WeakMap","metaMap","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","baseSetToString","castRest","ArrayBuffer","resolve","ctorString","quote","subString","difference","differenceBy","differenceWith","intersection","mapped","intersectionBy","intersectionWith","pull","pullAt","union","unionBy","unionWith","without","xor","xorBy","xorWith","zip","zipWith","wrapperAt","countBy","find","findLast","groupBy","invokeMap","keyBy","partition","sortBy","bind","bindKey","defer","delay","overArgs","funcsLength","partialRight","rearg","gt","gte","lte","assignIn","assignWith","at","propsIndex","propsLength","defaultsDeep","mergeWith","invert","invertBy","invoke","omit","toPairs","toPairsIn","camelCase","word","kebabCase","lowerCase","lowerFirst","snakeCase","startCase","upperCase","bindAll","flow","flowRight","method","methodOf","over","overEvery","overSome","range","rangeRight","augend","addend","divide","dividend","divisor","multiply","multiplier","multiplicand","round","subtract","minuend","subtrahend","entriesIn","extendWith","each","eachRight","first","VERSION","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","commit","toJSON","defaultSetTimout","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","runClearTimeout","marker","cachedClearTimeout","cleanUpNextTick","draining","currentQueue","queue","queueIndex","drainQueue","timeout","len","run","Item","nextTick","title","browser","env","argv","versions","on","addListener","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","cwd","chdir","umask","setImmediate","task","tasksByHandle","nextHandle","registerImmediate","clearImmediate","handle","runIfPresent","currentlyRunningATask","doc","attachTo","postMessage","importScripts","postMessageIsAsynchronous","oldOnMessage","onmessage","messagePrefix","onGlobalMessage","event","attachEvent","MessageChannel","channel","port1","port2","html","script","onreadystatechange","Timeout","clearFn","_id","_clearFn","scope","setInterval","clearInterval","unref","ref","enroll","item","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","active","_onTimeout","injectStyle","ssrContext","normalizeComponent","__vue_styles__","Component","rawScriptExports","compiledTemplate","functionalTemplate","injectStyles","scopeId","moduleIdentifier","esModule","scriptExports","render","staticRenderFns","_compiled","functional","_scopeId","hook","$vnode","__VUE_SSR_CONTEXT__","_registeredComponents","_ssrRegister","existing","beforeCreate","_injectStyles","h","_vm","_h","$createElement","_c","_self","staticClass","isShow","_v","esExports","isUndef","v","isDef","isTrue","isFalse","isPrimitive","_toString","isValidArrayIndex","isPromise","then","catch","makeMap","str","expectsLowerCase","list","arr","hasOwn","cached","polyfillBind","boundFn","_length","nativeBind","ret","to","_from","res","looseEqual","isObjectA","isObjectB","isArrayA","isArrayB","getTime","keysA","keysB","looseIndexOf","called","isReserved","parsePath","bailRE","segments","pushTarget","targetStack","Dep","popTarget","createTextVNode","VNode","cloneVNode","cloned","children","text","elm","componentOptions","asyncFactory","ns","isStatic","isComment","fnContext","fnOptions","fnScopeId","asyncMeta","isCloned","toggleObserving","shouldObserve","protoAugment","__proto__","copyAugment","observe","asRootData","ob","__ob__","Observer","isServerRendering","_isVue","vmCount","defineReactive$$1","customSetter","shallow","dep","childOb","depend","dependArray","newVal","notify","del","from","toVal","fromVal","hasSymbol","Reflect","ownKeys","mergeDataOrFn","parentVal","childVal","instanceData","defaultData","mergeHook","dedupeHooks","hooks","mergeAssets","normalizeProps","camelize","normalizeInject","inject","normalized","normalizeDirectives","dirs","directives","def$$1","mergeOptions","child","mergeField","strat","strats","defaultStrat","_base","extends","mixins","resolveAsset","warnMissing","assets","camelizedId","PascalCaseId","validateProp","propOptions","propsData","absent","booleanIndex","getTypeIndex","Boolean","hyphenate","stringIndex","getPropDefaultValue","prevShouldObserve","$options","_props","getType","isSameType","expectedTypes","handleError","err","info","cur","$parent","errorCaptured","capture","globalHandleError","invokeWithErrorHandling","handler","_handled","config","errorHandler","logError","inBrowser","inWeex","console","error","flushCallbacks","pending","copies","callbacks","cb","_resolve","timerFunc","traverse","_traverse","seenObjects","isA","isFrozen","depId","createFnInvoker","fns","invoker","arguments$1","updateListeners","oldOn","remove$$1","createOnceHandler","old","normalizeEvent","passive","params","mergeVNodeHook","hookKey","wrappedHook","oldHook","merged","extractPropsFromVNodeData","altKey","checkProp","hash","preserve","simpleNormalizeChildren","normalizeChildren","normalizeArrayChildren","isTextNode","node","nestedIndex","shift","_isVList","initProvide","provide","_provided","initInjections","resolveInject","provideKey","provideDefault","resolveSlots","slots","slot","name$1","isWhitespace","normalizeScopedSlots","normalSlots","prevSlots","hasNormalSlots","isStable","$stable","$key","_normalized","emptyObject","$hasNormal","key$1","normalizeScopedSlot","key$2","proxyNormalSlot","proxy","renderList","renderSlot","fallback","bindObject","nodes","scopedSlotFn","$scopedSlots","$slots","resolveFilter","isKeyNotMatch","expect","actual","checkKeyCodes","eventKeyCode","builtInKeyCode","eventKeyName","builtInKeyName","mappedKeyCode","keyCodes","bindObjectProps","asProp","isSync","isReservedAttribute","mustUseProp","domProps","camelizedKey","hyphenatedKey","$event","renderStatic","isInFor","_staticTrees","tree","_renderProxy","markStatic","markOnce","isOnce","markStaticNode","bindObjectListeners","ours","resolveScopedSlots","hasDynamicKeys","contentHashKey","bindDynamicKeys","baseObj","prependModifier","installRenderHelpers","_o","_n","_s","_l","_q","_m","_f","_b","_e","createEmptyVNode","_u","_g","_d","_p","FunctionalRenderContext","contextVm","this$1","_original","isCompiled","needNormalization","injections","scopedSlots","createFunctionalComponent","mergeProps","renderContext","cloneAndMarkFunctionalResult","vnodes","createComponent","baseCtor","cid","resolveAsyncComponent","createAsyncPlaceholder","resolveConstructorOptions","model","transformModel","nativeOn","abstract","installComponentHooks","createComponentInstanceForVnode","_isComponent","_parentVnode","inlineTemplate","hooksToMerge","toMerge","componentVNodeHooks","_merged","mergeHook$1","f1","f2","normalizationType","alwaysNormalize","ALWAYS_NORMALIZE","_createElement","SIMPLE_NORMALIZE","getTagNamespace","isReservedTag","parsePlatformTagName","pre","applyNS","registerDeepBindings","force","class","initRender","_vnode","parentVnode","_renderChildren","parentData","_parentListeners","ensureCtor","comp","base","errorComp","resolved","owner","currentRenderingInstance","owners","loading","loadingComp","sync","timerLoading","timerTimeout","forceRender","renderCompleted","$forceUpdate","reason","component","isAsyncPlaceholder","getFirstComponentChild","initEvents","_events","_hasHookEvent","updateComponentListeners","remove$1","$off","_target","onceHandler","oldListeners","setActiveInstance","prevActiveInstance","activeInstance","initLifecycle","$children","$root","$refs","_watcher","_inactive","_directInactive","_isMounted","_isDestroyed","_isBeingDestroyed","mountComponent","hydrating","callHook","updateComponent","_update","_render","Watcher","updateChildComponent","renderChildren","newScopedSlots","oldScopedSlots","hasDynamicScopedSlot","needsForceUpdate","$attrs","$listeners","propKeys","_propKeys","isInInactiveTree","activateChildComponent","direct","deactivateChildComponent","handlers","$emit","resetSchedulerState","activatedChildren","waiting","flushing","flushSchedulerQueue","currentFlushTimestamp","getNow","watcher","activatedQueue","updatedQueue","callActivatedHooks","callUpdatedHooks","devtools","queueActivatedComponent","queueWatcher","sourceKey","sharedPropertyDefinition","initState","_watchers","opts","initProps","initMethods","initData","_data","initComputed","watch","nativeWatch","initWatch","propsOptions","isRoot","watchers","_computedWatchers","isSSR","userDef","computedWatcherOptions","defineComputed","shouldCache","createComputedGetter","createGetterInvoker","dirty","createWatcher","expOrFn","$watch","initInternalComponent","vnodeComponentOptions","_componentTag","super","superOptions","modifiedOptions","resolveModifiedOptions","extendOptions","components","modified","latest","sealed","sealedOptions","_init","initUse","use","plugin","installedPlugins","_installedPlugins","unshift","initMixin$1","initExtend","Super","SuperId","cachedCtors","_Ctor","Sub","initProps$1","initComputed$1","ASSET_TYPES","Comp","initAssetRegisters","definition","getComponentName","pruneCache","keepAliveInstance","cachedNode","pruneCacheEntry","cached$$1","genClassForVnode","parentNode","childNode","mergeClassData","renderClass","dynamicClass","stringifyClass","stringifyArray","stringifyObject","stringified","isSVG","isUnknownElement","unknownElementCache","HTMLUnknownElement","HTMLElement","query","selected","querySelector","createElement$1","tagName","multiple","setAttribute","createElementNS","namespace","namespaceMap","createTextNode","createComment","insertBefore","newNode","referenceNode","nextSibling","setTextContent","textContent","setStyleScope","registerRef","isRemoval","refs","refInFor","sameVnode","sameInputType","typeA","typeB","isTextInputType","createKeyToOldIdx","beginIdx","endIdx","updateDirectives","oldVnode","oldDir","isCreate","emptyNode","isDestroy","oldDirs","normalizeDirectives$1","newDirs","dirsWithInsert","dirsWithPostpatch","oldValue","oldArg","callHook$1","componentUpdated","inserted","callInsert","modifiers","emptyModifiers","getRawDirName","rawName","updateAttrs","inheritAttrs","oldAttrs","setAttr","isIE","isEdge","isXlink","removeAttributeNS","xlinkNS","getXlinkProp","isEnumeratedAttr","removeAttribute","baseSetAttr","isBooleanAttr","isFalsyAttrValue","convertEnumeratedValue","setAttributeNS","isIE9","__ieph","blocker","stopImmediatePropagation","updateClass","oldData","cls","transitionClass","_transitionClasses","_prevClass","parseFilters","exp","pushFilter","filters","lastFilterIndex","prev","expression","inSingle","inDouble","inTemplateString","inRegex","curly","square","paren","validDivisionCharRE","wrapFilter","baseWarn","msg","pluckModuleFunction","addProp","dynamic","rangeSetItem","plain","addAttr","dynamicAttrs","addRawAttr","attrsMap","attrsList","addDirective","isDynamicArg","prependModifierMarker","addHandler","important","warn","right","middle","events","native","nativeEvents","newHandler","getRawBindingAttr","rawAttrsMap","getBindingAttr","getStatic","dynamicValue","getAndRemoveAttr","staticValue","removeFromMap","getAndRemoveAttrByRegex","attr","genComponentModel","valueExpression","assignment","genAssignmentCode","parseModel","index$1","expressionPos","expressionEndPos","eof","isStringStart","parseString","parseBracket","inBracket","stringQuote","_warn","warn$1","genSelect","genCheckboxModel","genRadioModel","genDefaultModel","valueBinding","trueValueBinding","falseValueBinding","selectedVal","code","lazy","needCompositionGuard","RANGE_TOKEN","normalizeEvents","CHECKBOX_RADIO_TOKEN","change","createOnceHandler$1","target$1","remove$2","add$1","useMicrotaskFix","attachedTimestamp","original","_wrapper","currentTarget","timeStamp","ownerDocument","supportsPassive","updateDOMListeners","updateDOMProps","oldProps","childNodes","_value","strCur","shouldUpdateValue","innerHTML","svgContainer","svg","firstChild","checkVal","composing","isNotInFocusAndDirty","isDirtyWithModifiers","notInFocus","activeElement","_vModifiers","normalizeStyleData","normalizeStyleBinding","staticStyle","bindingStyle","parseStyleText","getStyle","checkChild","styleData","updateStyle","oldStaticStyle","oldStyleBinding","normalizedStyle","oldStyle","newStyle","setProp","addClass","classList","whitespaceRE","getAttribute","removeClass","tar","resolveTransition","css","autoCssTransition","nextFrame","raf","addTransitionClass","transitionClasses","removeTransitionClass","whenTransitionEnds","expectedType","getTransitionInfo","propCount","TRANSITION","transitionEndEvent","animationEndEvent","ended","onEnd","styles","getComputedStyle","transitionDelays","transitionProp","transitionDurations","transitionTimeout","getTimeout","animationDelays","animationProp","animationDurations","animationTimeout","ANIMATION","hasTransform","transformRE","delays","durations","toMs","Number","enter","toggleDisplay","_leaveCb","cancelled","transition","_enterCb","enterClass","enterToClass","enterActiveClass","appearClass","appearToClass","appearActiveClass","beforeEnter","afterEnter","enterCancelled","beforeAppear","appear","afterAppear","appearCancelled","transitionNode","isAppear","isRootInsert","startClass","activeClass","toClass","beforeEnterHook","enterHook","afterEnterHook","enterCancelledHook","explicitEnterDuration","expectsCSS","userWantsControl","getHookArgumentsLength","show","pendingNode","_pending","isValidDuration","leave","rm","performLeave","beforeLeave","leaveClass","leaveActiveClass","leaveToClass","explicitLeaveDuration","afterLeave","leaveCancelled","delayLeave","invokerFns","_enter","setSelected","actuallySetSelected","isMultiple","option","selectedIndex","hasNoMatchingOption","onCompositionStart","onCompositionEnd","trigger","createEvent","initEvent","dispatchEvent","locateNode","getRealChild","compOptions","extractTransitionData","rawChild","hasParentTransition","isSameChild","oldChild","callPendingCbs","_moveCb","recordPosition","newPos","applyTranslation","oldPos","dx","dy","moved","WebkitTransform","transitionDuration","parseText","delimiters","tagRE","buildRegex","defaultTagRE","tokenValue","tokens","rawTokens","transformNode","classBinding","genData","transformNode$1","styleBinding","genData$1","decodeAttr","shouldDecodeNewlines","re","encodedAttrWithNewLines","encodedAttr","decodingMap","parseHTML","advance","parseEndTag","lowerCasedTagName","lowerCasedTag","lastTag","expectHTML","isUnaryTag$$1","isUnaryTag","no","canBeLeftOpenTag$$1","canBeLeftOpenTag","isPlainTextElement","endTagLength","stackedTag","reStackedTag","reCache","rest$1","all","endTag","shouldIgnoreFirstNewline","textEnd","comment","commentEnd","shouldKeepComment","conditionalComment","conditionalEnd","doctypeMatch","doctype","endTagMatch","curIndex","startTagMatch","startTagOpen","startTagClose","dynamicArgAttribute","attribute","unarySlash","isNonPhrasingTag","shouldDecodeNewlinesForHref","createASTElement","makeAttrsMap","parse","closeElement","element","trimEndingWhitespace","inVPre","processed","processElement","if","elseif","else","addIfCondition","block","currentParent","forbidden","processIfConditions","slotScope","slotTarget","platformIsPreTag","inPre","postTransforms","lastNode","warn$2","isPreTag","platformMustUseProp","platformGetTagNamespace","maybeComponent","preTransforms","preserveWhitespace","whitespaceOption","whitespace","comments","outputSourceRange","start$1","guardIESVGBug","isForbiddenTag","processPre","processRawAttrs","processFor","processIf","processOnce","end$1","isTextTag","decodeHTMLCached","lineBreakRE","whitespaceRE$1","processKey","processRef","processSlotContent","processSlotOutlet","processComponent","processAttrs","checkInFor","parseFor","inMatch","forAliasRE","for","alias","stripParensRE","iteratorMatch","forIteratorRE","iterator1","iterator2","findPrevElement","condition","ifConditions","slotTargetDynamic","slotBinding","slotRE","getSlotName","emptySlotScopeToken","slotBinding$1","ref$1","dynamic$1","slotContainer","dynamicArgRE","slotName","syncGen","isDynamic","dirRE","hasBindings","parseModifiers","modifierRE","bindRE","camel","onRE","argMatch","argRE","ieNSBug","ieNSPrefix","preTransformNode","typeBinding","ifCondition","ifConditionExtra","hasElse","elseIfCondition","branch0","cloneASTElement","branch1","branch2","optimize","isStaticKey","genStaticKeysCached","staticKeys","isPlatformReservedTag","markStatic$1","markStaticRoots","genStaticKeys$1","static","i$1","l$1","staticInFor","staticRoot","isBuiltInTag","isDirectChildOfTemplateFor","genHandlers","staticHandlers","dynamicHandlers","handlerCode","genHandler","isMethodPath","simplePathRE","isFunctionExpression","fnExpRE","isFunctionInvocation","fnInvokeRE","genModifierCode","modifierCode","genGuard","keyModifier","genKeyFilter","genFilterCode","keyVal","keyCode","keyName","keyNames","wrapListeners","bind$1","wrapData","generate","ast","state","CodegenState","genElement","staticProcessed","genStatic","onceProcessed","genOnce","forProcessed","genFor","ifProcessed","genIf","genSlot","genComponent","genData$2","genChildren","originalPreState","onceId","altGen","altEmpty","genIfConditions","conditions","genTernaryExp","altHelper","genDirectives","dataGenFns","genProps","genScopedSlots","genInlineTemplate","needRuntime","hasRuntime","gen","inlineRenderFns","containsSlotChild","needsKey","generatedSlots","genScopedSlot","isLegacySyntax","reverseProxy","checkSkip","altGenElement","altGenNode","el$1","normalizationType$1","getNormalizationType","genNode","needsNormalization","genComment","genText","transformSpecialNewlines","bind$$1","componentName","staticProps","dynamicProps","createFunction","errors","createCompileToFunctionFn","compile","compiled","fnGenErrors","getShouldDecode","href","div","getOuterHTML","outerHTML","container","cloneNode","freeze","camelizeRE","hyphenateRE","SSR_ATTR","LIFECYCLE_HOOKS","optionMergeStrategies","silent","productionTip","performance","warnHandler","ignoredElements","isReservedAttr","async","_lifecycleHooks","unicodeRegExp","hasProto","WXEnvironment","platform","weexPlatform","UA","navigator","userAgent","isIOS","isFF","_isServer","_Set","VUE_ENV","__VUE_DEVTOOLS_GLOBAL_HOOK__","subs","addSub","sub","removeSub","addDep","raw","prototypeAccessors","arrayMethods","observeArray","arrayKeys","walk","items","isUsingMicroTask","MutationObserver","counter","observer","textNode","characterData","once$$1","init","keepAlive","mountedNode","prepatch","insert","destroy","uid$2","isRenderWatcher","deep","user","deps","newDeps","depIds","newDepIds","cleanupDeps","tmp","teardown","uid$3","_uid","dataDef","propsDef","$delete","immediate","hookRE","$once","cbs","prevEl","prevVnode","restoreActiveInstance","__patch__","__vue__","patternTypes","KeepAlive","include","exclude","created","destroyed","mounted","builtInComponents","configDef","util","defineReactive","delete","observable","emptyStyle","acceptValue","isValidContentEditableValue","math","isHTMLTag","nodeOps","baseModules","klass","cssText","listDelimiter","propertyDelimiter","cssVarRE","importantRE","setProperty","normalizedName","normalize","vendorNames","capName","hasTransition","ontransitionend","onwebkittransitionend","onanimationend","onwebkitanimationend","requestAnimationFrame","activate","platformModules","patch","backend","emptyNodeAt","createRmCb","childElm","removeNode","createElm","insertedVnodeQueue","parentElm","refElm","ownerArray","setScope","createChildren","invokeCreateHooks","isReactivated","initComponent","reactivateComponent","pendingInsert","isPatchable","innerNode","ref$$1","ancestor","addVnodes","startIdx","invokeDestroyHook","removeVnodes","ch","removeAndInvokeRemoveHook","updateChildren","oldCh","newCh","removeOnly","oldKeyToIdx","idxInOld","vnodeToMove","oldStartIdx","newStartIdx","oldEndIdx","oldStartVnode","oldEndVnode","newEndIdx","newStartVnode","newEndVnode","canMove","patchVnode","findIdxInOld","hydrate","postpatch","invokeInsertHook","hasChildNodes","childrenMatch","fullInvoke","isRenderedModule","isInitialPatch","isRealElement","hasAttribute","oldElm","patchable","i$2","vmodel","_vOptions","prevOptions","curOptions","transition$$1","originalDisplay","__vOriginalDisplay","unbind","platformDirectives","transitionProps","isNotTextNode","isVShowDirective","Transition","_leaving","oldRawChild","delayedLeave","moveClass","TransitionGroup","beforeMount","kept","prevChildren","rawChildren","transitionData","removed","c$1","updated","hasMove","_reflow","offsetHeight","propertyName","_hasMove","platformComponents","decoder","regexEscapeRE","klass$1","style$1","he","decode","ncname","qnameCapture","isIgnoreNewlineTag","model$1","modules$1","directives$1","baseOptions","esc","tab","space","up","down","stop","prevent","ctrl","alt","baseDirectives","cloak","createCompiler","baseCompile","finalOptions","tips","tip","compileToFunctions","idToTemplate","mount","webpackPolyfill","deprecate"],"mappings":"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","file":"vue-directive-image-previewer.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"VueDirectiveImagePreviewer\"] = factory();\n\telse\n\t\troot[\"VueDirectiveImagePreviewer\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 41);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap c33107b1d41682e794d0","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"VueDirectiveImagePreviewer\"] = factory();\n\telse\n\t\troot[\"VueDirectiveImagePreviewer\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 41);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(8)(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\nvar hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar dP = __webpack_require__(4);\nvar createDesc = __webpack_require__(14);\nmodule.exports = __webpack_require__(1) ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(10);\nvar IE8_DOM_DEFINE = __webpack_require__(33);\nvar toPrimitive = __webpack_require__(27);\nvar dP = Object.defineProperty;\n\nexports.f = __webpack_require__(1) ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(34);\nvar defined = __webpack_require__(17);\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar store = __webpack_require__(24)('wks');\nvar uid = __webpack_require__(15);\nvar Symbol = __webpack_require__(0).Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\nvar core = module.exports = { version: '2.6.9' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(9);\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports) {\n\nmodule.exports = true;\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = __webpack_require__(38);\nvar enumBugKeys = __webpack_require__(18);\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports) {\n\nexports.f = {}.propertyIsEnumerable;\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\nvar id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\nvar g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports) {\n\n// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\n// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(0);\nvar core = __webpack_require__(7);\nvar ctx = __webpack_require__(53);\nvar hide = __webpack_require__(3);\nvar has = __webpack_require__(2);\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && has(exports, key)) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports) {\n\nmodule.exports = {};\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports) {\n\nexports.f = Object.getOwnPropertySymbols;\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar def = __webpack_require__(4).f;\nvar has = __webpack_require__(2);\nvar TAG = __webpack_require__(6)('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar shared = __webpack_require__(24)('keys');\nvar uid = __webpack_require__(15);\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar core = __webpack_require__(7);\nvar global = __webpack_require__(0);\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: __webpack_require__(11) ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports) {\n\n// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(17);\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(9);\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(0);\nvar core = __webpack_require__(7);\nvar LIBRARY = __webpack_require__(11);\nvar wksExt = __webpack_require__(29);\nvar defineProperty = __webpack_require__(4).f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\nexports.f = __webpack_require__(6);\n\n\n/***/ }),\n/* 30 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_typeof__ = __webpack_require__(46);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_typeof___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_typeof__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_extends__ = __webpack_require__(45);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_extends___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_extends__);\n\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nvar defaultBackgroundColor = 'rgba(0, 0, 0, 0.5)';\nvar percent = 0.8;\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n name: 'vue-directive-image-previewer',\n props: {\n // 整体wrap的z-index\n zIndex: {\n type: Number,\n default: 1\n },\n // 图片url\n src: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n // 背景mask样式,也可以是字符串,代表颜色\n background: {\n type: String || Object,\n default: defaultBackgroundColor\n },\n // 原始dom,也就是加上了指令的dom\n sourceDom: {},\n // 光标css\n cursor: {\n type: String,\n default: 'pointer'\n },\n // transition相关信息,包括delay,duration,func(timing function)\n animate: {\n type: Object,\n default: function _default() {\n return {\n duration: 500\n };\n }\n },\n maxWidth: { // 预览图的最大宽度\n type: [String, Number]\n },\n maxHeight: { // 预览图的最大高度\n type: [String, Number]\n },\n previewSize: { // 预览图与原图的比例\n type: [String, Number]\n }\n },\n data: function data() {\n return {\n isShow: false,\n // 图片尺寸信息\n pictureSize: {},\n // 图片样式\n imgStyle: {},\n key: 'image-previewer-' + new Date().valueOf(),\n status: '' // 'opening', 'opened', 'closing', 'closed'\n };\n },\n\n methods: {\n init: function init() {\n this.imgStyle.cursor = this.cursor;\n },\n close: function close() {\n var _this = this;\n\n this.setPictureBegin();\n this.isShow = false;\n setTimeout(function () {\n _this.$emit('close');\n }, this.animate.duration + this.animate.delay);\n },\n open: function open() {\n this.isShow = true;\n this.setPictureSize();\n },\n\n // 拼装transition信息\n handleTransition: function handleTransition(_ref) {\n var duration = _ref.duration,\n delay = _ref.delay,\n func = _ref.func;\n\n return (duration || 0) + 'ms ' + (delay || 0) + 'ms ' + (func || '');\n },\n\n // 设置展示完成时的状态\n setPictureSize: function setPictureSize() {\n var result = {};\n var picture = this.$refs.picture;\n var pictureRatio = picture.naturalWidth / picture.naturalHeight;\n var windowRatio = window.innerWidth / window.innerHeight;\n if (pictureRatio >= windowRatio) {\n var width = this.maxWidthComputed;\n result.width = parseInt(width);\n result.height = parseInt(width / pictureRatio);\n } else {\n var height = this.maxHeightComputed;\n result.height = parseInt(height);\n result.width = parseInt(height * pictureRatio);\n }\n result.top = (window.innerHeight - parseInt(result.height)) / 2;\n result.left = (window.innerWidth - parseInt(result.width)) / 2;\n this.pictureSize = result;\n },\n\n // 设置开始和结束时的状态(也就是挂载指令的元素的size信息)\n setPictureBegin: function setPictureBegin() {\n var rect = this.sourceDom.getBoundingClientRect();\n var width = rect.width,\n height = rect.height,\n top = rect.top,\n left = rect.left;\n\n this.pictureSize = { width: width, height: height, top: top, left: left };\n }\n },\n computed: {\n bgStyle: function bgStyle() {\n var backgroundStyle = typeof this.background === 'string' ? {\n backgroundColor: this.background\n } : __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_extends___default()({\n backgroundColor: defaultBackgroundColor\n }, this.background);\n backgroundStyle.transition = this.handleTransition(this.animate);\n return __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_extends___default()({ opacity: this.isShow ? '1' : '0' }, backgroundStyle);\n },\n maxWidthComputed: function maxWidthComputed() {\n var windowWidth = window.innerWidth;\n var result = '';\n switch (__WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_typeof___default()(this.maxWidth)) {\n case 'number':\n result = this.maxWidth;break;\n case 'string':\n result = /\\d+%$/.test(this.maxWidth) ? parseFloat(this.maxWidth) / 100 * windowWidth : parseFloat(this.maxWidth);break;\n default:\n result = windowWidth * percent;\n }\n if (typeof this.previewSize !== 'undefined') {\n result = Math.min(result, this.previewSize * this.pictureSize.width);\n }\n return result;\n },\n maxHeightComputed: function maxHeightComputed() {\n var windowHeight = window.innerHeight;\n var result = '';\n switch (__WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_typeof___default()(this.maxHeight)) {\n case 'number':\n result = this.maxHeight;break;\n case 'string':\n result = /\\d+%$/.test(this.maxHeight) ? parseFloat(this.maxHeight) / 100 * windowHeight : parseFloat(this.maxHeight);break;\n default:\n result = windowHeight * percent;\n }\n if (typeof this.previewSize !== 'undefined') {\n result = Math.min(result, this.previewSize * this.pictureSize.height);\n }\n return result;\n }\n },\n watch: {\n pictureSize: {\n deep: true,\n handler: function handler(val) {\n var _this2 = this;\n\n ['top', 'left', 'width', 'height'].forEach(function (key) {\n _this2.$set(_this2.imgStyle, key, val[key] + 'px');\n });\n this.$set(this.imgStyle, 'transition', this.handleTransition(this.animate));\n this.$set(this.imgStyle, 'cursor', this.cursor);\n }\n },\n cursor: function cursor(val) {\n this.imgStyle.cursor = val;\n }\n },\n created: function created() {\n this.init();\n },\n mounted: function mounted() {\n var _this3 = this;\n\n window.addEventListener('resize', function () {\n _this3.setPictureSize();\n });\n }\n});\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports) {\n\nvar toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(9);\nvar document = __webpack_require__(0).document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = !__webpack_require__(1) && !__webpack_require__(8)(function () {\n return Object.defineProperty(__webpack_require__(32)('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(31);\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar LIBRARY = __webpack_require__(11);\nvar $export = __webpack_require__(19);\nvar redefine = __webpack_require__(39);\nvar hide = __webpack_require__(3);\nvar Iterators = __webpack_require__(20);\nvar $iterCreate = __webpack_require__(57);\nvar setToStringTag = __webpack_require__(22);\nvar getPrototypeOf = __webpack_require__(64);\nvar ITERATOR = __webpack_require__(6)('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = __webpack_require__(10);\nvar dPs = __webpack_require__(61);\nvar enumBugKeys = __webpack_require__(18);\nvar IE_PROTO = __webpack_require__(23)('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = __webpack_require__(32)('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n __webpack_require__(55).appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = __webpack_require__(38);\nvar hiddenKeys = __webpack_require__(18).concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar has = __webpack_require__(2);\nvar toIObject = __webpack_require__(5);\nvar arrayIndexOf = __webpack_require__(52)(false);\nvar IE_PROTO = __webpack_require__(23)('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(3);\n\n\n/***/ }),\n/* 40 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_vue__ = __webpack_require__(84);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__imagePreviewer_vue__ = __webpack_require__(81);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_lodash__ = __webpack_require__(77);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_lodash___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_lodash__);\n/**\n * Created by wszxdhr on 2017/9/14.\n */\n\n\n\nvar ImagePreviewer = __WEBPACK_IMPORTED_MODULE_0_vue__[\"a\" /* default */].extend(__WEBPACK_IMPORTED_MODULE_1__imagePreviewer_vue__[\"a\" /* default */]);\n\n// import {getRect} from './modules/common.js'\n// import windowInfo from './modules/windowInfo'\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n install: function install(Vue, options) {\n options = options || {};\n options.copy = typeof options.copy === 'boolean' ? options.copy : true;\n // init\n Vue.directive('image-preview', function (el, binding, vnode) {\n binding.value = binding.value || {};\n var _binding$value = binding.value,\n src = _binding$value.src,\n background = _binding$value.background,\n copy = _binding$value.copy,\n cursor = _binding$value.cursor,\n animate = _binding$value.animate,\n zIndex = _binding$value.zIndex,\n maxWidth = _binding$value.maxWidth,\n maxHeight = _binding$value.maxHeight,\n previewSize = _binding$value.previewSize;\n // 移除旧的事件绑定\n\n if (el._clickHandler) {\n el.removeEventListener('click', el._clickHandler);\n }\n el._clickHandler = handleClick({\n vnode: vnode,\n src: src,\n background: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2_lodash__[\"merge\"])(options.background || {}, background || {}),\n copy: typeof copy === 'boolean' ? copy : options.copy,\n cursor: cursor || options.cursor,\n animate: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2_lodash__[\"merge\"])(options.animate || {}, animate || {}),\n zIndex: typeof zIndex === 'number' ? zIndex : options.zIndex,\n maxWidth: maxWidth !== undefined ? maxWidth : options.maxWidth,\n maxHeight: maxHeight !== undefined ? maxHeight : options.maxHeight,\n previewSize: previewSize !== undefined ? previewSize : options.previewSize\n });\n el.addEventListener('click', el._clickHandler);\n });\n }\n});\n\nvar handleClose = function handleClose(vm, sourceDom, copy) {\n return function () {\n if (!copy) {\n sourceDom.style.visibility = '';\n }\n vm.$destroy();\n document.body.removeChild(vm.$el);\n };\n};\n\nvar handleClick = function handleClick(_ref) {\n var vnode = _ref.vnode,\n bindingSrc = _ref.src,\n background = _ref.background,\n _ref$copy = _ref.copy,\n copy = _ref$copy === undefined ? true : _ref$copy,\n _ref$cursor = _ref.cursor,\n cursor = _ref$cursor === undefined ? 'pointer' : _ref$cursor,\n _ref$animate = _ref.animate,\n animate = _ref$animate === undefined ? { duration: 500 } : _ref$animate,\n zIndex = _ref.zIndex,\n maxWidth = _ref.maxWidth,\n maxHeight = _ref.maxHeight,\n previewSize = _ref.previewSize;\n\n return function (evt) {\n var instance = new ImagePreviewer();\n var src = bindingSrc || vnode.data.attrs.src || vnode.componentInstance.src;\n var rect = evt.target.getBoundingClientRect();\n var width = rect.width,\n height = rect.height,\n top = rect.top,\n left = rect.left;\n\n instance.pictureSize = { width: width, height: height, top: top, left: left };\n maxWidth !== undefined && (instance.maxWidth = maxWidth);\n maxHeight !== undefined && (instance.maxHeight = maxHeight);\n previewSize !== undefined && (instance.previewSize = previewSize);\n instance.cursor = cursor;\n instance.animate = animate;\n instance.zIndex = zIndex;\n instance.vm = instance.$mount();\n instance.vm.src = [src];\n instance.vm.background = background;\n instance.dom = instance.vm.$el;\n instance.sourceDom = evt.target;\n if (!copy) {\n evt.target.style.visibility = 'hidden';\n }\n instance.vm.$on('close', handleClose(instance.vm, evt.target, copy));\n instance.vm.$nextTick(function () {\n setTimeout(function () {\n instance.vm.open();\n }, 0);\n });\n document.body.appendChild(instance.dom);\n };\n};\n\n/***/ }),\n/* 41 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_index__ = __webpack_require__(40);\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__WEBPACK_IMPORTED_MODULE_0__src_index__[\"a\" /* default */]);\n\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \"default\": __webpack_require__(47), __esModule: true };\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \"default\": __webpack_require__(48), __esModule: true };\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \"default\": __webpack_require__(49), __esModule: true };\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _assign = __webpack_require__(42);\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _assign2.default || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _iterator = __webpack_require__(44);\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nvar _symbol = __webpack_require__(43);\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nvar _typeof = typeof _symbol2.default === \"function\" && typeof _iterator2.default === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = typeof _symbol2.default === \"function\" && _typeof(_iterator2.default) === \"symbol\" ? function (obj) {\n return typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n} : function (obj) {\n return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n};\n\n/***/ }),\n/* 47 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(69);\nmodule.exports = __webpack_require__(7).Object.assign;\n\n\n/***/ }),\n/* 48 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(72);\n__webpack_require__(70);\n__webpack_require__(73);\n__webpack_require__(74);\nmodule.exports = __webpack_require__(7).Symbol;\n\n\n/***/ }),\n/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(71);\n__webpack_require__(75);\nmodule.exports = __webpack_require__(29).f('iterator');\n\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports) {\n\nmodule.exports = function () { /* empty */ };\n\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = __webpack_require__(5);\nvar toLength = __webpack_require__(67);\nvar toAbsoluteIndex = __webpack_require__(66);\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// optional / simple context binding\nvar aFunction = __webpack_require__(50);\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// all enumerable object keys, includes symbols\nvar getKeys = __webpack_require__(12);\nvar gOPS = __webpack_require__(21);\nvar pIE = __webpack_require__(13);\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar document = __webpack_require__(0).document;\nmodule.exports = document && document.documentElement;\n\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.2.2 IsArray(argument)\nvar cof = __webpack_require__(31);\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar create = __webpack_require__(36);\nvar descriptor = __webpack_require__(14);\nvar setToStringTag = __webpack_require__(22);\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n__webpack_require__(3)(IteratorPrototype, __webpack_require__(6)('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar META = __webpack_require__(15)('meta');\nvar isObject = __webpack_require__(9);\nvar has = __webpack_require__(2);\nvar setDesc = __webpack_require__(4).f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !__webpack_require__(8)(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = __webpack_require__(1);\nvar getKeys = __webpack_require__(12);\nvar gOPS = __webpack_require__(21);\nvar pIE = __webpack_require__(13);\nvar toObject = __webpack_require__(26);\nvar IObject = __webpack_require__(34);\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || __webpack_require__(8)(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar dP = __webpack_require__(4);\nvar anObject = __webpack_require__(10);\nvar getKeys = __webpack_require__(12);\n\nmodule.exports = __webpack_require__(1) ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar pIE = __webpack_require__(13);\nvar createDesc = __webpack_require__(14);\nvar toIObject = __webpack_require__(5);\nvar toPrimitive = __webpack_require__(27);\nvar has = __webpack_require__(2);\nvar IE8_DOM_DEFINE = __webpack_require__(33);\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = __webpack_require__(1) ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = __webpack_require__(5);\nvar gOPN = __webpack_require__(37).f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_require__(2);\nvar toObject = __webpack_require__(26);\nvar IE_PROTO = __webpack_require__(23)('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(25);\nvar defined = __webpack_require__(17);\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(25);\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n\n/***/ }),\n/* 67 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.1.15 ToLength\nvar toInteger = __webpack_require__(25);\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar addToUnscopables = __webpack_require__(51);\nvar step = __webpack_require__(58);\nvar Iterators = __webpack_require__(20);\nvar toIObject = __webpack_require__(5);\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = __webpack_require__(35)(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n/***/ }),\n/* 69 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.3.1 Object.assign(target, source)\nvar $export = __webpack_require__(19);\n\n$export($export.S + $export.F, 'Object', { assign: __webpack_require__(60) });\n\n\n/***/ }),\n/* 70 */\n/***/ (function(module, exports) {\n\n\n\n/***/ }),\n/* 71 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $at = __webpack_require__(65)(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\n__webpack_require__(35)(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n\n\n/***/ }),\n/* 72 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// ECMAScript 6 symbols shim\nvar global = __webpack_require__(0);\nvar has = __webpack_require__(2);\nvar DESCRIPTORS = __webpack_require__(1);\nvar $export = __webpack_require__(19);\nvar redefine = __webpack_require__(39);\nvar META = __webpack_require__(59).KEY;\nvar $fails = __webpack_require__(8);\nvar shared = __webpack_require__(24);\nvar setToStringTag = __webpack_require__(22);\nvar uid = __webpack_require__(15);\nvar wks = __webpack_require__(6);\nvar wksExt = __webpack_require__(29);\nvar wksDefine = __webpack_require__(28);\nvar enumKeys = __webpack_require__(54);\nvar isArray = __webpack_require__(56);\nvar anObject = __webpack_require__(10);\nvar isObject = __webpack_require__(9);\nvar toObject = __webpack_require__(26);\nvar toIObject = __webpack_require__(5);\nvar toPrimitive = __webpack_require__(27);\nvar createDesc = __webpack_require__(14);\nvar _create = __webpack_require__(36);\nvar gOPNExt = __webpack_require__(63);\nvar $GOPD = __webpack_require__(62);\nvar $GOPS = __webpack_require__(21);\nvar $DP = __webpack_require__(4);\nvar $keys = __webpack_require__(12);\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n __webpack_require__(37).f = gOPNExt.f = $getOwnPropertyNames;\n __webpack_require__(13).f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !__webpack_require__(11)) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(3)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n\n\n/***/ }),\n/* 73 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(28)('asyncIterator');\n\n\n/***/ }),\n/* 74 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(28)('observable');\n\n\n/***/ }),\n/* 75 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(68);\nvar global = __webpack_require__(0);\nvar hide = __webpack_require__(3);\nvar Iterators = __webpack_require__(20);\nvar TO_STRING_TAG = __webpack_require__(6)('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n 'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n var NAME = DOMIterables[i];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = Iterators.Array;\n}\n\n\n/***/ }),\n/* 76 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n/* 77 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global, module) {var __WEBPACK_AMD_DEFINE_RESULT__;/**\n * @license\n * Lodash \n * Copyright OpenJS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(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.15';\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\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 and trailing whitespace. */\n var reTrim = /^\\s+|\\s+$/g,\n reTrimStart = /^\\s+/,\n reTrimEnd = /\\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 /** 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 `_.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 `_.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 var index = -1;\n iteratees = arrayMap(iteratees.length ? iteratees : [identity], 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 (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 value = iteratee(value);\n\n var low = 0,\n high = array == null ? 0 : array.length,\n 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 // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\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 // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\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 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': 40 },\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', 40]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['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 '

' + func(text) + '

';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '

fred, barney, & pebbles

'\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('');\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 = value.replace(reTrim, '');\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('<%- value %>');\n * compiled({ 'value': '\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/imagePreviewer.vue","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/_cof.js\n// module id = 31\n// module chunks = 0","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/_dom-create.js\n// module id = 32\n// module chunks = 0","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/_ie8-dom-define.js\n// module id = 33\n// module chunks = 0","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/_iobject.js\n// module id = 34\n// module chunks = 0","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/_iter-define.js\n// module id = 35\n// module chunks = 0","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/_object-create.js\n// module id = 36\n// module chunks = 0","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/_object-gopn.js\n// module id = 37\n// module chunks = 0","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/_object-keys-internal.js\n// module id = 38\n// module chunks = 0","module.exports = require('./_hide');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/_redefine.js\n// module id = 39\n// module chunks = 0","/**\n * Created by wszxdhr on 2017/9/14.\n */\nimport Vue from 'vue'\nimport imagePreviewer from './imagePreviewer.vue'\nimport {merge} from 'lodash'\nconst ImagePreviewer = Vue.extend(imagePreviewer)\n\n// import {getRect} from './modules/common.js'\n// import windowInfo from './modules/windowInfo'\n\nexport default {\n install (Vue, options) {\n options = options || {}\n options.copy = typeof options.copy === 'boolean' ? options.copy : true\n // init\n Vue.directive('image-preview', function (el, binding, vnode) {\n binding.value = binding.value || {}\n let {src, background, copy, cursor, animate, zIndex, maxWidth, maxHeight, previewSize} = binding.value\n // 移除旧的事件绑定\n if (el._clickHandler) {\n el.removeEventListener('click', el._clickHandler)\n }\n el._clickHandler = handleClick({\n vnode,\n src,\n background: merge(options.background || {}, background || {}),\n copy: typeof copy === 'boolean' ? copy : options.copy,\n cursor: cursor || options.cursor,\n animate: merge(options.animate || {}, animate || {}),\n zIndex: typeof zIndex === 'number' ? zIndex : options.zIndex,\n maxWidth: maxWidth !== undefined ? maxWidth : options.maxWidth,\n maxHeight: maxHeight !== undefined ? maxHeight : options.maxHeight,\n previewSize: previewSize !== undefined ? previewSize : options.previewSize\n })\n el.addEventListener('click', el._clickHandler)\n })\n }\n}\n\nconst handleClose = (vm, sourceDom, copy) => {\n return () => {\n if (!copy) {\n sourceDom.style.visibility = ''\n }\n vm.$destroy()\n document.body.removeChild(vm.$el)\n }\n}\n\nconst handleClick = ({vnode, src: bindingSrc, background, copy = true, cursor = 'pointer', animate = {duration: 500}, zIndex, maxWidth, maxHeight, previewSize}) => {\n return (evt) => {\n let instance = new ImagePreviewer()\n let src = bindingSrc || vnode.data.attrs.src || vnode.componentInstance.src\n let rect = evt.target.getBoundingClientRect()\n let {width, height, top, left} = rect\n instance.pictureSize = {width: width, height: height, top: top, left: left};\n (maxWidth !== undefined) && (instance.maxWidth = maxWidth);\n (maxHeight !== undefined) && (instance.maxHeight = maxHeight);\n (previewSize !== undefined) && (instance.previewSize = previewSize)\n instance.cursor = cursor\n instance.animate = animate\n instance.zIndex = zIndex\n instance.vm = instance.$mount()\n instance.vm.src = [src]\n instance.vm.background = background\n instance.dom = instance.vm.$el\n instance.sourceDom = evt.target\n if (!copy) {\n evt.target.style.visibility = 'hidden'\n }\n instance.vm.$on('close', handleClose(instance.vm, evt.target, copy))\n instance.vm.$nextTick(() => {\n setTimeout(() => {\n instance.vm.open()\n }, 0)\n })\n document.body.appendChild(instance.dom)\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/index.js","import VueDirectiveImagePreviewer from '../src/index'\n\nexport default VueDirectiveImagePreviewer\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./example/publish.js\n// module id = 41\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/object/assign\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_babel-runtime@6.26.0@babel-runtime/core-js/object/assign.js\n// module id = 42\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/symbol\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_babel-runtime@6.26.0@babel-runtime/core-js/symbol.js\n// module id = 43\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/symbol/iterator\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_babel-runtime@6.26.0@babel-runtime/core-js/symbol/iterator.js\n// module id = 44\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\n\nvar _assign = require(\"../core-js/object/assign\");\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _assign2.default || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_babel-runtime@6.26.0@babel-runtime/helpers/extends.js\n// module id = 45\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\n\nvar _iterator = require(\"../core-js/symbol/iterator\");\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nvar _symbol = require(\"../core-js/symbol\");\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nvar _typeof = typeof _symbol2.default === \"function\" && typeof _iterator2.default === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = typeof _symbol2.default === \"function\" && _typeof(_iterator2.default) === \"symbol\" ? function (obj) {\n return typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n} : function (obj) {\n return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_babel-runtime@6.26.0@babel-runtime/helpers/typeof.js\n// module id = 46\n// module chunks = 0","require('../../modules/es6.object.assign');\nmodule.exports = require('../../modules/_core').Object.assign;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/fn/object/assign.js\n// module id = 47\n// module chunks = 0","require('../../modules/es6.symbol');\nrequire('../../modules/es6.object.to-string');\nrequire('../../modules/es7.symbol.async-iterator');\nrequire('../../modules/es7.symbol.observable');\nmodule.exports = require('../../modules/_core').Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/fn/symbol/index.js\n// module id = 48\n// module chunks = 0","require('../../modules/es6.string.iterator');\nrequire('../../modules/web.dom.iterable');\nmodule.exports = require('../../modules/_wks-ext').f('iterator');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/fn/symbol/iterator.js\n// module id = 49\n// module chunks = 0","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/_a-function.js\n// module id = 50\n// module chunks = 0","module.exports = function () { /* empty */ };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/_add-to-unscopables.js\n// module id = 51\n// module chunks = 0","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/_array-includes.js\n// module id = 52\n// module chunks = 0","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/_ctx.js\n// module id = 53\n// module chunks = 0","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/_enum-keys.js\n// module id = 54\n// module chunks = 0","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/_html.js\n// module id = 55\n// module chunks = 0","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/_is-array.js\n// module id = 56\n// module chunks = 0","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/_iter-create.js\n// module id = 57\n// module chunks = 0","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/_iter-step.js\n// module id = 58\n// module chunks = 0","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/_meta.js\n// module id = 59\n// module chunks = 0","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/_object-assign.js\n// module id = 60\n// module chunks = 0","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/_object-dps.js\n// module id = 61\n// module chunks = 0","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/_object-gopd.js\n// module id = 62\n// module chunks = 0","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/_object-gopn-ext.js\n// module id = 63\n// module chunks = 0","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/_object-gpo.js\n// module id = 64\n// module chunks = 0","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/_string-at.js\n// module id = 65\n// module chunks = 0","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/_to-absolute-index.js\n// module id = 66\n// module chunks = 0","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/_to-length.js\n// module id = 67\n// module chunks = 0","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/es6.array.iterator.js\n// module id = 68\n// module chunks = 0","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/es6.object.assign.js\n// module id = 69\n// module chunks = 0","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/es6.string.iterator.js\n// module id = 71\n// module chunks = 0","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/es6.symbol.js\n// module id = 72\n// module chunks = 0","require('./_wks-define')('asyncIterator');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/es7.symbol.async-iterator.js\n// module id = 73\n// module chunks = 0","require('./_wks-define')('observable');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/es7.symbol.observable.js\n// module id = 74\n// module chunks = 0","require('./es6.array.iterator');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar TO_STRING_TAG = require('./_wks')('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n 'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n var NAME = DOMIterables[i];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = Iterators.Array;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/_core-js@2.6.9@core-js/library/modules/web.dom.iterable.js\n// module id = 75\n// module chunks = 0","/**\n * @license\n * Lodash \n * Copyright OpenJS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(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.15';\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\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 and trailing whitespace. */\n var reTrim = /^\\s+|\\s+$/g,\n reTrimStart = /^\\s+/,\n reTrimEnd = /\\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 /** 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 `_.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 `_.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 var index = -1;\n iteratees = arrayMap(iteratees.length ? iteratees : [identity], 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 (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 value = iteratee(value);\n\n var low = 0,\n high = array == null ? 0 : array.length,\n 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 // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\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 // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\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 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': 40 },\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', 40]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['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 '

' + func(text) + '

';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '

fred, barney, & pebbles

'\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('');\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 = value.replace(reTrim, '');\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('<%- value %>');\n * compiled({ 'value': '