{"version":3,"sources":["webpack:///./node_modules/core-js/internals/function-bind-context.js","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/core/createError.js","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/core/enhanceError.js","webpack:///./src/components/global/TheUploadComponent.vue?d9b8","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/adapters/xhr.js","webpack:///./node_modules/vue-image-lightbox-carousel/src/components/VueImageLightboxCarousel.vue?2d95","webpack:///./node_modules/core-js/internals/to-offset.js","webpack:///./node_modules/core-js/internals/an-instance.js","webpack:///./node_modules/core-js/modules/es.typed-array.find-last-index.js","webpack:///./node_modules/vue-upload-multiple-image/src/components/VueUploadMultipleImage.vue?054c","webpack:///./node_modules/vue-image-lightbox-carousel/src/assets/loading.gif","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/core/InterceptorManager.js","webpack:///./node_modules/lodash/lodash.js","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/utils.js","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/axios.js","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/helpers/bind.js","webpack:///./src/components/global/TheUploadComponent.vue","webpack:///./node_modules/vue-upload-multiple-image/src/App.vue","webpack:///./node_modules/vue-upload-multiple-image/src/components/VueUploadMultipleImage.vue","webpack:///./node_modules/vue-image-lightbox-carousel/src/App.vue","webpack:///./node_modules/vue-image-lightbox-carousel/src/components/VueImageLightboxCarousel.vue","webpack:///node_modules/vue-image-lightbox-carousel/src/components/VueImageLightboxCarousel.vue","webpack:///./node_modules/vue-image-lightbox-carousel/src/components/VueImageLightboxCarousel.vue?a64c","webpack:///./node_modules/vue-image-lightbox-carousel/src/components/VueImageLightboxCarousel.vue?ab55","webpack:///node_modules/vue-image-lightbox-carousel/src/App.vue","webpack:///./node_modules/vue-image-lightbox-carousel/src/App.vue?cef8","webpack:///./node_modules/vue-image-lightbox-carousel/src/App.vue?23d1","webpack:///./node_modules/vue-image-lightbox-carousel/src/main.js","webpack:///node_modules/vue-upload-multiple-image/src/components/VueUploadMultipleImage.vue","webpack:///./node_modules/vue-upload-multiple-image/src/components/VueUploadMultipleImage.vue?0103","webpack:///./node_modules/vue-upload-multiple-image/src/components/VueUploadMultipleImage.vue?ba25","webpack:///node_modules/vue-upload-multiple-image/src/App.vue","webpack:///./node_modules/vue-upload-multiple-image/src/App.vue?e64c","webpack:///./node_modules/vue-upload-multiple-image/src/App.vue?8f7e","webpack:///./node_modules/vue-upload-multiple-image/src/main.js","webpack:///src/components/global/TheUploadComponent.vue","webpack:///./src/components/global/TheUploadComponent.vue?d894","webpack:///./src/components/global/TheUploadComponent.vue?7493","webpack:///./node_modules/core-js/modules/es.typed-array.set.js","webpack:///./node_modules/vue-image-lightbox-carousel/node_modules/swiper/dist/js/swiper.js","webpack:///./node_modules/core-js/internals/function-uncurry-this-clause.js","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/index.js","webpack:///./node_modules/core-js/internals/array-buffer-basic-detection.js","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack:///./node_modules/vue-popperjs/dist/js/vue-popper.js","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/core/settle.js","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/helpers/combineURLs.js","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/helpers/parseHeaders.js","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/defaults.js","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/helpers/cookies.js","webpack:///./node_modules/core-js/modules/es.typed-array.at.js","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/cancel/Cancel.js","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/cancel/CancelToken.js","webpack:///./node_modules/core-js/modules/es.typed-array.find-last.js","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/core/dispatchRequest.js","webpack:///./node_modules/core-js/internals/array-iteration-from-last.js","webpack:///./node_modules/core-js/modules/web.dom-exception.stack.js","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/core/transformData.js","webpack:///./node_modules/vue-upload-multiple-image/node_modules/is-buffer/index.js","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/helpers/buildURL.js","webpack:///./node_modules/core-js/internals/dom-exception-constants.js","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/helpers/spread.js","webpack:///./node_modules/vue-image-lightbox-carousel/node_modules/vue-awesome-swiper/dist/vue-awesome-swiper.js","webpack:///./node_modules/core-js/internals/object-get-prototype-of.js","webpack:///./node_modules/core-js/internals/correct-prototype-getter.js","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/core/Axios.js","webpack:///./node_modules/vue-upload-multiple-image/src/components/VueUploadMultipleImage.vue?5c95","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/cancel/isCancel.js","webpack:///./node_modules/core-js/internals/array-buffer-view-core.js","webpack:///./node_modules/core-js/internals/to-positive-integer.js"],"names":["uncurryThis","aCallable","NATIVE_BIND","bind","module","exports","fn","that","undefined","apply","arguments","enhanceError","message","config","code","request","response","error","Error","utils","settle","buildURL","parseHeaders","isURLSameOrigin","createError","Promise","resolve","reject","requestData","data","requestHeaders","headers","isFormData","XMLHttpRequest","auth","username","password","Authorization","btoa","open","method","toUpperCase","url","params","paramsSerializer","timeout","onreadystatechange","readyState","status","responseURL","indexOf","responseHeaders","getAllResponseHeaders","responseData","responseType","responseText","statusText","onerror","ontimeout","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","xsrfCookieName","read","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","e","onDownloadProgress","addEventListener","onUploadProgress","upload","cancelToken","promise","then","cancel","abort","send","toPositiveInteger","$RangeError","RangeError","it","BYTES","offset","isPrototypeOf","$TypeError","TypeError","Prototype","ArrayBufferViewCore","$findLastIndex","findLastIndex","aTypedArray","exportTypedArrayMethod","predicate","this","length","InterceptorManager","handlers","prototype","use","fulfilled","rejected","push","eject","id","h","VERSION","LARGE_ARRAY_SIZE","CORE_ERROR_TEXT","FUNC_ERROR_TEXT","INVALID_TEMPL_VAR_ERROR_TEXT","HASH_UNDEFINED","MAX_MEMOIZE_SIZE","PLACEHOLDER","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","LAZY_WHILE_FLAG","INFINITY","MAX_SAFE_INTEGER","MAX_INTEGER","NAN","MAX_ARRAY_LENGTH","MAX_ARRAY_INDEX","HALF_MAX_ARRAY_LENGTH","wrapFlags","argsTag","arrayTag","asyncTag","boolTag","dateTag","domExcTag","errorTag","funcTag","genTag","mapTag","numberTag","nullTag","objectTag","promiseTag","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","source","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrimStart","reWhitespace","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reForbiddenIdentifierChars","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsAstralRange","rsComboMarksRange","reComboHalfMarksRange","rsComboSymbolsRange","rsComboRange","rsDingbatRange","rsLowerRange","rsMathOpRange","rsNonCharRange","rsPunctuationRange","rsSpaceRange","rsUpperRange","rsVarRange","rsBreakRange","rsApos","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsModifier","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsZWJ","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","reOptMod","rsOptVar","rsOptJoin","join","rsOrdLower","rsOrdUpper","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","deburredLetters","htmlEscapes","htmlUnescapes","stringEscapes","freeParseFloat","parseFloat","freeParseInt","parseInt","freeGlobal","global","Object","freeSelf","self","root","Function","freeExports","nodeType","freeModule","moduleExports","freeProcess","process","nodeUtil","types","require","binding","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","isDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","func","thisArg","args","call","arrayAggregator","array","setter","iteratee","accumulator","index","value","arrayEach","arrayEachRight","arrayEvery","arrayFilter","resIndex","result","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","Array","arrayPush","values","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","asciiToArray","string","split","asciiWords","match","baseFindKey","collection","eachFunc","baseFindIndex","fromIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","object","basePropertyOf","baseReduce","baseSortBy","comparer","sort","current","baseTimes","n","baseToPairs","props","baseTrim","slice","trimmedEndIndex","replace","baseUnary","baseValues","cacheHas","cache","has","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","countHolders","placeholder","deburrLetter","escapeHtmlChar","escapeStringChar","chr","getValue","hasUnicode","test","hasUnicodeWord","iteratorToArray","iterator","next","done","mapToArray","map","size","overArg","transform","arg","replaceHolders","setToArray","set","setToPairs","strictLastIndexOf","stringSize","unicodeSize","stringToArray","unicodeToArray","charAt","unescapeHtmlChar","lastIndex","unicodeWords","runInContext","context","_","defaults","pick","Date","Math","String","arrayProto","funcProto","objectProto","coreJsData","funcToString","toString","hasOwnProperty","idCounter","maskSrcKey","uid","exec","keys","IE_PROTO","nativeObjectToString","objectCtorString","oldDash","reIsNative","Buffer","Symbol","Uint8Array","allocUnsafe","getPrototype","getPrototypeOf","objectCreate","create","propertyIsEnumerable","splice","spreadableSymbol","isConcatSpreadable","symIterator","symToStringTag","toStringTag","defineProperty","getNative","ctxClearTimeout","clearTimeout","ctxNow","now","ctxSetTimeout","setTimeout","nativeCeil","ceil","nativeFloor","floor","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","isBuffer","nativeIsFinite","isFinite","nativeJoin","nativeKeys","nativeMax","max","nativeMin","min","nativeNow","nativeParseInt","nativeRandom","random","nativeReverse","reverse","DataView","Map","Set","WeakMap","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","valueOf","symbolToString","lodash","isObjectLike","isArray","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","proto","isObject","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","baseWrapperValue","outer","iterIndex","type","computed","Hash","entries","clear","entry","hashClear","__data__","hashDelete","hashGet","hashHas","hashSet","ListCache","listCacheClear","listCacheDelete","assocIndexOf","pop","listCacheGet","listCacheHas","listCacheSet","MapCache","mapCacheClear","mapCacheDelete","getMapData","mapCacheGet","get","mapCacheHas","mapCacheSet","SetCache","add","setCacheAdd","setCacheHas","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","pairs","arrayLikeKeys","inherited","isArg","isArguments","isBuff","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","tag","getTag","isFunc","cloneBuffer","initCloneObject","copySymbolsIn","copySymbols","initCloneByTag","stacked","subValue","keysFunc","getAllKeysIn","getAllKeys","baseConforms","baseConformsTo","baseDelay","wait","baseDifference","includes","isCommon","valuesLength","valuesIndex","templateSettings","constructor","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","isSymbol","baseFill","toInteger","toLength","baseFilter","baseFlatten","depth","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","isFunction","baseGet","path","castPath","toKey","baseGetAllKeys","symbolsFunc","baseGetTag","getRawTag","objectToString","baseGt","other","baseHas","baseHasIn","baseInRange","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","pattern","baseIsRegExp","baseIsSet","baseIsTypedArray","isLength","baseIteratee","identity","baseMatchesProperty","baseMatches","property","baseKeys","isPrototype","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","criteria","compareMultiple","basePick","basePickBy","baseSet","basePropertyDeep","basePullAll","basePullAt","indexes","previous","baseUnset","baseRange","step","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","constant","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","low","high","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","actions","action","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","buffer","copy","cloneArrayBuffer","arrayBuffer","byteLength","cloneDataView","dataView","byteOffset","cloneRegExp","regexp","cloneSymbol","symbol","typedArray","compareAscending","valIsDefined","valIsReflexive","objCriteria","othCriteria","ordersLength","order","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","getSymbols","getSymbolsIn","createAggregator","initializer","createAssigner","assigner","sources","guard","isIterateeCall","iterable","createBind","isBind","Ctor","createCtor","wrapper","createCaseFirst","methodName","trailing","createCompounder","callback","words","deburr","thisBinding","createCurry","arity","getHolder","createRecurry","createHybrid","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","getFuncName","funcName","getData","isLaziable","plant","partialsRight","holdersRight","argPos","ary","isAry","isBindKey","isFlip","holdersCount","newHolders","reorder","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","pair","noop","createToPairs","createWrap","mergeData","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","isPartial","arrStacked","othStacked","arrValue","othValue","compared","name","convert","objProps","objLength","othProps","objStacked","skipCtor","objCtor","othCtor","flatten","otherFunc","isKeyable","isOwn","unmasked","stubArray","transforms","getWrapDetails","hasPath","hasFunc","input","insertWrapDetails","details","ArrayBuffer","ctorString","isMaskable","stubFalse","memoizeCapped","memoize","srcBitmask","newBitmask","isCombo","otherArgs","oldArray","shortOut","reference","updateWrapDetails","count","lastCalled","stamp","remaining","rand","charCodeAt","quote","subString","chunk","compact","concat","difference","differenceBy","differenceWith","drop","dropRight","dropRightWhile","dropWhile","fill","findIndex","flattenDeep","flattenDepth","fromPairs","head","initial","intersection","mapped","intersectionBy","intersectionWith","separator","lastIndexOf","nth","pull","pullAll","pullAllBy","pullAllWith","pullAt","remove","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","sortedUniq","sortedUniqBy","tail","take","takeRight","takeRightWhile","takeWhile","union","unionBy","unionWith","uniq","uniqBy","uniqWith","unzip","group","unzipWith","without","xor","xorBy","xorWith","zip","zipObject","zipObjectDeep","zipWith","chain","tap","interceptor","wrapperAt","wrapperChain","wrapperCommit","wrapperNext","toArray","wrapperToIterator","wrapperPlant","wrapperReverse","wrapped","wrapperValue","countBy","every","filter","find","findLast","flatMap","flatMapDeep","flatMapDepth","forEachRight","groupBy","isString","invokeMap","keyBy","orderBy","partition","reduce","reduceRight","negate","sample","sampleSize","shuffle","some","sortBy","after","before","bindKey","curry","curryRight","debounce","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","time","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","flush","debounced","isInvoking","defer","delay","flip","resolver","memoized","Cache","once","overArgs","funcsLength","partial","partialRight","rearg","rest","spread","throttle","unary","wrap","castArray","cloneWith","cloneDeep","cloneDeepWith","conformsTo","gt","gte","isBoolean","isElement","isEmpty","isEqual","isEqualWith","isError","isInteger","isMatch","isMatchWith","isNaN","isNumber","isNative","isNull","isNil","isSafeInteger","isUndefined","isWeakMap","isWeakSet","lt","lte","sign","remainder","isBinary","toSafeInteger","assign","assignIn","assignInWith","assignWith","at","properties","propsIndex","propsLength","defaultsDeep","mergeWith","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","functions","functionsIn","invert","invertBy","invoke","mapKeys","mapValues","merge","omit","omitBy","pickBy","prop","setWith","toPairs","toPairsIn","isArrLike","unset","update","updateWith","valuesIn","clamp","inRange","floating","temp","camelCase","word","capitalize","upperFirst","endsWith","target","position","escape","escapeRegExp","kebabCase","lowerCase","lowerFirst","pad","strLength","padEnd","padStart","radix","repeat","snakeCase","limit","startCase","startsWith","template","settings","isEscaping","isEvaluating","imports","importsKeys","importsValues","interpolate","reDelimiters","evaluate","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","variable","attempt","toLower","toUpper","trim","trimEnd","trimStart","truncate","omission","search","substring","newEnd","unescape","upperCase","bindAll","methodNames","cond","conforms","defaultTo","flow","flowRight","matches","matchesProperty","methodOf","mixin","noConflict","nthArg","over","overEvery","overSome","propertyOf","range","rangeRight","stubObject","stubString","stubTrue","times","toPath","uniqueId","prefix","augend","addend","divide","dividend","divisor","maxBy","mean","meanBy","minBy","multiply","multiplier","multiplicand","round","subtract","minuend","subtrahend","sum","sumBy","entriesIn","extend","extendWith","each","eachRight","first","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","commit","toJSON","FormData","isArrayBufferView","isView","isFile","isBlob","isStream","pipe","isURLSearchParams","URLSearchParams","str","navigator","product","window","document","obj","i","l","a","b","Axios","createInstance","defaultConfig","instance","axios","instanceConfig","Cancel","CancelToken","isCancel","all","promises","default","render","_vm","_c","_self","sucess","_e","staticClass","attrs","overlay","staticStyle","dragText","primaryText","browseText","markIsPrimaryText","popupText","dropText","images","on","uploadImageSuccess","beforeRemove","editImage","markPrimary","limitExceeded","directives","rawName","expression","imageUploadError","_v","_s","$event","uploadImage","$t","staticRenderFns","dataChange","preventEvent","isDragover","onDrop","preventDefault","onDragover","openGallery","currentIndexImage","imagePreview","class","showPrimary","imageDefault","placement","slot","markIsPrimary","showEdit","idEdit","showDelete","deleteImage","idUpload","multiple","_l","image","highlight","changeHighlight","maxImage","showAdd","accept","disabled","uploadFieldChange","editFieldChange","ref","showLightbox","openLightbox","changeImage","show","close","stopPropagation","swiperOptionTop","showCaption","caption","activeIndex","showThumbs","swiperOptionThumbs","style","centeredSlides","slidesPerView","navigation","nextEl","prevEl","spaceBetween","touchRatio","slideToClickedSlide","components","swiper","swiperSlide","methods","showImage","mounted","swiperTop","swiperThumbs","component","VueImageLightboxCarousel","console","preLoad","loading","dataImages","arrLightBox","Popper","createImage","formData","reader","arr","item","onOpenedLightBox","isValidNumberOfImages","watch","handler","deep","event","created","VueUploadMultipleImage","querySelector","el","imageUploadSucess","reachMax","alert","showMsgBox","msgBoxConfirm","catch","imagesUploading","TagId","Value","ListingId","Tags","getImgFun","base64String","imgtype","base64Arr","byteArray","img","compress","canvas","ctx","lengthOfArrayLike","toOffset","toIndexedObject","fails","Int8Array","Int8ArrayPrototype","$set","WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS","Uint8ClampedArray","0","TO_OBJECT_BUG","NATIVE_ARRAY_BUFFER_VIEWS","arrayLike","src","len","factory","doc","body","removeEventListener","activeElement","blur","nodeName","querySelectorAll","getElementById","createEvent","initEvent","createElement","children","childNodes","setAttribute","getElementsByTagName","location","hash","win","userAgent","history","CustomEvent","getComputedStyle","getPropertyValue","Image","screen","Dom7","$","selector","els","tempParent","html","toCreate","innerHTML","unique","uniqueArray","addClass","className","classes","j","classList","removeClass","hasClass","contains","toggleClass","toggle","attr","arguments$1","getAttribute","attrName","removeAttr","removeAttribute","dom7ElementDataStorage","dataKey","elStyle","webkitTransform","transition","duration","webkitTransitionDuration","transitionDuration","eventType","targetSelector","listener","capture","handleLiveEvent","eventData","dom7EventData","unshift","is","parents","k","handleEvent","events","event$1","dom7LiveListeners","proxyListener","dom7Listeners","off","dom7proxy","trigger","evt","detail","bubbles","cancelable","dataIndex","dispatchEvent","transitionEnd","dom","fireCallBack","outerWidth","includeMargins","styles","offsetWidth","outerHeight","offsetHeight","box","getBoundingClientRect","clientTop","clientLeft","scrollTop","scrollY","scrollLeft","scrollX","top","left","css","text","textContent","compareWith","webkitMatchesSelector","msMatchesSelector","child","previousSibling","returnIndex","append","newChild","tempDiv","firstChild","appendChild","prepend","insertBefore","nextElementSibling","nextAll","nextEls","prev","previousElementSibling","prevAll","prevEls","parentNode","closest","foundElements","found","removeChild","toAdd","Class","Methods","Utils","deleteProps","nextTick","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","WebKitCSSMatrix","MozTransform","OTransform","MsTransform","msTransform","m41","m42","parseUrlQuery","param","query","urlToParse","href","paramsPart","decodeURIComponent","o","len$1","to","nextSource","keysArray","nextIndex","nextKey","desc","getOwnPropertyDescriptor","enumerable","Support","testDiv","touch","Modernizr","maxTouchPoints","DocumentTouch","pointerEvents","pointerEnabled","PointerEvent","prefixedPointerEvents","msPointerEnabled","transforms3d","csstransforms3d","flexbox","observer","passiveListener","supportsPassive","opts","gestures","Browser","isSafari","ua","isIE","isEdge","isUiWebView","SwiperClass","eventsListeners","eventName","staticAccessors","configurable","updateSize","width","height","$el","clientWidth","clientHeight","isHorizontal","isVertical","updateSlides","$wrapperEl","swiperSize","rtl","rtlTranslate","wrongRTL","isVirtual","virtual","enabled","previousSlidesLength","slides","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","slidePosition","prevSlideSize","slidesNumberEvenToRows","slideSize","virtualSize","marginLeft","marginTop","marginRight","marginBottom","slidesPerColumn","slidesPerColumnFill","newSlidesGrid","slidesPerRow","numFullColumns","slide","newSlideOrderIndex","column","row","slidesPerGroup","groupIndex","slideStyles","currentTransform","currentWebKitTransform","roundLengths","paddingLeft","paddingRight","boxSizing","paddingTop","paddingBottom","boxSizing$1","swiperSlideSize","abs","effect","setWrapperSize","i$1","slidesGridItem","i$2","slidesGridItem$1","centerInsufficientSlides","allSlidesSize","slideSizeValue","allSlidesOffset","snap","snapIndex","emit","watchOverflow","checkOverflow","watchSlidesProgress","watchSlidesVisibility","updateSlidesOffset","updateAutoHeight","speed","activeSlides","newHeight","setTransition","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","translate","offsetCenter","slideVisibleClass","visibleSlidesIndexes","visibleSlides","slideProgress","minTranslate","slideBefore","slideAfter","isVisible","progress","updateProgress","translatesDiff","maxTranslate","isBeginning","isEnd","wasBeginning","wasEnd","updateSlidesClasses","activeSlide","realIndex","slideActiveClass","loop","slideDuplicateClass","slideDuplicateActiveClass","nextSlide","slideNextClass","prevSlide","slidePrevClass","slideDuplicateNextClass","slideDuplicatePrevClass","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","normalizeSlideIndex","initialized","runCallbacksOnInit","updateClickedSlide","slideFound","clickedSlide","clickedIndex","priority","onceHandler","f7proxy","eventHandler","eventsArray","useModulesParams","instanceParams","modules","moduleName","useModules","modulesParams","moduleParams","modulePropName","moduleProp","moduleEventName","installModule","static","install","m","defineProperties","virtualTranslate","currentTranslate","setTranslate","byController","newProgress","x","y","z","previousTranslate","transitionStart","runCallbacks","direction","autoHeight","transitionEnd$1","animating","transition$1","slideTo","internal","slideIndex","preventInteractionOnTransition","initialSlide","allowSlideNext","allowSlidePrev","onSlideToWrapperTransitionEnd","destroyed","slideToLoop","newIndex","loopedSlides","slideNext","loopFix","_clientLeft","slidePrev","normalize","prevIndex","normalizedTranslate","normalizedSnapGrid","prevSnap","slideReset","slideToClosest","currentSnap","nextSnap","slidesPerViewDynamic","slideToIndex","loopCreate","loopFillGroupWithBlank","blankSlidesNum","blankNode","loopAdditionalSlides","prependSlides","appendSlides","cloneNode","snapTranslate","diff","slideChanged","slideChanged$1","loopDestroy","setGrabCursor","moving","simulateTouch","isLocked","cursor","unsetGrabCursor","grabCursor","appendSlide","prependSlide","addSlide","activeIndexBuffer","baseLength","slidesBuffer","currentSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","manipulation","Device","device","ios","android","androidChrome","desktop","windows","iphone","ipod","ipad","cordova","phonegap","os","osVersion","webView","osVersionArr","metaViewport","minimalUi","pixelRatio","devicePixelRatio","onTouchStart","touchEventsData","touches","originalEvent","isTouchEvent","which","button","isTouched","isMoved","noSwiping","noSwipingSelector","allowClick","swipeHandler","currentX","targetTouches","pageX","currentY","pageY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","threshold","allowThresholdMove","formElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","onTouchMove","preventedByNestedSwiper","touchReleaseOnEdges","diffX","diffY","sqrt","pow","touchAngle","atan2","PI","touchMoveStopPropagation","startTranslate","allowMomentumBounce","disableParentSwiper","resistanceRatio","resistance","followFinger","freeMode","velocities","onTouchEnd","currentPos","touchEndTime","timeDiff","lastClickTime","clickTimeout","freeModeMomentum","lastMoveEvent","velocityEvent","distance","velocity","freeModeMinimumVelocity","freeModeMomentumVelocityRatio","momentumDuration","freeModeMomentumRatio","momentumDistance","newPosition","afterBouncePosition","needsLoopFix","doBounce","bounceAmount","freeModeMomentumBounceRatio","freeModeMomentumBounce","freeModeSticky","longSwipesMs","stopIndex","groupSize","ratio","longSwipes","longSwipesRatio","shortSwipes","onResize","breakpoints","setBreakpoint","newTranslate","autoplay","running","paused","run","onClick","preventClicks","preventClicksPropagation","stopImmediatePropagation","attachEvents","touchEvents","wrapperEl","touchEventsTarget","passiveListeners","passive","move","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointOnlyParams","paramValue","breakpointParams","originalParams","directionChanged","needsReLoop","changeDirection","points","point","breakpointsInverse","innerWidth","addClasses","classNames","suffixes","suffix","containerModifierClass","removeClasses","loadImage","imageEl","srcset","sizes","checkForComplete","onReady","complete","onload","preloadImages","imagesLoaded","imagesToLoad","updateOnImagesReady","currentSrc","wasLocked","checkOverflow$1","init","uniqueNavElements","noSwipingClass","slideClass","slideBlankClass","wrapperClass","prototypes","extendedDefaults","Swiper","prototypeGroup","protoMethod","moduleParamName","swiperParams","passedParams","swipers","containerEl","newParams","touchEventsTouch","touchEventsDesktop","__proto__","spv","breakLoop","translated","translateValue","newDirection","needUpdate","currentDirection","slideEl","destroy","deleteInstance","cleanStyles","extendDefaults","newDefaults","Device$1","Support$1","support","Browser$1","browser","Resize","resize","resizeHandler","orientationChangeHandler","Observer","MutationObserver","WebkitMutationObserver","attach","ObserverFunc","mutations","observerUpdate","requestAnimationFrame","observe","attributes","childList","characterData","observers","observeParents","containerParents","observeSlideChildren","disconnect","Observer$1","Virtual","force","ref$1","addSlidesBefore","addSlidesAfter","ref$2","previousFrom","from","previousTo","previousSlidesGrid","renderSlide","previousOffset","offsetProp","slidesAfter","slidesBefore","onRendered","lazy","load","renderExternal","slidesToRender","prependIndexes","appendIndexes","$slideEl","numberOfNewSlides","newCache","cachedIndex","Virtual$1","beforeInit","overwriteParams","Keyboard","handle","kc","keyCode","charCode","shiftKey","altKey","ctrlKey","metaKey","keyboard","onlyInViewport","inView","windowWidth","windowHeight","innerHeight","swiperOffset","swiperCoord","returnValue","enable","disable","Keyboard$1","isEventSupported","isSupported","element","implementation","hasFeature","Mousewheel","lastScrollTime","PIXEL_STEP","LINE_HEIGHT","PAGE_HEIGHT","sX","sY","pX","pY","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","handleMouseEnter","mouseEntered","handleMouseLeave","mousewheel","releaseOnEdges","delta","rtlFactor","forceToAxis","sensitivity","autoplayDisableOnInteraction","stop","getTime","eventsTarged","Mousewheel$1","Navigation","$nextEl","$prevEl","disabledClass","lockClass","onPrevClick","onNextClick","Navigation$1","hideOnClick","hiddenClass","toEdge","fromEdge","click","isHidden","Pagination","pagination","total","paginationType","bullets","firstIndex","midIndex","dynamicBullets","bulletSize","dynamicMainBullets","dynamicBulletIndex","bullet","$bullet","bulletIndex","bulletActiveClass","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","formatFractionCurrent","formatFractionTotal","progressbarDirection","progressbarOpposite","scale","scaleX","scaleY","renderCustom","paginationHTML","numberOfBullets","renderBullet","bulletClass","renderFraction","currentClass","totalClass","renderProgressbar","progressbarFillClass","clickable","clickableClass","modifierClass","progressbarOppositeClass","Pagination$1","bulletElement","activeIndexChange","snapIndexChange","slidesLengthChange","snapGridLengthChange","Scrollbar","scrollbar","dragSize","trackSize","$dragEl","newSize","newPos","hide","opacity","divider","moveDivider","display","getPointerPosition","clientX","clientY","setDragPosition","positionRatio","dragStartPos","onDragStart","dragTimeout","onDragMove","onDragEnd","snapOnRelease","enableDraggable","activeListener","disableDraggable","$swiperEl","dragEl","draggable","Scrollbar$1","dragClass","Parallax","setTransform","p","currentOpacity","currentScale","parallax","parallaxEl","$parallaxEl","parallaxDuration","Parallax$1","Zoom","getDistanceBetweenTouches","x1","y1","x2","y2","onGestureStart","zoom","gesture","fakeGestureTouched","fakeGestureMoved","scaleStart","$imageEl","$imageWrapEl","maxRatio","isScaling","onGestureChange","scaleMove","minRatio","onGestureEnd","changedTouches","touchesStart","slideWidth","slideHeight","scaledWidth","scaledHeight","minX","maxX","minY","maxY","touchesCurrent","prevPositionX","prevPositionY","prevTime","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","onTransitionEnd","out","in","touchX","touchY","offsetX","offsetY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","Zoom$1","containerClass","zoomedSlideClass","touchStart","touchEnd","doubleTap","Lazy","loadInSlide","loadInDuplicate","$images","elementClass","loadedClass","loadingClass","imageIndex","background","slideOriginalIndex","originalSlide","duplicatedSlide","slideExist","initialImageLoaded","elIndex","loadPrevNext","loadPrevNextAmount","amount","maxIndex","minIndex","Lazy$1","loadOnTransitionStart","preloaderClass","scroll","scrollbarDragMove","Controller","LinearSpline","i1","i3","binarySearch","guess","getInterpolateFunction","c","controller","spline","setTranslate$1","controlledTranslate","controlled","control","setControlledTranslate","by","inverse","setControlledTransition","Controller$1","a11y","makeElFocusable","addElRole","role","addElLabel","label","disableEl","enableEl","onEnterKey","$targetEl","notify","lastSlideMessage","nextSlideMessage","firstSlideMessage","prevSlideMessage","notification","liveRegion","updateNavigation","updatePagination","bulletEl","$bulletEl","paginationBulletMessage","A11y","notificationClass","paginationUpdate","History","pushState","hashNavigation","getPathValues","scrollToSlide","replaceState","setHistoryPopState","pathArray","pathname","part","setHistory","slugify","currentState","state","slideHistory","History$1","HashNavigation","onHashCange","newHash","activeSlideHash","setHash","slideHash","watchState","HashNavigation$1","Autoplay","$activeSlideEl","reverseDirection","stopOnLastSlide","pause","waitForTransition","Autoplay$1","disableOnInteraction","beforeTransitionStart","sliderFirstMove","Fade","tx","ty","slideOpacity","fadeEffect","crossFade","eventTriggered","triggerEvents","EffectFade","Cube","$cubeShadowEl","swiperWidth","swiperHeight","cubeEffect","wrapperRotate","shadow","slideAngle","tz","slideShadows","shadowBefore","shadowAfter","shadowOffset","shadowAngle","sin","cos","scale1","shadowScale","scale2","zFactor","EffectCube","Flip","flipEffect","limitRotation","rotate","rotateY","rotateX","zIndex","EffectFlip","Coverflow","coverflowEffect","center","slideOffset","offsetMultiplier","modifier","translateZ","stretch","slideTransform","$shadowBeforeEl","$shadowAfterEl","ws","perspectiveOrigin","EffectCoverflow","Thumbs","thumbsParams","thumbs","swiperCreated","thumbsContainerClass","onThumbClick","thumbsSwiper","slideThumbActiveClass","currentIndex","newThumbsIndex","currentThumbsIndex","prevThumbsIndex","nextThumbsIndex","thumbsToActivate","thumbActiveClass","Thumbs$1","slideChange","beforeDestroy","classofRaw","_extends","attachEvent","detachEvent","script","validator","delayOnMouseOver","Number","delayOnMouseOut","Boolean","content","enterActiveClass","leaveActiveClass","boundariesSelector","forceShow","dataValue","appendToBody","visibleArrow","referenceElm","popperJS","showPopper","currentPlacement","popperOptions","computeStyle","gpuAcceleration","$emit","enableEventListeners","updatePopper","disableEventListeners","immediate","appendedArrow","appendedToBody","$slots","elm","popper","doToggle","handleDocumentClick","onMouseOver","onMouseOut","doShow","doClose","doDestroy","parentElement","createPopper","_this","$nextTick","appendArrow","boundariesElement","modifiers","preventOverflow","onCreate","destroyPopper","arrow","scheduleUpdate","_this2","_timer","_this3","elementContains","otherElm","__vue_script__","__vue_render__","_h","$createElement","_t","__vue_staticRenderFns__","_withStripped","__vue_inject_styles__","inject","media","__vue_scope_id__","__vue_module_identifier__","__vue_is_functional_template__","__vue_normalize__","script$$1","scope","functional","moduleIdentifier","createInjector","createInjectorSSR","__file","_compiled","_scopeId","hook","originalRender","existing","beforeCreate","__vue_create_injector__","isOldIE","ids","parts","styleSheet","cssText","textNode","createTextNode","nodes","VuePopper","validateStatus","baseURL","relativeURL","ignoreDuplicateOf","parsed","line","substr","normalizeHeaderName","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","getDefaultAdapter","adapter","transformRequest","JSON","stringify","transformResponse","parse","maxContentLength","common","write","expires","domain","secure","cookie","encodeURIComponent","toGMTString","toIntegerOrInfinity","O","relativeIndex","__CANCEL__","executor","resolvePromise","token","reason","throwIfRequested","$findLast","transformData","isAbsoluteURL","combineURLs","throwIfCancellationRequested","IndexedObject","toObject","createMethod","TYPE","IS_FIND_LAST_INDEX","$this","callbackfn","boundFunction","getBuiltIn","createPropertyDescriptor","f","hasOwn","anInstance","inheritIfRequired","normalizeStringArgument","DOMExceptionConstants","clearErrorStack","DESCRIPTORS","IS_PURE","DOM_EXCEPTION","NativeDOMException","$DOMException","DOMExceptionPrototype","argumentsLength","ERROR_HAS_STACK","DOM_EXCEPTION_HAS_STACK","descriptor","BUGGY_DESCRIPTOR","writable","FORCED_CONSTRUCTOR","forced","DOMException","PolyfilledDOMException","PolyfilledDOMExceptionPrototype","constantName","s","fns","encode","serializedParams","v","toISOString","IndexSizeError","DOMStringSizeError","HierarchyRequestError","WrongDocumentError","InvalidCharacterError","NoDataAllowedError","NoModificationAllowedError","NotFoundError","NotSupportedError","InUseAttributeError","InvalidStateError","SyntaxError","InvalidModificationError","NamespaceError","InvalidAccessError","ValidationError","TypeMismatchError","SecurityError","NetworkError","AbortError","URLMismatchError","QuotaExceededError","TimeoutError","InvalidNodeTypeError","DataCloneError","t","d","__esModule","r","u","$vnode","ssrContext","__VUE_SSR_CONTEXT__","_registeredComponents","_ssrRegister","_injectStyles","esModule","globalOptions","ready","$parent","updated","attached","required","mountInstance","activated","bindEvents","isCallable","sharedKey","CORRECT_PROTOTYPE_GETTER","$Object","ObjectPrototype","F","dispatchRequest","interceptors","shift","normalizedName","originURL","msie","urlParsingNode","resolveURL","protocol","host","hostname","port","requestURL","NAME","Constructor","NATIVE_ARRAY_BUFFER","classof","tryToString","createNonEnumerableProperty","defineBuiltIn","setPrototypeOf","wellKnownSymbol","InternalStateModule","enforceInternalState","enforce","getInternalState","Uint8ClampedArrayPrototype","TypedArray","TypedArrayPrototype","TO_STRING_TAG","TYPED_ARRAY_TAG","TYPED_ARRAY_CONSTRUCTOR","opera","TYPED_ARRAY_TAG_REQUIRED","TypedArrayConstructorsList","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigIntArrayConstructorsList","BigInt64Array","BigUint64Array","klass","getTypedArrayConstructor","aTypedArrayConstructor","C","KEY","ARRAY","TypedArrayConstructor","error2","exportTypedArrayStaticMethod"],"mappings":"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iBAEA,CACAjvB,+EACAivB,iBAEA,CACAjvB,+EACAivB,oBAEA,CACAjvB,+EACAivB,oBAEA,CACAjvB,+EACAivB,mBAKAa,YACAS,4BAEAN,SACAvB,eACA,qBACA,kCAEAC,eACA6B,kBCxFib,ICO7a,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,WACA,M,GAIa,E,wCCZf,aAAIpzC,IAAI,OAAa,CACnBqzC,QAAS,IACTC,QAAS,IACT/M,QAAS,IAYI,QCsQA,GAEftS,8BAEA9jB,OACA29B,UACA7yB,YACAkyB,+BAEAa,YACA/yB,YACAkyB,uBAEAY,aACA9yB,YACAkyB,oBAEAc,mBACAhzB,YACAkyB,4BAEAe,WACAjzB,YACAkyB,sDAEAgB,UACAlzB,YACAkyB,qCAEA6D,QACA/1B,YACAkyB,8DAEAoG,YACAt4B,WACAkyB,YACA,IAGAsD,UACAx1B,aACAkyB,YAEA4C,aACA90B,aACAkyB,YAEA2D,UACA71B,YACAkyB,WAEAqD,UACAv1B,YACAkyB,wBAEAkD,QACAp1B,YACAkyB,sBAEAiD,UACAn1B,aACAkyB,YAEAmD,YACAr1B,aACAkyB,YAEA4D,SACA91B,aACAkyB,YAEA8D,UACAh2B,aACAkyB,aAGA7xC,OACA,OACAs0C,oBACAxB,UACAmB,cACA8B,gBACAmC,iBAGAd,YACAe,WACAN,4BAEAj4B,UACA20B,eACA,0CAAAe,cACA,YACA,oBAEA,2CAGAZ,eACA,uCACA,qDAIA6C,SACAvD,gBACAtxC,mBACAA,qBAEAwxC,UACA,mBACAxxC,oBACAA,mBACA,2BACA,qBAGA,uCAGAL,+BAEA,GADA,qBACA,cACA,gBAGA,yCACAuuC,qDAGAwD,aACA,oBAEAgE,eACA,wBACA,qBACA,eACAC,mBACAC,aACA,sBACA,IACA,mBAIA,kBAAA3f,YAAArR,OAAAguB,YAAAzD,aAHA,kBAAAlZ,YAAArR,OAAAguB,YAAAzD,YACA,0BAIA,kEAGAyG,oBAEApF,aACA,wBACA,qBACA,eACAmF,mBACAC,aACA,sBACA,GACA,0DACA,2CACA,kDAIAA,mBACA,+DAEA1C,qBACA,2CACA,qBAGA,uCAGAvzC,+BACA,2BAEA,yCACAuuC,qDAGAiF,mBACA,2CACA,qBAGA,uCAGAxzC,+BACA,yBAEA,uCACAuuC,mDAGA2E,mBACA,yBACA,kBACA,eACAgD,cAEAC,YADA,MACAA,EAEAA,EAEA,IAEA,eAEA3D,iBACA,wBACA,OACA2D,cACAA,cAEAA,cACAA,aAEA,IAEA,yBACA,+DACA,6CAEAvD,eACA,kCACA,6BACA,0BAEA,wBACA,yBACA,qBACA,6BAEA,cAEAZ,eACA,qBACA,kCAEAoE,oBAEA,oBADA,GAMAC,yBACA,2BACA,gCACA,KAMAC,OACAV,YACAW,oBACA,uCAEAC,UAGApB,UACA7G,+CACAkI,oBACAA,mBACA,sBAGAC,UACA,eACA,sDChjBmd,ICS/c,G,oBAAY,eACd,EACA,EACA,GACA,EACA,KACA,WACA,OAIa,I,QCLA,G,UAAA,CACfpgB,WACA34B,OACA,UAGAo3C,YACA4B,0BAEAzB,SACAvE,0BACA8E,2BAMA7E,oBACA6E,yBACA,8BACA,MACAthC,KAIA08B,iBACA4E,gCAEA/D,cACA+D,gBAEA1E,iBACA0E,mBC/Cib,ICO7a,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,I,QCdXlH,SAASqI,cAAc,mDACzB,aAAIrB,UAAU,yBAA0BoB,GAExC,IAAI,aAAI,CACNE,GAAI,gDACJpH,OAAQ9sC,GAAKA,EAAE,MAIJ,Q,qBCgCA,GACfoyC,YACA4B,0BAEAh5C,OACA,OACA8yC,UACAN,oDACAC,mDACAC,wDACAC,+DACAC,uDACAC,sDACAsG,qBACA3F,sBACA/3B,OACA62B,aAGA1yB,UACAw5B,WACA,qCAEAlH,SACA,OACA,+CACA,4CAIAqF,SACAvE,0BACA,cAEA,8CAEA,uDAMAC,oBACA6E,yBACA,cACA,sDAGA,0CACAthC,KAQA08B,iBACA4E,+BACA,cACA,uDAEA3E,iBACA2E,mCACA,cACA,uDAEA1E,iBACA0E,6BACAuB,iEAEAC,aACA,eACA,cACAC,6CACAt2C,SACA,gBAEAu2C,UACA1B,4BAIA3hB,UA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","file":"assets/js/chunk-969dcf0a.55437980.js","sourcesContent":["var uncurryThis = require('../internals/function-uncurry-this-clause');\nvar aCallable = require('../internals/a-callable');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n aCallable(fn);\n return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n error.request = request;\n error.response = response;\n return error;\n};\n","export * from \"-!../../../node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/sass-loader/dist/cjs.js??ref--14-0!../../../node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./TheUploadComponent.vue?vue&type=style&index=0&id=f0199a38&prod&lang=scss&\"","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildURL = require('./../helpers/buildURL');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (requestData === undefined) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n","export * from \"-!../../../@vue/cli-service/node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../@vue/cli-service/node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./VueImageLightboxCarousel.vue?vue&type=style&index=0&id=3f78f595&prod&lang=css&scoped=true&\"","var toPositiveInteger = require('../internals/to-positive-integer');\n\nvar $RangeError = RangeError;\n\nmodule.exports = function (it, BYTES) {\n var offset = toPositiveInteger(it);\n if (offset % BYTES) throw $RangeError('Wrong offset');\n return offset;\n};\n","var isPrototypeOf = require('../internals/object-is-prototype-of');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (it, Prototype) {\n if (isPrototypeOf(Prototype, it)) return it;\n throw $TypeError('Incorrect invocation');\n};\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $findLastIndex = require('../internals/array-iteration-from-last').findLastIndex;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.findLastIndex` method\n// https://github.com/tc39/proposal-array-find-from-last\nexportTypedArrayMethod('findLastIndex', function findLastIndex(predicate /* , thisArg */) {\n return $findLastIndex(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n","export * from \"-!../../../@vue/cli-service/node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../@vue/cli-service/node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./VueUploadMultipleImage.vue?vue&type=style&index=0&id=6ff5a0de&prod&lang=css&scoped=true&\"","module.exports = __webpack_public_path__ + \"assets/img/loading.fd42f6cb.gif\";","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","/**\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.21';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function',\n INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading whitespace. */\n var reTrimStart = /^\\s+/;\n\n /** Used to match a single whitespace character. */\n var reWhitespace = /\\s/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /**\n * Used to validate the `validate` option in `_.template` variable.\n *\n * Forbids characters which could potentially change the meaning of the function argument definition:\n * - \"(),\" (modification of function parameters)\n * - \"=\" (default value)\n * - \"[]{}\" (destructuring of function parameters)\n * - \"/\" (beginning of a comment)\n * - whitespace\n */\n var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\n function baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\n function trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n var low = 0,\n high = array == null ? 0 : array.length;\n if (high === 0) {\n return 0;\n }\n\n value = iteratee(value);\n var valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '

' + 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 = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<%- value %>');\n * compiled({ 'value': '\n\n\n","import mod from \"-!../../../@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../../@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./VueImageLightboxCarousel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../../@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./VueImageLightboxCarousel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VueImageLightboxCarousel.vue?vue&type=template&id=3f78f595&scoped=true&\"\nimport script from \"./VueImageLightboxCarousel.vue?vue&type=script&lang=js&\"\nexport * from \"./VueImageLightboxCarousel.vue?vue&type=script&lang=js&\"\nimport style0 from \"./VueImageLightboxCarousel.vue?vue&type=style&index=0&id=3f78f595&prod&lang=css&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3f78f595\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n","import mod from \"-!../../@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--13-0!../../@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--13-0!../../@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=024aeab4&scoped=true&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"024aeab4\",\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport App from './App.vue'\nimport VueImageLightboxCarousel from './components/VueImageLightboxCarousel'\nimport VueLazyload from 'vue-lazyload'\nimport loadingImage from './assets/loading.gif'\n\nVue.use(VueLazyload, {\n preLoad: 1.3,\n loading: loadingImage,\n attempt: 1\n})\n\n// if (document.querySelector('#my-strictly-unique-vue-image-lightbox-carousel')) {\n// Vue.component('VueImageLightboxCarousel', VueImageLightboxCarousel)\n\n// new Vue({\n// el: '#my-strictly-unique-vue-image-lightbox-carousel',\n// render: h => h(App)\n// })\n// }\n\nexport default VueImageLightboxCarousel\n","\n\n\n\n\n\n","import mod from \"-!../../../@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../../@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./VueUploadMultipleImage.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../../@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./VueUploadMultipleImage.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VueUploadMultipleImage.vue?vue&type=template&id=6ff5a0de&scoped=true&\"\nimport script from \"./VueUploadMultipleImage.vue?vue&type=script&lang=js&\"\nexport * from \"./VueUploadMultipleImage.vue?vue&type=script&lang=js&\"\nimport style0 from \"./VueUploadMultipleImage.vue?vue&type=style&index=0&id=6ff5a0de&prod&lang=css&scoped=true&\"\nimport style1 from \"./VueUploadMultipleImage.vue?vue&type=style&index=1&id=6ff5a0de&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6ff5a0de\",\n null\n \n)\n\nexport default component.exports","\n\n\n","import mod from \"-!../../@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--13-0!../../@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--13-0!../../@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=bc6ac468&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport App from './App.vue'\nimport VueUploadMultipleImage from './components/VueUploadMultipleImage'\n\nif (document.querySelector('#my-strictly-unique-vue-upload-multiple-image')) {\n Vue.component('VueUploadMultipleImage', VueUploadMultipleImage)\n\n new Vue({\n el: '#my-strictly-unique-vue-upload-multiple-image',\n render: h => h(App)\n })\n}\n\nexport default VueUploadMultipleImage\n","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../../node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./TheUploadComponent.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../../node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./TheUploadComponent.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TheUploadComponent.vue?vue&type=template&id=f0199a38&\"\nimport script from \"./TheUploadComponent.vue?vue&type=script&lang=js&\"\nexport * from \"./TheUploadComponent.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TheUploadComponent.vue?vue&type=style&index=0&id=f0199a38&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","'use strict';\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toOffset = require('../internals/to-offset');\nvar toIndexedObject = require('../internals/to-object');\nvar fails = require('../internals/fails');\n\nvar RangeError = global.RangeError;\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar $set = Int8ArrayPrototype && Int8ArrayPrototype.set;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS = !fails(function () {\n // eslint-disable-next-line es/no-typed-arrays -- required for testing\n var array = new Uint8ClampedArray(2);\n call($set, array, { length: 1, 0: 3 }, 1);\n return array[1] !== 3;\n});\n\n// https://bugs.chromium.org/p/v8/issues/detail?id=11294 and other\nvar TO_OBJECT_BUG = WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS && ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS && fails(function () {\n var array = new Int8Array(2);\n array.set(1);\n array.set('2', 1);\n return array[0] !== 0 || array[1] !== 2;\n});\n\n// `%TypedArray%.prototype.set` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.set\nexportTypedArrayMethod('set', function set(arrayLike /* , offset */) {\n aTypedArray(this);\n var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);\n var src = toIndexedObject(arrayLike);\n if (WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS) return call($set, this, src, offset);\n var length = this.length;\n var len = lengthOfArrayLike(src);\n var index = 0;\n if (len + offset > length) throw RangeError('Wrong length');\n while (index < len) this[offset + index] = src[index++];\n}, !WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS || TO_OBJECT_BUG);\n","/**\n * Swiper 4.5.1\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * http://www.idangero.us/swiper/\n *\n * Copyright 2014-2019 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: September 13, 2019\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.Swiper = factory());\n}(this, function () { 'use strict';\n\n /**\n * SSR Window 1.0.1\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2018, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: July 18, 2018\n */\n var doc = (typeof document === 'undefined') ? {\n body: {},\n addEventListener: function addEventListener() {},\n removeEventListener: function removeEventListener() {},\n activeElement: {\n blur: function blur() {},\n nodeName: '',\n },\n querySelector: function querySelector() {\n return null;\n },\n querySelectorAll: function querySelectorAll() {\n return [];\n },\n getElementById: function getElementById() {\n return null;\n },\n createEvent: function createEvent() {\n return {\n initEvent: function initEvent() {},\n };\n },\n createElement: function createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute: function setAttribute() {},\n getElementsByTagName: function getElementsByTagName() {\n return [];\n },\n };\n },\n location: { hash: '' },\n } : document; // eslint-disable-line\n\n var win = (typeof window === 'undefined') ? {\n document: doc,\n navigator: {\n userAgent: '',\n },\n location: {},\n history: {},\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener: function addEventListener() {},\n removeEventListener: function removeEventListener() {},\n getComputedStyle: function getComputedStyle() {\n return {\n getPropertyValue: function getPropertyValue() {\n return '';\n },\n };\n },\n Image: function Image() {},\n Date: function Date() {},\n screen: {},\n setTimeout: function setTimeout() {},\n clearTimeout: function clearTimeout() {},\n } : window; // eslint-disable-line\n\n /**\n * Dom7 2.1.3\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * http://framework7.io/docs/dom.html\n *\n * Copyright 2019, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n *\n * Licensed under MIT\n *\n * Released on: February 11, 2019\n */\n\n var Dom7 = function Dom7(arr) {\n var self = this;\n // Create array-like object\n for (var i = 0; i < arr.length; i += 1) {\n self[i] = arr[i];\n }\n self.length = arr.length;\n // Return collection with methods\n return this;\n };\n\n function $(selector, context) {\n var arr = [];\n var i = 0;\n if (selector && !context) {\n if (selector instanceof Dom7) {\n return selector;\n }\n }\n if (selector) {\n // String\n if (typeof selector === 'string') {\n var els;\n var tempParent;\n var html = selector.trim();\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n var toCreate = 'div';\n if (html.indexOf(':~]/)) {\n // Pure ID selector\n els = [doc.getElementById(selector.trim().split('#')[1])];\n } else {\n // Other selectors\n els = (context || doc).querySelectorAll(selector.trim());\n }\n for (i = 0; i < els.length; i += 1) {\n if (els[i]) { arr.push(els[i]); }\n }\n }\n } else if (selector.nodeType || selector === win || selector === doc) {\n // Node/element\n arr.push(selector);\n } else if (selector.length > 0 && selector[0].nodeType) {\n // Array of elements or instance of Dom\n for (i = 0; i < selector.length; i += 1) {\n arr.push(selector[i]);\n }\n }\n }\n return new Dom7(arr);\n }\n\n $.fn = Dom7.prototype;\n $.Class = Dom7;\n $.Dom7 = Dom7;\n\n function unique(arr) {\n var uniqueArray = [];\n for (var i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) { uniqueArray.push(arr[i]); }\n }\n return uniqueArray;\n }\n\n // Classes and attributes\n function addClass(className) {\n if (typeof className === 'undefined') {\n return this;\n }\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i += 1) {\n for (var j = 0; j < this.length; j += 1) {\n if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') { this[j].classList.add(classes[i]); }\n }\n }\n return this;\n }\n function removeClass(className) {\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i += 1) {\n for (var j = 0; j < this.length; j += 1) {\n if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') { this[j].classList.remove(classes[i]); }\n }\n }\n return this;\n }\n function hasClass(className) {\n if (!this[0]) { return false; }\n return this[0].classList.contains(className);\n }\n function toggleClass(className) {\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i += 1) {\n for (var j = 0; j < this.length; j += 1) {\n if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') { this[j].classList.toggle(classes[i]); }\n }\n }\n return this;\n }\n function attr(attrs, value) {\n var arguments$1 = arguments;\n\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) { return this[0].getAttribute(attrs); }\n return undefined;\n }\n\n // Set attrs\n for (var i = 0; i < this.length; i += 1) {\n if (arguments$1.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n // eslint-disable-next-line\n for (var attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n return this;\n }\n // eslint-disable-next-line\n function removeAttr(attr) {\n for (var i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n return this;\n }\n function data(key, value) {\n var el;\n if (typeof value === 'undefined') {\n el = this[0];\n // Get value\n if (el) {\n if (el.dom7ElementDataStorage && (key in el.dom7ElementDataStorage)) {\n return el.dom7ElementDataStorage[key];\n }\n\n var dataKey = el.getAttribute((\"data-\" + key));\n if (dataKey) {\n return dataKey;\n }\n return undefined;\n }\n return undefined;\n }\n\n // Set value\n for (var i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7ElementDataStorage) { el.dom7ElementDataStorage = {}; }\n el.dom7ElementDataStorage[key] = value;\n }\n return this;\n }\n // Transforms\n // eslint-disable-next-line\n function transform(transform) {\n for (var i = 0; i < this.length; i += 1) {\n var elStyle = this[i].style;\n elStyle.webkitTransform = transform;\n elStyle.transform = transform;\n }\n return this;\n }\n function transition(duration) {\n if (typeof duration !== 'string') {\n duration = duration + \"ms\"; // eslint-disable-line\n }\n for (var i = 0; i < this.length; i += 1) {\n var elStyle = this[i].style;\n elStyle.webkitTransitionDuration = duration;\n elStyle.transitionDuration = duration;\n }\n return this;\n }\n // Events\n function on() {\n var assign;\n\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n var eventType = args[0];\n var targetSelector = args[1];\n var listener = args[2];\n var capture = args[3];\n if (typeof args[1] === 'function') {\n (assign = args, eventType = assign[0], listener = assign[1], capture = assign[2]);\n targetSelector = undefined;\n }\n if (!capture) { capture = false; }\n\n function handleLiveEvent(e) {\n var target = e.target;\n if (!target) { return; }\n var eventData = e.target.dom7EventData || [];\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n if ($(target).is(targetSelector)) { listener.apply(target, eventData); }\n else {\n var parents = $(target).parents(); // eslint-disable-line\n for (var k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) { listener.apply(parents[k], eventData); }\n }\n }\n }\n function handleEvent(e) {\n var eventData = e && e.target ? e.target.dom7EventData || [] : [];\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n listener.apply(this, eventData);\n }\n var events = eventType.split(' ');\n var j;\n for (var i = 0; i < this.length; i += 1) {\n var el = this[i];\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n var event = events[j];\n if (!el.dom7Listeners) { el.dom7Listeners = {}; }\n if (!el.dom7Listeners[event]) { el.dom7Listeners[event] = []; }\n el.dom7Listeners[event].push({\n listener: listener,\n proxyListener: handleEvent,\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n var event$1 = events[j];\n if (!el.dom7LiveListeners) { el.dom7LiveListeners = {}; }\n if (!el.dom7LiveListeners[event$1]) { el.dom7LiveListeners[event$1] = []; }\n el.dom7LiveListeners[event$1].push({\n listener: listener,\n proxyListener: handleLiveEvent,\n });\n el.addEventListener(event$1, handleLiveEvent, capture);\n }\n }\n }\n return this;\n }\n function off() {\n var assign;\n\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n var eventType = args[0];\n var targetSelector = args[1];\n var listener = args[2];\n var capture = args[3];\n if (typeof args[1] === 'function') {\n (assign = args, eventType = assign[0], listener = assign[1], capture = assign[2]);\n targetSelector = undefined;\n }\n if (!capture) { capture = false; }\n\n var events = eventType.split(' ');\n for (var i = 0; i < events.length; i += 1) {\n var event = events[i];\n for (var j = 0; j < this.length; j += 1) {\n var el = this[j];\n var handlers = (void 0);\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n if (handlers && handlers.length) {\n for (var k = handlers.length - 1; k >= 0; k -= 1) {\n var handler = handlers[k];\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n return this;\n }\n function trigger() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var events = args[0].split(' ');\n var eventData = args[1];\n for (var i = 0; i < events.length; i += 1) {\n var event = events[i];\n for (var j = 0; j < this.length; j += 1) {\n var el = this[j];\n var evt = (void 0);\n try {\n evt = new win.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true,\n });\n } catch (e) {\n evt = doc.createEvent('Event');\n evt.initEvent(event, true, true);\n evt.detail = eventData;\n }\n // eslint-disable-next-line\n el.dom7EventData = args.filter(function (data, dataIndex) { return dataIndex > 0; });\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n return this;\n }\n function transitionEnd(callback) {\n var events = ['webkitTransitionEnd', 'transitionend'];\n var dom = this;\n var i;\n function fireCallBack(e) {\n /* jshint validthis:true */\n if (e.target !== this) { return; }\n callback.call(this, e);\n for (i = 0; i < events.length; i += 1) {\n dom.off(events[i], fireCallBack);\n }\n }\n if (callback) {\n for (i = 0; i < events.length; i += 1) {\n dom.on(events[i], fireCallBack);\n }\n }\n return this;\n }\n function outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n // eslint-disable-next-line\n var styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n return this[0].offsetWidth;\n }\n return null;\n }\n function outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n // eslint-disable-next-line\n var styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n return this[0].offsetHeight;\n }\n return null;\n }\n function offset() {\n if (this.length > 0) {\n var el = this[0];\n var box = el.getBoundingClientRect();\n var body = doc.body;\n var clientTop = el.clientTop || body.clientTop || 0;\n var clientLeft = el.clientLeft || body.clientLeft || 0;\n var scrollTop = el === win ? win.scrollY : el.scrollTop;\n var scrollLeft = el === win ? win.scrollX : el.scrollLeft;\n return {\n top: (box.top + scrollTop) - clientTop,\n left: (box.left + scrollLeft) - clientLeft,\n };\n }\n\n return null;\n }\n function styles() {\n if (this[0]) { return win.getComputedStyle(this[0], null); }\n return {};\n }\n function css(props, value) {\n var i;\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n if (this[0]) { return win.getComputedStyle(this[0], null).getPropertyValue(props); }\n } else {\n for (i = 0; i < this.length; i += 1) {\n // eslint-disable-next-line\n for (var prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n return this;\n }\n }\n if (arguments.length === 2 && typeof props === 'string') {\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n return this;\n }\n return this;\n }\n // Iterate over the collection passing elements to `callback`\n function each(callback) {\n // Don't bother continuing without a callback\n if (!callback) { return this; }\n // Iterate over the current collection\n for (var i = 0; i < this.length; i += 1) {\n // If the callback returns false\n if (callback.call(this[i], i, this[i]) === false) {\n // End the loop early\n return this;\n }\n }\n // Return `this` to allow chained DOM operations\n return this;\n }\n // eslint-disable-next-line\n function html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : undefined;\n }\n\n for (var i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n return this;\n }\n // eslint-disable-next-line\n function text(text) {\n if (typeof text === 'undefined') {\n if (this[0]) {\n return this[0].textContent.trim();\n }\n return null;\n }\n\n for (var i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n return this;\n }\n function is(selector) {\n var el = this[0];\n var compareWith;\n var i;\n if (!el || typeof selector === 'undefined') { return false; }\n if (typeof selector === 'string') {\n if (el.matches) { return el.matches(selector); }\n else if (el.webkitMatchesSelector) { return el.webkitMatchesSelector(selector); }\n else if (el.msMatchesSelector) { return el.msMatchesSelector(selector); }\n\n compareWith = $(selector);\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) { return true; }\n }\n return false;\n } else if (selector === doc) { return el === doc; }\n else if (selector === win) { return el === win; }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) { return true; }\n }\n return false;\n }\n return false;\n }\n function index() {\n var child = this[0];\n var i;\n if (child) {\n i = 0;\n // eslint-disable-next-line\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) { i += 1; }\n }\n return i;\n }\n return undefined;\n }\n // eslint-disable-next-line\n function eq(index) {\n if (typeof index === 'undefined') { return this; }\n var length = this.length;\n var returnIndex;\n if (index > length - 1) {\n return new Dom7([]);\n }\n if (index < 0) {\n returnIndex = length + index;\n if (returnIndex < 0) { return new Dom7([]); }\n return new Dom7([this[returnIndex]]);\n }\n return new Dom7([this[index]]);\n }\n function append() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var newChild;\n\n for (var k = 0; k < args.length; k += 1) {\n newChild = args[k];\n for (var i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n var tempDiv = doc.createElement('div');\n tempDiv.innerHTML = newChild;\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (var j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n }\n function prepend(newChild) {\n var i;\n var j;\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n var tempDiv = doc.createElement('div');\n tempDiv.innerHTML = newChild;\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n return this;\n }\n function next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return new Dom7([this[0].nextElementSibling]);\n }\n return new Dom7([]);\n }\n\n if (this[0].nextElementSibling) { return new Dom7([this[0].nextElementSibling]); }\n return new Dom7([]);\n }\n return new Dom7([]);\n }\n function nextAll(selector) {\n var nextEls = [];\n var el = this[0];\n if (!el) { return new Dom7([]); }\n while (el.nextElementSibling) {\n var next = el.nextElementSibling; // eslint-disable-line\n if (selector) {\n if ($(next).is(selector)) { nextEls.push(next); }\n } else { nextEls.push(next); }\n el = next;\n }\n return new Dom7(nextEls);\n }\n function prev(selector) {\n if (this.length > 0) {\n var el = this[0];\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return new Dom7([el.previousElementSibling]);\n }\n return new Dom7([]);\n }\n\n if (el.previousElementSibling) { return new Dom7([el.previousElementSibling]); }\n return new Dom7([]);\n }\n return new Dom7([]);\n }\n function prevAll(selector) {\n var prevEls = [];\n var el = this[0];\n if (!el) { return new Dom7([]); }\n while (el.previousElementSibling) {\n var prev = el.previousElementSibling; // eslint-disable-line\n if (selector) {\n if ($(prev).is(selector)) { prevEls.push(prev); }\n } else { prevEls.push(prev); }\n el = prev;\n }\n return new Dom7(prevEls);\n }\n function parent(selector) {\n var parents = []; // eslint-disable-line\n for (var i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) { parents.push(this[i].parentNode); }\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n return $(unique(parents));\n }\n function parents(selector) {\n var parents = []; // eslint-disable-line\n for (var i = 0; i < this.length; i += 1) {\n var parent = this[i].parentNode; // eslint-disable-line\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) { parents.push(parent); }\n } else {\n parents.push(parent);\n }\n parent = parent.parentNode;\n }\n }\n return $(unique(parents));\n }\n function closest(selector) {\n var closest = this; // eslint-disable-line\n if (typeof selector === 'undefined') {\n return new Dom7([]);\n }\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n return closest;\n }\n function find(selector) {\n var foundElements = [];\n for (var i = 0; i < this.length; i += 1) {\n var found = this[i].querySelectorAll(selector);\n for (var j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n return new Dom7(foundElements);\n }\n function children(selector) {\n var children = []; // eslint-disable-line\n for (var i = 0; i < this.length; i += 1) {\n var childNodes = this[i].childNodes;\n\n for (var j = 0; j < childNodes.length; j += 1) {\n if (!selector) {\n if (childNodes[j].nodeType === 1) { children.push(childNodes[j]); }\n } else if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n return new Dom7(unique(children));\n }\n function remove() {\n for (var i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) { this[i].parentNode.removeChild(this[i]); }\n }\n return this;\n }\n function add() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var dom = this;\n var i;\n var j;\n for (i = 0; i < args.length; i += 1) {\n var toAdd = $(args[i]);\n for (j = 0; j < toAdd.length; j += 1) {\n dom[dom.length] = toAdd[j];\n dom.length += 1;\n }\n }\n return dom;\n }\n\n var Methods = {\n addClass: addClass,\n removeClass: removeClass,\n hasClass: hasClass,\n toggleClass: toggleClass,\n attr: attr,\n removeAttr: removeAttr,\n data: data,\n transform: transform,\n transition: transition,\n on: on,\n off: off,\n trigger: trigger,\n transitionEnd: transitionEnd,\n outerWidth: outerWidth,\n outerHeight: outerHeight,\n offset: offset,\n css: css,\n each: each,\n html: html,\n text: text,\n is: is,\n index: index,\n eq: eq,\n append: append,\n prepend: prepend,\n next: next,\n nextAll: nextAll,\n prev: prev,\n prevAll: prevAll,\n parent: parent,\n parents: parents,\n closest: closest,\n find: find,\n children: children,\n remove: remove,\n add: add,\n styles: styles,\n };\n\n Object.keys(Methods).forEach(function (methodName) {\n $.fn[methodName] = $.fn[methodName] || Methods[methodName];\n });\n\n var Utils = {\n deleteProps: function deleteProps(obj) {\n var object = obj;\n Object.keys(object).forEach(function (key) {\n try {\n object[key] = null;\n } catch (e) {\n // no getter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n },\n nextTick: function nextTick(callback, delay) {\n if ( delay === void 0 ) delay = 0;\n\n return setTimeout(callback, delay);\n },\n now: function now() {\n return Date.now();\n },\n getTranslate: function getTranslate(el, axis) {\n if ( axis === void 0 ) axis = 'x';\n\n var matrix;\n var curTransform;\n var transformMatrix;\n\n var curStyle = win.getComputedStyle(el, null);\n\n if (win.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(function (a) { return a.replace(',', '.'); }).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new win.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (win.WebKitCSSMatrix) { curTransform = transformMatrix.m41; }\n // Crazy IE10 Matrix\n else if (matrix.length === 16) { curTransform = parseFloat(matrix[12]); }\n // Normal Browsers\n else { curTransform = parseFloat(matrix[4]); }\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (win.WebKitCSSMatrix) { curTransform = transformMatrix.m42; }\n // Crazy IE10 Matrix\n else if (matrix.length === 16) { curTransform = parseFloat(matrix[13]); }\n // Normal Browsers\n else { curTransform = parseFloat(matrix[5]); }\n }\n return curTransform || 0;\n },\n parseUrlQuery: function parseUrlQuery(url) {\n var query = {};\n var urlToParse = url || win.location.href;\n var i;\n var params;\n var param;\n var length;\n if (typeof urlToParse === 'string' && urlToParse.length) {\n urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\\S*\\?/, '') : '';\n params = urlToParse.split('&').filter(function (paramsPart) { return paramsPart !== ''; });\n length = params.length;\n\n for (i = 0; i < length; i += 1) {\n param = params[i].replace(/#\\S+/g, '').split('=');\n query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';\n }\n }\n return query;\n },\n isObject: function isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;\n },\n extend: function extend() {\n var args = [], len$1 = arguments.length;\n while ( len$1-- ) args[ len$1 ] = arguments[ len$1 ];\n\n var to = Object(args[0]);\n for (var i = 1; i < args.length; i += 1) {\n var nextSource = args[i];\n if (nextSource !== undefined && nextSource !== null) {\n var keysArray = Object.keys(Object(nextSource));\n for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n var nextKey = keysArray[nextIndex];\n var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n Utils.extend(to[nextKey], nextSource[nextKey]);\n } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n Utils.extend(to[nextKey], nextSource[nextKey]);\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n },\n };\n\n var Support = (function Support() {\n var testDiv = doc.createElement('div');\n return {\n touch: (win.Modernizr && win.Modernizr.touch === true) || (function checkTouch() {\n return !!((win.navigator.maxTouchPoints > 0) || ('ontouchstart' in win) || (win.DocumentTouch && doc instanceof win.DocumentTouch));\n }()),\n\n pointerEvents: !!(win.navigator.pointerEnabled || win.PointerEvent || ('maxTouchPoints' in win.navigator && win.navigator.maxTouchPoints > 0)),\n prefixedPointerEvents: !!win.navigator.msPointerEnabled,\n\n transition: (function checkTransition() {\n var style = testDiv.style;\n return ('transition' in style || 'webkitTransition' in style || 'MozTransition' in style);\n }()),\n transforms3d: (win.Modernizr && win.Modernizr.csstransforms3d === true) || (function checkTransforms3d() {\n var style = testDiv.style;\n return ('webkitPerspective' in style || 'MozPerspective' in style || 'OPerspective' in style || 'MsPerspective' in style || 'perspective' in style);\n }()),\n\n flexbox: (function checkFlexbox() {\n var style = testDiv.style;\n var styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' ');\n for (var i = 0; i < styles.length; i += 1) {\n if (styles[i] in style) { return true; }\n }\n return false;\n }()),\n\n observer: (function checkObserver() {\n return ('MutationObserver' in win || 'WebkitMutationObserver' in win);\n }()),\n\n passiveListener: (function checkPassiveListener() {\n var supportsPassive = false;\n try {\n var opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get: function get() {\n supportsPassive = true;\n },\n });\n win.addEventListener('testPassiveListener', null, opts);\n } catch (e) {\n // No support\n }\n return supportsPassive;\n }()),\n\n gestures: (function checkGestures() {\n return 'ongesturestart' in win;\n }()),\n };\n }());\n\n var Browser = (function Browser() {\n function isSafari() {\n var ua = win.navigator.userAgent.toLowerCase();\n return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);\n }\n return {\n isIE: !!win.navigator.userAgent.match(/Trident/g) || !!win.navigator.userAgent.match(/MSIE/g),\n isEdge: !!win.navigator.userAgent.match(/Edge/g),\n isSafari: isSafari(),\n isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(win.navigator.userAgent),\n };\n }());\n\n var SwiperClass = function SwiperClass(params) {\n if ( params === void 0 ) params = {};\n\n var self = this;\n self.params = params;\n\n // Events\n self.eventsListeners = {};\n\n if (self.params && self.params.on) {\n Object.keys(self.params.on).forEach(function (eventName) {\n self.on(eventName, self.params.on[eventName]);\n });\n }\n };\n\n var staticAccessors = { components: { configurable: true } };\n\n SwiperClass.prototype.on = function on (events, handler, priority) {\n var self = this;\n if (typeof handler !== 'function') { return self; }\n var method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(function (event) {\n if (!self.eventsListeners[event]) { self.eventsListeners[event] = []; }\n self.eventsListeners[event][method](handler);\n });\n return self;\n };\n\n SwiperClass.prototype.once = function once (events, handler, priority) {\n var self = this;\n if (typeof handler !== 'function') { return self; }\n function onceHandler() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n handler.apply(self, args);\n self.off(events, onceHandler);\n if (onceHandler.f7proxy) {\n delete onceHandler.f7proxy;\n }\n }\n onceHandler.f7proxy = handler;\n return self.on(events, onceHandler, priority);\n };\n\n SwiperClass.prototype.off = function off (events, handler) {\n var self = this;\n if (!self.eventsListeners) { return self; }\n events.split(' ').forEach(function (event) {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event] && self.eventsListeners[event].length) {\n self.eventsListeners[event].forEach(function (eventHandler, index) {\n if (eventHandler === handler || (eventHandler.f7proxy && eventHandler.f7proxy === handler)) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n };\n\n SwiperClass.prototype.emit = function emit () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var self = this;\n if (!self.eventsListeners) { return self; }\n var events;\n var data;\n var context;\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n var eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(function (event) {\n if (self.eventsListeners && self.eventsListeners[event]) {\n var handlers = [];\n self.eventsListeners[event].forEach(function (eventHandler) {\n handlers.push(eventHandler);\n });\n handlers.forEach(function (eventHandler) {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n };\n\n SwiperClass.prototype.useModulesParams = function useModulesParams (instanceParams) {\n var instance = this;\n if (!instance.modules) { return; }\n Object.keys(instance.modules).forEach(function (moduleName) {\n var module = instance.modules[moduleName];\n // Extend params\n if (module.params) {\n Utils.extend(instanceParams, module.params);\n }\n });\n };\n\n SwiperClass.prototype.useModules = function useModules (modulesParams) {\n if ( modulesParams === void 0 ) modulesParams = {};\n\n var instance = this;\n if (!instance.modules) { return; }\n Object.keys(instance.modules).forEach(function (moduleName) {\n var module = instance.modules[moduleName];\n var moduleParams = modulesParams[moduleName] || {};\n // Extend instance methods and props\n if (module.instance) {\n Object.keys(module.instance).forEach(function (modulePropName) {\n var moduleProp = module.instance[modulePropName];\n if (typeof moduleProp === 'function') {\n instance[modulePropName] = moduleProp.bind(instance);\n } else {\n instance[modulePropName] = moduleProp;\n }\n });\n }\n // Add event listeners\n if (module.on && instance.on) {\n Object.keys(module.on).forEach(function (moduleEventName) {\n instance.on(moduleEventName, module.on[moduleEventName]);\n });\n }\n\n // Module create callback\n if (module.create) {\n module.create.bind(instance)(moduleParams);\n }\n });\n };\n\n staticAccessors.components.set = function (components) {\n var Class = this;\n if (!Class.use) { return; }\n Class.use(components);\n };\n\n SwiperClass.installModule = function installModule (module) {\n var params = [], len = arguments.length - 1;\n while ( len-- > 0 ) params[ len ] = arguments[ len + 1 ];\n\n var Class = this;\n if (!Class.prototype.modules) { Class.prototype.modules = {}; }\n var name = module.name || (((Object.keys(Class.prototype.modules).length) + \"_\" + (Utils.now())));\n Class.prototype.modules[name] = module;\n // Prototype\n if (module.proto) {\n Object.keys(module.proto).forEach(function (key) {\n Class.prototype[key] = module.proto[key];\n });\n }\n // Class\n if (module.static) {\n Object.keys(module.static).forEach(function (key) {\n Class[key] = module.static[key];\n });\n }\n // Callback\n if (module.install) {\n module.install.apply(Class, params);\n }\n return Class;\n };\n\n SwiperClass.use = function use (module) {\n var params = [], len = arguments.length - 1;\n while ( len-- > 0 ) params[ len ] = arguments[ len + 1 ];\n\n var Class = this;\n if (Array.isArray(module)) {\n module.forEach(function (m) { return Class.installModule(m); });\n return Class;\n }\n return Class.installModule.apply(Class, [ module ].concat( params ));\n };\n\n Object.defineProperties( SwiperClass, staticAccessors );\n\n function updateSize () {\n var swiper = this;\n var width;\n var height;\n var $el = swiper.$el;\n if (typeof swiper.params.width !== 'undefined') {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined') {\n height = swiper.params.height;\n } else {\n height = $el[0].clientHeight;\n }\n if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) {\n return;\n }\n\n // Subtract paddings\n width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10);\n height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10);\n\n Utils.extend(swiper, {\n width: width,\n height: height,\n size: swiper.isHorizontal() ? width : height,\n });\n }\n\n function updateSlides () {\n var swiper = this;\n var params = swiper.params;\n\n var $wrapperEl = swiper.$wrapperEl;\n var swiperSize = swiper.size;\n var rtl = swiper.rtlTranslate;\n var wrongRTL = swiper.wrongRTL;\n var isVirtual = swiper.virtual && params.virtual.enabled;\n var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n var slides = $wrapperEl.children((\".\" + (swiper.params.slideClass)));\n var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n var snapGrid = [];\n var slidesGrid = [];\n var slidesSizesGrid = [];\n\n var offsetBefore = params.slidesOffsetBefore;\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n\n var offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n\n var previousSnapGridLength = swiper.snapGrid.length;\n var previousSlidesGridLength = swiper.snapGrid.length;\n\n var spaceBetween = params.spaceBetween;\n var slidePosition = -offsetBefore;\n var prevSlideSize = 0;\n var index = 0;\n if (typeof swiperSize === 'undefined') {\n return;\n }\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;\n }\n\n swiper.virtualSize = -spaceBetween;\n\n // reset margins\n if (rtl) { slides.css({ marginLeft: '', marginTop: '' }); }\n else { slides.css({ marginRight: '', marginBottom: '' }); }\n\n var slidesNumberEvenToRows;\n if (params.slidesPerColumn > 1) {\n if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {\n slidesNumberEvenToRows = slidesLength;\n } else {\n slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;\n }\n if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);\n }\n }\n\n // Calc slides\n var slideSize;\n var slidesPerColumn = params.slidesPerColumn;\n var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n var numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);\n for (var i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n var slide = slides.eq(i);\n if (params.slidesPerColumn > 1) {\n // Set slides order\n var newSlideOrderIndex = (void 0);\n var column = (void 0);\n var row = (void 0);\n if (\n (params.slidesPerColumnFill === 'column')\n || (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1)\n ) {\n if (params.slidesPerColumnFill === 'column') {\n column = Math.floor(i / slidesPerColumn);\n row = i - (column * slidesPerColumn);\n if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn - 1)) {\n row += 1;\n if (row >= slidesPerColumn) {\n row = 0;\n column += 1;\n }\n }\n } else {\n var groupIndex = Math.floor(i / params.slidesPerGroup);\n row = Math.floor(i / params.slidesPerView) - groupIndex * params.slidesPerColumn;\n column = i - row * params.slidesPerView - groupIndex * params.slidesPerView;\n }\n newSlideOrderIndex = column + ((row * slidesNumberEvenToRows) / slidesPerColumn);\n slide\n .css({\n '-webkit-box-ordinal-group': newSlideOrderIndex,\n '-moz-box-ordinal-group': newSlideOrderIndex,\n '-ms-flex-order': newSlideOrderIndex,\n '-webkit-order': newSlideOrderIndex,\n order: newSlideOrderIndex,\n });\n } else {\n row = Math.floor(i / slidesPerRow);\n column = i - (row * slidesPerRow);\n }\n slide\n .css(\n (\"margin-\" + (swiper.isHorizontal() ? 'top' : 'left')),\n (row !== 0 && params.spaceBetween) && (((params.spaceBetween) + \"px\"))\n )\n .attr('data-swiper-column', column)\n .attr('data-swiper-row', row);\n }\n if (slide.css('display') === 'none') { continue; } // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n var slideStyles = win.getComputedStyle(slide[0], null);\n var currentTransform = slide[0].style.transform;\n var currentWebKitTransform = slide[0].style.webkitTransform;\n if (currentTransform) {\n slide[0].style.transform = 'none';\n }\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal()\n ? slide.outerWidth(true)\n : slide.outerHeight(true);\n } else {\n // eslint-disable-next-line\n if (swiper.isHorizontal()) {\n var width = parseFloat(slideStyles.getPropertyValue('width'));\n var paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left'));\n var paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right'));\n var marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left'));\n var marginRight = parseFloat(slideStyles.getPropertyValue('margin-right'));\n var boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box' && !Browser.isIE) {\n slideSize = width + marginLeft + marginRight;\n } else {\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight;\n }\n } else {\n var height = parseFloat(slideStyles.getPropertyValue('height'));\n var paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top'));\n var paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom'));\n var marginTop = parseFloat(slideStyles.getPropertyValue('margin-top'));\n var marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom'));\n var boxSizing$1 = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing$1 && boxSizing$1 === 'border-box' && !Browser.isIE) {\n slideSize = height + marginTop + marginBottom;\n } else {\n slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom;\n }\n }\n }\n if (currentTransform) {\n slide[0].style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = currentWebKitTransform;\n }\n if (params.roundLengths) { slideSize = Math.floor(slideSize); }\n } else {\n slideSize = (swiperSize - ((params.slidesPerView - 1) * spaceBetween)) / params.slidesPerView;\n if (params.roundLengths) { slideSize = Math.floor(slideSize); }\n\n if (slides[i]) {\n if (swiper.isHorizontal()) {\n slides[i].style.width = slideSize + \"px\";\n } else {\n slides[i].style.height = slideSize + \"px\";\n }\n }\n }\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n\n\n if (params.centeredSlides) {\n slidePosition = slidePosition + (slideSize / 2) + (prevSlideSize / 2) + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) { slidePosition = slidePosition - (swiperSize / 2) - spaceBetween; }\n if (i === 0) { slidePosition = slidePosition - (swiperSize / 2) - spaceBetween; }\n if (Math.abs(slidePosition) < 1 / 1000) { slidePosition = 0; }\n if (params.roundLengths) { slidePosition = Math.floor(slidePosition); }\n if ((index) % params.slidesPerGroup === 0) { snapGrid.push(slidePosition); }\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) { slidePosition = Math.floor(slidePosition); }\n if ((index) % params.slidesPerGroup === 0) { snapGrid.push(slidePosition); }\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n\n swiper.virtualSize += slideSize + spaceBetween;\n\n prevSlideSize = slideSize;\n\n index += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n var newSlidesGrid;\n\n if (\n rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + \"px\") });\n }\n if (!Support.flexbox || params.setWrapperSize) {\n if (swiper.isHorizontal()) { $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n else { $wrapperEl.css({ height: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n }\n\n if (params.slidesPerColumn > 1) {\n swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;\n swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;\n if (swiper.isHorizontal()) { $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n else { $wrapperEl.css({ height: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n if (params.centeredSlides) {\n newSlidesGrid = [];\n for (var i$1 = 0; i$1 < snapGrid.length; i$1 += 1) {\n var slidesGridItem = snapGrid[i$1];\n if (params.roundLengths) { slidesGridItem = Math.floor(slidesGridItem); }\n if (snapGrid[i$1] < swiper.virtualSize + snapGrid[0]) { newSlidesGrid.push(slidesGridItem); }\n }\n snapGrid = newSlidesGrid;\n }\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n newSlidesGrid = [];\n for (var i$2 = 0; i$2 < snapGrid.length; i$2 += 1) {\n var slidesGridItem$1 = snapGrid[i$2];\n if (params.roundLengths) { slidesGridItem$1 = Math.floor(slidesGridItem$1); }\n if (snapGrid[i$2] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem$1);\n }\n }\n snapGrid = newSlidesGrid;\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n if (snapGrid.length === 0) { snapGrid = [0]; }\n\n if (params.spaceBetween !== 0) {\n if (swiper.isHorizontal()) {\n if (rtl) { slides.css({ marginLeft: (spaceBetween + \"px\") }); }\n else { slides.css({ marginRight: (spaceBetween + \"px\") }); }\n } else { slides.css({ marginBottom: (spaceBetween + \"px\") }); }\n }\n\n if (params.centerInsufficientSlides) {\n var allSlidesSize = 0;\n slidesSizesGrid.forEach(function (slideSizeValue) {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n if (allSlidesSize < swiperSize) {\n var allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach(function (snap, snapIndex) {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach(function (snap, snapIndex) {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n\n Utils.extend(swiper, {\n slides: slides,\n snapGrid: snapGrid,\n slidesGrid: slidesGrid,\n slidesSizesGrid: slidesSizesGrid,\n });\n\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) { swiper.checkOverflow(); }\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n\n if (params.watchSlidesProgress || params.watchSlidesVisibility) {\n swiper.updateSlidesOffset();\n }\n }\n\n function updateAutoHeight (speed) {\n var swiper = this;\n var activeSlides = [];\n var newHeight = 0;\n var i;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n var index = swiper.activeIndex + i;\n if (index > swiper.slides.length) { break; }\n activeSlides.push(swiper.slides.eq(index)[0]);\n }\n } else {\n activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n var height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight) { swiper.$wrapperEl.css('height', (newHeight + \"px\")); }\n }\n\n function updateSlidesOffset () {\n var swiper = this;\n var slides = swiper.slides;\n for (var i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n }\n }\n\n function updateSlidesProgress (translate) {\n if ( translate === void 0 ) translate = (this && this.translate) || 0;\n\n var swiper = this;\n var params = swiper.params;\n\n var slides = swiper.slides;\n var rtl = swiper.rtlTranslate;\n\n if (slides.length === 0) { return; }\n if (typeof slides[0].swiperSlideOffset === 'undefined') { swiper.updateSlidesOffset(); }\n\n var offsetCenter = -translate;\n if (rtl) { offsetCenter = translate; }\n\n // Visible Slides\n slides.removeClass(params.slideVisibleClass);\n\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n\n for (var i = 0; i < slides.length; i += 1) {\n var slide = slides[i];\n var slideProgress = (\n (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0)) - slide.swiperSlideOffset\n ) / (slide.swiperSlideSize + params.spaceBetween);\n if (params.watchSlidesVisibility) {\n var slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n var slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n var isVisible = (slideBefore >= 0 && slideBefore < swiper.size - 1)\n || (slideAfter > 1 && slideAfter <= swiper.size)\n || (slideBefore <= 0 && slideAfter >= swiper.size);\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides.eq(i).addClass(params.slideVisibleClass);\n }\n }\n slide.progress = rtl ? -slideProgress : slideProgress;\n }\n swiper.visibleSlides = $(swiper.visibleSlides);\n }\n\n function updateProgress (translate) {\n if ( translate === void 0 ) translate = (this && this.translate) || 0;\n\n var swiper = this;\n var params = swiper.params;\n\n var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n var progress = swiper.progress;\n var isBeginning = swiper.isBeginning;\n var isEnd = swiper.isEnd;\n var wasBeginning = isBeginning;\n var wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / (translatesDiff);\n isBeginning = progress <= 0;\n isEnd = progress >= 1;\n }\n Utils.extend(swiper, {\n progress: progress,\n isBeginning: isBeginning,\n isEnd: isEnd,\n });\n\n if (params.watchSlidesProgress || params.watchSlidesVisibility) { swiper.updateSlidesProgress(translate); }\n\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) {\n swiper.emit('fromEdge');\n }\n\n swiper.emit('progress', progress);\n }\n\n function updateSlidesClasses () {\n var swiper = this;\n\n var slides = swiper.slides;\n var params = swiper.params;\n var $wrapperEl = swiper.$wrapperEl;\n var activeIndex = swiper.activeIndex;\n var realIndex = swiper.realIndex;\n var isVirtual = swiper.virtual && params.virtual.enabled;\n\n slides.removeClass(((params.slideActiveClass) + \" \" + (params.slideNextClass) + \" \" + (params.slidePrevClass) + \" \" + (params.slideDuplicateActiveClass) + \" \" + (params.slideDuplicateNextClass) + \" \" + (params.slideDuplicatePrevClass)));\n\n var activeSlide;\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find((\".\" + (params.slideClass) + \"[data-swiper-slide-index=\\\"\" + activeIndex + \"\\\"]\"));\n } else {\n activeSlide = slides.eq(activeIndex);\n }\n\n // Active classes\n activeSlide.addClass(params.slideActiveClass);\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl\n .children((\".\" + (params.slideClass) + \":not(.\" + (params.slideDuplicateClass) + \")[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]\"))\n .addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl\n .children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]\"))\n .addClass(params.slideDuplicateActiveClass);\n }\n }\n // Next Slide\n var nextSlide = activeSlide.nextAll((\".\" + (params.slideClass))).eq(0).addClass(params.slideNextClass);\n if (params.loop && nextSlide.length === 0) {\n nextSlide = slides.eq(0);\n nextSlide.addClass(params.slideNextClass);\n }\n // Prev Slide\n var prevSlide = activeSlide.prevAll((\".\" + (params.slideClass))).eq(0).addClass(params.slidePrevClass);\n if (params.loop && prevSlide.length === 0) {\n prevSlide = slides.eq(-1);\n prevSlide.addClass(params.slidePrevClass);\n }\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl\n .children((\".\" + (params.slideClass) + \":not(.\" + (params.slideDuplicateClass) + \")[data-swiper-slide-index=\\\"\" + (nextSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n .addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl\n .children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + (nextSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n .addClass(params.slideDuplicateNextClass);\n }\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl\n .children((\".\" + (params.slideClass) + \":not(.\" + (params.slideDuplicateClass) + \")[data-swiper-slide-index=\\\"\" + (prevSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n .addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl\n .children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + (prevSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n .addClass(params.slideDuplicatePrevClass);\n }\n }\n }\n\n function updateActiveIndex (newActiveIndex) {\n var swiper = this;\n var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n var slidesGrid = swiper.slidesGrid;\n var snapGrid = swiper.snapGrid;\n var params = swiper.params;\n var previousIndex = swiper.activeIndex;\n var previousRealIndex = swiper.realIndex;\n var previousSnapIndex = swiper.snapIndex;\n var activeIndex = newActiveIndex;\n var snapIndex;\n if (typeof activeIndex === 'undefined') {\n for (var i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - ((slidesGrid[i + 1] - slidesGrid[i]) / 2)) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') { activeIndex = 0; }\n }\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n snapIndex = Math.floor(activeIndex / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) { snapIndex = snapGrid.length - 1; }\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n return;\n }\n\n // Get real index\n var realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n\n Utils.extend(swiper, {\n snapIndex: snapIndex,\n realIndex: realIndex,\n previousIndex: previousIndex,\n activeIndex: activeIndex,\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n if (swiper.initialized || swiper.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n }\n\n function updateClickedSlide (e) {\n var swiper = this;\n var params = swiper.params;\n var slide = $(e.target).closest((\".\" + (params.slideClass)))[0];\n var slideFound = false;\n if (slide) {\n for (var i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) { slideFound = true; }\n }\n }\n\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = $(slide).index();\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n }\n\n var update = {\n updateSize: updateSize,\n updateSlides: updateSlides,\n updateAutoHeight: updateAutoHeight,\n updateSlidesOffset: updateSlidesOffset,\n updateSlidesProgress: updateSlidesProgress,\n updateProgress: updateProgress,\n updateSlidesClasses: updateSlidesClasses,\n updateActiveIndex: updateActiveIndex,\n updateClickedSlide: updateClickedSlide,\n };\n\n function getTranslate (axis) {\n if ( axis === void 0 ) axis = this.isHorizontal() ? 'x' : 'y';\n\n var swiper = this;\n\n var params = swiper.params;\n var rtl = swiper.rtlTranslate;\n var translate = swiper.translate;\n var $wrapperEl = swiper.$wrapperEl;\n\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n\n var currentTranslate = Utils.getTranslate($wrapperEl[0], axis);\n if (rtl) { currentTranslate = -currentTranslate; }\n\n return currentTranslate || 0;\n }\n\n function setTranslate (translate, byController) {\n var swiper = this;\n var rtl = swiper.rtlTranslate;\n var params = swiper.params;\n var $wrapperEl = swiper.$wrapperEl;\n var progress = swiper.progress;\n var x = 0;\n var y = 0;\n var z = 0;\n\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n\n if (!params.virtualTranslate) {\n if (Support.transforms3d) { $wrapperEl.transform((\"translate3d(\" + x + \"px, \" + y + \"px, \" + z + \"px)\")); }\n else { $wrapperEl.transform((\"translate(\" + x + \"px, \" + y + \"px)\")); }\n }\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y;\n\n // Check if we need to update progress\n var newProgress;\n var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / (translatesDiff);\n }\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, byController);\n }\n\n function minTranslate () {\n return (-this.snapGrid[0]);\n }\n\n function maxTranslate () {\n return (-this.snapGrid[this.snapGrid.length - 1]);\n }\n\n var translate = {\n getTranslate: getTranslate,\n setTranslate: setTranslate,\n minTranslate: minTranslate,\n maxTranslate: maxTranslate,\n };\n\n function setTransition (duration, byController) {\n var swiper = this;\n\n swiper.$wrapperEl.transition(duration);\n\n swiper.emit('setTransition', duration, byController);\n }\n\n function transitionStart (runCallbacks, direction) {\n if ( runCallbacks === void 0 ) runCallbacks = true;\n\n var swiper = this;\n var activeIndex = swiper.activeIndex;\n var params = swiper.params;\n var previousIndex = swiper.previousIndex;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n var dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) { dir = 'next'; }\n else if (activeIndex < previousIndex) { dir = 'prev'; }\n else { dir = 'reset'; }\n }\n\n swiper.emit('transitionStart');\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit('slideResetTransitionStart');\n return;\n }\n swiper.emit('slideChangeTransitionStart');\n if (dir === 'next') {\n swiper.emit('slideNextTransitionStart');\n } else {\n swiper.emit('slidePrevTransitionStart');\n }\n }\n }\n\n function transitionEnd$1 (runCallbacks, direction) {\n if ( runCallbacks === void 0 ) runCallbacks = true;\n\n var swiper = this;\n var activeIndex = swiper.activeIndex;\n var previousIndex = swiper.previousIndex;\n swiper.animating = false;\n swiper.setTransition(0);\n\n var dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) { dir = 'next'; }\n else if (activeIndex < previousIndex) { dir = 'prev'; }\n else { dir = 'reset'; }\n }\n\n swiper.emit('transitionEnd');\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit('slideResetTransitionEnd');\n return;\n }\n swiper.emit('slideChangeTransitionEnd');\n if (dir === 'next') {\n swiper.emit('slideNextTransitionEnd');\n } else {\n swiper.emit('slidePrevTransitionEnd');\n }\n }\n }\n\n var transition$1 = {\n setTransition: setTransition,\n transitionStart: transitionStart,\n transitionEnd: transitionEnd$1,\n };\n\n function slideTo (index, speed, runCallbacks, internal) {\n if ( index === void 0 ) index = 0;\n if ( speed === void 0 ) speed = this.params.speed;\n if ( runCallbacks === void 0 ) runCallbacks = true;\n\n var swiper = this;\n var slideIndex = index;\n if (slideIndex < 0) { slideIndex = 0; }\n\n var params = swiper.params;\n var snapGrid = swiper.snapGrid;\n var slidesGrid = swiper.slidesGrid;\n var previousIndex = swiper.previousIndex;\n var activeIndex = swiper.activeIndex;\n var rtl = swiper.rtlTranslate;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n var snapIndex = Math.floor(slideIndex / params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) { snapIndex = snapGrid.length - 1; }\n\n if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n var translate = -snapGrid[snapIndex];\n\n // Update progress\n swiper.updateProgress(translate);\n\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (var i = 0; i < slidesGrid.length; i += 1) {\n if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n return false;\n }\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) { return false; }\n }\n }\n\n var direction;\n if (slideIndex > activeIndex) { direction = 'next'; }\n else if (slideIndex < activeIndex) { direction = 'prev'; }\n else { direction = 'reset'; }\n\n\n // Update Index\n if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n\n if (speed === 0 || !Support.transition) {\n swiper.setTransition(0);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) { return; }\n if (e.target !== this) { return; }\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n }\n }\n\n return true;\n }\n\n function slideToLoop (index, speed, runCallbacks, internal) {\n if ( index === void 0 ) index = 0;\n if ( speed === void 0 ) speed = this.params.speed;\n if ( runCallbacks === void 0 ) runCallbacks = true;\n\n var swiper = this;\n var newIndex = index;\n if (swiper.params.loop) {\n newIndex += swiper.loopedSlides;\n }\n\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n }\n\n /* eslint no-unused-vars: \"off\" */\n function slideNext (speed, runCallbacks, internal) {\n if ( speed === void 0 ) speed = this.params.speed;\n if ( runCallbacks === void 0 ) runCallbacks = true;\n\n var swiper = this;\n var params = swiper.params;\n var animating = swiper.animating;\n if (params.loop) {\n if (animating) { return false; }\n swiper.loopFix();\n // eslint-disable-next-line\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n return swiper.slideTo(swiper.activeIndex + params.slidesPerGroup, speed, runCallbacks, internal);\n }\n return swiper.slideTo(swiper.activeIndex + params.slidesPerGroup, speed, runCallbacks, internal);\n }\n\n /* eslint no-unused-vars: \"off\" */\n function slidePrev (speed, runCallbacks, internal) {\n if ( speed === void 0 ) speed = this.params.speed;\n if ( runCallbacks === void 0 ) runCallbacks = true;\n\n var swiper = this;\n var params = swiper.params;\n var animating = swiper.animating;\n var snapGrid = swiper.snapGrid;\n var slidesGrid = swiper.slidesGrid;\n var rtlTranslate = swiper.rtlTranslate;\n\n if (params.loop) {\n if (animating) { return false; }\n swiper.loopFix();\n // eslint-disable-next-line\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n var translate = rtlTranslate ? swiper.translate : -swiper.translate;\n function normalize(val) {\n if (val < 0) { return -Math.floor(Math.abs(val)); }\n return Math.floor(val);\n }\n var normalizedTranslate = normalize(translate);\n var normalizedSnapGrid = snapGrid.map(function (val) { return normalize(val); });\n var normalizedSlidesGrid = slidesGrid.map(function (val) { return normalize(val); });\n\n var currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];\n var prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n var prevIndex;\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) { prevIndex = swiper.activeIndex - 1; }\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n }\n\n /* eslint no-unused-vars: \"off\" */\n function slideReset (speed, runCallbacks, internal) {\n if ( speed === void 0 ) speed = this.params.speed;\n if ( runCallbacks === void 0 ) runCallbacks = true;\n\n var swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n }\n\n /* eslint no-unused-vars: \"off\" */\n function slideToClosest (speed, runCallbacks, internal) {\n if ( speed === void 0 ) speed = this.params.speed;\n if ( runCallbacks === void 0 ) runCallbacks = true;\n\n var swiper = this;\n var index = swiper.activeIndex;\n var snapIndex = Math.floor(index / swiper.params.slidesPerGroup);\n\n if (snapIndex < swiper.snapGrid.length - 1) {\n var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n var currentSnap = swiper.snapGrid[snapIndex];\n var nextSnap = swiper.snapGrid[snapIndex + 1];\n\n if ((translate - currentSnap) > (nextSnap - currentSnap) / 2) {\n index = swiper.params.slidesPerGroup;\n }\n }\n\n return swiper.slideTo(index, speed, runCallbacks, internal);\n }\n\n function slideToClickedSlide () {\n var swiper = this;\n var params = swiper.params;\n var $wrapperEl = swiper.$wrapperEl;\n\n var slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n var slideToIndex = swiper.clickedIndex;\n var realIndex;\n if (params.loop) {\n if (swiper.animating) { return; }\n realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n if (\n (slideToIndex < swiper.loopedSlides - (slidesPerView / 2))\n || (slideToIndex > (swiper.slides.length - swiper.loopedSlides) + (slidesPerView / 2))\n ) {\n swiper.loopFix();\n slideToIndex = $wrapperEl\n .children((\".\" + (params.slideClass) + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]:not(.\" + (params.slideDuplicateClass) + \")\"))\n .eq(0)\n .index();\n\n Utils.nextTick(function () {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = $wrapperEl\n .children((\".\" + (params.slideClass) + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]:not(.\" + (params.slideDuplicateClass) + \")\"))\n .eq(0)\n .index();\n\n Utils.nextTick(function () {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n }\n\n var slide = {\n slideTo: slideTo,\n slideToLoop: slideToLoop,\n slideNext: slideNext,\n slidePrev: slidePrev,\n slideReset: slideReset,\n slideToClosest: slideToClosest,\n slideToClickedSlide: slideToClickedSlide,\n };\n\n function loopCreate () {\n var swiper = this;\n var params = swiper.params;\n var $wrapperEl = swiper.$wrapperEl;\n // Remove duplicated slides\n $wrapperEl.children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass))).remove();\n\n var slides = $wrapperEl.children((\".\" + (params.slideClass)));\n\n if (params.loopFillGroupWithBlank) {\n var blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup);\n if (blankSlidesNum !== params.slidesPerGroup) {\n for (var i = 0; i < blankSlidesNum; i += 1) {\n var blankNode = $(doc.createElement('div')).addClass(((params.slideClass) + \" \" + (params.slideBlankClass)));\n $wrapperEl.append(blankNode);\n }\n slides = $wrapperEl.children((\".\" + (params.slideClass)));\n }\n }\n\n if (params.slidesPerView === 'auto' && !params.loopedSlides) { params.loopedSlides = slides.length; }\n\n swiper.loopedSlides = parseInt(params.loopedSlides || params.slidesPerView, 10);\n swiper.loopedSlides += params.loopAdditionalSlides;\n if (swiper.loopedSlides > slides.length) {\n swiper.loopedSlides = slides.length;\n }\n\n var prependSlides = [];\n var appendSlides = [];\n slides.each(function (index, el) {\n var slide = $(el);\n if (index < swiper.loopedSlides) { appendSlides.push(el); }\n if (index < slides.length && index >= slides.length - swiper.loopedSlides) { prependSlides.push(el); }\n slide.attr('data-swiper-slide-index', index);\n });\n for (var i$1 = 0; i$1 < appendSlides.length; i$1 += 1) {\n $wrapperEl.append($(appendSlides[i$1].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n for (var i$2 = prependSlides.length - 1; i$2 >= 0; i$2 -= 1) {\n $wrapperEl.prepend($(prependSlides[i$2].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n }\n\n function loopFix () {\n var swiper = this;\n var params = swiper.params;\n var activeIndex = swiper.activeIndex;\n var slides = swiper.slides;\n var loopedSlides = swiper.loopedSlides;\n var allowSlidePrev = swiper.allowSlidePrev;\n var allowSlideNext = swiper.allowSlideNext;\n var snapGrid = swiper.snapGrid;\n var rtl = swiper.rtlTranslate;\n var newIndex;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n\n var snapTranslate = -snapGrid[activeIndex];\n var diff = snapTranslate - swiper.getTranslate();\n\n\n // Fix For Negative Oversliding\n if (activeIndex < loopedSlides) {\n newIndex = (slides.length - (loopedSlides * 3)) + activeIndex;\n newIndex += loopedSlides;\n var slideChanged = swiper.slideTo(newIndex, 0, false, true);\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if ((params.slidesPerView === 'auto' && activeIndex >= loopedSlides * 2) || (activeIndex >= slides.length - loopedSlides)) {\n // Fix For Positive Oversliding\n newIndex = -slides.length + activeIndex + loopedSlides;\n newIndex += loopedSlides;\n var slideChanged$1 = swiper.slideTo(newIndex, 0, false, true);\n if (slideChanged$1 && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n }\n\n function loopDestroy () {\n var swiper = this;\n var $wrapperEl = swiper.$wrapperEl;\n var params = swiper.params;\n var slides = swiper.slides;\n $wrapperEl.children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \",.\" + (params.slideClass) + \".\" + (params.slideBlankClass))).remove();\n slides.removeAttr('data-swiper-slide-index');\n }\n\n var loop = {\n loopCreate: loopCreate,\n loopFix: loopFix,\n loopDestroy: loopDestroy,\n };\n\n function setGrabCursor (moving) {\n var swiper = this;\n if (Support.touch || !swiper.params.simulateTouch || (swiper.params.watchOverflow && swiper.isLocked)) { return; }\n var el = swiper.el;\n el.style.cursor = 'move';\n el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n }\n\n function unsetGrabCursor () {\n var swiper = this;\n if (Support.touch || (swiper.params.watchOverflow && swiper.isLocked)) { return; }\n swiper.el.style.cursor = '';\n }\n\n var grabCursor = {\n setGrabCursor: setGrabCursor,\n unsetGrabCursor: unsetGrabCursor,\n };\n\n function appendSlide (slides) {\n var swiper = this;\n var $wrapperEl = swiper.$wrapperEl;\n var params = swiper.params;\n if (params.loop) {\n swiper.loopDestroy();\n }\n if (typeof slides === 'object' && 'length' in slides) {\n for (var i = 0; i < slides.length; i += 1) {\n if (slides[i]) { $wrapperEl.append(slides[i]); }\n }\n } else {\n $wrapperEl.append(slides);\n }\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!(params.observer && Support.observer)) {\n swiper.update();\n }\n }\n\n function prependSlide (slides) {\n var swiper = this;\n var params = swiper.params;\n var $wrapperEl = swiper.$wrapperEl;\n var activeIndex = swiper.activeIndex;\n\n if (params.loop) {\n swiper.loopDestroy();\n }\n var newActiveIndex = activeIndex + 1;\n if (typeof slides === 'object' && 'length' in slides) {\n for (var i = 0; i < slides.length; i += 1) {\n if (slides[i]) { $wrapperEl.prepend(slides[i]); }\n }\n newActiveIndex = activeIndex + slides.length;\n } else {\n $wrapperEl.prepend(slides);\n }\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!(params.observer && Support.observer)) {\n swiper.update();\n }\n swiper.slideTo(newActiveIndex, 0, false);\n }\n\n function addSlide (index, slides) {\n var swiper = this;\n var $wrapperEl = swiper.$wrapperEl;\n var params = swiper.params;\n var activeIndex = swiper.activeIndex;\n var activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children((\".\" + (params.slideClass)));\n }\n var baseLength = swiper.slides.length;\n if (index <= 0) {\n swiper.prependSlide(slides);\n return;\n }\n if (index >= baseLength) {\n swiper.appendSlide(slides);\n return;\n }\n var newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n\n var slidesBuffer = [];\n for (var i = baseLength - 1; i >= index; i -= 1) {\n var currentSlide = swiper.slides.eq(i);\n currentSlide.remove();\n slidesBuffer.unshift(currentSlide);\n }\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (var i$1 = 0; i$1 < slides.length; i$1 += 1) {\n if (slides[i$1]) { $wrapperEl.append(slides[i$1]); }\n }\n newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n } else {\n $wrapperEl.append(slides);\n }\n\n for (var i$2 = 0; i$2 < slidesBuffer.length; i$2 += 1) {\n $wrapperEl.append(slidesBuffer[i$2]);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!(params.observer && Support.observer)) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n }\n\n function removeSlide (slidesIndexes) {\n var swiper = this;\n var params = swiper.params;\n var $wrapperEl = swiper.$wrapperEl;\n var activeIndex = swiper.activeIndex;\n\n var activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children((\".\" + (params.slideClass)));\n }\n var newActiveIndex = activeIndexBuffer;\n var indexToRemove;\n\n if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n for (var i = 0; i < slidesIndexes.length; i += 1) {\n indexToRemove = slidesIndexes[i];\n if (swiper.slides[indexToRemove]) { swiper.slides.eq(indexToRemove).remove(); }\n if (indexToRemove < newActiveIndex) { newActiveIndex -= 1; }\n }\n newActiveIndex = Math.max(newActiveIndex, 0);\n } else {\n indexToRemove = slidesIndexes;\n if (swiper.slides[indexToRemove]) { swiper.slides.eq(indexToRemove).remove(); }\n if (indexToRemove < newActiveIndex) { newActiveIndex -= 1; }\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!(params.observer && Support.observer)) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n }\n\n function removeAllSlides () {\n var swiper = this;\n\n var slidesIndexes = [];\n for (var i = 0; i < swiper.slides.length; i += 1) {\n slidesIndexes.push(i);\n }\n swiper.removeSlide(slidesIndexes);\n }\n\n var manipulation = {\n appendSlide: appendSlide,\n prependSlide: prependSlide,\n addSlide: addSlide,\n removeSlide: removeSlide,\n removeAllSlides: removeAllSlides,\n };\n\n var Device = (function Device() {\n var ua = win.navigator.userAgent;\n\n var device = {\n ios: false,\n android: false,\n androidChrome: false,\n desktop: false,\n windows: false,\n iphone: false,\n ipod: false,\n ipad: false,\n cordova: win.cordova || win.phonegap,\n phonegap: win.cordova || win.phonegap,\n };\n\n var windows = ua.match(/(Windows Phone);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n var ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n var iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n\n\n // Windows\n if (windows) {\n device.os = 'windows';\n device.osVersion = windows[2];\n device.windows = true;\n }\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.osVersion = android[2];\n device.android = true;\n device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n // iOS\n if (iphone && !ipod) {\n device.osVersion = iphone[2].replace(/_/g, '.');\n device.iphone = true;\n }\n if (ipad) {\n device.osVersion = ipad[2].replace(/_/g, '.');\n device.ipad = true;\n }\n if (ipod) {\n device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\n device.iphone = true;\n }\n // iOS 8+ changed UA\n if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {\n if (device.osVersion.split('.')[0] === '10') {\n device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];\n }\n }\n\n // Desktop\n device.desktop = !(device.os || device.android || device.webView);\n\n // Webview\n device.webView = (iphone || ipad || ipod) && ua.match(/.*AppleWebKit(?!.*Safari)/i);\n\n // Minimal UI\n if (device.os && device.os === 'ios') {\n var osVersionArr = device.osVersion.split('.');\n var metaViewport = doc.querySelector('meta[name=\"viewport\"]');\n device.minimalUi = !device.webView\n && (ipod || iphone)\n && (osVersionArr[0] * 1 === 7 ? osVersionArr[1] * 1 >= 1 : osVersionArr[0] * 1 > 7)\n && metaViewport && metaViewport.getAttribute('content').indexOf('minimal-ui') >= 0;\n }\n\n // Pixel Ratio\n device.pixelRatio = win.devicePixelRatio || 1;\n\n // Export object\n return device;\n }());\n\n function onTouchStart (event) {\n var swiper = this;\n var data = swiper.touchEventsData;\n var params = swiper.params;\n var touches = swiper.touches;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n var e = event;\n if (e.originalEvent) { e = e.originalEvent; }\n data.isTouchEvent = e.type === 'touchstart';\n if (!data.isTouchEvent && 'which' in e && e.which === 3) { return; }\n if (!data.isTouchEvent && 'button' in e && e.button > 0) { return; }\n if (data.isTouched && data.isMoved) { return; }\n if (params.noSwiping && $(e.target).closest(params.noSwipingSelector ? params.noSwipingSelector : (\".\" + (params.noSwipingClass)))[0]) {\n swiper.allowClick = true;\n return;\n }\n if (params.swipeHandler) {\n if (!$(e).closest(params.swipeHandler)[0]) { return; }\n }\n\n touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n var startX = touches.currentX;\n var startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore\n\n var edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n var edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n if (\n edgeSwipeDetection\n && ((startX <= edgeSwipeThreshold)\n || (startX >= win.screen.width - edgeSwipeThreshold))\n ) {\n return;\n }\n\n Utils.extend(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined,\n });\n\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = Utils.now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) { data.allowThresholdMove = false; }\n if (e.type !== 'touchstart') {\n var preventDefault = true;\n if ($(e.target).is(data.formElements)) { preventDefault = false; }\n if (\n doc.activeElement\n && $(doc.activeElement).is(data.formElements)\n && doc.activeElement !== e.target\n ) {\n doc.activeElement.blur();\n }\n\n var shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if (params.touchStartForcePreventDefault || shouldPreventDefault) {\n e.preventDefault();\n }\n }\n swiper.emit('touchStart', e);\n }\n\n function onTouchMove (event) {\n var swiper = this;\n var data = swiper.touchEventsData;\n var params = swiper.params;\n var touches = swiper.touches;\n var rtl = swiper.rtlTranslate;\n var e = event;\n if (e.originalEvent) { e = e.originalEvent; }\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n if (data.isTouchEvent && e.type === 'mousemove') { return; }\n var pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n var pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n // isMoved = true;\n swiper.allowClick = false;\n if (data.isTouched) {\n Utils.extend(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY,\n });\n data.touchStartTime = Utils.now();\n }\n return;\n }\n if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (\n (pageY < touches.startY && swiper.translate <= swiper.maxTranslate())\n || (pageY > touches.startY && swiper.translate >= swiper.minTranslate())\n ) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (\n (pageX < touches.startX && swiper.translate <= swiper.maxTranslate())\n || (pageX > touches.startX && swiper.translate >= swiper.minTranslate())\n ) {\n return;\n }\n }\n if (data.isTouchEvent && doc.activeElement) {\n if (e.target === doc.activeElement && $(e.target).is(data.formElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) { return; }\n\n touches.currentX = pageX;\n touches.currentY = pageY;\n\n var diffX = touches.currentX - touches.startX;\n var diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt((Math.pow( diffX, 2 )) + (Math.pow( diffY, 2 ))) < swiper.params.threshold) { return; }\n\n if (typeof data.isScrolling === 'undefined') {\n var touchAngle;\n if ((swiper.isHorizontal() && touches.currentY === touches.startY) || (swiper.isVertical() && touches.currentX === touches.startX)) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if ((diffX * diffX) + (diffY * diffY) >= 25) {\n touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : (90 - touchAngle > params.touchAngle);\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n e.preventDefault();\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data.isMoved) {\n if (params.loop) {\n swiper.loopFix();\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n\n var diff = swiper.isHorizontal() ? diffX : diffY;\n touches.diff = diff;\n\n diff *= params.touchRatio;\n if (rtl) { diff = -diff; }\n\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n data.currentTranslate = diff + data.startTranslate;\n\n var disableParentSwiper = true;\n var resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if ((diff > 0 && data.currentTranslate > swiper.minTranslate())) {\n disableParentSwiper = false;\n if (params.resistance) { data.currentTranslate = (swiper.minTranslate() - 1) + (Math.pow( (-swiper.minTranslate() + data.startTranslate + diff), resistanceRatio )); }\n } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) { data.currentTranslate = (swiper.maxTranslate() + 1) - (Math.pow( (swiper.maxTranslate() - data.startTranslate - diff), resistanceRatio )); }\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n\n if (!params.followFinger) { return; }\n\n // Update active index in free mode\n if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (params.freeMode) {\n // Velocity\n if (data.velocities.length === 0) {\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n time: data.touchStartTime,\n });\n }\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n time: Utils.now(),\n });\n }\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n }\n\n function onTouchEnd (event) {\n var swiper = this;\n var data = swiper.touchEventsData;\n\n var params = swiper.params;\n var touches = swiper.touches;\n var rtl = swiper.rtlTranslate;\n var $wrapperEl = swiper.$wrapperEl;\n var slidesGrid = swiper.slidesGrid;\n var snapGrid = swiper.snapGrid;\n var e = event;\n if (e.originalEvent) { e = e.originalEvent; }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n // Return Grab Cursor\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n var touchEndTime = Utils.now();\n var timeDiff = touchEndTime - data.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n swiper.updateClickedSlide(e);\n swiper.emit('tap', e);\n if (timeDiff < 300 && (touchEndTime - data.lastClickTime) > 300) {\n if (data.clickTimeout) { clearTimeout(data.clickTimeout); }\n data.clickTimeout = Utils.nextTick(function () {\n if (!swiper || swiper.destroyed) { return; }\n swiper.emit('click', e);\n }, 300);\n }\n if (timeDiff < 300 && (touchEndTime - data.lastClickTime) < 300) {\n if (data.clickTimeout) { clearTimeout(data.clickTimeout); }\n swiper.emit('doubleTap', e);\n }\n }\n\n data.lastClickTime = Utils.now();\n Utils.nextTick(function () {\n if (!swiper.destroyed) { swiper.allowClick = true; }\n });\n\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n\n var currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n\n if (params.freeMode) {\n if (currentPos < -swiper.minTranslate()) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (currentPos > -swiper.maxTranslate()) {\n if (swiper.slides.length < snapGrid.length) {\n swiper.slideTo(snapGrid.length - 1);\n } else {\n swiper.slideTo(swiper.slides.length - 1);\n }\n return;\n }\n\n if (params.freeModeMomentum) {\n if (data.velocities.length > 1) {\n var lastMoveEvent = data.velocities.pop();\n var velocityEvent = data.velocities.pop();\n\n var distance = lastMoveEvent.position - velocityEvent.position;\n var time = lastMoveEvent.time - velocityEvent.time;\n swiper.velocity = distance / time;\n swiper.velocity /= 2;\n if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {\n swiper.velocity = 0;\n }\n // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n if (time > 150 || (Utils.now() - lastMoveEvent.time) > 300) {\n swiper.velocity = 0;\n }\n } else {\n swiper.velocity = 0;\n }\n swiper.velocity *= params.freeModeMomentumVelocityRatio;\n\n data.velocities.length = 0;\n var momentumDuration = 1000 * params.freeModeMomentumRatio;\n var momentumDistance = swiper.velocity * momentumDuration;\n\n var newPosition = swiper.translate + momentumDistance;\n if (rtl) { newPosition = -newPosition; }\n\n var doBounce = false;\n var afterBouncePosition;\n var bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;\n var needsLoopFix;\n if (newPosition < swiper.maxTranslate()) {\n if (params.freeModeMomentumBounce) {\n if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n newPosition = swiper.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = swiper.maxTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.maxTranslate();\n }\n if (params.loop && params.centeredSlides) { needsLoopFix = true; }\n } else if (newPosition > swiper.minTranslate()) {\n if (params.freeModeMomentumBounce) {\n if (newPosition - swiper.minTranslate() > bounceAmount) {\n newPosition = swiper.minTranslate() + bounceAmount;\n }\n afterBouncePosition = swiper.minTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.minTranslate();\n }\n if (params.loop && params.centeredSlides) { needsLoopFix = true; }\n } else if (params.freeModeSticky) {\n var nextSlide;\n for (var j = 0; j < snapGrid.length; j += 1) {\n if (snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n }\n\n if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n newPosition = snapGrid[nextSlide];\n } else {\n newPosition = snapGrid[nextSlide - 1];\n }\n newPosition = -newPosition;\n }\n if (needsLoopFix) {\n swiper.once('transitionEnd', function () {\n swiper.loopFix();\n });\n }\n // Fix duration\n if (swiper.velocity !== 0) {\n if (rtl) {\n momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n } else {\n momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n }\n } else if (params.freeModeSticky) {\n swiper.slideToClosest();\n return;\n }\n\n if (params.freeModeMomentumBounce && doBounce) {\n swiper.updateProgress(afterBouncePosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n swiper.animating = true;\n $wrapperEl.transitionEnd(function () {\n if (!swiper || swiper.destroyed || !data.allowMomentumBounce) { return; }\n swiper.emit('momentumBounce');\n\n swiper.setTransition(params.speed);\n swiper.setTranslate(afterBouncePosition);\n $wrapperEl.transitionEnd(function () {\n if (!swiper || swiper.destroyed) { return; }\n swiper.transitionEnd();\n });\n });\n } else if (swiper.velocity) {\n swiper.updateProgress(newPosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n if (!swiper.animating) {\n swiper.animating = true;\n $wrapperEl.transitionEnd(function () {\n if (!swiper || swiper.destroyed) { return; }\n swiper.transitionEnd();\n });\n }\n } else {\n swiper.updateProgress(newPosition);\n }\n\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n } else if (params.freeModeSticky) {\n swiper.slideToClosest();\n return;\n }\n\n if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n return;\n }\n\n // Find current slide\n var stopIndex = 0;\n var groupSize = swiper.slidesSizesGrid[0];\n for (var i = 0; i < slidesGrid.length; i += params.slidesPerGroup) {\n if (typeof slidesGrid[i + params.slidesPerGroup] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + params.slidesPerGroup]) {\n stopIndex = i;\n groupSize = slidesGrid[i + params.slidesPerGroup] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n\n // Find current slide size\n var ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) { swiper.slideTo(stopIndex + params.slidesPerGroup); }\n else { swiper.slideTo(stopIndex); }\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > (1 - params.longSwipesRatio)) { swiper.slideTo(stopIndex + params.slidesPerGroup); }\n else { swiper.slideTo(stopIndex); }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(stopIndex + params.slidesPerGroup);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(stopIndex);\n }\n }\n }\n\n function onResize () {\n var swiper = this;\n\n var params = swiper.params;\n var el = swiper.el;\n\n if (el && el.offsetWidth === 0) { return; }\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n var allowSlideNext = swiper.allowSlideNext;\n var allowSlidePrev = swiper.allowSlidePrev;\n var snapGrid = swiper.snapGrid;\n\n // Disable locks on resize\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n\n swiper.updateSize();\n swiper.updateSlides();\n\n if (params.freeMode) {\n var newTranslate = Math.min(Math.max(swiper.translate, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n swiper.updateSlidesClasses();\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n }\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.run();\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n }\n\n function onClick (e) {\n var swiper = this;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) { e.preventDefault(); }\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n }\n\n function attachEvents() {\n var swiper = this;\n var params = swiper.params;\n var touchEvents = swiper.touchEvents;\n var el = swiper.el;\n var wrapperEl = swiper.wrapperEl;\n\n {\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n\n var target = params.touchEventsTarget === 'container' ? el : wrapperEl;\n var capture = !!params.nested;\n\n // Touch Events\n {\n if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {\n target.addEventListener(touchEvents.start, swiper.onTouchStart, false);\n doc.addEventListener(touchEvents.move, swiper.onTouchMove, capture);\n doc.addEventListener(touchEvents.end, swiper.onTouchEnd, false);\n } else {\n if (Support.touch) {\n var passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n target.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n target.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? { passive: false, capture: capture } : capture);\n target.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n }\n if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n target.addEventListener('mousedown', swiper.onTouchStart, false);\n doc.addEventListener('mousemove', swiper.onTouchMove, capture);\n doc.addEventListener('mouseup', swiper.onTouchEnd, false);\n }\n }\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n target.addEventListener('click', swiper.onClick, true);\n }\n }\n\n // Resize handler\n swiper.on((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize, true);\n }\n\n function detachEvents() {\n var swiper = this;\n\n var params = swiper.params;\n var touchEvents = swiper.touchEvents;\n var el = swiper.el;\n var wrapperEl = swiper.wrapperEl;\n\n var target = params.touchEventsTarget === 'container' ? el : wrapperEl;\n var capture = !!params.nested;\n\n // Touch Events\n {\n if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {\n target.removeEventListener(touchEvents.start, swiper.onTouchStart, false);\n doc.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n doc.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);\n } else {\n if (Support.touch) {\n var passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n target.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n target.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n target.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n }\n if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n target.removeEventListener('mousedown', swiper.onTouchStart, false);\n doc.removeEventListener('mousemove', swiper.onTouchMove, capture);\n doc.removeEventListener('mouseup', swiper.onTouchEnd, false);\n }\n }\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n target.removeEventListener('click', swiper.onClick, true);\n }\n }\n\n // Resize handler\n swiper.off((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize);\n }\n\n var events = {\n attachEvents: attachEvents,\n detachEvents: detachEvents,\n };\n\n function setBreakpoint () {\n var swiper = this;\n var activeIndex = swiper.activeIndex;\n var initialized = swiper.initialized;\n var loopedSlides = swiper.loopedSlides; if ( loopedSlides === void 0 ) loopedSlides = 0;\n var params = swiper.params;\n var breakpoints = params.breakpoints;\n if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) { return; }\n\n // Set breakpoint for window width and update parameters\n var breakpoint = swiper.getBreakpoint(breakpoints);\n\n if (breakpoint && swiper.currentBreakpoint !== breakpoint) {\n var breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n if (breakpointOnlyParams) {\n ['slidesPerView', 'spaceBetween', 'slidesPerGroup'].forEach(function (param) {\n var paramValue = breakpointOnlyParams[param];\n if (typeof paramValue === 'undefined') { return; }\n if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {\n breakpointOnlyParams[param] = 'auto';\n } else if (param === 'slidesPerView') {\n breakpointOnlyParams[param] = parseFloat(paramValue);\n } else {\n breakpointOnlyParams[param] = parseInt(paramValue, 10);\n }\n });\n }\n\n var breakpointParams = breakpointOnlyParams || swiper.originalParams;\n var directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n var needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n\n Utils.extend(swiper.params, breakpointParams);\n\n Utils.extend(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n });\n\n swiper.currentBreakpoint = breakpoint;\n\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate();\n swiper.updateSlides();\n swiper.slideTo((activeIndex - loopedSlides) + swiper.loopedSlides, 0, false);\n }\n\n swiper.emit('breakpoint', breakpointParams);\n }\n }\n\n function getBreakpoint (breakpoints) {\n var swiper = this;\n // Get breakpoint for window width\n if (!breakpoints) { return undefined; }\n var breakpoint = false;\n var points = [];\n Object.keys(breakpoints).forEach(function (point) {\n points.push(point);\n });\n points.sort(function (a, b) { return parseInt(a, 10) - parseInt(b, 10); });\n for (var i = 0; i < points.length; i += 1) {\n var point = points[i];\n if (swiper.params.breakpointsInverse) {\n if (point <= win.innerWidth) {\n breakpoint = point;\n }\n } else if (point >= win.innerWidth && !breakpoint) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n }\n\n var breakpoints = { setBreakpoint: setBreakpoint, getBreakpoint: getBreakpoint };\n\n function addClasses () {\n var swiper = this;\n var classNames = swiper.classNames;\n var params = swiper.params;\n var rtl = swiper.rtl;\n var $el = swiper.$el;\n var suffixes = [];\n\n suffixes.push('initialized');\n suffixes.push(params.direction);\n\n if (params.freeMode) {\n suffixes.push('free-mode');\n }\n if (!Support.flexbox) {\n suffixes.push('no-flexbox');\n }\n if (params.autoHeight) {\n suffixes.push('autoheight');\n }\n if (rtl) {\n suffixes.push('rtl');\n }\n if (params.slidesPerColumn > 1) {\n suffixes.push('multirow');\n }\n if (Device.android) {\n suffixes.push('android');\n }\n if (Device.ios) {\n suffixes.push('ios');\n }\n // WP8 Touch Events Fix\n if ((Browser.isIE || Browser.isEdge) && (Support.pointerEvents || Support.prefixedPointerEvents)) {\n suffixes.push((\"wp8-\" + (params.direction)));\n }\n\n suffixes.forEach(function (suffix) {\n classNames.push(params.containerModifierClass + suffix);\n });\n\n $el.addClass(classNames.join(' '));\n }\n\n function removeClasses () {\n var swiper = this;\n var $el = swiper.$el;\n var classNames = swiper.classNames;\n\n $el.removeClass(classNames.join(' '));\n }\n\n var classes = { addClasses: addClasses, removeClasses: removeClasses };\n\n function loadImage (imageEl, src, srcset, sizes, checkForComplete, callback) {\n var image;\n function onReady() {\n if (callback) { callback(); }\n }\n if (!imageEl.complete || !checkForComplete) {\n if (src) {\n image = new win.Image();\n image.onload = onReady;\n image.onerror = onReady;\n if (sizes) {\n image.sizes = sizes;\n }\n if (srcset) {\n image.srcset = srcset;\n }\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n } else {\n // image already loaded...\n onReady();\n }\n }\n\n function preloadImages () {\n var swiper = this;\n swiper.imagesToLoad = swiper.$el.find('img');\n function onReady() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) { return; }\n if (swiper.imagesLoaded !== undefined) { swiper.imagesLoaded += 1; }\n if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n if (swiper.params.updateOnImagesReady) { swiper.update(); }\n swiper.emit('imagesReady');\n }\n }\n for (var i = 0; i < swiper.imagesToLoad.length; i += 1) {\n var imageEl = swiper.imagesToLoad[i];\n swiper.loadImage(\n imageEl,\n imageEl.currentSrc || imageEl.getAttribute('src'),\n imageEl.srcset || imageEl.getAttribute('srcset'),\n imageEl.sizes || imageEl.getAttribute('sizes'),\n true,\n onReady\n );\n }\n }\n\n var images = {\n loadImage: loadImage,\n preloadImages: preloadImages,\n };\n\n function checkOverflow() {\n var swiper = this;\n var wasLocked = swiper.isLocked;\n\n swiper.isLocked = swiper.snapGrid.length === 1;\n swiper.allowSlideNext = !swiper.isLocked;\n swiper.allowSlidePrev = !swiper.isLocked;\n\n // events\n if (wasLocked !== swiper.isLocked) { swiper.emit(swiper.isLocked ? 'lock' : 'unlock'); }\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n swiper.navigation.update();\n }\n }\n\n var checkOverflow$1 = { checkOverflow: checkOverflow };\n\n var defaults = {\n init: true,\n direction: 'horizontal',\n touchEventsTarget: 'container',\n initialSlide: 0,\n speed: 300,\n //\n preventInteractionOnTransition: false,\n\n // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n\n // Free mode\n freeMode: false,\n freeModeMomentum: true,\n freeModeMomentumRatio: 1,\n freeModeMomentumBounce: true,\n freeModeMomentumBounceRatio: 1,\n freeModeMomentumVelocityRatio: 1,\n freeModeSticky: false,\n freeModeMinimumVelocity: 0.02,\n\n // Autoheight\n autoHeight: false,\n\n // Set wrapper width\n setWrapperSize: false,\n\n // Virtual Translate\n virtualTranslate: false,\n\n // Effects\n effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n // Breakpoints\n breakpoints: undefined,\n breakpointsInverse: false,\n\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerColumnFill: 'column',\n slidesPerGroup: 1,\n centeredSlides: false,\n slidesOffsetBefore: 0, // in px\n slidesOffsetAfter: 0, // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: false,\n\n // Round length\n roundLengths: false,\n\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 0,\n touchMoveStopPropagation: true,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n\n // Unique Navigation Elements\n uniqueNavElements: true,\n\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n\n // Progress\n watchSlidesProgress: false,\n watchSlidesVisibility: false,\n\n // Cursor\n grabCursor: false,\n\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n loopFillGroupWithBlank: false,\n\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null, // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n\n // Passive Listeners\n passiveListeners: true,\n\n // NS\n containerModifierClass: 'swiper-container-', // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-invisible-blank',\n slideActiveClass: 'swiper-slide-active',\n slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n slidePrevClass: 'swiper-slide-prev',\n slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n wrapperClass: 'swiper-wrapper',\n\n // Callbacks\n runCallbacksOnInit: true,\n };\n\n /* eslint no-param-reassign: \"off\" */\n\n var prototypes = {\n update: update,\n translate: translate,\n transition: transition$1,\n slide: slide,\n loop: loop,\n grabCursor: grabCursor,\n manipulation: manipulation,\n events: events,\n breakpoints: breakpoints,\n checkOverflow: checkOverflow$1,\n classes: classes,\n images: images,\n };\n\n var extendedDefaults = {};\n\n var Swiper = /*@__PURE__*/(function (SwiperClass) {\n function Swiper() {\n var assign;\n\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n var el;\n var params;\n if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {\n params = args[0];\n } else {\n (assign = args, el = assign[0], params = assign[1]);\n }\n if (!params) { params = {}; }\n\n params = Utils.extend({}, params);\n if (el && !params.el) { params.el = el; }\n\n SwiperClass.call(this, params);\n\n Object.keys(prototypes).forEach(function (prototypeGroup) {\n Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) {\n if (!Swiper.prototype[protoMethod]) {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n }\n });\n });\n\n // Swiper Instance\n var swiper = this;\n if (typeof swiper.modules === 'undefined') {\n swiper.modules = {};\n }\n Object.keys(swiper.modules).forEach(function (moduleName) {\n var module = swiper.modules[moduleName];\n if (module.params) {\n var moduleParamName = Object.keys(module.params)[0];\n var moduleParams = module.params[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) { return; }\n if (!(moduleParamName in params && 'enabled' in moduleParams)) { return; }\n if (params[moduleParamName] === true) {\n params[moduleParamName] = { enabled: true };\n }\n if (\n typeof params[moduleParamName] === 'object'\n && !('enabled' in params[moduleParamName])\n ) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) { params[moduleParamName] = { enabled: false }; }\n }\n });\n\n // Extend defaults with modules params\n var swiperParams = Utils.extend({}, defaults);\n swiper.useModulesParams(swiperParams);\n\n // Extend defaults with passed params\n swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = Utils.extend({}, swiper.params);\n swiper.passedParams = Utils.extend({}, params);\n\n // Save Dom lib\n swiper.$ = $;\n\n // Find el\n var $el = $(swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return undefined;\n }\n\n if ($el.length > 1) {\n var swipers = [];\n $el.each(function (index, containerEl) {\n var newParams = Utils.extend({}, params, { el: containerEl });\n swipers.push(new Swiper(newParams));\n });\n return swipers;\n }\n\n el.swiper = swiper;\n $el.data('swiper', swiper);\n\n // Find Wrapper\n var $wrapperEl = $el.children((\".\" + (swiper.params.wrapperClass)));\n\n // Extend Swiper\n Utils.extend(swiper, {\n $el: $el,\n el: el,\n $wrapperEl: $wrapperEl,\n wrapperEl: $wrapperEl[0],\n\n // Classes\n classNames: [],\n\n // Slides\n slides: $(),\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n\n // isDirection\n isHorizontal: function isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical: function isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // RTL\n rtl: (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongRTL: $wrapperEl.css('display') === '-webkit-box',\n\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n\n //\n isBeginning: true,\n isEnd: false,\n\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n\n // Touch Events\n touchEvents: (function touchEvents() {\n var touch = ['touchstart', 'touchmove', 'touchend'];\n var desktop = ['mousedown', 'mousemove', 'mouseup'];\n if (Support.pointerEvents) {\n desktop = ['pointerdown', 'pointermove', 'pointerup'];\n } else if (Support.prefixedPointerEvents) {\n desktop = ['MSPointerDown', 'MSPointerMove', 'MSPointerUp'];\n }\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2],\n };\n return Support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n }()),\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n formElements: 'input, select, option, textarea, button, video',\n // Last click time\n lastClickTime: Utils.now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n isTouchEvent: undefined,\n startMoving: undefined,\n },\n\n // Clicks\n allowClick: true,\n\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0,\n },\n\n // Images\n imagesToLoad: [],\n imagesLoaded: 0,\n\n });\n\n // Install Modules\n swiper.useModules();\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n return swiper;\n }\n\n if ( SwiperClass ) Swiper.__proto__ = SwiperClass;\n Swiper.prototype = Object.create( SwiperClass && SwiperClass.prototype );\n Swiper.prototype.constructor = Swiper;\n\n var staticAccessors = { extendedDefaults: { configurable: true },defaults: { configurable: true },Class: { configurable: true },$: { configurable: true } };\n\n Swiper.prototype.slidesPerViewDynamic = function slidesPerViewDynamic () {\n var swiper = this;\n var params = swiper.params;\n var slides = swiper.slides;\n var slidesGrid = swiper.slidesGrid;\n var swiperSize = swiper.size;\n var activeIndex = swiper.activeIndex;\n var spv = 1;\n if (params.centeredSlides) {\n var slideSize = slides[activeIndex].swiperSlideSize;\n var breakLoop;\n for (var i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) { breakLoop = true; }\n }\n }\n for (var i$1 = activeIndex - 1; i$1 >= 0; i$1 -= 1) {\n if (slides[i$1] && !breakLoop) {\n slideSize += slides[i$1].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) { breakLoop = true; }\n }\n }\n } else {\n for (var i$2 = activeIndex + 1; i$2 < slides.length; i$2 += 1) {\n if (slidesGrid[i$2] - slidesGrid[activeIndex] < swiperSize) {\n spv += 1;\n }\n }\n }\n return spv;\n };\n\n Swiper.prototype.update = function update () {\n var swiper = this;\n if (!swiper || swiper.destroyed) { return; }\n var snapGrid = swiper.snapGrid;\n var params = swiper.params;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n function setTranslate() {\n var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n var translated;\n if (swiper.params.freeMode) {\n setTranslate();\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n };\n\n Swiper.prototype.changeDirection = function changeDirection (newDirection, needUpdate) {\n if ( needUpdate === void 0 ) needUpdate = true;\n\n var swiper = this;\n var currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if ((newDirection === currentDirection) || (newDirection !== 'horizontal' && newDirection !== 'vertical')) {\n return swiper;\n }\n\n swiper.$el\n .removeClass((\"\" + (swiper.params.containerModifierClass) + currentDirection + \" wp8-\" + currentDirection))\n .addClass((\"\" + (swiper.params.containerModifierClass) + newDirection));\n\n if ((Browser.isIE || Browser.isEdge) && (Support.pointerEvents || Support.prefixedPointerEvents)) {\n swiper.$el.addClass(((swiper.params.containerModifierClass) + \"wp8-\" + newDirection));\n }\n\n swiper.params.direction = newDirection;\n\n swiper.slides.each(function (slideIndex, slideEl) {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n\n swiper.emit('changeDirection');\n if (needUpdate) { swiper.update(); }\n\n return swiper;\n };\n\n Swiper.prototype.init = function init () {\n var swiper = this;\n if (swiper.initialized) { return; }\n\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate();\n }\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n\n if (swiper.params.preloadImages) {\n swiper.preloadImages();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop) {\n swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);\n }\n\n // Attach events\n swiper.attachEvents();\n\n // Init Flag\n swiper.initialized = true;\n\n // Emit\n swiper.emit('init');\n };\n\n Swiper.prototype.destroy = function destroy (deleteInstance, cleanStyles) {\n if ( deleteInstance === void 0 ) deleteInstance = true;\n if ( cleanStyles === void 0 ) cleanStyles = true;\n\n var swiper = this;\n var params = swiper.params;\n var $el = swiper.$el;\n var $wrapperEl = swiper.$wrapperEl;\n var slides = swiper.slides;\n\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n $el.removeAttr('style');\n $wrapperEl.removeAttr('style');\n if (slides && slides.length) {\n slides\n .removeClass([\n params.slideVisibleClass,\n params.slideActiveClass,\n params.slideNextClass,\n params.slidePrevClass ].join(' '))\n .removeAttr('style')\n .removeAttr('data-swiper-slide-index')\n .removeAttr('data-swiper-column')\n .removeAttr('data-swiper-row');\n }\n }\n\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach(function (eventName) {\n swiper.off(eventName);\n });\n\n if (deleteInstance !== false) {\n swiper.$el[0].swiper = null;\n swiper.$el.data('swiper', null);\n Utils.deleteProps(swiper);\n }\n swiper.destroyed = true;\n\n return null;\n };\n\n Swiper.extendDefaults = function extendDefaults (newDefaults) {\n Utils.extend(extendedDefaults, newDefaults);\n };\n\n staticAccessors.extendedDefaults.get = function () {\n return extendedDefaults;\n };\n\n staticAccessors.defaults.get = function () {\n return defaults;\n };\n\n staticAccessors.Class.get = function () {\n return SwiperClass;\n };\n\n staticAccessors.$.get = function () {\n return $;\n };\n\n Object.defineProperties( Swiper, staticAccessors );\n\n return Swiper;\n }(SwiperClass));\n\n var Device$1 = {\n name: 'device',\n proto: {\n device: Device,\n },\n static: {\n device: Device,\n },\n };\n\n var Support$1 = {\n name: 'support',\n proto: {\n support: Support,\n },\n static: {\n support: Support,\n },\n };\n\n var Browser$1 = {\n name: 'browser',\n proto: {\n browser: Browser,\n },\n static: {\n browser: Browser,\n },\n };\n\n var Resize = {\n name: 'resize',\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n resize: {\n resizeHandler: function resizeHandler() {\n if (!swiper || swiper.destroyed || !swiper.initialized) { return; }\n swiper.emit('beforeResize');\n swiper.emit('resize');\n },\n orientationChangeHandler: function orientationChangeHandler() {\n if (!swiper || swiper.destroyed || !swiper.initialized) { return; }\n swiper.emit('orientationchange');\n },\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n // Emit resize\n win.addEventListener('resize', swiper.resize.resizeHandler);\n\n // Emit orientationchange\n win.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n },\n destroy: function destroy() {\n var swiper = this;\n win.removeEventListener('resize', swiper.resize.resizeHandler);\n win.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n },\n },\n };\n\n var Observer = {\n func: win.MutationObserver || win.WebkitMutationObserver,\n attach: function attach(target, options) {\n if ( options === void 0 ) options = {};\n\n var swiper = this;\n\n var ObserverFunc = Observer.func;\n var observer = new ObserverFunc(function (mutations) {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (mutations.length === 1) {\n swiper.emit('observerUpdate', mutations[0]);\n return;\n }\n var observerUpdate = function observerUpdate() {\n swiper.emit('observerUpdate', mutations[0]);\n };\n\n if (win.requestAnimationFrame) {\n win.requestAnimationFrame(observerUpdate);\n } else {\n win.setTimeout(observerUpdate, 0);\n }\n });\n\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData,\n });\n\n swiper.observer.observers.push(observer);\n },\n init: function init() {\n var swiper = this;\n if (!Support.observer || !swiper.params.observer) { return; }\n if (swiper.params.observeParents) {\n var containerParents = swiper.$el.parents();\n for (var i = 0; i < containerParents.length; i += 1) {\n swiper.observer.attach(containerParents[i]);\n }\n }\n // Observe container\n swiper.observer.attach(swiper.$el[0], { childList: swiper.params.observeSlideChildren });\n\n // Observe wrapper\n swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false });\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.observer.observers.forEach(function (observer) {\n observer.disconnect();\n });\n swiper.observer.observers = [];\n },\n };\n\n var Observer$1 = {\n name: 'observer',\n params: {\n observer: false,\n observeParents: false,\n observeSlideChildren: false,\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n observer: {\n init: Observer.init.bind(swiper),\n attach: Observer.attach.bind(swiper),\n destroy: Observer.destroy.bind(swiper),\n observers: [],\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n swiper.observer.init();\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.observer.destroy();\n },\n },\n };\n\n var Virtual = {\n update: function update(force) {\n var swiper = this;\n var ref = swiper.params;\n var slidesPerView = ref.slidesPerView;\n var slidesPerGroup = ref.slidesPerGroup;\n var centeredSlides = ref.centeredSlides;\n var ref$1 = swiper.params.virtual;\n var addSlidesBefore = ref$1.addSlidesBefore;\n var addSlidesAfter = ref$1.addSlidesAfter;\n var ref$2 = swiper.virtual;\n var previousFrom = ref$2.from;\n var previousTo = ref$2.to;\n var slides = ref$2.slides;\n var previousSlidesGrid = ref$2.slidesGrid;\n var renderSlide = ref$2.renderSlide;\n var previousOffset = ref$2.offset;\n swiper.updateActiveIndex();\n var activeIndex = swiper.activeIndex || 0;\n\n var offsetProp;\n if (swiper.rtlTranslate) { offsetProp = 'right'; }\n else { offsetProp = swiper.isHorizontal() ? 'left' : 'top'; }\n\n var slidesAfter;\n var slidesBefore;\n if (centeredSlides) {\n slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n } else {\n slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesBefore;\n slidesBefore = slidesPerGroup + addSlidesAfter;\n }\n var from = Math.max((activeIndex || 0) - slidesBefore, 0);\n var to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);\n var offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n\n Utils.extend(swiper.virtual, {\n from: from,\n to: to,\n offset: offset,\n slidesGrid: swiper.slidesGrid,\n });\n\n function onRendered() {\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n if (swiper.lazy && swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n }\n\n if (previousFrom === from && previousTo === to && !force) {\n if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\n swiper.slides.css(offsetProp, (offset + \"px\"));\n }\n swiper.updateProgress();\n return;\n }\n if (swiper.params.virtual.renderExternal) {\n swiper.params.virtual.renderExternal.call(swiper, {\n offset: offset,\n from: from,\n to: to,\n slides: (function getSlides() {\n var slidesToRender = [];\n for (var i = from; i <= to; i += 1) {\n slidesToRender.push(slides[i]);\n }\n return slidesToRender;\n }()),\n });\n onRendered();\n return;\n }\n var prependIndexes = [];\n var appendIndexes = [];\n if (force) {\n swiper.$wrapperEl.find((\".\" + (swiper.params.slideClass))).remove();\n } else {\n for (var i = previousFrom; i <= previousTo; i += 1) {\n if (i < from || i > to) {\n swiper.$wrapperEl.find((\".\" + (swiper.params.slideClass) + \"[data-swiper-slide-index=\\\"\" + i + \"\\\"]\")).remove();\n }\n }\n }\n for (var i$1 = 0; i$1 < slides.length; i$1 += 1) {\n if (i$1 >= from && i$1 <= to) {\n if (typeof previousTo === 'undefined' || force) {\n appendIndexes.push(i$1);\n } else {\n if (i$1 > previousTo) { appendIndexes.push(i$1); }\n if (i$1 < previousFrom) { prependIndexes.push(i$1); }\n }\n }\n }\n appendIndexes.forEach(function (index) {\n swiper.$wrapperEl.append(renderSlide(slides[index], index));\n });\n prependIndexes.sort(function (a, b) { return b - a; }).forEach(function (index) {\n swiper.$wrapperEl.prepend(renderSlide(slides[index], index));\n });\n swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, (offset + \"px\"));\n onRendered();\n },\n renderSlide: function renderSlide(slide, index) {\n var swiper = this;\n var params = swiper.params.virtual;\n if (params.cache && swiper.virtual.cache[index]) {\n return swiper.virtual.cache[index];\n }\n var $slideEl = params.renderSlide\n ? $(params.renderSlide.call(swiper, slide, index))\n : $((\"
\" + slide + \"
\"));\n if (!$slideEl.attr('data-swiper-slide-index')) { $slideEl.attr('data-swiper-slide-index', index); }\n if (params.cache) { swiper.virtual.cache[index] = $slideEl; }\n return $slideEl;\n },\n appendSlide: function appendSlide(slides) {\n var swiper = this;\n if (typeof slides === 'object' && 'length' in slides) {\n for (var i = 0; i < slides.length; i += 1) {\n if (slides[i]) { swiper.virtual.slides.push(slides[i]); }\n }\n } else {\n swiper.virtual.slides.push(slides);\n }\n swiper.virtual.update(true);\n },\n prependSlide: function prependSlide(slides) {\n var swiper = this;\n var activeIndex = swiper.activeIndex;\n var newActiveIndex = activeIndex + 1;\n var numberOfNewSlides = 1;\n\n if (Array.isArray(slides)) {\n for (var i = 0; i < slides.length; i += 1) {\n if (slides[i]) { swiper.virtual.slides.unshift(slides[i]); }\n }\n newActiveIndex = activeIndex + slides.length;\n numberOfNewSlides = slides.length;\n } else {\n swiper.virtual.slides.unshift(slides);\n }\n if (swiper.params.virtual.cache) {\n var cache = swiper.virtual.cache;\n var newCache = {};\n Object.keys(cache).forEach(function (cachedIndex) {\n newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = cache[cachedIndex];\n });\n swiper.virtual.cache = newCache;\n }\n swiper.virtual.update(true);\n swiper.slideTo(newActiveIndex, 0);\n },\n removeSlide: function removeSlide(slidesIndexes) {\n var swiper = this;\n if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) { return; }\n var activeIndex = swiper.activeIndex;\n if (Array.isArray(slidesIndexes)) {\n for (var i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n swiper.virtual.slides.splice(slidesIndexes[i], 1);\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes[i]];\n }\n if (slidesIndexes[i] < activeIndex) { activeIndex -= 1; }\n activeIndex = Math.max(activeIndex, 0);\n }\n } else {\n swiper.virtual.slides.splice(slidesIndexes, 1);\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes];\n }\n if (slidesIndexes < activeIndex) { activeIndex -= 1; }\n activeIndex = Math.max(activeIndex, 0);\n }\n swiper.virtual.update(true);\n swiper.slideTo(activeIndex, 0);\n },\n removeAllSlides: function removeAllSlides() {\n var swiper = this;\n swiper.virtual.slides = [];\n if (swiper.params.virtual.cache) {\n swiper.virtual.cache = {};\n }\n swiper.virtual.update(true);\n swiper.slideTo(0, 0);\n },\n };\n\n var Virtual$1 = {\n name: 'virtual',\n params: {\n virtual: {\n enabled: false,\n slides: [],\n cache: true,\n renderSlide: null,\n renderExternal: null,\n addSlidesBefore: 0,\n addSlidesAfter: 0,\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n virtual: {\n update: Virtual.update.bind(swiper),\n appendSlide: Virtual.appendSlide.bind(swiper),\n prependSlide: Virtual.prependSlide.bind(swiper),\n removeSlide: Virtual.removeSlide.bind(swiper),\n removeAllSlides: Virtual.removeAllSlides.bind(swiper),\n renderSlide: Virtual.renderSlide.bind(swiper),\n slides: swiper.params.virtual.slides,\n cache: {},\n },\n });\n },\n on: {\n beforeInit: function beforeInit() {\n var swiper = this;\n if (!swiper.params.virtual.enabled) { return; }\n swiper.classNames.push(((swiper.params.containerModifierClass) + \"virtual\"));\n var overwriteParams = {\n watchSlidesProgress: true,\n };\n Utils.extend(swiper.params, overwriteParams);\n Utils.extend(swiper.originalParams, overwriteParams);\n\n if (!swiper.params.initialSlide) {\n swiper.virtual.update();\n }\n },\n setTranslate: function setTranslate() {\n var swiper = this;\n if (!swiper.params.virtual.enabled) { return; }\n swiper.virtual.update();\n },\n },\n };\n\n var Keyboard = {\n handle: function handle(event) {\n var swiper = this;\n var rtl = swiper.rtlTranslate;\n var e = event;\n if (e.originalEvent) { e = e.originalEvent; } // jquery fix\n var kc = e.keyCode || e.charCode;\n // Directions locks\n if (!swiper.allowSlideNext && ((swiper.isHorizontal() && kc === 39) || (swiper.isVertical() && kc === 40) || kc === 34)) {\n return false;\n }\n if (!swiper.allowSlidePrev && ((swiper.isHorizontal() && kc === 37) || (swiper.isVertical() && kc === 38) || kc === 33)) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return undefined;\n }\n if (doc.activeElement && doc.activeElement.nodeName && (doc.activeElement.nodeName.toLowerCase() === 'input' || doc.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return undefined;\n }\n if (swiper.params.keyboard.onlyInViewport && (kc === 33 || kc === 34 || kc === 37 || kc === 39 || kc === 38 || kc === 40)) {\n var inView = false;\n // Check that swiper should be inside of visible area of window\n if (swiper.$el.parents((\".\" + (swiper.params.slideClass))).length > 0 && swiper.$el.parents((\".\" + (swiper.params.slideActiveClass))).length === 0) {\n return undefined;\n }\n var windowWidth = win.innerWidth;\n var windowHeight = win.innerHeight;\n var swiperOffset = swiper.$el.offset();\n if (rtl) { swiperOffset.left -= swiper.$el[0].scrollLeft; }\n var swiperCoord = [\n [swiperOffset.left, swiperOffset.top],\n [swiperOffset.left + swiper.width, swiperOffset.top],\n [swiperOffset.left, swiperOffset.top + swiper.height],\n [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height] ];\n for (var i = 0; i < swiperCoord.length; i += 1) {\n var point = swiperCoord[i];\n if (\n point[0] >= 0 && point[0] <= windowWidth\n && point[1] >= 0 && point[1] <= windowHeight\n ) {\n inView = true;\n }\n }\n if (!inView) { return undefined; }\n }\n if (swiper.isHorizontal()) {\n if (kc === 33 || kc === 34 || kc === 37 || kc === 39) {\n if (e.preventDefault) { e.preventDefault(); }\n else { e.returnValue = false; }\n }\n if (((kc === 34 || kc === 39) && !rtl) || ((kc === 33 || kc === 37) && rtl)) { swiper.slideNext(); }\n if (((kc === 33 || kc === 37) && !rtl) || ((kc === 34 || kc === 39) && rtl)) { swiper.slidePrev(); }\n } else {\n if (kc === 33 || kc === 34 || kc === 38 || kc === 40) {\n if (e.preventDefault) { e.preventDefault(); }\n else { e.returnValue = false; }\n }\n if (kc === 34 || kc === 40) { swiper.slideNext(); }\n if (kc === 33 || kc === 38) { swiper.slidePrev(); }\n }\n swiper.emit('keyPress', kc);\n return undefined;\n },\n enable: function enable() {\n var swiper = this;\n if (swiper.keyboard.enabled) { return; }\n $(doc).on('keydown', swiper.keyboard.handle);\n swiper.keyboard.enabled = true;\n },\n disable: function disable() {\n var swiper = this;\n if (!swiper.keyboard.enabled) { return; }\n $(doc).off('keydown', swiper.keyboard.handle);\n swiper.keyboard.enabled = false;\n },\n };\n\n var Keyboard$1 = {\n name: 'keyboard',\n params: {\n keyboard: {\n enabled: false,\n onlyInViewport: true,\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n keyboard: {\n enabled: false,\n enable: Keyboard.enable.bind(swiper),\n disable: Keyboard.disable.bind(swiper),\n handle: Keyboard.handle.bind(swiper),\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n if (swiper.params.keyboard.enabled) {\n swiper.keyboard.enable();\n }\n },\n destroy: function destroy() {\n var swiper = this;\n if (swiper.keyboard.enabled) {\n swiper.keyboard.disable();\n }\n },\n },\n };\n\n function isEventSupported() {\n var eventName = 'onwheel';\n var isSupported = eventName in doc;\n\n if (!isSupported) {\n var element = doc.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n\n if (!isSupported\n && doc.implementation\n && doc.implementation.hasFeature\n // always returns true in newer browsers as per the standard.\n // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n && doc.implementation.hasFeature('', '') !== true\n ) {\n // This is the only way to test support for the `wheel` event in IE9+.\n isSupported = doc.implementation.hasFeature('Events.wheel', '3.0');\n }\n\n return isSupported;\n }\n var Mousewheel = {\n lastScrollTime: Utils.now(),\n event: (function getEvent() {\n if (win.navigator.userAgent.indexOf('firefox') > -1) { return 'DOMMouseScroll'; }\n return isEventSupported() ? 'wheel' : 'mousewheel';\n }()),\n normalize: function normalize(e) {\n // Reasonable defaults\n var PIXEL_STEP = 10;\n var LINE_HEIGHT = 40;\n var PAGE_HEIGHT = 800;\n\n var sX = 0;\n var sY = 0; // spinX, spinY\n var pX = 0;\n var pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in e) {\n sY = e.detail;\n }\n if ('wheelDelta' in e) {\n sY = -e.wheelDelta / 120;\n }\n if ('wheelDeltaY' in e) {\n sY = -e.wheelDeltaY / 120;\n }\n if ('wheelDeltaX' in e) {\n sX = -e.wheelDeltaX / 120;\n }\n\n // side scrolling on FF with DOMMouseScroll\n if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n sX = sY;\n sY = 0;\n }\n\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n\n if ('deltaY' in e) {\n pY = e.deltaY;\n }\n if ('deltaX' in e) {\n pX = e.deltaX;\n }\n\n if ((pX || pY) && e.deltaMode) {\n if (e.deltaMode === 1) { // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else { // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) {\n sX = (pX < 1) ? -1 : 1;\n }\n if (pY && !sY) {\n sY = (pY < 1) ? -1 : 1;\n }\n\n return {\n spinX: sX,\n spinY: sY,\n pixelX: pX,\n pixelY: pY,\n };\n },\n handleMouseEnter: function handleMouseEnter() {\n var swiper = this;\n swiper.mouseEntered = true;\n },\n handleMouseLeave: function handleMouseLeave() {\n var swiper = this;\n swiper.mouseEntered = false;\n },\n handle: function handle(event) {\n var e = event;\n var swiper = this;\n var params = swiper.params.mousewheel;\n\n if (!swiper.mouseEntered && !params.releaseOnEdges) { return true; }\n\n if (e.originalEvent) { e = e.originalEvent; } // jquery fix\n var delta = 0;\n var rtlFactor = swiper.rtlTranslate ? -1 : 1;\n\n var data = Mousewheel.normalize(e);\n\n if (params.forceToAxis) {\n if (swiper.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) { delta = data.pixelX * rtlFactor; }\n else { return true; }\n } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) { delta = data.pixelY; }\n else { return true; }\n } else {\n delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n }\n\n if (delta === 0) { return true; }\n\n if (params.invert) { delta = -delta; }\n\n if (!swiper.params.freeMode) {\n if (Utils.now() - swiper.mousewheel.lastScrollTime > 60) {\n if (delta < 0) {\n if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n swiper.slideNext();\n swiper.emit('scroll', e);\n } else if (params.releaseOnEdges) { return true; }\n } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n swiper.slidePrev();\n swiper.emit('scroll', e);\n } else if (params.releaseOnEdges) { return true; }\n }\n swiper.mousewheel.lastScrollTime = (new win.Date()).getTime();\n } else {\n // Freemode or scrollContainer:\n if (swiper.params.loop) {\n swiper.loopFix();\n }\n var position = swiper.getTranslate() + (delta * params.sensitivity);\n var wasBeginning = swiper.isBeginning;\n var wasEnd = swiper.isEnd;\n\n if (position >= swiper.minTranslate()) { position = swiper.minTranslate(); }\n if (position <= swiper.maxTranslate()) { position = swiper.maxTranslate(); }\n\n swiper.setTransition(0);\n swiper.setTranslate(position);\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n\n if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) {\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeModeSticky) {\n clearTimeout(swiper.mousewheel.timeout);\n swiper.mousewheel.timeout = Utils.nextTick(function () {\n swiper.slideToClosest();\n }, 300);\n }\n // Emit event\n swiper.emit('scroll', e);\n\n // Stop autoplay\n if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) { swiper.autoplay.stop(); }\n // Return page scroll on edge positions\n if (position === swiper.minTranslate() || position === swiper.maxTranslate()) { return true; }\n }\n\n if (e.preventDefault) { e.preventDefault(); }\n else { e.returnValue = false; }\n return false;\n },\n enable: function enable() {\n var swiper = this;\n if (!Mousewheel.event) { return false; }\n if (swiper.mousewheel.enabled) { return false; }\n var target = swiper.$el;\n if (swiper.params.mousewheel.eventsTarged !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarged);\n }\n target.on('mouseenter', swiper.mousewheel.handleMouseEnter);\n target.on('mouseleave', swiper.mousewheel.handleMouseLeave);\n target.on(Mousewheel.event, swiper.mousewheel.handle);\n swiper.mousewheel.enabled = true;\n return true;\n },\n disable: function disable() {\n var swiper = this;\n if (!Mousewheel.event) { return false; }\n if (!swiper.mousewheel.enabled) { return false; }\n var target = swiper.$el;\n if (swiper.params.mousewheel.eventsTarged !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarged);\n }\n target.off(Mousewheel.event, swiper.mousewheel.handle);\n swiper.mousewheel.enabled = false;\n return true;\n },\n };\n\n var Mousewheel$1 = {\n name: 'mousewheel',\n params: {\n mousewheel: {\n enabled: false,\n releaseOnEdges: false,\n invert: false,\n forceToAxis: false,\n sensitivity: 1,\n eventsTarged: 'container',\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n mousewheel: {\n enabled: false,\n enable: Mousewheel.enable.bind(swiper),\n disable: Mousewheel.disable.bind(swiper),\n handle: Mousewheel.handle.bind(swiper),\n handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper),\n handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper),\n lastScrollTime: Utils.now(),\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n if (swiper.params.mousewheel.enabled) { swiper.mousewheel.enable(); }\n },\n destroy: function destroy() {\n var swiper = this;\n if (swiper.mousewheel.enabled) { swiper.mousewheel.disable(); }\n },\n },\n };\n\n var Navigation = {\n update: function update() {\n // Update Navigation Buttons\n var swiper = this;\n var params = swiper.params.navigation;\n\n if (swiper.params.loop) { return; }\n var ref = swiper.navigation;\n var $nextEl = ref.$nextEl;\n var $prevEl = ref.$prevEl;\n\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n $prevEl.addClass(params.disabledClass);\n } else {\n $prevEl.removeClass(params.disabledClass);\n }\n $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n $nextEl.addClass(params.disabledClass);\n } else {\n $nextEl.removeClass(params.disabledClass);\n }\n $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n },\n onPrevClick: function onPrevClick(e) {\n var swiper = this;\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop) { return; }\n swiper.slidePrev();\n },\n onNextClick: function onNextClick(e) {\n var swiper = this;\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop) { return; }\n swiper.slideNext();\n },\n init: function init() {\n var swiper = this;\n var params = swiper.params.navigation;\n if (!(params.nextEl || params.prevEl)) { return; }\n\n var $nextEl;\n var $prevEl;\n if (params.nextEl) {\n $nextEl = $(params.nextEl);\n if (\n swiper.params.uniqueNavElements\n && typeof params.nextEl === 'string'\n && $nextEl.length > 1\n && swiper.$el.find(params.nextEl).length === 1\n ) {\n $nextEl = swiper.$el.find(params.nextEl);\n }\n }\n if (params.prevEl) {\n $prevEl = $(params.prevEl);\n if (\n swiper.params.uniqueNavElements\n && typeof params.prevEl === 'string'\n && $prevEl.length > 1\n && swiper.$el.find(params.prevEl).length === 1\n ) {\n $prevEl = swiper.$el.find(params.prevEl);\n }\n }\n\n if ($nextEl && $nextEl.length > 0) {\n $nextEl.on('click', swiper.navigation.onNextClick);\n }\n if ($prevEl && $prevEl.length > 0) {\n $prevEl.on('click', swiper.navigation.onPrevClick);\n }\n\n Utils.extend(swiper.navigation, {\n $nextEl: $nextEl,\n nextEl: $nextEl && $nextEl[0],\n $prevEl: $prevEl,\n prevEl: $prevEl && $prevEl[0],\n });\n },\n destroy: function destroy() {\n var swiper = this;\n var ref = swiper.navigation;\n var $nextEl = ref.$nextEl;\n var $prevEl = ref.$prevEl;\n if ($nextEl && $nextEl.length) {\n $nextEl.off('click', swiper.navigation.onNextClick);\n $nextEl.removeClass(swiper.params.navigation.disabledClass);\n }\n if ($prevEl && $prevEl.length) {\n $prevEl.off('click', swiper.navigation.onPrevClick);\n $prevEl.removeClass(swiper.params.navigation.disabledClass);\n }\n },\n };\n\n var Navigation$1 = {\n name: 'navigation',\n params: {\n navigation: {\n nextEl: null,\n prevEl: null,\n\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n navigation: {\n init: Navigation.init.bind(swiper),\n update: Navigation.update.bind(swiper),\n destroy: Navigation.destroy.bind(swiper),\n onNextClick: Navigation.onNextClick.bind(swiper),\n onPrevClick: Navigation.onPrevClick.bind(swiper),\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n swiper.navigation.init();\n swiper.navigation.update();\n },\n toEdge: function toEdge() {\n var swiper = this;\n swiper.navigation.update();\n },\n fromEdge: function fromEdge() {\n var swiper = this;\n swiper.navigation.update();\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.navigation.destroy();\n },\n click: function click(e) {\n var swiper = this;\n var ref = swiper.navigation;\n var $nextEl = ref.$nextEl;\n var $prevEl = ref.$prevEl;\n if (\n swiper.params.navigation.hideOnClick\n && !$(e.target).is($prevEl)\n && !$(e.target).is($nextEl)\n ) {\n var isHidden;\n if ($nextEl) {\n isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n } else if ($prevEl) {\n isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n }\n if (isHidden === true) {\n swiper.emit('navigationShow', swiper);\n } else {\n swiper.emit('navigationHide', swiper);\n }\n if ($nextEl) {\n $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n if ($prevEl) {\n $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n }\n },\n },\n };\n\n var Pagination = {\n update: function update() {\n // Render || Update Pagination bullets/items\n var swiper = this;\n var rtl = swiper.rtl;\n var params = swiper.params.pagination;\n if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }\n var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n var $el = swiper.pagination.$el;\n // Current/Total\n var current;\n var total = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.loop) {\n current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n if (current > slidesLength - 1 - (swiper.loopedSlides * 2)) {\n current -= (slidesLength - (swiper.loopedSlides * 2));\n }\n if (current > total - 1) { current -= total; }\n if (current < 0 && swiper.params.paginationType !== 'bullets') { current = total + current; }\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n } else {\n current = swiper.activeIndex || 0;\n }\n // Types\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n var bullets = swiper.pagination.bullets;\n var firstIndex;\n var lastIndex;\n var midIndex;\n if (params.dynamicBullets) {\n swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n $el.css(swiper.isHorizontal() ? 'width' : 'height', ((swiper.pagination.bulletSize * (params.dynamicMainBullets + 4)) + \"px\"));\n if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n swiper.pagination.dynamicBulletIndex += (current - swiper.previousIndex);\n if (swiper.pagination.dynamicBulletIndex > (params.dynamicMainBullets - 1)) {\n swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (swiper.pagination.dynamicBulletIndex < 0) {\n swiper.pagination.dynamicBulletIndex = 0;\n }\n }\n firstIndex = current - swiper.pagination.dynamicBulletIndex;\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n bullets.removeClass(((params.bulletActiveClass) + \" \" + (params.bulletActiveClass) + \"-next \" + (params.bulletActiveClass) + \"-next-next \" + (params.bulletActiveClass) + \"-prev \" + (params.bulletActiveClass) + \"-prev-prev \" + (params.bulletActiveClass) + \"-main\"));\n if ($el.length > 1) {\n bullets.each(function (index, bullet) {\n var $bullet = $(bullet);\n var bulletIndex = $bullet.index();\n if (bulletIndex === current) {\n $bullet.addClass(params.bulletActiveClass);\n }\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n $bullet.addClass(((params.bulletActiveClass) + \"-main\"));\n }\n if (bulletIndex === firstIndex) {\n $bullet\n .prev()\n .addClass(((params.bulletActiveClass) + \"-prev\"))\n .prev()\n .addClass(((params.bulletActiveClass) + \"-prev-prev\"));\n }\n if (bulletIndex === lastIndex) {\n $bullet\n .next()\n .addClass(((params.bulletActiveClass) + \"-next\"))\n .next()\n .addClass(((params.bulletActiveClass) + \"-next-next\"));\n }\n }\n });\n } else {\n var $bullet = bullets.eq(current);\n $bullet.addClass(params.bulletActiveClass);\n if (params.dynamicBullets) {\n var $firstDisplayedBullet = bullets.eq(firstIndex);\n var $lastDisplayedBullet = bullets.eq(lastIndex);\n for (var i = firstIndex; i <= lastIndex; i += 1) {\n bullets.eq(i).addClass(((params.bulletActiveClass) + \"-main\"));\n }\n $firstDisplayedBullet\n .prev()\n .addClass(((params.bulletActiveClass) + \"-prev\"))\n .prev()\n .addClass(((params.bulletActiveClass) + \"-prev-prev\"));\n $lastDisplayedBullet\n .next()\n .addClass(((params.bulletActiveClass) + \"-next\"))\n .next()\n .addClass(((params.bulletActiveClass) + \"-next-next\"));\n }\n }\n if (params.dynamicBullets) {\n var dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n var bulletsOffset = (((swiper.pagination.bulletSize * dynamicBulletsLength) - (swiper.pagination.bulletSize)) / 2) - (midIndex * swiper.pagination.bulletSize);\n var offsetProp = rtl ? 'right' : 'left';\n bullets.css(swiper.isHorizontal() ? offsetProp : 'top', (bulletsOffset + \"px\"));\n }\n }\n if (params.type === 'fraction') {\n $el.find((\".\" + (params.currentClass))).text(params.formatFractionCurrent(current + 1));\n $el.find((\".\" + (params.totalClass))).text(params.formatFractionTotal(total));\n }\n if (params.type === 'progressbar') {\n var progressbarDirection;\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n var scale = (current + 1) / total;\n var scaleX = 1;\n var scaleY = 1;\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n $el.find((\".\" + (params.progressbarFillClass))).transform((\"translate3d(0,0,0) scaleX(\" + scaleX + \") scaleY(\" + scaleY + \")\")).transition(swiper.params.speed);\n }\n if (params.type === 'custom' && params.renderCustom) {\n $el.html(params.renderCustom(swiper, current + 1, total));\n swiper.emit('paginationRender', swiper, $el[0]);\n } else {\n swiper.emit('paginationUpdate', swiper, $el[0]);\n }\n $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n },\n render: function render() {\n // Render Container\n var swiper = this;\n var params = swiper.params.pagination;\n if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }\n var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n\n var $el = swiper.pagination.$el;\n var paginationHTML = '';\n if (params.type === 'bullets') {\n var numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n for (var i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n paginationHTML += \"<\" + (params.bulletElement) + \" class=\\\"\" + (params.bulletClass) + \"\\\">\";\n }\n }\n $el.html(paginationHTML);\n swiper.pagination.bullets = $el.find((\".\" + (params.bulletClass)));\n }\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = \"\"\n + ' / '\n + \"\";\n }\n $el.html(paginationHTML);\n }\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = \"\";\n }\n $el.html(paginationHTML);\n }\n if (params.type !== 'custom') {\n swiper.emit('paginationRender', swiper.pagination.$el[0]);\n }\n },\n init: function init() {\n var swiper = this;\n var params = swiper.params.pagination;\n if (!params.el) { return; }\n\n var $el = $(params.el);\n if ($el.length === 0) { return; }\n\n if (\n swiper.params.uniqueNavElements\n && typeof params.el === 'string'\n && $el.length > 1\n && swiper.$el.find(params.el).length === 1\n ) {\n $el = swiper.$el.find(params.el);\n }\n\n if (params.type === 'bullets' && params.clickable) {\n $el.addClass(params.clickableClass);\n }\n\n $el.addClass(params.modifierClass + params.type);\n\n if (params.type === 'bullets' && params.dynamicBullets) {\n $el.addClass((\"\" + (params.modifierClass) + (params.type) + \"-dynamic\"));\n swiper.pagination.dynamicBulletIndex = 0;\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n $el.addClass(params.progressbarOppositeClass);\n }\n\n if (params.clickable) {\n $el.on('click', (\".\" + (params.bulletClass)), function onClick(e) {\n e.preventDefault();\n var index = $(this).index() * swiper.params.slidesPerGroup;\n if (swiper.params.loop) { index += swiper.loopedSlides; }\n swiper.slideTo(index);\n });\n }\n\n Utils.extend(swiper.pagination, {\n $el: $el,\n el: $el[0],\n });\n },\n destroy: function destroy() {\n var swiper = this;\n var params = swiper.params.pagination;\n if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }\n var $el = swiper.pagination.$el;\n\n $el.removeClass(params.hiddenClass);\n $el.removeClass(params.modifierClass + params.type);\n if (swiper.pagination.bullets) { swiper.pagination.bullets.removeClass(params.bulletActiveClass); }\n if (params.clickable) {\n $el.off('click', (\".\" + (params.bulletClass)));\n }\n },\n };\n\n var Pagination$1 = {\n name: 'pagination',\n params: {\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: function (number) { return number; },\n formatFractionTotal: function (number) { return number; },\n bulletClass: 'swiper-pagination-bullet',\n bulletActiveClass: 'swiper-pagination-bullet-active',\n modifierClass: 'swiper-pagination-', // NEW\n currentClass: 'swiper-pagination-current',\n totalClass: 'swiper-pagination-total',\n hiddenClass: 'swiper-pagination-hidden',\n progressbarFillClass: 'swiper-pagination-progressbar-fill',\n progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',\n clickableClass: 'swiper-pagination-clickable', // NEW\n lockClass: 'swiper-pagination-lock',\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n pagination: {\n init: Pagination.init.bind(swiper),\n render: Pagination.render.bind(swiper),\n update: Pagination.update.bind(swiper),\n destroy: Pagination.destroy.bind(swiper),\n dynamicBulletIndex: 0,\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n swiper.pagination.init();\n swiper.pagination.render();\n swiper.pagination.update();\n },\n activeIndexChange: function activeIndexChange() {\n var swiper = this;\n if (swiper.params.loop) {\n swiper.pagination.update();\n } else if (typeof swiper.snapIndex === 'undefined') {\n swiper.pagination.update();\n }\n },\n snapIndexChange: function snapIndexChange() {\n var swiper = this;\n if (!swiper.params.loop) {\n swiper.pagination.update();\n }\n },\n slidesLengthChange: function slidesLengthChange() {\n var swiper = this;\n if (swiper.params.loop) {\n swiper.pagination.render();\n swiper.pagination.update();\n }\n },\n snapGridLengthChange: function snapGridLengthChange() {\n var swiper = this;\n if (!swiper.params.loop) {\n swiper.pagination.render();\n swiper.pagination.update();\n }\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.pagination.destroy();\n },\n click: function click(e) {\n var swiper = this;\n if (\n swiper.params.pagination.el\n && swiper.params.pagination.hideOnClick\n && swiper.pagination.$el.length > 0\n && !$(e.target).hasClass(swiper.params.pagination.bulletClass)\n ) {\n var isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);\n if (isHidden === true) {\n swiper.emit('paginationShow', swiper);\n } else {\n swiper.emit('paginationHide', swiper);\n }\n swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);\n }\n },\n },\n };\n\n var Scrollbar = {\n setTranslate: function setTranslate() {\n var swiper = this;\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) { return; }\n var scrollbar = swiper.scrollbar;\n var rtl = swiper.rtlTranslate;\n var progress = swiper.progress;\n var dragSize = scrollbar.dragSize;\n var trackSize = scrollbar.trackSize;\n var $dragEl = scrollbar.$dragEl;\n var $el = scrollbar.$el;\n var params = swiper.params.scrollbar;\n\n var newSize = dragSize;\n var newPos = (trackSize - dragSize) * progress;\n if (rtl) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = dragSize - newPos;\n newPos = 0;\n } else if (-newPos + dragSize > trackSize) {\n newSize = trackSize + newPos;\n }\n } else if (newPos < 0) {\n newSize = dragSize + newPos;\n newPos = 0;\n } else if (newPos + dragSize > trackSize) {\n newSize = trackSize - newPos;\n }\n if (swiper.isHorizontal()) {\n if (Support.transforms3d) {\n $dragEl.transform((\"translate3d(\" + newPos + \"px, 0, 0)\"));\n } else {\n $dragEl.transform((\"translateX(\" + newPos + \"px)\"));\n }\n $dragEl[0].style.width = newSize + \"px\";\n } else {\n if (Support.transforms3d) {\n $dragEl.transform((\"translate3d(0px, \" + newPos + \"px, 0)\"));\n } else {\n $dragEl.transform((\"translateY(\" + newPos + \"px)\"));\n }\n $dragEl[0].style.height = newSize + \"px\";\n }\n if (params.hide) {\n clearTimeout(swiper.scrollbar.timeout);\n $el[0].style.opacity = 1;\n swiper.scrollbar.timeout = setTimeout(function () {\n $el[0].style.opacity = 0;\n $el.transition(400);\n }, 1000);\n }\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) { return; }\n swiper.scrollbar.$dragEl.transition(duration);\n },\n updateSize: function updateSize() {\n var swiper = this;\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) { return; }\n\n var scrollbar = swiper.scrollbar;\n var $dragEl = scrollbar.$dragEl;\n var $el = scrollbar.$el;\n\n $dragEl[0].style.width = '';\n $dragEl[0].style.height = '';\n var trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n\n var divider = swiper.size / swiper.virtualSize;\n var moveDivider = divider * (trackSize / swiper.size);\n var dragSize;\n if (swiper.params.scrollbar.dragSize === 'auto') {\n dragSize = trackSize * divider;\n } else {\n dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n }\n\n if (swiper.isHorizontal()) {\n $dragEl[0].style.width = dragSize + \"px\";\n } else {\n $dragEl[0].style.height = dragSize + \"px\";\n }\n\n if (divider >= 1) {\n $el[0].style.display = 'none';\n } else {\n $el[0].style.display = '';\n }\n if (swiper.params.scrollbar.hide) {\n $el[0].style.opacity = 0;\n }\n Utils.extend(scrollbar, {\n trackSize: trackSize,\n divider: divider,\n moveDivider: moveDivider,\n dragSize: dragSize,\n });\n scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);\n },\n getPointerPosition: function getPointerPosition(e) {\n var swiper = this;\n if (swiper.isHorizontal()) {\n return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX);\n }\n return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY);\n },\n setDragPosition: function setDragPosition(e) {\n var swiper = this;\n var scrollbar = swiper.scrollbar;\n var rtl = swiper.rtlTranslate;\n var $el = scrollbar.$el;\n var dragSize = scrollbar.dragSize;\n var trackSize = scrollbar.trackSize;\n var dragStartPos = scrollbar.dragStartPos;\n\n var positionRatio;\n positionRatio = ((scrollbar.getPointerPosition(e)) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top']\n - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n\n var position = swiper.minTranslate() + ((swiper.maxTranslate() - swiper.minTranslate()) * positionRatio);\n\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n },\n onDragStart: function onDragStart(e) {\n var swiper = this;\n var params = swiper.params.scrollbar;\n var scrollbar = swiper.scrollbar;\n var $wrapperEl = swiper.$wrapperEl;\n var $el = scrollbar.$el;\n var $dragEl = scrollbar.$dragEl;\n swiper.scrollbar.isTouched = true;\n swiper.scrollbar.dragStartPos = (e.target === $dragEl[0] || e.target === $dragEl)\n ? scrollbar.getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n e.preventDefault();\n e.stopPropagation();\n\n $wrapperEl.transition(100);\n $dragEl.transition(100);\n scrollbar.setDragPosition(e);\n\n clearTimeout(swiper.scrollbar.dragTimeout);\n\n $el.transition(0);\n if (params.hide) {\n $el.css('opacity', 1);\n }\n swiper.emit('scrollbarDragStart', e);\n },\n onDragMove: function onDragMove(e) {\n var swiper = this;\n var scrollbar = swiper.scrollbar;\n var $wrapperEl = swiper.$wrapperEl;\n var $el = scrollbar.$el;\n var $dragEl = scrollbar.$dragEl;\n\n if (!swiper.scrollbar.isTouched) { return; }\n if (e.preventDefault) { e.preventDefault(); }\n else { e.returnValue = false; }\n scrollbar.setDragPosition(e);\n $wrapperEl.transition(0);\n $el.transition(0);\n $dragEl.transition(0);\n swiper.emit('scrollbarDragMove', e);\n },\n onDragEnd: function onDragEnd(e) {\n var swiper = this;\n\n var params = swiper.params.scrollbar;\n var scrollbar = swiper.scrollbar;\n var $el = scrollbar.$el;\n\n if (!swiper.scrollbar.isTouched) { return; }\n swiper.scrollbar.isTouched = false;\n if (params.hide) {\n clearTimeout(swiper.scrollbar.dragTimeout);\n swiper.scrollbar.dragTimeout = Utils.nextTick(function () {\n $el.css('opacity', 0);\n $el.transition(400);\n }, 1000);\n }\n swiper.emit('scrollbarDragEnd', e);\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n },\n enableDraggable: function enableDraggable() {\n var swiper = this;\n if (!swiper.params.scrollbar.el) { return; }\n var scrollbar = swiper.scrollbar;\n var touchEventsTouch = swiper.touchEventsTouch;\n var touchEventsDesktop = swiper.touchEventsDesktop;\n var params = swiper.params;\n var $el = scrollbar.$el;\n var target = $el[0];\n var activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;\n var passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n if (!Support.touch) {\n target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n doc.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n doc.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n } else {\n target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);\n target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);\n target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n }\n },\n disableDraggable: function disableDraggable() {\n var swiper = this;\n if (!swiper.params.scrollbar.el) { return; }\n var scrollbar = swiper.scrollbar;\n var touchEventsTouch = swiper.touchEventsTouch;\n var touchEventsDesktop = swiper.touchEventsDesktop;\n var params = swiper.params;\n var $el = scrollbar.$el;\n var target = $el[0];\n var activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;\n var passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n if (!Support.touch) {\n target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n doc.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n doc.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n } else {\n target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);\n target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);\n target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n }\n },\n init: function init() {\n var swiper = this;\n if (!swiper.params.scrollbar.el) { return; }\n var scrollbar = swiper.scrollbar;\n var $swiperEl = swiper.$el;\n var params = swiper.params.scrollbar;\n\n var $el = $(params.el);\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {\n $el = $swiperEl.find(params.el);\n }\n\n var $dragEl = $el.find((\".\" + (swiper.params.scrollbar.dragClass)));\n if ($dragEl.length === 0) {\n $dragEl = $((\"
\"));\n $el.append($dragEl);\n }\n\n Utils.extend(scrollbar, {\n $el: $el,\n el: $el[0],\n $dragEl: $dragEl,\n dragEl: $dragEl[0],\n });\n\n if (params.draggable) {\n scrollbar.enableDraggable();\n }\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.scrollbar.disableDraggable();\n },\n };\n\n var Scrollbar$1 = {\n name: 'scrollbar',\n params: {\n scrollbar: {\n el: null,\n dragSize: 'auto',\n hide: false,\n draggable: false,\n snapOnRelease: true,\n lockClass: 'swiper-scrollbar-lock',\n dragClass: 'swiper-scrollbar-drag',\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n scrollbar: {\n init: Scrollbar.init.bind(swiper),\n destroy: Scrollbar.destroy.bind(swiper),\n updateSize: Scrollbar.updateSize.bind(swiper),\n setTranslate: Scrollbar.setTranslate.bind(swiper),\n setTransition: Scrollbar.setTransition.bind(swiper),\n enableDraggable: Scrollbar.enableDraggable.bind(swiper),\n disableDraggable: Scrollbar.disableDraggable.bind(swiper),\n setDragPosition: Scrollbar.setDragPosition.bind(swiper),\n getPointerPosition: Scrollbar.getPointerPosition.bind(swiper),\n onDragStart: Scrollbar.onDragStart.bind(swiper),\n onDragMove: Scrollbar.onDragMove.bind(swiper),\n onDragEnd: Scrollbar.onDragEnd.bind(swiper),\n isTouched: false,\n timeout: null,\n dragTimeout: null,\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n swiper.scrollbar.init();\n swiper.scrollbar.updateSize();\n swiper.scrollbar.setTranslate();\n },\n update: function update() {\n var swiper = this;\n swiper.scrollbar.updateSize();\n },\n resize: function resize() {\n var swiper = this;\n swiper.scrollbar.updateSize();\n },\n observerUpdate: function observerUpdate() {\n var swiper = this;\n swiper.scrollbar.updateSize();\n },\n setTranslate: function setTranslate() {\n var swiper = this;\n swiper.scrollbar.setTranslate();\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n swiper.scrollbar.setTransition(duration);\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.scrollbar.destroy();\n },\n },\n };\n\n var Parallax = {\n setTransform: function setTransform(el, progress) {\n var swiper = this;\n var rtl = swiper.rtl;\n\n var $el = $(el);\n var rtlFactor = rtl ? -1 : 1;\n\n var p = $el.attr('data-swiper-parallax') || '0';\n var x = $el.attr('data-swiper-parallax-x');\n var y = $el.attr('data-swiper-parallax-y');\n var scale = $el.attr('data-swiper-parallax-scale');\n var opacity = $el.attr('data-swiper-parallax-opacity');\n\n if (x || y) {\n x = x || '0';\n y = y || '0';\n } else if (swiper.isHorizontal()) {\n x = p;\n y = '0';\n } else {\n y = p;\n x = '0';\n }\n\n if ((x).indexOf('%') >= 0) {\n x = (parseInt(x, 10) * progress * rtlFactor) + \"%\";\n } else {\n x = (x * progress * rtlFactor) + \"px\";\n }\n if ((y).indexOf('%') >= 0) {\n y = (parseInt(y, 10) * progress) + \"%\";\n } else {\n y = (y * progress) + \"px\";\n }\n\n if (typeof opacity !== 'undefined' && opacity !== null) {\n var currentOpacity = opacity - ((opacity - 1) * (1 - Math.abs(progress)));\n $el[0].style.opacity = currentOpacity;\n }\n if (typeof scale === 'undefined' || scale === null) {\n $el.transform((\"translate3d(\" + x + \", \" + y + \", 0px)\"));\n } else {\n var currentScale = scale - ((scale - 1) * (1 - Math.abs(progress)));\n $el.transform((\"translate3d(\" + x + \", \" + y + \", 0px) scale(\" + currentScale + \")\"));\n }\n },\n setTranslate: function setTranslate() {\n var swiper = this;\n var $el = swiper.$el;\n var slides = swiper.slides;\n var progress = swiper.progress;\n var snapGrid = swiper.snapGrid;\n $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n .each(function (index, el) {\n swiper.parallax.setTransform(el, progress);\n });\n slides.each(function (slideIndex, slideEl) {\n var slideProgress = slideEl.progress;\n if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n slideProgress += Math.ceil(slideIndex / 2) - (progress * (snapGrid.length - 1));\n }\n slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n .each(function (index, el) {\n swiper.parallax.setTransform(el, slideProgress);\n });\n });\n },\n setTransition: function setTransition(duration) {\n if ( duration === void 0 ) duration = this.params.speed;\n\n var swiper = this;\n var $el = swiper.$el;\n $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n .each(function (index, parallaxEl) {\n var $parallaxEl = $(parallaxEl);\n var parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) { parallaxDuration = 0; }\n $parallaxEl.transition(parallaxDuration);\n });\n },\n };\n\n var Parallax$1 = {\n name: 'parallax',\n params: {\n parallax: {\n enabled: false,\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n parallax: {\n setTransform: Parallax.setTransform.bind(swiper),\n setTranslate: Parallax.setTranslate.bind(swiper),\n setTransition: Parallax.setTransition.bind(swiper),\n },\n });\n },\n on: {\n beforeInit: function beforeInit() {\n var swiper = this;\n if (!swiper.params.parallax.enabled) { return; }\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n },\n init: function init() {\n var swiper = this;\n if (!swiper.params.parallax.enabled) { return; }\n swiper.parallax.setTranslate();\n },\n setTranslate: function setTranslate() {\n var swiper = this;\n if (!swiper.params.parallax.enabled) { return; }\n swiper.parallax.setTranslate();\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n if (!swiper.params.parallax.enabled) { return; }\n swiper.parallax.setTransition(duration);\n },\n },\n };\n\n var Zoom = {\n // Calc Scale From Multi-touches\n getDistanceBetweenTouches: function getDistanceBetweenTouches(e) {\n if (e.targetTouches.length < 2) { return 1; }\n var x1 = e.targetTouches[0].pageX;\n var y1 = e.targetTouches[0].pageY;\n var x2 = e.targetTouches[1].pageX;\n var y2 = e.targetTouches[1].pageY;\n var distance = Math.sqrt((Math.pow( (x2 - x1), 2 )) + (Math.pow( (y2 - y1), 2 )));\n return distance;\n },\n // Events\n onGestureStart: function onGestureStart(e) {\n var swiper = this;\n var params = swiper.params.zoom;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture;\n zoom.fakeGestureTouched = false;\n zoom.fakeGestureMoved = false;\n if (!Support.gestures) {\n if (e.type !== 'touchstart' || (e.type === 'touchstart' && e.targetTouches.length < 2)) {\n return;\n }\n zoom.fakeGestureTouched = true;\n gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);\n }\n if (!gesture.$slideEl || !gesture.$slideEl.length) {\n gesture.$slideEl = $(e.target).closest('.swiper-slide');\n if (gesture.$slideEl.length === 0) { gesture.$slideEl = swiper.slides.eq(swiper.activeIndex); }\n gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');\n gesture.$imageWrapEl = gesture.$imageEl.parent((\".\" + (params.containerClass)));\n gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n if (gesture.$imageWrapEl.length === 0) {\n gesture.$imageEl = undefined;\n return;\n }\n }\n gesture.$imageEl.transition(0);\n swiper.zoom.isScaling = true;\n },\n onGestureChange: function onGestureChange(e) {\n var swiper = this;\n var params = swiper.params.zoom;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture;\n if (!Support.gestures) {\n if (e.type !== 'touchmove' || (e.type === 'touchmove' && e.targetTouches.length < 2)) {\n return;\n }\n zoom.fakeGestureMoved = true;\n gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);\n }\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n if (Support.gestures) {\n zoom.scale = e.scale * zoom.currentScale;\n } else {\n zoom.scale = (gesture.scaleMove / gesture.scaleStart) * zoom.currentScale;\n }\n if (zoom.scale > gesture.maxRatio) {\n zoom.scale = (gesture.maxRatio - 1) + (Math.pow( ((zoom.scale - gesture.maxRatio) + 1), 0.5 ));\n }\n if (zoom.scale < params.minRatio) {\n zoom.scale = (params.minRatio + 1) - (Math.pow( ((params.minRatio - zoom.scale) + 1), 0.5 ));\n }\n gesture.$imageEl.transform((\"translate3d(0,0,0) scale(\" + (zoom.scale) + \")\"));\n },\n onGestureEnd: function onGestureEnd(e) {\n var swiper = this;\n var params = swiper.params.zoom;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture;\n if (!Support.gestures) {\n if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {\n return;\n }\n if (e.type !== 'touchend' || (e.type === 'touchend' && e.changedTouches.length < 2 && !Device.android)) {\n return;\n }\n zoom.fakeGestureTouched = false;\n zoom.fakeGestureMoved = false;\n }\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n gesture.$imageEl.transition(swiper.params.speed).transform((\"translate3d(0,0,0) scale(\" + (zoom.scale) + \")\"));\n zoom.currentScale = zoom.scale;\n zoom.isScaling = false;\n if (zoom.scale === 1) { gesture.$slideEl = undefined; }\n },\n onTouchStart: function onTouchStart(e) {\n var swiper = this;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture;\n var image = zoom.image;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n if (image.isTouched) { return; }\n if (Device.android) { e.preventDefault(); }\n image.isTouched = true;\n image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n },\n onTouchMove: function onTouchMove(e) {\n var swiper = this;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture;\n var image = zoom.image;\n var velocity = zoom.velocity;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n swiper.allowClick = false;\n if (!image.isTouched || !gesture.$slideEl) { return; }\n\n if (!image.isMoved) {\n image.width = gesture.$imageEl[0].offsetWidth;\n image.height = gesture.$imageEl[0].offsetHeight;\n image.startX = Utils.getTranslate(gesture.$imageWrapEl[0], 'x') || 0;\n image.startY = Utils.getTranslate(gesture.$imageWrapEl[0], 'y') || 0;\n gesture.slideWidth = gesture.$slideEl[0].offsetWidth;\n gesture.slideHeight = gesture.$slideEl[0].offsetHeight;\n gesture.$imageWrapEl.transition(0);\n if (swiper.rtl) {\n image.startX = -image.startX;\n image.startY = -image.startY;\n }\n }\n // Define if we need image drag\n var scaledWidth = image.width * zoom.scale;\n var scaledHeight = image.height * zoom.scale;\n\n if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) { return; }\n\n image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);\n image.maxX = -image.minX;\n image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);\n image.maxY = -image.minY;\n\n image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n\n if (!image.isMoved && !zoom.isScaling) {\n if (\n swiper.isHorizontal()\n && (\n (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x)\n || (Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)\n )\n ) {\n image.isTouched = false;\n return;\n } if (\n !swiper.isHorizontal()\n && (\n (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y)\n || (Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)\n )\n ) {\n image.isTouched = false;\n return;\n }\n }\n e.preventDefault();\n e.stopPropagation();\n\n image.isMoved = true;\n image.currentX = (image.touchesCurrent.x - image.touchesStart.x) + image.startX;\n image.currentY = (image.touchesCurrent.y - image.touchesStart.y) + image.startY;\n\n if (image.currentX < image.minX) {\n image.currentX = (image.minX + 1) - (Math.pow( ((image.minX - image.currentX) + 1), 0.8 ));\n }\n if (image.currentX > image.maxX) {\n image.currentX = (image.maxX - 1) + (Math.pow( ((image.currentX - image.maxX) + 1), 0.8 ));\n }\n\n if (image.currentY < image.minY) {\n image.currentY = (image.minY + 1) - (Math.pow( ((image.minY - image.currentY) + 1), 0.8 ));\n }\n if (image.currentY > image.maxY) {\n image.currentY = (image.maxY - 1) + (Math.pow( ((image.currentY - image.maxY) + 1), 0.8 ));\n }\n\n // Velocity\n if (!velocity.prevPositionX) { velocity.prevPositionX = image.touchesCurrent.x; }\n if (!velocity.prevPositionY) { velocity.prevPositionY = image.touchesCurrent.y; }\n if (!velocity.prevTime) { velocity.prevTime = Date.now(); }\n velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) { velocity.x = 0; }\n if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) { velocity.y = 0; }\n velocity.prevPositionX = image.touchesCurrent.x;\n velocity.prevPositionY = image.touchesCurrent.y;\n velocity.prevTime = Date.now();\n\n gesture.$imageWrapEl.transform((\"translate3d(\" + (image.currentX) + \"px, \" + (image.currentY) + \"px,0)\"));\n },\n onTouchEnd: function onTouchEnd() {\n var swiper = this;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture;\n var image = zoom.image;\n var velocity = zoom.velocity;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n if (!image.isTouched || !image.isMoved) {\n image.isTouched = false;\n image.isMoved = false;\n return;\n }\n image.isTouched = false;\n image.isMoved = false;\n var momentumDurationX = 300;\n var momentumDurationY = 300;\n var momentumDistanceX = velocity.x * momentumDurationX;\n var newPositionX = image.currentX + momentumDistanceX;\n var momentumDistanceY = velocity.y * momentumDurationY;\n var newPositionY = image.currentY + momentumDistanceY;\n\n // Fix duration\n if (velocity.x !== 0) { momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x); }\n if (velocity.y !== 0) { momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y); }\n var momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n\n image.currentX = newPositionX;\n image.currentY = newPositionY;\n\n // Define if we need image drag\n var scaledWidth = image.width * zoom.scale;\n var scaledHeight = image.height * zoom.scale;\n image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);\n image.maxX = -image.minX;\n image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);\n image.maxY = -image.minY;\n image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n\n gesture.$imageWrapEl.transition(momentumDuration).transform((\"translate3d(\" + (image.currentX) + \"px, \" + (image.currentY) + \"px,0)\"));\n },\n onTransitionEnd: function onTransitionEnd() {\n var swiper = this;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture;\n if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {\n gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n\n zoom.scale = 1;\n zoom.currentScale = 1;\n\n gesture.$slideEl = undefined;\n gesture.$imageEl = undefined;\n gesture.$imageWrapEl = undefined;\n }\n },\n // Toggle Zoom\n toggle: function toggle(e) {\n var swiper = this;\n var zoom = swiper.zoom;\n\n if (zoom.scale && zoom.scale !== 1) {\n // Zoom Out\n zoom.out();\n } else {\n // Zoom In\n zoom.in(e);\n }\n },\n in: function in$1(e) {\n var swiper = this;\n\n var zoom = swiper.zoom;\n var params = swiper.params.zoom;\n var gesture = zoom.gesture;\n var image = zoom.image;\n\n if (!gesture.$slideEl) {\n gesture.$slideEl = swiper.clickedSlide ? $(swiper.clickedSlide) : swiper.slides.eq(swiper.activeIndex);\n gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');\n gesture.$imageWrapEl = gesture.$imageEl.parent((\".\" + (params.containerClass)));\n }\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n\n gesture.$slideEl.addClass((\"\" + (params.zoomedSlideClass)));\n\n var touchX;\n var touchY;\n var offsetX;\n var offsetY;\n var diffX;\n var diffY;\n var translateX;\n var translateY;\n var imageWidth;\n var imageHeight;\n var scaledWidth;\n var scaledHeight;\n var translateMinX;\n var translateMinY;\n var translateMaxX;\n var translateMaxY;\n var slideWidth;\n var slideHeight;\n\n if (typeof image.touchesStart.x === 'undefined' && e) {\n touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;\n touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;\n } else {\n touchX = image.touchesStart.x;\n touchY = image.touchesStart.y;\n }\n\n zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n if (e) {\n slideWidth = gesture.$slideEl[0].offsetWidth;\n slideHeight = gesture.$slideEl[0].offsetHeight;\n offsetX = gesture.$slideEl.offset().left;\n offsetY = gesture.$slideEl.offset().top;\n diffX = (offsetX + (slideWidth / 2)) - touchX;\n diffY = (offsetY + (slideHeight / 2)) - touchY;\n\n imageWidth = gesture.$imageEl[0].offsetWidth;\n imageHeight = gesture.$imageEl[0].offsetHeight;\n scaledWidth = imageWidth * zoom.scale;\n scaledHeight = imageHeight * zoom.scale;\n\n translateMinX = Math.min(((slideWidth / 2) - (scaledWidth / 2)), 0);\n translateMinY = Math.min(((slideHeight / 2) - (scaledHeight / 2)), 0);\n translateMaxX = -translateMinX;\n translateMaxY = -translateMinY;\n\n translateX = diffX * zoom.scale;\n translateY = diffY * zoom.scale;\n\n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n\n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n } else {\n translateX = 0;\n translateY = 0;\n }\n gesture.$imageWrapEl.transition(300).transform((\"translate3d(\" + translateX + \"px, \" + translateY + \"px,0)\"));\n gesture.$imageEl.transition(300).transform((\"translate3d(0,0,0) scale(\" + (zoom.scale) + \")\"));\n },\n out: function out() {\n var swiper = this;\n\n var zoom = swiper.zoom;\n var params = swiper.params.zoom;\n var gesture = zoom.gesture;\n\n if (!gesture.$slideEl) {\n gesture.$slideEl = swiper.clickedSlide ? $(swiper.clickedSlide) : swiper.slides.eq(swiper.activeIndex);\n gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');\n gesture.$imageWrapEl = gesture.$imageEl.parent((\".\" + (params.containerClass)));\n }\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n\n zoom.scale = 1;\n zoom.currentScale = 1;\n gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');\n gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');\n gesture.$slideEl.removeClass((\"\" + (params.zoomedSlideClass)));\n gesture.$slideEl = undefined;\n },\n // Attach/Detach Events\n enable: function enable() {\n var swiper = this;\n var zoom = swiper.zoom;\n if (zoom.enabled) { return; }\n zoom.enabled = true;\n\n var passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;\n\n // Scale image\n if (Support.gestures) {\n swiper.$wrapperEl.on('gesturestart', '.swiper-slide', zoom.onGestureStart, passiveListener);\n swiper.$wrapperEl.on('gesturechange', '.swiper-slide', zoom.onGestureChange, passiveListener);\n swiper.$wrapperEl.on('gestureend', '.swiper-slide', zoom.onGestureEnd, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.on(swiper.touchEvents.start, '.swiper-slide', zoom.onGestureStart, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.move, '.swiper-slide', zoom.onGestureChange, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.end, '.swiper-slide', zoom.onGestureEnd, passiveListener);\n }\n\n // Move image\n swiper.$wrapperEl.on(swiper.touchEvents.move, (\".\" + (swiper.params.zoom.containerClass)), zoom.onTouchMove);\n },\n disable: function disable() {\n var swiper = this;\n var zoom = swiper.zoom;\n if (!zoom.enabled) { return; }\n\n swiper.zoom.enabled = false;\n\n var passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;\n\n // Scale image\n if (Support.gestures) {\n swiper.$wrapperEl.off('gesturestart', '.swiper-slide', zoom.onGestureStart, passiveListener);\n swiper.$wrapperEl.off('gesturechange', '.swiper-slide', zoom.onGestureChange, passiveListener);\n swiper.$wrapperEl.off('gestureend', '.swiper-slide', zoom.onGestureEnd, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.off(swiper.touchEvents.start, '.swiper-slide', zoom.onGestureStart, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.move, '.swiper-slide', zoom.onGestureChange, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.end, '.swiper-slide', zoom.onGestureEnd, passiveListener);\n }\n\n // Move image\n swiper.$wrapperEl.off(swiper.touchEvents.move, (\".\" + (swiper.params.zoom.containerClass)), zoom.onTouchMove);\n },\n };\n\n var Zoom$1 = {\n name: 'zoom',\n params: {\n zoom: {\n enabled: false,\n maxRatio: 3,\n minRatio: 1,\n toggle: true,\n containerClass: 'swiper-zoom-container',\n zoomedSlideClass: 'swiper-slide-zoomed',\n },\n },\n create: function create() {\n var swiper = this;\n var zoom = {\n enabled: false,\n scale: 1,\n currentScale: 1,\n isScaling: false,\n gesture: {\n $slideEl: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n $imageEl: undefined,\n $imageWrapEl: undefined,\n maxRatio: 3,\n },\n image: {\n isTouched: undefined,\n isMoved: undefined,\n currentX: undefined,\n currentY: undefined,\n minX: undefined,\n minY: undefined,\n maxX: undefined,\n maxY: undefined,\n width: undefined,\n height: undefined,\n startX: undefined,\n startY: undefined,\n touchesStart: {},\n touchesCurrent: {},\n },\n velocity: {\n x: undefined,\n y: undefined,\n prevPositionX: undefined,\n prevPositionY: undefined,\n prevTime: undefined,\n },\n };\n\n ('onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out').split(' ').forEach(function (methodName) {\n zoom[methodName] = Zoom[methodName].bind(swiper);\n });\n Utils.extend(swiper, {\n zoom: zoom,\n });\n\n var scale = 1;\n Object.defineProperty(swiper.zoom, 'scale', {\n get: function get() {\n return scale;\n },\n set: function set(value) {\n if (scale !== value) {\n var imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined;\n var slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined;\n swiper.emit('zoomChange', value, imageEl, slideEl);\n }\n scale = value;\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n if (swiper.params.zoom.enabled) {\n swiper.zoom.enable();\n }\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.zoom.disable();\n },\n touchStart: function touchStart(e) {\n var swiper = this;\n if (!swiper.zoom.enabled) { return; }\n swiper.zoom.onTouchStart(e);\n },\n touchEnd: function touchEnd(e) {\n var swiper = this;\n if (!swiper.zoom.enabled) { return; }\n swiper.zoom.onTouchEnd(e);\n },\n doubleTap: function doubleTap(e) {\n var swiper = this;\n if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n swiper.zoom.toggle(e);\n }\n },\n transitionEnd: function transitionEnd() {\n var swiper = this;\n if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n swiper.zoom.onTransitionEnd();\n }\n },\n },\n };\n\n var Lazy = {\n loadInSlide: function loadInSlide(index, loadInDuplicate) {\n if ( loadInDuplicate === void 0 ) loadInDuplicate = true;\n\n var swiper = this;\n var params = swiper.params.lazy;\n if (typeof index === 'undefined') { return; }\n if (swiper.slides.length === 0) { return; }\n var isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n var $slideEl = isVirtual\n ? swiper.$wrapperEl.children((\".\" + (swiper.params.slideClass) + \"[data-swiper-slide-index=\\\"\" + index + \"\\\"]\"))\n : swiper.slides.eq(index);\n\n var $images = $slideEl.find((\".\" + (params.elementClass) + \":not(.\" + (params.loadedClass) + \"):not(.\" + (params.loadingClass) + \")\"));\n if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {\n $images = $images.add($slideEl[0]);\n }\n if ($images.length === 0) { return; }\n\n $images.each(function (imageIndex, imageEl) {\n var $imageEl = $(imageEl);\n $imageEl.addClass(params.loadingClass);\n\n var background = $imageEl.attr('data-background');\n var src = $imageEl.attr('data-src');\n var srcset = $imageEl.attr('data-srcset');\n var sizes = $imageEl.attr('data-sizes');\n\n swiper.loadImage($imageEl[0], (src || background), srcset, sizes, false, function () {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || (swiper && !swiper.params) || swiper.destroyed) { return; }\n if (background) {\n $imageEl.css('background-image', (\"url(\\\"\" + background + \"\\\")\"));\n $imageEl.removeAttr('data-background');\n } else {\n if (srcset) {\n $imageEl.attr('srcset', srcset);\n $imageEl.removeAttr('data-srcset');\n }\n if (sizes) {\n $imageEl.attr('sizes', sizes);\n $imageEl.removeAttr('data-sizes');\n }\n if (src) {\n $imageEl.attr('src', src);\n $imageEl.removeAttr('data-src');\n }\n }\n\n $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);\n $slideEl.find((\".\" + (params.preloaderClass))).remove();\n if (swiper.params.loop && loadInDuplicate) {\n var slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n var originalSlide = swiper.$wrapperEl.children((\"[data-swiper-slide-index=\\\"\" + slideOriginalIndex + \"\\\"]:not(.\" + (swiper.params.slideDuplicateClass) + \")\"));\n swiper.lazy.loadInSlide(originalSlide.index(), false);\n } else {\n var duplicatedSlide = swiper.$wrapperEl.children((\".\" + (swiper.params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + slideOriginalIndex + \"\\\"]\"));\n swiper.lazy.loadInSlide(duplicatedSlide.index(), false);\n }\n }\n swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n });\n\n swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n });\n },\n load: function load() {\n var swiper = this;\n var $wrapperEl = swiper.$wrapperEl;\n var swiperParams = swiper.params;\n var slides = swiper.slides;\n var activeIndex = swiper.activeIndex;\n var isVirtual = swiper.virtual && swiperParams.virtual.enabled;\n var params = swiperParams.lazy;\n\n var slidesPerView = swiperParams.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = 0;\n }\n\n function slideExist(index) {\n if (isVirtual) {\n if ($wrapperEl.children((\".\" + (swiperParams.slideClass) + \"[data-swiper-slide-index=\\\"\" + index + \"\\\"]\")).length) {\n return true;\n }\n } else if (slides[index]) { return true; }\n return false;\n }\n function slideIndex(slideEl) {\n if (isVirtual) {\n return $(slideEl).attr('data-swiper-slide-index');\n }\n return $(slideEl).index();\n }\n\n if (!swiper.lazy.initialImageLoaded) { swiper.lazy.initialImageLoaded = true; }\n if (swiper.params.watchSlidesVisibility) {\n $wrapperEl.children((\".\" + (swiperParams.slideVisibleClass))).each(function (elIndex, slideEl) {\n var index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();\n swiper.lazy.loadInSlide(index);\n });\n } else if (slidesPerView > 1) {\n for (var i = activeIndex; i < activeIndex + slidesPerView; i += 1) {\n if (slideExist(i)) { swiper.lazy.loadInSlide(i); }\n }\n } else {\n swiper.lazy.loadInSlide(activeIndex);\n }\n if (params.loadPrevNext) {\n if (slidesPerView > 1 || (params.loadPrevNextAmount && params.loadPrevNextAmount > 1)) {\n var amount = params.loadPrevNextAmount;\n var spv = slidesPerView;\n var maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);\n var minIndex = Math.max(activeIndex - Math.max(spv, amount), 0);\n // Next Slides\n for (var i$1 = activeIndex + slidesPerView; i$1 < maxIndex; i$1 += 1) {\n if (slideExist(i$1)) { swiper.lazy.loadInSlide(i$1); }\n }\n // Prev Slides\n for (var i$2 = minIndex; i$2 < activeIndex; i$2 += 1) {\n if (slideExist(i$2)) { swiper.lazy.loadInSlide(i$2); }\n }\n } else {\n var nextSlide = $wrapperEl.children((\".\" + (swiperParams.slideNextClass)));\n if (nextSlide.length > 0) { swiper.lazy.loadInSlide(slideIndex(nextSlide)); }\n\n var prevSlide = $wrapperEl.children((\".\" + (swiperParams.slidePrevClass)));\n if (prevSlide.length > 0) { swiper.lazy.loadInSlide(slideIndex(prevSlide)); }\n }\n }\n },\n };\n\n var Lazy$1 = {\n name: 'lazy',\n params: {\n lazy: {\n enabled: false,\n loadPrevNext: false,\n loadPrevNextAmount: 1,\n loadOnTransitionStart: false,\n\n elementClass: 'swiper-lazy',\n loadingClass: 'swiper-lazy-loading',\n loadedClass: 'swiper-lazy-loaded',\n preloaderClass: 'swiper-lazy-preloader',\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n lazy: {\n initialImageLoaded: false,\n load: Lazy.load.bind(swiper),\n loadInSlide: Lazy.loadInSlide.bind(swiper),\n },\n });\n },\n on: {\n beforeInit: function beforeInit() {\n var swiper = this;\n if (swiper.params.lazy.enabled && swiper.params.preloadImages) {\n swiper.params.preloadImages = false;\n }\n },\n init: function init() {\n var swiper = this;\n if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {\n swiper.lazy.load();\n }\n },\n scroll: function scroll() {\n var swiper = this;\n if (swiper.params.freeMode && !swiper.params.freeModeSticky) {\n swiper.lazy.load();\n }\n },\n resize: function resize() {\n var swiper = this;\n if (swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n },\n scrollbarDragMove: function scrollbarDragMove() {\n var swiper = this;\n if (swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n },\n transitionStart: function transitionStart() {\n var swiper = this;\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.loadOnTransitionStart || (!swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded)) {\n swiper.lazy.load();\n }\n }\n },\n transitionEnd: function transitionEnd() {\n var swiper = this;\n if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {\n swiper.lazy.load();\n }\n },\n },\n };\n\n /* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\n\n var Controller = {\n LinearSpline: function LinearSpline(x, y) {\n var binarySearch = (function search() {\n var maxIndex;\n var minIndex;\n var guess;\n return function (array, val) {\n minIndex = -1;\n maxIndex = array.length;\n while (maxIndex - minIndex > 1) {\n guess = maxIndex + minIndex >> 1;\n if (array[guess] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n }\n return maxIndex;\n };\n }());\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1;\n // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n var i1;\n var i3;\n\n this.interpolate = function interpolate(x2) {\n if (!x2) { return 0; }\n\n // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1;\n\n // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n return (((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1])) + this.y[i1];\n };\n return this;\n },\n // xxx: for now i will just save one spline function to to\n getInterpolateFunction: function getInterpolateFunction(c) {\n var swiper = this;\n if (!swiper.controller.spline) {\n swiper.controller.spline = swiper.params.loop\n ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid)\n : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);\n }\n },\n setTranslate: function setTranslate(setTranslate$1, byController) {\n var swiper = this;\n var controlled = swiper.controller.control;\n var multiplier;\n var controlledTranslate;\n function setControlledTranslate(c) {\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n var translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n if (swiper.params.controller.by === 'slide') {\n swiper.controller.getInterpolateFunction(c);\n // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n }\n\n if (!controlledTranslate || swiper.params.controller.by === 'container') {\n multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n controlledTranslate = ((translate - swiper.minTranslate()) * multiplier) + c.minTranslate();\n }\n\n if (swiper.params.controller.inverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n c.updateProgress(controlledTranslate);\n c.setTranslate(controlledTranslate, swiper);\n c.updateActiveIndex();\n c.updateSlidesClasses();\n }\n if (Array.isArray(controlled)) {\n for (var i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTranslate(controlled);\n }\n },\n setTransition: function setTransition(duration, byController) {\n var swiper = this;\n var controlled = swiper.controller.control;\n var i;\n function setControlledTransition(c) {\n c.setTransition(duration, swiper);\n if (duration !== 0) {\n c.transitionStart();\n if (c.params.autoHeight) {\n Utils.nextTick(function () {\n c.updateAutoHeight();\n });\n }\n c.$wrapperEl.transitionEnd(function () {\n if (!controlled) { return; }\n if (c.params.loop && swiper.params.controller.by === 'slide') {\n c.loopFix();\n }\n c.transitionEnd();\n });\n }\n }\n if (Array.isArray(controlled)) {\n for (i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n },\n };\n var Controller$1 = {\n name: 'controller',\n params: {\n controller: {\n control: undefined,\n inverse: false,\n by: 'slide', // or 'container'\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n controller: {\n control: swiper.params.controller.control,\n getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper),\n setTranslate: Controller.setTranslate.bind(swiper),\n setTransition: Controller.setTransition.bind(swiper),\n },\n });\n },\n on: {\n update: function update() {\n var swiper = this;\n if (!swiper.controller.control) { return; }\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n },\n resize: function resize() {\n var swiper = this;\n if (!swiper.controller.control) { return; }\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n },\n observerUpdate: function observerUpdate() {\n var swiper = this;\n if (!swiper.controller.control) { return; }\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n },\n setTranslate: function setTranslate(translate, byController) {\n var swiper = this;\n if (!swiper.controller.control) { return; }\n swiper.controller.setTranslate(translate, byController);\n },\n setTransition: function setTransition(duration, byController) {\n var swiper = this;\n if (!swiper.controller.control) { return; }\n swiper.controller.setTransition(duration, byController);\n },\n },\n };\n\n var a11y = {\n makeElFocusable: function makeElFocusable($el) {\n $el.attr('tabIndex', '0');\n return $el;\n },\n addElRole: function addElRole($el, role) {\n $el.attr('role', role);\n return $el;\n },\n addElLabel: function addElLabel($el, label) {\n $el.attr('aria-label', label);\n return $el;\n },\n disableEl: function disableEl($el) {\n $el.attr('aria-disabled', true);\n return $el;\n },\n enableEl: function enableEl($el) {\n $el.attr('aria-disabled', false);\n return $el;\n },\n onEnterKey: function onEnterKey(e) {\n var swiper = this;\n var params = swiper.params.a11y;\n if (e.keyCode !== 13) { return; }\n var $targetEl = $(e.target);\n if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n if (!(swiper.isEnd && !swiper.params.loop)) {\n swiper.slideNext();\n }\n if (swiper.isEnd) {\n swiper.a11y.notify(params.lastSlideMessage);\n } else {\n swiper.a11y.notify(params.nextSlideMessage);\n }\n }\n if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n if (!(swiper.isBeginning && !swiper.params.loop)) {\n swiper.slidePrev();\n }\n if (swiper.isBeginning) {\n swiper.a11y.notify(params.firstSlideMessage);\n } else {\n swiper.a11y.notify(params.prevSlideMessage);\n }\n }\n if (swiper.pagination && $targetEl.is((\".\" + (swiper.params.pagination.bulletClass)))) {\n $targetEl[0].click();\n }\n },\n notify: function notify(message) {\n var swiper = this;\n var notification = swiper.a11y.liveRegion;\n if (notification.length === 0) { return; }\n notification.html('');\n notification.html(message);\n },\n updateNavigation: function updateNavigation() {\n var swiper = this;\n\n if (swiper.params.loop) { return; }\n var ref = swiper.navigation;\n var $nextEl = ref.$nextEl;\n var $prevEl = ref.$prevEl;\n\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n swiper.a11y.disableEl($prevEl);\n } else {\n swiper.a11y.enableEl($prevEl);\n }\n }\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n swiper.a11y.disableEl($nextEl);\n } else {\n swiper.a11y.enableEl($nextEl);\n }\n }\n },\n updatePagination: function updatePagination() {\n var swiper = this;\n var params = swiper.params.a11y;\n if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n swiper.pagination.bullets.each(function (bulletIndex, bulletEl) {\n var $bulletEl = $(bulletEl);\n swiper.a11y.makeElFocusable($bulletEl);\n swiper.a11y.addElRole($bulletEl, 'button');\n swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/{{index}}/, $bulletEl.index() + 1));\n });\n }\n },\n init: function init() {\n var swiper = this;\n\n swiper.$el.append(swiper.a11y.liveRegion);\n\n // Navigation\n var params = swiper.params.a11y;\n var $nextEl;\n var $prevEl;\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n if ($nextEl) {\n swiper.a11y.makeElFocusable($nextEl);\n swiper.a11y.addElRole($nextEl, 'button');\n swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);\n $nextEl.on('keydown', swiper.a11y.onEnterKey);\n }\n if ($prevEl) {\n swiper.a11y.makeElFocusable($prevEl);\n swiper.a11y.addElRole($prevEl, 'button');\n swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);\n $prevEl.on('keydown', swiper.a11y.onEnterKey);\n }\n\n // Pagination\n if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n swiper.pagination.$el.on('keydown', (\".\" + (swiper.params.pagination.bulletClass)), swiper.a11y.onEnterKey);\n }\n },\n destroy: function destroy() {\n var swiper = this;\n if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) { swiper.a11y.liveRegion.remove(); }\n\n var $nextEl;\n var $prevEl;\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n if ($nextEl) {\n $nextEl.off('keydown', swiper.a11y.onEnterKey);\n }\n if ($prevEl) {\n $prevEl.off('keydown', swiper.a11y.onEnterKey);\n }\n\n // Pagination\n if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n swiper.pagination.$el.off('keydown', (\".\" + (swiper.params.pagination.bulletClass)), swiper.a11y.onEnterKey);\n }\n },\n };\n var A11y = {\n name: 'a11y',\n params: {\n a11y: {\n enabled: true,\n notificationClass: 'swiper-notification',\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n a11y: {\n liveRegion: $((\"\")),\n },\n });\n Object.keys(a11y).forEach(function (methodName) {\n swiper.a11y[methodName] = a11y[methodName].bind(swiper);\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n if (!swiper.params.a11y.enabled) { return; }\n swiper.a11y.init();\n swiper.a11y.updateNavigation();\n },\n toEdge: function toEdge() {\n var swiper = this;\n if (!swiper.params.a11y.enabled) { return; }\n swiper.a11y.updateNavigation();\n },\n fromEdge: function fromEdge() {\n var swiper = this;\n if (!swiper.params.a11y.enabled) { return; }\n swiper.a11y.updateNavigation();\n },\n paginationUpdate: function paginationUpdate() {\n var swiper = this;\n if (!swiper.params.a11y.enabled) { return; }\n swiper.a11y.updatePagination();\n },\n destroy: function destroy() {\n var swiper = this;\n if (!swiper.params.a11y.enabled) { return; }\n swiper.a11y.destroy();\n },\n },\n };\n\n var History = {\n init: function init() {\n var swiper = this;\n if (!swiper.params.history) { return; }\n if (!win.history || !win.history.pushState) {\n swiper.params.history.enabled = false;\n swiper.params.hashNavigation.enabled = true;\n return;\n }\n var history = swiper.history;\n history.initialized = true;\n history.paths = History.getPathValues();\n if (!history.paths.key && !history.paths.value) { return; }\n history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);\n if (!swiper.params.history.replaceState) {\n win.addEventListener('popstate', swiper.history.setHistoryPopState);\n }\n },\n destroy: function destroy() {\n var swiper = this;\n if (!swiper.params.history.replaceState) {\n win.removeEventListener('popstate', swiper.history.setHistoryPopState);\n }\n },\n setHistoryPopState: function setHistoryPopState() {\n var swiper = this;\n swiper.history.paths = History.getPathValues();\n swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);\n },\n getPathValues: function getPathValues() {\n var pathArray = win.location.pathname.slice(1).split('/').filter(function (part) { return part !== ''; });\n var total = pathArray.length;\n var key = pathArray[total - 2];\n var value = pathArray[total - 1];\n return { key: key, value: value };\n },\n setHistory: function setHistory(key, index) {\n var swiper = this;\n if (!swiper.history.initialized || !swiper.params.history.enabled) { return; }\n var slide = swiper.slides.eq(index);\n var value = History.slugify(slide.attr('data-history'));\n if (!win.location.pathname.includes(key)) {\n value = key + \"/\" + value;\n }\n var currentState = win.history.state;\n if (currentState && currentState.value === value) {\n return;\n }\n if (swiper.params.history.replaceState) {\n win.history.replaceState({ value: value }, null, value);\n } else {\n win.history.pushState({ value: value }, null, value);\n }\n },\n slugify: function slugify(text) {\n return text.toString()\n .replace(/\\s+/g, '-')\n .replace(/[^\\w-]+/g, '')\n .replace(/--+/g, '-')\n .replace(/^-+/, '')\n .replace(/-+$/, '');\n },\n scrollToSlide: function scrollToSlide(speed, value, runCallbacks) {\n var swiper = this;\n if (value) {\n for (var i = 0, length = swiper.slides.length; i < length; i += 1) {\n var slide = swiper.slides.eq(i);\n var slideHistory = History.slugify(slide.attr('data-history'));\n if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n var index = slide.index();\n swiper.slideTo(index, speed, runCallbacks);\n }\n }\n } else {\n swiper.slideTo(0, speed, runCallbacks);\n }\n },\n };\n\n var History$1 = {\n name: 'history',\n params: {\n history: {\n enabled: false,\n replaceState: false,\n key: 'slides',\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n history: {\n init: History.init.bind(swiper),\n setHistory: History.setHistory.bind(swiper),\n setHistoryPopState: History.setHistoryPopState.bind(swiper),\n scrollToSlide: History.scrollToSlide.bind(swiper),\n destroy: History.destroy.bind(swiper),\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n if (swiper.params.history.enabled) {\n swiper.history.init();\n }\n },\n destroy: function destroy() {\n var swiper = this;\n if (swiper.params.history.enabled) {\n swiper.history.destroy();\n }\n },\n transitionEnd: function transitionEnd() {\n var swiper = this;\n if (swiper.history.initialized) {\n swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n },\n },\n };\n\n var HashNavigation = {\n onHashCange: function onHashCange() {\n var swiper = this;\n var newHash = doc.location.hash.replace('#', '');\n var activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');\n if (newHash !== activeSlideHash) {\n var newIndex = swiper.$wrapperEl.children((\".\" + (swiper.params.slideClass) + \"[data-hash=\\\"\" + newHash + \"\\\"]\")).index();\n if (typeof newIndex === 'undefined') { return; }\n swiper.slideTo(newIndex);\n }\n },\n setHash: function setHash() {\n var swiper = this;\n if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) { return; }\n if (swiper.params.hashNavigation.replaceState && win.history && win.history.replaceState) {\n win.history.replaceState(null, null, ((\"#\" + (swiper.slides.eq(swiper.activeIndex).attr('data-hash'))) || ''));\n } else {\n var slide = swiper.slides.eq(swiper.activeIndex);\n var hash = slide.attr('data-hash') || slide.attr('data-history');\n doc.location.hash = hash || '';\n }\n },\n init: function init() {\n var swiper = this;\n if (!swiper.params.hashNavigation.enabled || (swiper.params.history && swiper.params.history.enabled)) { return; }\n swiper.hashNavigation.initialized = true;\n var hash = doc.location.hash.replace('#', '');\n if (hash) {\n var speed = 0;\n for (var i = 0, length = swiper.slides.length; i < length; i += 1) {\n var slide = swiper.slides.eq(i);\n var slideHash = slide.attr('data-hash') || slide.attr('data-history');\n if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n var index = slide.index();\n swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);\n }\n }\n }\n if (swiper.params.hashNavigation.watchState) {\n $(win).on('hashchange', swiper.hashNavigation.onHashCange);\n }\n },\n destroy: function destroy() {\n var swiper = this;\n if (swiper.params.hashNavigation.watchState) {\n $(win).off('hashchange', swiper.hashNavigation.onHashCange);\n }\n },\n };\n var HashNavigation$1 = {\n name: 'hash-navigation',\n params: {\n hashNavigation: {\n enabled: false,\n replaceState: false,\n watchState: false,\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n hashNavigation: {\n initialized: false,\n init: HashNavigation.init.bind(swiper),\n destroy: HashNavigation.destroy.bind(swiper),\n setHash: HashNavigation.setHash.bind(swiper),\n onHashCange: HashNavigation.onHashCange.bind(swiper),\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n if (swiper.params.hashNavigation.enabled) {\n swiper.hashNavigation.init();\n }\n },\n destroy: function destroy() {\n var swiper = this;\n if (swiper.params.hashNavigation.enabled) {\n swiper.hashNavigation.destroy();\n }\n },\n transitionEnd: function transitionEnd() {\n var swiper = this;\n if (swiper.hashNavigation.initialized) {\n swiper.hashNavigation.setHash();\n }\n },\n },\n };\n\n /* eslint no-underscore-dangle: \"off\" */\n\n var Autoplay = {\n run: function run() {\n var swiper = this;\n var $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n var delay = swiper.params.autoplay.delay;\n if ($activeSlideEl.attr('data-swiper-autoplay')) {\n delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n }\n clearTimeout(swiper.autoplay.timeout);\n swiper.autoplay.timeout = Utils.nextTick(function () {\n if (swiper.params.autoplay.reverseDirection) {\n if (swiper.params.loop) {\n swiper.loopFix();\n swiper.slidePrev(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.isBeginning) {\n swiper.slidePrev(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else {\n swiper.autoplay.stop();\n }\n } else if (swiper.params.loop) {\n swiper.loopFix();\n swiper.slideNext(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.isEnd) {\n swiper.slideNext(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(0, swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else {\n swiper.autoplay.stop();\n }\n }, delay);\n },\n start: function start() {\n var swiper = this;\n if (typeof swiper.autoplay.timeout !== 'undefined') { return false; }\n if (swiper.autoplay.running) { return false; }\n swiper.autoplay.running = true;\n swiper.emit('autoplayStart');\n swiper.autoplay.run();\n return true;\n },\n stop: function stop() {\n var swiper = this;\n if (!swiper.autoplay.running) { return false; }\n if (typeof swiper.autoplay.timeout === 'undefined') { return false; }\n\n if (swiper.autoplay.timeout) {\n clearTimeout(swiper.autoplay.timeout);\n swiper.autoplay.timeout = undefined;\n }\n swiper.autoplay.running = false;\n swiper.emit('autoplayStop');\n return true;\n },\n pause: function pause(speed) {\n var swiper = this;\n if (!swiper.autoplay.running) { return; }\n if (swiper.autoplay.paused) { return; }\n if (swiper.autoplay.timeout) { clearTimeout(swiper.autoplay.timeout); }\n swiper.autoplay.paused = true;\n if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n swiper.autoplay.paused = false;\n swiper.autoplay.run();\n } else {\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n }\n },\n };\n\n var Autoplay$1 = {\n name: 'autoplay',\n params: {\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: true,\n stopOnLastSlide: false,\n reverseDirection: false,\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n autoplay: {\n running: false,\n paused: false,\n run: Autoplay.run.bind(swiper),\n start: Autoplay.start.bind(swiper),\n stop: Autoplay.stop.bind(swiper),\n pause: Autoplay.pause.bind(swiper),\n onTransitionEnd: function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.$wrapperEl) { return; }\n if (e.target !== this) { return; }\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n swiper.autoplay.paused = false;\n if (!swiper.autoplay.running) {\n swiper.autoplay.stop();\n } else {\n swiper.autoplay.run();\n }\n },\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n if (swiper.params.autoplay.enabled) {\n swiper.autoplay.start();\n }\n },\n beforeTransitionStart: function beforeTransitionStart(speed, internal) {\n var swiper = this;\n if (swiper.autoplay.running) {\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.pause(speed);\n } else {\n swiper.autoplay.stop();\n }\n }\n },\n sliderFirstMove: function sliderFirstMove() {\n var swiper = this;\n if (swiper.autoplay.running) {\n if (swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.stop();\n } else {\n swiper.autoplay.pause();\n }\n }\n },\n destroy: function destroy() {\n var swiper = this;\n if (swiper.autoplay.running) {\n swiper.autoplay.stop();\n }\n },\n },\n };\n\n var Fade = {\n setTranslate: function setTranslate() {\n var swiper = this;\n var slides = swiper.slides;\n for (var i = 0; i < slides.length; i += 1) {\n var $slideEl = swiper.slides.eq(i);\n var offset = $slideEl[0].swiperSlideOffset;\n var tx = -offset;\n if (!swiper.params.virtualTranslate) { tx -= swiper.translate; }\n var ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n var slideOpacity = swiper.params.fadeEffect.crossFade\n ? Math.max(1 - Math.abs($slideEl[0].progress), 0)\n : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n $slideEl\n .css({\n opacity: slideOpacity,\n })\n .transform((\"translate3d(\" + tx + \"px, \" + ty + \"px, 0px)\"));\n }\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n var slides = swiper.slides;\n var $wrapperEl = swiper.$wrapperEl;\n slides.transition(duration);\n if (swiper.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n slides.transitionEnd(function () {\n if (eventTriggered) { return; }\n if (!swiper || swiper.destroyed) { return; }\n eventTriggered = true;\n swiper.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n for (var i = 0; i < triggerEvents.length; i += 1) {\n $wrapperEl.trigger(triggerEvents[i]);\n }\n });\n }\n },\n };\n\n var EffectFade = {\n name: 'effect-fade',\n params: {\n fadeEffect: {\n crossFade: false,\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n fadeEffect: {\n setTranslate: Fade.setTranslate.bind(swiper),\n setTransition: Fade.setTransition.bind(swiper),\n },\n });\n },\n on: {\n beforeInit: function beforeInit() {\n var swiper = this;\n if (swiper.params.effect !== 'fade') { return; }\n swiper.classNames.push(((swiper.params.containerModifierClass) + \"fade\"));\n var overwriteParams = {\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: true,\n };\n Utils.extend(swiper.params, overwriteParams);\n Utils.extend(swiper.originalParams, overwriteParams);\n },\n setTranslate: function setTranslate() {\n var swiper = this;\n if (swiper.params.effect !== 'fade') { return; }\n swiper.fadeEffect.setTranslate();\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n if (swiper.params.effect !== 'fade') { return; }\n swiper.fadeEffect.setTransition(duration);\n },\n },\n };\n\n var Cube = {\n setTranslate: function setTranslate() {\n var swiper = this;\n var $el = swiper.$el;\n var $wrapperEl = swiper.$wrapperEl;\n var slides = swiper.slides;\n var swiperWidth = swiper.width;\n var swiperHeight = swiper.height;\n var rtl = swiper.rtlTranslate;\n var swiperSize = swiper.size;\n var params = swiper.params.cubeEffect;\n var isHorizontal = swiper.isHorizontal();\n var isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n var wrapperRotate = 0;\n var $cubeShadowEl;\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = $('
');\n $wrapperEl.append($cubeShadowEl);\n }\n $cubeShadowEl.css({ height: (swiperWidth + \"px\") });\n } else {\n $cubeShadowEl = $el.find('.swiper-cube-shadow');\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = $('
');\n $el.append($cubeShadowEl);\n }\n }\n }\n for (var i = 0; i < slides.length; i += 1) {\n var $slideEl = slides.eq(i);\n var slideIndex = i;\n if (isVirtual) {\n slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);\n }\n var slideAngle = slideIndex * 90;\n var round = Math.floor(slideAngle / 360);\n if (rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n var progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n var tx = 0;\n var ty = 0;\n var tz = 0;\n if (slideIndex % 4 === 0) {\n tx = -round * 4 * swiperSize;\n tz = 0;\n } else if ((slideIndex - 1) % 4 === 0) {\n tx = 0;\n tz = -round * 4 * swiperSize;\n } else if ((slideIndex - 2) % 4 === 0) {\n tx = swiperSize + (round * 4 * swiperSize);\n tz = swiperSize;\n } else if ((slideIndex - 3) % 4 === 0) {\n tx = -swiperSize;\n tz = (3 * swiperSize) + (swiperSize * 4 * round);\n }\n if (rtl) {\n tx = -tx;\n }\n\n if (!isHorizontal) {\n ty = tx;\n tx = 0;\n }\n\n var transform = \"rotateX(\" + (isHorizontal ? 0 : -slideAngle) + \"deg) rotateY(\" + (isHorizontal ? slideAngle : 0) + \"deg) translate3d(\" + tx + \"px, \" + ty + \"px, \" + tz + \"px)\";\n if (progress <= 1 && progress > -1) {\n wrapperRotate = (slideIndex * 90) + (progress * 90);\n if (rtl) { wrapperRotate = (-slideIndex * 90) - (progress * 90); }\n }\n $slideEl.transform(transform);\n if (params.slideShadows) {\n // Set shadows\n var shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n var shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $((\"
\"));\n $slideEl.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $((\"
\"));\n $slideEl.append(shadowAfter);\n }\n if (shadowBefore.length) { shadowBefore[0].style.opacity = Math.max(-progress, 0); }\n if (shadowAfter.length) { shadowAfter[0].style.opacity = Math.max(progress, 0); }\n }\n }\n $wrapperEl.css({\n '-webkit-transform-origin': (\"50% 50% -\" + (swiperSize / 2) + \"px\"),\n '-moz-transform-origin': (\"50% 50% -\" + (swiperSize / 2) + \"px\"),\n '-ms-transform-origin': (\"50% 50% -\" + (swiperSize / 2) + \"px\"),\n 'transform-origin': (\"50% 50% -\" + (swiperSize / 2) + \"px\"),\n });\n\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl.transform((\"translate3d(0px, \" + ((swiperWidth / 2) + params.shadowOffset) + \"px, \" + (-swiperWidth / 2) + \"px) rotateX(90deg) rotateZ(0deg) scale(\" + (params.shadowScale) + \")\"));\n } else {\n var shadowAngle = Math.abs(wrapperRotate) - (Math.floor(Math.abs(wrapperRotate) / 90) * 90);\n var multiplier = 1.5 - (\n (Math.sin((shadowAngle * 2 * Math.PI) / 360) / 2)\n + (Math.cos((shadowAngle * 2 * Math.PI) / 360) / 2)\n );\n var scale1 = params.shadowScale;\n var scale2 = params.shadowScale / multiplier;\n var offset = params.shadowOffset;\n $cubeShadowEl.transform((\"scale3d(\" + scale1 + \", 1, \" + scale2 + \") translate3d(0px, \" + ((swiperHeight / 2) + offset) + \"px, \" + (-swiperHeight / 2 / scale2) + \"px) rotateX(-90deg)\"));\n }\n }\n var zFactor = (Browser.isSafari || Browser.isUiWebView) ? (-swiperSize / 2) : 0;\n $wrapperEl\n .transform((\"translate3d(0px,0,\" + zFactor + \"px) rotateX(\" + (swiper.isHorizontal() ? 0 : wrapperRotate) + \"deg) rotateY(\" + (swiper.isHorizontal() ? -wrapperRotate : 0) + \"deg)\"));\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n var $el = swiper.$el;\n var slides = swiper.slides;\n slides\n .transition(duration)\n .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n .transition(duration);\n if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n $el.find('.swiper-cube-shadow').transition(duration);\n }\n },\n };\n\n var EffectCube = {\n name: 'effect-cube',\n params: {\n cubeEffect: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94,\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n cubeEffect: {\n setTranslate: Cube.setTranslate.bind(swiper),\n setTransition: Cube.setTransition.bind(swiper),\n },\n });\n },\n on: {\n beforeInit: function beforeInit() {\n var swiper = this;\n if (swiper.params.effect !== 'cube') { return; }\n swiper.classNames.push(((swiper.params.containerModifierClass) + \"cube\"));\n swiper.classNames.push(((swiper.params.containerModifierClass) + \"3d\"));\n var overwriteParams = {\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n resistanceRatio: 0,\n spaceBetween: 0,\n centeredSlides: false,\n virtualTranslate: true,\n };\n Utils.extend(swiper.params, overwriteParams);\n Utils.extend(swiper.originalParams, overwriteParams);\n },\n setTranslate: function setTranslate() {\n var swiper = this;\n if (swiper.params.effect !== 'cube') { return; }\n swiper.cubeEffect.setTranslate();\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n if (swiper.params.effect !== 'cube') { return; }\n swiper.cubeEffect.setTransition(duration);\n },\n },\n };\n\n var Flip = {\n setTranslate: function setTranslate() {\n var swiper = this;\n var slides = swiper.slides;\n var rtl = swiper.rtlTranslate;\n for (var i = 0; i < slides.length; i += 1) {\n var $slideEl = slides.eq(i);\n var progress = $slideEl[0].progress;\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n }\n var offset = $slideEl[0].swiperSlideOffset;\n var rotate = -180 * progress;\n var rotateY = rotate;\n var rotateX = 0;\n var tx = -offset;\n var ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n } else if (rtl) {\n rotateY = -rotateY;\n }\n\n $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n\n if (swiper.params.flipEffect.slideShadows) {\n // Set shadows\n var shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n var shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $((\"
\"));\n $slideEl.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $((\"
\"));\n $slideEl.append(shadowAfter);\n }\n if (shadowBefore.length) { shadowBefore[0].style.opacity = Math.max(-progress, 0); }\n if (shadowAfter.length) { shadowAfter[0].style.opacity = Math.max(progress, 0); }\n }\n $slideEl\n .transform((\"translate3d(\" + tx + \"px, \" + ty + \"px, 0px) rotateX(\" + rotateX + \"deg) rotateY(\" + rotateY + \"deg)\"));\n }\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n var slides = swiper.slides;\n var activeIndex = swiper.activeIndex;\n var $wrapperEl = swiper.$wrapperEl;\n slides\n .transition(duration)\n .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n .transition(duration);\n if (swiper.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n // eslint-disable-next-line\n slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {\n if (eventTriggered) { return; }\n if (!swiper || swiper.destroyed) { return; }\n // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;\n eventTriggered = true;\n swiper.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n for (var i = 0; i < triggerEvents.length; i += 1) {\n $wrapperEl.trigger(triggerEvents[i]);\n }\n });\n }\n },\n };\n\n var EffectFlip = {\n name: 'effect-flip',\n params: {\n flipEffect: {\n slideShadows: true,\n limitRotation: true,\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n flipEffect: {\n setTranslate: Flip.setTranslate.bind(swiper),\n setTransition: Flip.setTransition.bind(swiper),\n },\n });\n },\n on: {\n beforeInit: function beforeInit() {\n var swiper = this;\n if (swiper.params.effect !== 'flip') { return; }\n swiper.classNames.push(((swiper.params.containerModifierClass) + \"flip\"));\n swiper.classNames.push(((swiper.params.containerModifierClass) + \"3d\"));\n var overwriteParams = {\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: true,\n };\n Utils.extend(swiper.params, overwriteParams);\n Utils.extend(swiper.originalParams, overwriteParams);\n },\n setTranslate: function setTranslate() {\n var swiper = this;\n if (swiper.params.effect !== 'flip') { return; }\n swiper.flipEffect.setTranslate();\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n if (swiper.params.effect !== 'flip') { return; }\n swiper.flipEffect.setTransition(duration);\n },\n },\n };\n\n var Coverflow = {\n setTranslate: function setTranslate() {\n var swiper = this;\n var swiperWidth = swiper.width;\n var swiperHeight = swiper.height;\n var slides = swiper.slides;\n var $wrapperEl = swiper.$wrapperEl;\n var slidesSizesGrid = swiper.slidesSizesGrid;\n var params = swiper.params.coverflowEffect;\n var isHorizontal = swiper.isHorizontal();\n var transform = swiper.translate;\n var center = isHorizontal ? -transform + (swiperWidth / 2) : -transform + (swiperHeight / 2);\n var rotate = isHorizontal ? params.rotate : -params.rotate;\n var translate = params.depth;\n // Each slide offset from center\n for (var i = 0, length = slides.length; i < length; i += 1) {\n var $slideEl = slides.eq(i);\n var slideSize = slidesSizesGrid[i];\n var slideOffset = $slideEl[0].swiperSlideOffset;\n var offsetMultiplier = ((center - slideOffset - (slideSize / 2)) / slideSize) * params.modifier;\n\n var rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n var rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;\n // var rotateZ = 0\n var translateZ = -translate * Math.abs(offsetMultiplier);\n\n var translateY = isHorizontal ? 0 : params.stretch * (offsetMultiplier);\n var translateX = isHorizontal ? params.stretch * (offsetMultiplier) : 0;\n\n // Fix for ultra small values\n if (Math.abs(translateX) < 0.001) { translateX = 0; }\n if (Math.abs(translateY) < 0.001) { translateY = 0; }\n if (Math.abs(translateZ) < 0.001) { translateZ = 0; }\n if (Math.abs(rotateY) < 0.001) { rotateY = 0; }\n if (Math.abs(rotateX) < 0.001) { rotateX = 0; }\n\n var slideTransform = \"translate3d(\" + translateX + \"px,\" + translateY + \"px,\" + translateZ + \"px) rotateX(\" + rotateX + \"deg) rotateY(\" + rotateY + \"deg)\";\n\n $slideEl.transform(slideTransform);\n $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n if (params.slideShadows) {\n // Set shadows\n var $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n var $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n if ($shadowBeforeEl.length === 0) {\n $shadowBeforeEl = $((\"
\"));\n $slideEl.append($shadowBeforeEl);\n }\n if ($shadowAfterEl.length === 0) {\n $shadowAfterEl = $((\"
\"));\n $slideEl.append($shadowAfterEl);\n }\n if ($shadowBeforeEl.length) { $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0; }\n if ($shadowAfterEl.length) { $shadowAfterEl[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0; }\n }\n }\n\n // Set correct perspective for IE10\n if (Support.pointerEvents || Support.prefixedPointerEvents) {\n var ws = $wrapperEl[0].style;\n ws.perspectiveOrigin = center + \"px 50%\";\n }\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n swiper.slides\n .transition(duration)\n .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n .transition(duration);\n },\n };\n\n var EffectCoverflow = {\n name: 'effect-coverflow',\n params: {\n coverflowEffect: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n modifier: 1,\n slideShadows: true,\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n coverflowEffect: {\n setTranslate: Coverflow.setTranslate.bind(swiper),\n setTransition: Coverflow.setTransition.bind(swiper),\n },\n });\n },\n on: {\n beforeInit: function beforeInit() {\n var swiper = this;\n if (swiper.params.effect !== 'coverflow') { return; }\n\n swiper.classNames.push(((swiper.params.containerModifierClass) + \"coverflow\"));\n swiper.classNames.push(((swiper.params.containerModifierClass) + \"3d\"));\n\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n },\n setTranslate: function setTranslate() {\n var swiper = this;\n if (swiper.params.effect !== 'coverflow') { return; }\n swiper.coverflowEffect.setTranslate();\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n if (swiper.params.effect !== 'coverflow') { return; }\n swiper.coverflowEffect.setTransition(duration);\n },\n },\n };\n\n var Thumbs = {\n init: function init() {\n var swiper = this;\n var ref = swiper.params;\n var thumbsParams = ref.thumbs;\n var SwiperClass = swiper.constructor;\n if (thumbsParams.swiper instanceof SwiperClass) {\n swiper.thumbs.swiper = thumbsParams.swiper;\n Utils.extend(swiper.thumbs.swiper.originalParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false,\n });\n Utils.extend(swiper.thumbs.swiper.params, {\n watchSlidesProgress: true,\n slideToClickedSlide: false,\n });\n } else if (Utils.isObject(thumbsParams.swiper)) {\n swiper.thumbs.swiper = new SwiperClass(Utils.extend({}, thumbsParams.swiper, {\n watchSlidesVisibility: true,\n watchSlidesProgress: true,\n slideToClickedSlide: false,\n }));\n swiper.thumbs.swiperCreated = true;\n }\n swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick);\n },\n onThumbClick: function onThumbClick() {\n var swiper = this;\n var thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) { return; }\n var clickedIndex = thumbsSwiper.clickedIndex;\n var clickedSlide = thumbsSwiper.clickedSlide;\n if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) { return; }\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) { return; }\n var slideToIndex;\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n if (swiper.params.loop) {\n var currentIndex = swiper.activeIndex;\n if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n swiper.loopFix();\n // eslint-disable-next-line\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n currentIndex = swiper.activeIndex;\n }\n var prevIndex = swiper.slides.eq(currentIndex).prevAll((\"[data-swiper-slide-index=\\\"\" + slideToIndex + \"\\\"]\")).eq(0).index();\n var nextIndex = swiper.slides.eq(currentIndex).nextAll((\"[data-swiper-slide-index=\\\"\" + slideToIndex + \"\\\"]\")).eq(0).index();\n if (typeof prevIndex === 'undefined') { slideToIndex = nextIndex; }\n else if (typeof nextIndex === 'undefined') { slideToIndex = prevIndex; }\n else if (nextIndex - currentIndex < currentIndex - prevIndex) { slideToIndex = nextIndex; }\n else { slideToIndex = prevIndex; }\n }\n swiper.slideTo(slideToIndex);\n },\n update: function update(initial) {\n var swiper = this;\n var thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) { return; }\n\n var slidesPerView = thumbsSwiper.params.slidesPerView === 'auto'\n ? thumbsSwiper.slidesPerViewDynamic()\n : thumbsSwiper.params.slidesPerView;\n\n if (swiper.realIndex !== thumbsSwiper.realIndex) {\n var currentThumbsIndex = thumbsSwiper.activeIndex;\n var newThumbsIndex;\n if (thumbsSwiper.params.loop) {\n if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {\n thumbsSwiper.loopFix();\n // eslint-disable-next-line\n thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n currentThumbsIndex = thumbsSwiper.activeIndex;\n }\n // Find actual thumbs index to slide to\n var prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll((\"[data-swiper-slide-index=\\\"\" + (swiper.realIndex) + \"\\\"]\")).eq(0).index();\n var nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll((\"[data-swiper-slide-index=\\\"\" + (swiper.realIndex) + \"\\\"]\")).eq(0).index();\n if (typeof prevThumbsIndex === 'undefined') { newThumbsIndex = nextThumbsIndex; }\n else if (typeof nextThumbsIndex === 'undefined') { newThumbsIndex = prevThumbsIndex; }\n else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) { newThumbsIndex = currentThumbsIndex; }\n else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) { newThumbsIndex = nextThumbsIndex; }\n else { newThumbsIndex = prevThumbsIndex; }\n } else {\n newThumbsIndex = swiper.realIndex;\n }\n if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n if (thumbsSwiper.params.centeredSlides) {\n if (newThumbsIndex > currentThumbsIndex) {\n newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n } else {\n newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n }\n } else if (newThumbsIndex > currentThumbsIndex) {\n newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n }\n thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n }\n }\n\n // Activate thumbs\n var thumbsToActivate = 1;\n var thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n\n if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n thumbsToActivate = swiper.params.slidesPerView;\n }\n\n thumbsSwiper.slides.removeClass(thumbActiveClass);\n if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual) {\n for (var i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.$wrapperEl.children((\"[data-swiper-slide-index=\\\"\" + (swiper.realIndex + i) + \"\\\"]\")).addClass(thumbActiveClass);\n }\n } else {\n for (var i$1 = 0; i$1 < thumbsToActivate; i$1 += 1) {\n thumbsSwiper.slides.eq(swiper.realIndex + i$1).addClass(thumbActiveClass);\n }\n }\n },\n };\n var Thumbs$1 = {\n name: 'thumbs',\n params: {\n thumbs: {\n swiper: null,\n slideThumbActiveClass: 'swiper-slide-thumb-active',\n thumbsContainerClass: 'swiper-container-thumbs',\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n thumbs: {\n swiper: null,\n init: Thumbs.init.bind(swiper),\n update: Thumbs.update.bind(swiper),\n onThumbClick: Thumbs.onThumbClick.bind(swiper),\n },\n });\n },\n on: {\n beforeInit: function beforeInit() {\n var swiper = this;\n var ref = swiper.params;\n var thumbs = ref.thumbs;\n if (!thumbs || !thumbs.swiper) { return; }\n swiper.thumbs.init();\n swiper.thumbs.update(true);\n },\n slideChange: function slideChange() {\n var swiper = this;\n if (!swiper.thumbs.swiper) { return; }\n swiper.thumbs.update();\n },\n update: function update() {\n var swiper = this;\n if (!swiper.thumbs.swiper) { return; }\n swiper.thumbs.update();\n },\n resize: function resize() {\n var swiper = this;\n if (!swiper.thumbs.swiper) { return; }\n swiper.thumbs.update();\n },\n observerUpdate: function observerUpdate() {\n var swiper = this;\n if (!swiper.thumbs.swiper) { return; }\n swiper.thumbs.update();\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n var thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) { return; }\n thumbsSwiper.setTransition(duration);\n },\n beforeDestroy: function beforeDestroy() {\n var swiper = this;\n var thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) { return; }\n if (swiper.thumbs.swiperCreated && thumbsSwiper) {\n thumbsSwiper.destroy();\n }\n },\n },\n };\n\n // Swiper Class\n\n var components = [\n Device$1,\n Support$1,\n Browser$1,\n Resize,\n Observer$1,\n Virtual$1,\n Keyboard$1,\n Mousewheel$1,\n Navigation$1,\n Pagination$1,\n Scrollbar$1,\n Parallax$1,\n Zoom$1,\n Lazy$1,\n Controller$1,\n A11y,\n History$1,\n HashNavigation$1,\n Autoplay$1,\n EffectFade,\n EffectCube,\n EffectFlip,\n EffectCoverflow,\n Thumbs$1\n ];\n\n if (typeof Swiper.use === 'undefined') {\n Swiper.use = Swiper.Class.use;\n Swiper.installModule = Swiper.Class.installModule;\n }\n\n Swiper.use(components);\n\n return Swiper;\n\n}));\n","var classofRaw = require('../internals/classof-raw');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = function (fn) {\n // Nashorn bug:\n // https://github.com/zloirock/core-js/issues/1128\n // https://github.com/zloirock/core-js/issues/1130\n if (classofRaw(fn) === 'Function') return uncurryThis(fn);\n};\n","module.exports = require('./lib/axios');","// eslint-disable-next-line es/no-typed-arrays -- safe\nmodule.exports = typeof ArrayBuffer != 'undefined' && typeof DataView != 'undefined';\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('popper.js')) :\n typeof define === 'function' && define.amd ? define(['popper.js'], factory) :\n (global.VuePopper = factory(global.Popper));\n}(this, (function (Popper) { 'use strict';\n\n Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;\n\n var _extends = Object.assign || 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 function on(element, event, handler) {\n if (element && event && handler) {\n document.addEventListener ? element.addEventListener(event, handler, false) : element.attachEvent('on' + event, handler);\n }\n }\n\n function off(element, event, handler) {\n if (element && event) {\n document.removeEventListener ? element.removeEventListener(event, handler, false) : element.detachEvent('on' + event, handler);\n }\n }\n\n var script = {\n props: {\n trigger: {\n type: String,\n default: 'hover',\n validator: function validator(value) {\n return ['click', 'hover'].indexOf(value) > -1;\n }\n },\n delayOnMouseOver: {\n type: Number,\n default: 10\n },\n delayOnMouseOut: {\n type: Number,\n default: 10\n },\n disabled: {\n type: Boolean,\n default: false\n },\n content: String,\n enterActiveClass: String,\n leaveActiveClass: String,\n boundariesSelector: String,\n reference: {},\n forceShow: {\n type: Boolean,\n default: false\n },\n dataValue: {\n default: null\n },\n appendToBody: {\n type: Boolean,\n default: false\n },\n visibleArrow: {\n type: Boolean,\n default: true\n },\n transition: {\n type: String,\n default: ''\n },\n options: {\n type: Object,\n default: function _default() {\n return {};\n }\n }\n },\n\n data: function data() {\n return {\n referenceElm: null,\n popperJS: null,\n showPopper: false,\n currentPlacement: '',\n popperOptions: {\n placement: 'bottom',\n computeStyle: {\n gpuAcceleration: false\n }\n }\n };\n },\n\n\n watch: {\n showPopper: function showPopper(value) {\n if (value) {\n this.$emit('show', this);\n if (this.popperJS) {\n this.popperJS.enableEventListeners();\n }\n this.updatePopper();\n } else {\n if (this.popperJS) {\n this.popperJS.disableEventListeners();\n }\n this.$emit('hide', this);\n }\n },\n\n\n forceShow: {\n handler: function handler(value) {\n this[value ? 'doShow' : 'doClose']();\n },\n\n immediate: true\n },\n\n disabled: function disabled(value) {\n if (value) {\n this.showPopper = false;\n }\n }\n },\n\n created: function created() {\n this.appendedArrow = false;\n this.appendedToBody = false;\n this.popperOptions = _extends(this.popperOptions, this.options);\n },\n mounted: function mounted() {\n this.referenceElm = this.reference || this.$slots.reference[0].elm;\n this.popper = this.$slots.default[0].elm;\n\n switch (this.trigger) {\n case 'click':\n on(this.referenceElm, 'click', this.doToggle);\n on(document, 'click', this.handleDocumentClick);\n break;\n case 'hover':\n on(this.referenceElm, 'mouseover', this.onMouseOver);\n on(this.referenceElm, 'focus', this.onMouseOver);\n on(this.popper, 'mouseover', this.onMouseOver);\n on(this.popper, 'focus', this.onMouseOver);\n on(this.referenceElm, 'mouseout', this.onMouseOut);\n on(this.referenceElm, 'blur', this.onMouseOut);\n on(this.popper, 'mouseout', this.onMouseOut);\n on(this.popper, 'blur', this.onMouseOut);\n break;\n }\n },\n\n\n methods: {\n doToggle: function doToggle() {\n if (!this.forceShow) {\n this.showPopper = !this.showPopper;\n }\n },\n doShow: function doShow() {\n this.showPopper = true;\n },\n doClose: function doClose() {\n this.showPopper = false;\n },\n doDestroy: function doDestroy() {\n if (this.showPopper) {\n return;\n }\n\n if (this.popperJS) {\n this.popperJS.destroy();\n this.popperJS = null;\n }\n\n if (this.appendedToBody) {\n this.appendedToBody = false;\n document.body.removeChild(this.popper.parentElement);\n }\n },\n createPopper: function createPopper() {\n var _this = this;\n\n this.$nextTick(function () {\n if (_this.visibleArrow) {\n _this.appendArrow(_this.popper);\n }\n\n if (_this.appendToBody && !_this.appendedToBody) {\n _this.appendedToBody = true;\n document.body.appendChild(_this.popper.parentElement);\n }\n\n if (_this.popperJS && _this.popperJS.destroy) {\n _this.popperJS.destroy();\n }\n\n if (_this.boundariesSelector) {\n var boundariesElement = document.querySelector(_this.boundariesSelector);\n\n if (boundariesElement) {\n _this.popperOptions.modifiers = _extends({}, _this.popperOptions.modifiers);\n _this.popperOptions.modifiers.preventOverflow = _extends({}, _this.popperOptions.modifiers.preventOverflow);\n _this.popperOptions.modifiers.preventOverflow.boundariesElement = boundariesElement;\n }\n }\n\n _this.popperOptions.onCreate = function () {\n _this.$emit('created', _this);\n _this.$nextTick(_this.updatePopper);\n };\n\n _this.popperJS = new Popper(_this.referenceElm, _this.popper, _this.popperOptions);\n });\n },\n destroyPopper: function destroyPopper() {\n off(this.referenceElm, 'click', this.doToggle);\n off(this.referenceElm, 'mouseup', this.doClose);\n off(this.referenceElm, 'mousedown', this.doShow);\n off(this.referenceElm, 'focus', this.doShow);\n off(this.referenceElm, 'blur', this.doClose);\n off(this.referenceElm, 'mouseout', this.onMouseOut);\n off(this.referenceElm, 'mouseover', this.onMouseOver);\n off(document, 'click', this.handleDocumentClick);\n\n this.showPopper = false;\n this.doDestroy();\n },\n appendArrow: function appendArrow(element) {\n if (this.appendedArrow) {\n return;\n }\n\n this.appendedArrow = true;\n\n var arrow = document.createElement('div');\n arrow.setAttribute('x-arrow', '');\n arrow.className = 'popper__arrow';\n element.appendChild(arrow);\n },\n updatePopper: function updatePopper() {\n this.popperJS ? this.popperJS.scheduleUpdate() : this.createPopper();\n },\n onMouseOver: function onMouseOver() {\n var _this2 = this;\n\n clearTimeout(this._timer);\n this._timer = setTimeout(function () {\n _this2.showPopper = true;\n }, this.delayOnMouseOver);\n },\n onMouseOut: function onMouseOut() {\n var _this3 = this;\n\n clearTimeout(this._timer);\n this._timer = setTimeout(function () {\n _this3.showPopper = false;\n }, this.delayOnMouseOut);\n },\n handleDocumentClick: function handleDocumentClick(e) {\n if (!this.$el || !this.referenceElm || this.elementContains(this.$el, e.target) || this.elementContains(this.referenceElm, e.target) || !this.popper || this.elementContains(this.popper, e.target)) {\n return;\n }\n\n this.$emit('documentClick', this);\n\n if (this.forceShow) {\n return;\n }\n\n this.showPopper = false;\n },\n elementContains: function elementContains(elm, otherElm) {\n if (typeof elm.contains === 'function') {\n return elm.contains(otherElm);\n }\n\n return false;\n }\n },\n\n destroyed: function destroyed() {\n this.destroyPopper();\n }\n };\n\n /* script */\n var __vue_script__ = script;\n\n /* template */\n var __vue_render__ = function __vue_render__() {\n var _vm = this;\n var _h = _vm.$createElement;\n var _c = _vm._self._c || _h;\n return _c(\"span\", [_c(\"transition\", {\n attrs: {\n name: _vm.transition,\n \"enter-active-class\": _vm.enterActiveClass,\n \"leave-active-class\": _vm.leaveActiveClass\n },\n on: { \"after-leave\": _vm.doDestroy }\n }, [_c(\"span\", {\n directives: [{\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.disabled && _vm.showPopper,\n expression: \"!disabled && showPopper\"\n }],\n ref: \"popper\"\n }, [_vm._t(\"default\", [_vm._v(_vm._s(_vm.content))])], 2)]), _vm._v(\" \"), _vm._t(\"reference\")], 2);\n };\n var __vue_staticRenderFns__ = [];\n __vue_render__._withStripped = true;\n\n /* style */\n var __vue_inject_styles__ = function __vue_inject_styles__(inject) {\n if (!inject) return;\n inject(\"data-v-64b9250b_0\", { source: \"\\n.popper {\\n width: auto;\\n background-color: #fafafa;\\n color: #212121;\\n text-align: center;\\n padding: 2px;\\n display: inline-block;\\n border-radius: 3px;\\n position: absolute;\\n font-size: 14px;\\n font-weight: normal;\\n border: 1px #ebebeb solid;\\n z-index: 200000;\\n -moz-box-shadow: rgb(58, 58, 58) 0 0 6px 0;\\n -webkit-box-shadow: rgb(58, 58, 58) 0 0 6px 0;\\n box-shadow: rgb(58, 58, 58) 0 0 6px 0;\\n}\\n.popper .popper__arrow {\\n width: 0;\\n height: 0;\\n border-style: solid;\\n position: absolute;\\n margin: 5px;\\n}\\n.popper[x-placement^=\\\"top\\\"] {\\n margin-bottom: 5px;\\n}\\n.popper[x-placement^=\\\"top\\\"] .popper__arrow {\\n border-width: 5px 5px 0 5px;\\n border-color: #fafafa transparent transparent transparent;\\n bottom: -5px;\\n left: calc(50% - 5px);\\n margin-top: 0;\\n margin-bottom: 0;\\n}\\n.popper[x-placement^=\\\"bottom\\\"] {\\n margin-top: 5px;\\n}\\n.popper[x-placement^=\\\"bottom\\\"] .popper__arrow {\\n border-width: 0 5px 5px 5px;\\n border-color: transparent transparent #fafafa transparent;\\n top: -5px;\\n left: calc(50% - 5px);\\n margin-top: 0;\\n margin-bottom: 0;\\n}\\n.popper[x-placement^=\\\"right\\\"] {\\n margin-left: 5px;\\n}\\n.popper[x-placement^=\\\"right\\\"] .popper__arrow {\\n border-width: 5px 5px 5px 0;\\n border-color: transparent #fafafa transparent transparent;\\n left: -5px;\\n top: calc(50% - 5px);\\n margin-left: 0;\\n margin-right: 0;\\n}\\n.popper[x-placement^=\\\"left\\\"] {\\n margin-right: 5px;\\n}\\n.popper[x-placement^=\\\"left\\\"] .popper__arrow {\\n border-width: 5px 0 5px 5px;\\n border-color: transparent transparent transparent #fafafa;\\n right: -5px;\\n top: calc(50% - 5px);\\n margin-left: 0;\\n margin-right: 0;\\n}\\n\", map: { \"version\": 3, \"sources\": [\"/Users/igor/projects/vue-popper/src/component/popper.js.vue\"], \"names\": [], \"mappings\": \";AACA;EACA,YAAA;EACA,0BAAA;EACA,eAAA;EACA,mBAAA;EACA,aAAA;EACA,sBAAA;EACA,mBAAA;EACA,mBAAA;EACA,gBAAA;EACA,oBAAA;EACA,0BAAA;EACA,gBAAA;EACA,2CAAA;EACA,8CAAA;EACA,sCAAA;CACA;AAEA;EACA,SAAA;EACA,UAAA;EACA,oBAAA;EACA,mBAAA;EACA,YAAA;CACA;AAEA;EACA,mBAAA;CACA;AAEA;EACA,4BAAA;EACA,0DAAA;EACA,aAAA;EACA,sBAAA;EACA,cAAA;EACA,iBAAA;CACA;AAEA;EACA,gBAAA;CACA;AAEA;EACA,4BAAA;EACA,0DAAA;EACA,UAAA;EACA,sBAAA;EACA,cAAA;EACA,iBAAA;CACA;AAEA;EACA,iBAAA;CACA;AAEA;EACA,4BAAA;EACA,0DAAA;EACA,WAAA;EACA,qBAAA;EACA,eAAA;EACA,gBAAA;CACA;AAEA;EACA,kBAAA;CACA;AAEA;EACA,4BAAA;EACA,0DAAA;EACA,YAAA;EACA,qBAAA;EACA,eAAA;EACA,gBAAA;CACA\", \"file\": \"popper.js.vue\", \"sourcesContent\": [\"\\n\\n\\n\\n\\n\"] }, media: undefined });\n };\n /* scoped */\n var __vue_scope_id__ = undefined;\n /* module identifier */\n var __vue_module_identifier__ = undefined;\n /* functional template */\n var __vue_is_functional_template__ = false;\n /* component normalizer */\n function __vue_normalize__(template, style, script$$1, scope, functional, moduleIdentifier, createInjector, createInjectorSSR) {\n var component = (typeof script$$1 === 'function' ? script$$1.options : script$$1) || {};\n\n // For security concerns, we use only base name in production mode.\n component.__file = \"/Users/igor/projects/vue-popper/src/component/popper.js.vue\";\n\n if (!component.render) {\n component.render = template.render;\n component.staticRenderFns = template.staticRenderFns;\n component._compiled = true;\n\n if (functional) component.functional = true;\n }\n\n component._scopeId = scope;\n\n {\n var hook = void 0;\n if (style) {\n hook = function hook(context) {\n style.call(this, createInjector(context));\n };\n }\n\n if (hook !== undefined) {\n if (component.functional) {\n // register for functional component in vue file\n var originalRender = component.render;\n component.render = function renderWithStyleInjection(h, context) {\n hook.call(context);\n return originalRender(h, context);\n };\n } else {\n // inject component registration as beforeCreate hook\n var existing = component.beforeCreate;\n component.beforeCreate = existing ? [].concat(existing, hook) : [hook];\n }\n }\n }\n\n return component;\n }\n /* style inject */\n function __vue_create_injector__() {\n var head = document.head || document.getElementsByTagName('head')[0];\n var styles = __vue_create_injector__.styles || (__vue_create_injector__.styles = {});\n var isOldIE = typeof navigator !== 'undefined' && /msie [6-9]\\\\b/.test(navigator.userAgent.toLowerCase());\n\n return function addStyle(id, css) {\n if (document.querySelector('style[data-vue-ssr-id~=\"' + id + '\"]')) return; // SSR styles are present.\n\n var group = isOldIE ? css.media || 'default' : id;\n var style = styles[group] || (styles[group] = { ids: [], parts: [], element: undefined });\n\n if (!style.ids.includes(id)) {\n var code = css.source;\n var index = style.ids.length;\n\n style.ids.push(id);\n\n if (isOldIE) {\n style.element = style.element || document.querySelector('style[data-group=' + group + ']');\n }\n\n if (!style.element) {\n var el = style.element = document.createElement('style');\n el.type = 'text/css';\n\n if (css.media) el.setAttribute('media', css.media);\n if (isOldIE) {\n el.setAttribute('data-group', group);\n el.setAttribute('data-next-index', '0');\n }\n\n head.appendChild(el);\n }\n\n if (isOldIE) {\n index = parseInt(style.element.getAttribute('data-next-index'));\n style.element.setAttribute('data-next-index', index + 1);\n }\n\n if (style.element.styleSheet) {\n style.parts.push(code);\n style.element.styleSheet.cssText = style.parts.filter(Boolean).join('\\n');\n } else {\n var textNode = document.createTextNode(code);\n var nodes = style.element.childNodes;\n if (nodes[index]) style.element.removeChild(nodes[index]);\n if (nodes.length) style.element.insertBefore(textNode, nodes[index]);else style.element.appendChild(textNode);\n }\n }\n };\n }\n /* style inject SSR */\n\n var VuePopper = __vue_normalize__({ render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, __vue_script__, __vue_scope_id__, __vue_is_functional_template__, __vue_module_identifier__, __vue_create_injector__, undefined);\n\n return VuePopper;\n\n})));\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n // Note: status is not exposed by XDomainRequest\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.at` method\n// https://github.com/tc39/proposal-relative-indexing-method\nexportTypedArrayMethod('at', function at(index) {\n var O = aTypedArray(this);\n var len = lengthOfArrayLike(O);\n var relativeIndex = toIntegerOrInfinity(index);\n var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;\n return (k < 0 || k >= len) ? undefined : O[k];\n});\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $findLast = require('../internals/array-iteration-from-last').findLast;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.findLast` method\n// https://github.com/tc39/proposal-array-find-from-last\nexportTypedArrayMethod('findLast', function findLast(predicate /* , thisArg */) {\n return $findLast(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar isAbsoluteURL = require('./../helpers/isAbsoluteURL');\nvar combineURLs = require('./../helpers/combineURLs');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Support baseURL config\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n }\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers || {}\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData(\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData(\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","var bind = require('../internals/function-bind-context');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ findLast, findLastIndex }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_FIND_LAST_INDEX = TYPE == 1;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that);\n var index = lengthOfArrayLike(self);\n var value, result;\n while (index-- > 0) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (result) switch (TYPE) {\n case 0: return value; // findLast\n case 1: return index; // findLastIndex\n }\n }\n return IS_FIND_LAST_INDEX ? -1 : undefined;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.findLast` method\n // https://github.com/tc39/proposal-array-find-from-last\n findLast: createMethod(0),\n // `Array.prototype.findLastIndex` method\n // https://github.com/tc39/proposal-array-find-from-last\n findLastIndex: createMethod(1)\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar defineProperty = require('../internals/object-define-property').f;\nvar hasOwn = require('../internals/has-own-property');\nvar anInstance = require('../internals/an-instance');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar normalizeStringArgument = require('../internals/normalize-string-argument');\nvar DOMExceptionConstants = require('../internals/dom-exception-constants');\nvar clearErrorStack = require('../internals/error-stack-clear');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IS_PURE = require('../internals/is-pure');\n\nvar DOM_EXCEPTION = 'DOMException';\nvar Error = getBuiltIn('Error');\nvar NativeDOMException = getBuiltIn(DOM_EXCEPTION);\n\nvar $DOMException = function DOMException() {\n anInstance(this, DOMExceptionPrototype);\n var argumentsLength = arguments.length;\n var message = normalizeStringArgument(argumentsLength < 1 ? undefined : arguments[0]);\n var name = normalizeStringArgument(argumentsLength < 2 ? undefined : arguments[1], 'Error');\n var that = new NativeDOMException(message, name);\n var error = Error(message);\n error.name = DOM_EXCEPTION;\n defineProperty(that, 'stack', createPropertyDescriptor(1, clearErrorStack(error.stack, 1)));\n inheritIfRequired(that, this, $DOMException);\n return that;\n};\n\nvar DOMExceptionPrototype = $DOMException.prototype = NativeDOMException.prototype;\n\nvar ERROR_HAS_STACK = 'stack' in Error(DOM_EXCEPTION);\nvar DOM_EXCEPTION_HAS_STACK = 'stack' in new NativeDOMException(1, 2);\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar descriptor = NativeDOMException && DESCRIPTORS && Object.getOwnPropertyDescriptor(global, DOM_EXCEPTION);\n\n// Bun ~ 0.1.1 DOMException have incorrect descriptor and we can't redefine it\n// https://github.com/Jarred-Sumner/bun/issues/399\nvar BUGGY_DESCRIPTOR = !!descriptor && !(descriptor.writable && descriptor.configurable);\n\nvar FORCED_CONSTRUCTOR = ERROR_HAS_STACK && !BUGGY_DESCRIPTOR && !DOM_EXCEPTION_HAS_STACK;\n\n// `DOMException` constructor patch for `.stack` where it's required\n// https://webidl.spec.whatwg.org/#es-DOMException-specialness\n$({ global: true, constructor: true, forced: IS_PURE || FORCED_CONSTRUCTOR }, { // TODO: fix export logic\n DOMException: FORCED_CONSTRUCTOR ? $DOMException : NativeDOMException\n});\n\nvar PolyfilledDOMException = getBuiltIn(DOM_EXCEPTION);\nvar PolyfilledDOMExceptionPrototype = PolyfilledDOMException.prototype;\n\nif (PolyfilledDOMExceptionPrototype.constructor !== PolyfilledDOMException) {\n if (!IS_PURE) {\n defineProperty(PolyfilledDOMExceptionPrototype, 'constructor', createPropertyDescriptor(1, PolyfilledDOMException));\n }\n\n for (var key in DOMExceptionConstants) if (hasOwn(DOMExceptionConstants, key)) {\n var constant = DOMExceptionConstants[key];\n var constantName = constant.s;\n if (!hasOwn(PolyfilledDOMException, constantName)) {\n defineProperty(PolyfilledDOMException, constantName, createPropertyDescriptor(6, constant.c));\n }\n }\n}\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n\nmodule.exports = function isBuffer (obj) {\n return obj != null && obj.constructor != null &&\n typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","module.exports = {\n IndexSizeError: { s: 'INDEX_SIZE_ERR', c: 1, m: 1 },\n DOMStringSizeError: { s: 'DOMSTRING_SIZE_ERR', c: 2, m: 0 },\n HierarchyRequestError: { s: 'HIERARCHY_REQUEST_ERR', c: 3, m: 1 },\n WrongDocumentError: { s: 'WRONG_DOCUMENT_ERR', c: 4, m: 1 },\n InvalidCharacterError: { s: 'INVALID_CHARACTER_ERR', c: 5, m: 1 },\n NoDataAllowedError: { s: 'NO_DATA_ALLOWED_ERR', c: 6, m: 0 },\n NoModificationAllowedError: { s: 'NO_MODIFICATION_ALLOWED_ERR', c: 7, m: 1 },\n NotFoundError: { s: 'NOT_FOUND_ERR', c: 8, m: 1 },\n NotSupportedError: { s: 'NOT_SUPPORTED_ERR', c: 9, m: 1 },\n InUseAttributeError: { s: 'INUSE_ATTRIBUTE_ERR', c: 10, m: 1 },\n InvalidStateError: { s: 'INVALID_STATE_ERR', c: 11, m: 1 },\n SyntaxError: { s: 'SYNTAX_ERR', c: 12, m: 1 },\n InvalidModificationError: { s: 'INVALID_MODIFICATION_ERR', c: 13, m: 1 },\n NamespaceError: { s: 'NAMESPACE_ERR', c: 14, m: 1 },\n InvalidAccessError: { s: 'INVALID_ACCESS_ERR', c: 15, m: 1 },\n ValidationError: { s: 'VALIDATION_ERR', c: 16, m: 0 },\n TypeMismatchError: { s: 'TYPE_MISMATCH_ERR', c: 17, m: 1 },\n SecurityError: { s: 'SECURITY_ERR', c: 18, m: 1 },\n NetworkError: { s: 'NETWORK_ERR', c: 19, m: 1 },\n AbortError: { s: 'ABORT_ERR', c: 20, m: 1 },\n URLMismatchError: { s: 'URL_MISMATCH_ERR', c: 21, m: 1 },\n QuotaExceededError: { s: 'QUOTA_EXCEEDED_ERR', c: 22, m: 1 },\n TimeoutError: { s: 'TIMEOUT_ERR', c: 23, m: 1 },\n InvalidNodeTypeError: { s: 'INVALID_NODE_TYPE_ERR', c: 24, m: 1 },\n DataCloneError: { s: 'DATA_CLONE_ERR', c: 25, m: 1 }\n};\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t(require(\"swiper/dist/js/swiper.js\")):\"function\"==typeof define&&define.amd?define(\"VueAwesomeSwiper\",[\"swiper\"],t):\"object\"==typeof exports?exports.VueAwesomeSwiper=t(require(\"swiper/dist/js/swiper.js\")):e.VueAwesomeSwiper=t(e.Swiper)}(this,function(e){return function(e){function t(i){if(n[i])return n[i].exports;var s=n[i]={i:i,l:!1,exports:{}};return e[i].call(s.exports,s,s.exports,t),s.l=!0,s.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,\"a\",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p=\"/\",t(t.s=4)}([function(t,n){t.exports=e},function(e,t){e.exports=function(e,t,n,i,s,r){var o,a=e=e||{},u=typeof e.default;\"object\"!==u&&\"function\"!==u||(o=e,a=e.default);var p=\"function\"==typeof a?a.options:a;t&&(p.render=t.render,p.staticRenderFns=t.staticRenderFns,p._compiled=!0),n&&(p.functional=!0),s&&(p._scopeId=s);var l;if(r?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||\"undefined\"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),i&&i.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(r)},p._ssrRegister=l):i&&(l=i),l){var c=p.functional,d=c?p.render:p.beforeCreate;c?(p._injectStyles=l,p.render=function(e,t){return l.call(t),d(e,t)}):p.beforeCreate=d?[].concat(d,l):[l]}return{esModule:o,exports:a,options:p}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(5),s=n.n(i),r=n(8),o=n(1),a=o(s.a,r.a,!1,null,null,null);t.default=a.exports},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(6),s=n.n(i),r=n(7),o=n(1),a=o(s.a,r.a,!1,null,null,null);t.default=a.exports},function(e,t,n){\"use strict\";function i(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0}),t.install=t.swiperSlide=t.swiper=t.Swiper=void 0;var s=n(0),r=i(s),o=n(2),a=i(o),u=n(3),p=i(u),l=window.Swiper||r.default,c=p.default,d=a.default,f=function(e,t){t&&(p.default.props.globalOptions.default=function(){return t}),e.component(p.default.name,p.default),e.component(a.default.name,a.default)},h={Swiper:l,swiper:c,swiperSlide:d,install:f};t.default=h,t.Swiper=l,t.swiper=c,t.swiperSlide=d,t.install=f},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={name:\"swiper-slide\",data:function(){return{slideClass:\"swiper-slide\"}},ready:function(){this.update()},mounted:function(){this.update(),this.$parent&&this.$parent.options&&this.$parent.options.slideClass&&(this.slideClass=this.$parent.options.slideClass)},updated:function(){this.update()},attached:function(){this.update()},methods:{update:function(){this.$parent&&this.$parent.swiper&&this.$parent.update()}}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(0),s=function(e){return e&&e.__esModule?e:{default:e}}(i),r=window.Swiper||s.default;\"function\"!=typeof Object.assign&&Object.defineProperty(Object,\"assign\",{value:function(e,t){if(null==e)throw new TypeError(\"Cannot convert undefined or null to object\");for(var n=Object(e),i=1;i