{"version":3,"sources":["webpack:///./node_modules/is-buffer/index.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:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/adapters/xhr.js","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:///./node_modules/vue-upload-multiple-image/node_modules/axios/index.js","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack:///./node_modules/vue-upload-multiple-image/src/components/VueUploadMultipleImage.vue?cf2b","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-awesome-swiper/dist/vue-awesome-swiper.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-image-lightbox-carousel/src/components/VueImageLightboxCarousel.vue?cf19","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/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/vue-upload-multiple-image/node_modules/axios/lib/core/dispatchRequest.js","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/core/transformData.js","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/helpers/buildURL.js","webpack:///./node_modules/swiper/dist/js/swiper.js","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/helpers/spread.js","webpack:///./node_modules/vue-upload-multiple-image/src/components/VueUploadMultipleImage.vue?3dbc","webpack:///./node_modules/vue-upload-multiple-image/node_modules/axios/lib/core/Axios.js","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/popper.js/dist/esm/popper.js","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?7909","webpack:///./node_modules/vue-image-lightbox-carousel/src/components/VueImageLightboxCarousel.vue?8618","webpack:///node_modules/vue-image-lightbox-carousel/src/App.vue","webpack:///./node_modules/vue-image-lightbox-carousel/src/App.vue?d0c9","webpack:///./node_modules/vue-image-lightbox-carousel/src/App.vue?87cf","webpack:///./node_modules/vue-lazyload/vue-lazyload.esm.js","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?ac24","webpack:///./node_modules/vue-upload-multiple-image/src/components/VueUploadMultipleImage.vue?456f","webpack:///node_modules/vue-upload-multiple-image/src/App.vue","webpack:///./node_modules/vue-upload-multiple-image/src/App.vue?92f5","webpack:///./node_modules/vue-upload-multiple-image/src/App.vue?e2f7","webpack:///./node_modules/vue-upload-multiple-image/src/main.js"],"names":["module","exports","obj","constructor","isBuffer","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","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","e","onDownloadProgress","addEventListener","onUploadProgress","upload","cancelToken","promise","then","cancel","abort","send","InterceptorManager","this","handlers","prototype","use","fulfilled","rejected","push","length","eject","id","fn","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","apply","func","thisArg","args","call","arrayAggregator","array","setter","iteratee","accumulator","index","value","arrayEach","arrayEachRight","arrayEvery","predicate","arrayFilter","resIndex","result","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","Array","arrayPush","values","offset","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","TypeError","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","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","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","arguments","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","findLastIndex","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","bind","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","i","l","a","b","Axios","createInstance","defaultConfig","instance","axios","instanceConfig","Cancel","CancelToken","isCancel","all","promises","default","factory","Popper","_extends","on","element","event","handler","attachEvent","off","removeEventListener","detachEvent","script","trigger","validator","delayOnMouseOver","Number","delayOnMouseOut","disabled","Boolean","content","enterActiveClass","leaveActiveClass","boundariesSelector","forceShow","dataValue","appendToBody","visibleArrow","transition","referenceElm","popperJS","showPopper","currentPlacement","popperOptions","placement","computeStyle","gpuAcceleration","watch","$emit","enableEventListeners","updatePopper","disableEventListeners","immediate","created","appendedArrow","appendedToBody","mounted","$slots","elm","popper","doToggle","handleDocumentClick","onMouseOver","onMouseOut","methods","doShow","doClose","doDestroy","destroy","body","removeChild","parentElement","createPopper","_this","$nextTick","appendArrow","appendChild","boundariesElement","querySelector","modifiers","preventOverflow","onCreate","destroyPopper","arrow","createElement","setAttribute","className","scheduleUpdate","_this2","_timer","_this3","$el","elementContains","otherElm","contains","destroyed","__vue_script__","__vue_render__","_vm","_h","$createElement","_c","_self","attrs","directives","rawName","expression","ref","_t","_v","_s","__vue_staticRenderFns__","_withStripped","__vue_inject_styles__","inject","media","__vue_scope_id__","__vue_module_identifier__","__vue_is_functional_template__","__vue_normalize__","style","script$$1","scope","functional","moduleIdentifier","createInjector","createInjectorSSR","component","__file","render","staticRenderFns","_compiled","_scopeId","hook","originalRender","existing","beforeCreate","__vue_create_injector__","getElementsByTagName","styles","isOldIE","userAgent","css","ids","parts","el","getAttribute","styleSheet","cssText","textNode","createTextNode","nodes","childNodes","insertBefore","VuePopper","validateStatus","t","s","m","c","d","o","configurable","enumerable","__esModule","p","r","u","$vnode","ssrContext","__VUE_SSR_CONTEXT__","_registeredComponents","_ssrRegister","_injectStyles","esModule","install","swiperSlide","swiper","Swiper","f","globalOptions","slideClass","ready","$parent","updated","attached","writable","required","classes","wrapperClass","mountInstance","activated","beforeDestroy","navigation","pagination","bindEvents","staticClass","class","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","decodeURIComponent","__CANCEL__","executor","resolvePromise","token","reason","throwIfRequested","transformData","isAbsoluteURL","combineURLs","throwIfCancellationRequested","fns","encode","serializedParams","v","toISOString","doc","activeElement","blur","nodeName","querySelectorAll","getElementById","createEvent","initEvent","children","location","hash","win","history","CustomEvent","getComputedStyle","getPropertyValue","Image","screen","Dom7","arr","$","selector","els","tempParent","html","toCreate","innerHTML","unique","uniqueArray","addClass","j","classList","removeClass","hasClass","toggleClass","toggle","attr","arguments$1","attrName","removeAttr","removeAttribute","dom7ElementDataStorage","dataKey","elStyle","webkitTransform","duration","webkitTransitionDuration","transitionDuration","len","eventType","targetSelector","listener","capture","handleLiveEvent","eventData","dom7EventData","unshift","is","parents","k","handleEvent","events","event$1","dom7LiveListeners","proxyListener","dom7Listeners","dom7proxy","evt","detail","bubbles","cancelable","dataIndex","dispatchEvent","transitionEnd","dom","fireCallBack","outerWidth","includeMargins","offsetWidth","outerHeight","offsetHeight","box","getBoundingClientRect","clientTop","clientLeft","scrollTop","scrollY","scrollLeft","scrollX","top","left","text","textContent","compareWith","webkitMatchesSelector","msMatchesSelector","child","previousSibling","returnIndex","append","newChild","tempDiv","firstChild","prepend","nextElementSibling","nextAll","nextEls","prev","previousElementSibling","prevAll","prevEls","parentNode","closest","foundElements","found","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","len$1","to","nextSource","keysArray","nextIndex","nextKey","desc","getOwnPropertyDescriptor","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","components","updateSize","width","height","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","spaceBetween","slidePosition","prevSlideSize","slidesNumberEvenToRows","slideSize","virtualSize","marginLeft","marginTop","marginRight","marginBottom","slidesPerColumn","slidesPerView","slidesPerColumnFill","newSlidesGrid","slidesPerRow","numFullColumns","slide","newSlideOrderIndex","column","row","slidesPerGroup","groupIndex","slideStyles","currentTransform","currentWebKitTransform","roundLengths","paddingLeft","paddingRight","boxSizing","paddingTop","paddingBottom","boxSizing$1","swiperSlideSize","centeredSlides","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","activeIndex","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","slideToClickedSlide","priority","onceHandler","f7proxy","eventHandler","eventsArray","useModulesParams","instanceParams","modules","moduleName","useModules","modulesParams","moduleParams","modulePropName","moduleProp","moduleEventName","installModule","static","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","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","preventDefault","formElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","onTouchMove","preventedByNestedSwiper","touchReleaseOnEdges","diffX","diffY","sqrt","pow","touchAngle","atan2","PI","touchMoveStopPropagation","stopPropagation","startTranslate","allowMomentumBounce","touchRatio","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","src","srcset","sizes","checkForComplete","image","onReady","complete","onload","preloadImages","imagesLoaded","imagesToLoad","updateOnImagesReady","currentSrc","images","wasLocked","checkOverflow$1","init","uniqueNavElements","noSwipingClass","slideBlankClass","prototypes","extendedDefaults","prototypeGroup","protoMethod","moduleParamName","swiperParams","passedParams","swipers","containerEl","newParams","touchEventsTouch","touchEventsDesktop","__proto__","spv","breakLoop","translated","translateValue","newDirection","needUpdate","currentDirection","slideEl","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","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","nextEl","prevEl","Navigation$1","hideOnClick","hiddenClass","toEdge","fromEdge","click","isHidden","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","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","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","dispatchRequest","interceptors","shift","normalizedName","originURL","msie","urlParsingNode","resolveURL","protocol","host","hostname","port","requestURL","isBrowser","timeoutDuration","longerTimeoutBrowsers","microtaskDebounce","called","taskDebounce","scheduled","supportsMicroTasks","functionToCheck","getType","getStyleComputedProperty","ownerDocument","defaultView","getParentNode","getScrollParent","_getStyleComputedProp","overflow","overflowX","overflowY","getReferenceNode","referenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","version","getOffsetParent","documentElement","noOffsetParent","offsetParent","isOffsetContainer","firstElementChild","getRoot","node","findCommonOffsetParent","element1","element2","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","setStart","setEnd","commonAncestorContainer","element1root","getScroll","side","upperSide","scrollingElement","includeScroll","rect","bottom","right","getBordersSize","sideA","sideB","getSize","computedStyle","getWindowSizes","classCallCheck","Constructor","createClass","descriptor","protoProps","staticProps","getClientRect","offsets","horizScrollbar","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","isFixed","getFixedPositionOffsetParent","getBoundaries","padding","boundaries","boundariesNode","_getWindowSizes","isPaddingNumber","getArea","_ref","computeAutoPlacement","refRect","rects","sortedAreas","area","filteredAreas","_ref2","computedPlacement","variation","getReferenceOffsets","commonOffsetParent","getOuterSizes","getOppositePlacement","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","check","cur","runModifiers","ends","modifiersToRun","console","warn","isDestroyed","arrowStyles","flipped","positionFixed","originalPlacement","isCreated","onUpdate","isModifierEnabled","modifierName","getSupportedPropertyName","prefixes","upperProp","toCheck","willChange","removeOnDestroy","getWindow","attachToScrollParents","scrollParents","isBody","setupEventListeners","updateBound","scrollElement","eventsEnabled","removeEventListeners","cancelAnimationFrame","isNumeric","setStyles","unit","setAttributes","applyStyle","arrowElement","applyStyleOnLoad","modifierOptions","getRoundedOffsets","shouldRound","_data$offsets","noRound","referenceWidth","popperWidth","isVariation","sameWidthParity","bothOddWidth","horizontalToInteger","verticalToInteger","isFirefox","legacyGpuAccelerationOption","offsetParentRect","prefixedProperty","invertTop","invertLeft","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","_data$offsets$arrow","sideCapitalized","altSide","opSide","arrowElementSize","popperMarginSide","popperBorderSide","sideValue","getOppositeVariation","placements","validPlacements","clockwise","counter","BEHAVIORS","FLIP","CLOCKWISE","COUNTERCLOCKWISE","placementOpposite","flipOrder","behavior","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","keepTogether","toValue","parseOffset","basePlacement","useHeight","fragments","frag","splitRegex","ops","op","mergeWithPrevious","index2","transformProp","popperStyles","primary","escapeWithReference","secondary","shiftvariation","shiftOffsets","bound","inner","subtractLength","onLoad","Defaults","jquery","PopperUtils","staticStyle","uploadImageSuccess","beforeRemove","editImage","dataChange","limitExceeded","preventEvent","isDragover","onDrop","dropText","$event","onDragover","openGallery","currentIndexImage","imagePreview","showPrimary","imageDefault","primaryText","popupText","slot","markIsPrimary","markIsPrimaryText","_e","showEdit","idEdit","showDelete","deleteImage","dragText","browseText","idUpload","multiple","_l","highlight","changeHighlight","maxImage","showAdd","accept","uploadFieldChange","editFieldChange","showLightbox","openLightbox","changeImage","show","close","swiperOptionTop","showCaption","caption","showThumbs","swiperOptionThumbs","showImage","$refs","swiperTop","swiperThumbs","VueImageLightboxCarousel","lightbox","log","createCommonjsModule","assignSymbols$1","isEnumerable","_len","_key","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","names","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","err","return","assignSymbols$2","freeze","__moduleExports","assignSymbols","_typeof","assignDeep","isValidKey","isPrimitive","inBrowser","hasIntersectionObserver","checkIntersectionObserver","IntersectionObserverEntry","intersectionRatio","modeType","Event","initCustomEvent","item","getBestSelectionFromSrcset","tagName","container","containerWidth","spaceIndex","tmpSrc","tmpWidth","bestSelectedSrc","tmpOption","getDPR","supportWebp","elem","getContext","toDataURL","movement","lastRun","needRun","elapsed","runCallback","testSupportsPassive","loadImageAsync","cors","crossOrigin","naturalHeight","naturalWidth","HTMLElement","ObjectKeys","ArrayFrom","arrLike","list","ImageCache","_caches","free","ReactiveListener","loading","bindType","elRenderer","imageCache","_imageCache","performanceData","loadStart","loadEnd","initState","dataset","loaded","rendered","oldSrc","getRect","preLoad","preLoadTop","cb","silent","onFinish","renderLoading","record","DEFAULT_URL","DEFAULT_EVENTS","DEFAULT_OBSERVER_OPTIONS","rootMargin","Vue","throttleWait","_ref$silent","listenEvents","hasbind","observerOptions","mode","ListenerQueue","TargetIndex","TargetQueue","ListenEvents","_initEvent","lazyLoadHandler","_lazyLoadHandler","setMode","performance","vm","_addListenerTarget","_observer","vnode","_valueFormatter2","_valueFormatter","newListener","_elRenderer","_valueFormatter3","exist","unobserve","existItem","_removeListenerTarget","$destroy","_initListen","_initIntersectionObserver","childrenCount","listened","_this4","_this5","_this6","listeners","$on","$once","$off","inCache","_this7","freeList","catIn","checkInView","_this8","IntersectionObserver","_observerHandler","_this9","isIntersecting","LazyClass","isVue2","directive","componentUpdated","unbind","oldValue","$els","LazyComponent","addLazyBox","removeComponent","LazyContainerMananger","lazyContainerMananger","_queue","LazyContainer","defaultOptions","_ref3","imgs","getImgs","lazyContainer","LazyImage","lazyManager","renderSrc","_lazyManager$_valueFo","$Lazyload","lazyComponent","lazyImage","dataImages","arrLightBox","files","dataTransfer","isValidNumberOfImages","createImage","file","reader","FileReader","formData","dataURI","readAsDataURL","onOpenedLightBox","newVal","deep","VueUploadMultipleImage","fileList","confirm"],"mappings":"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M,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAC1B,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACtF,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACtF,IAAU,IAAM,IAAU,IAC1B,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAA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","file":"js/chunk-0d94f018.daeacd1c.js","sourcesContent":["/*!\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 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","'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","module.exports = __webpack_public_path__ + \"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\"] }, 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","!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= 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","export * from \"-!../../../@vue/cli-service/node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../css-loader/index.js??ref--6-oneOf-1-1!../../../vue-loader/lib/loaders/stylePostLoader.js!../../../postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../cache-loader/dist/cjs.js??ref--0-0!../../../vue-loader/lib/index.js??vue-loader-options!./VueImageLightboxCarousel.vue?vue&type=style&index=0&id=3f78f595&prod&lang=css&scoped=true\"","'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';\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';\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","'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","'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","/**\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","'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","export * from \"-!../../../@vue/cli-service/node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../css-loader/index.js??ref--6-oneOf-1-1!../../../vue-loader/lib/loaders/stylePostLoader.js!../../../postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../cache-loader/dist/cjs.js??ref--0-0!../../../vue-loader/lib/index.js??vue-loader-options!./VueUploadMultipleImage.vue?vue&type=style&index=0&id=6ff5a0de&prod&lang=css&scoped=true\"","'use strict';\n\nvar defaults = require('./../defaults');\nvar utils = require('./../utils');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = utils.merge({\n url: arguments[0]\n }, arguments[1]);\n }\n\n config = utils.merge(defaults, {method: 'get'}, this.defaults, config);\n config.method = config.method.toLowerCase();\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.1\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nfunction getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _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 * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.width;\n var height = sizes.height || element.clientHeight || result.height;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop);\n var marginLeft = parseFloat(styles.marginLeft);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n var parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n\n var noRound = function noRound(v) {\n return v;\n };\n\n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.
\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n // flips variation if popper content overflows boundaries\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
\n * It will read the variation of the `placement` property.
\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.
\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.
\n * These can be overridden using the `options` argument of Popper.js.
\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
\n * By default, it is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
\n * By default, it is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticStyle:{\"display\":\"flex\",\"justify-content\":\"center\"},attrs:{\"id\":\"my-strictly-unique-vue-upload-multiple-image\"}},[_c('vue-upload-multiple-image',{on:{\"upload-success\":_vm.uploadImageSuccess,\"before-remove\":_vm.beforeRemove,\"edit-image\":_vm.editImage,\"data-change\":_vm.dataChange,\"limit-exceeded\":_vm.limitExceeded}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticStyle:{\"outline\":\"none\"},on:{\"drag\":_vm.preventEvent,\"dragstart\":_vm.preventEvent,\"dragend\":_vm.preventEvent,\"dragover\":_vm.preventEvent,\"dragenter\":_vm.preventEvent,\"dragleave\":_vm.preventEvent,\"drop\":_vm.preventEvent}},[(!_vm.images.length)?_c('div',{staticClass:\"image-container position-relative text-center\"},[(_vm.isDragover)?_c('div',{staticClass:\"drag-upload-cover position-absolute\",on:{\"drop\":_vm.onDrop}},[_c('div',{staticClass:\"centered full-width text-center text-primary\"},[_c('svg',{staticClass:\"icon-drag-drop\",attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 512 512\"}},[_c('path',{attrs:{\"d\":\"M444.5 15C407.7 15 378 44.8 378 81.5s29.8 66.5 66.5 66.5S511 118.2 511 81.5 481.2 15 444.5 15zm29.4 72.4h-23.5l.1 25.9c0 3.2-2.6 5.8-5.8 5.9-3.2 0-5.8-2.6-5.8-5.8l-.1-26h-23.6c-3.2 0-5.8-2.6-5.8-5.8s2.6-5.8 5.8-5.8h23.5l-.1-25.9c0-3.2 2.6-5.8 5.8-5.9 3.2 0 5.8 2.6 5.8 5.8l.1 26h23.6c3.3 0 5.8 2.6 5.8 5.8s-2.6 5.8-5.8 5.8zM199.3 191.3c21.5 0 38.9 17.6 38.9 39.3s-17.4 39.3-38.9 39.3-38.9-17.6-38.9-39.3c0-21.7 17.5-39.3 38.9-39.3zm185.4 201.3H86.3c-6.5 0-11.9-5.3-11.9-11.9v-32.4c0-2.5.7-4.8 2.1-6.9l41.3-58.4c3.7-5.2 10.8-6.5 16.1-3.1l56.4 36.8c4.5 3 10.3 2.5 14.4-1L313 220.1c5.1-4.5 13.1-3.8 17.2 1.7l61.5 79.7c1.6 2 2.5 4.6 2.5 7.2v74.4c0 5.2-4.3 9.5-9.5 9.5zm7.9 117.6h-58.8v-12h58.8v12zm-78.4 0h-58.8v-12h58.8v12zm-78.5 0h-58.8v-12h58.8v12zm-78.4 0H98.4v-12h58.8v12h.1zm-78.5 0H57.7c-14.3 0-27.9-5.4-38.3-15.3l8.3-8.7c8.2 7.8 18.8 12 30.1 12h21.1l-.1 12zm333.6-.1l-.3-12c17.8-.4 33.4-11.5 39.8-28.2l11.2 4.3c-8.1 21.3-28 35.4-50.7 35.9zM6.8 477c-3.2-7.1-4.7-14.7-4.7-22.5v-38.2h12v38.2c0 6.1 1.3 12.1 3.7 17.6l-11 4.9zm459.9-24.1h-12v-58.8h12v58.8zM14.1 396.7h-12v-58.8h12v58.8zm452.6-22.3h-12v-58.8h12v58.8zM14.1 318.3h-12v-58.8h12v58.8zM466.7 296h-12v-58.8h12V296zM14.1 239.8h-12V181h12v58.8zm452.6-22.2h-12v-58.8h12v58.8zM14.1 161.4h-12v-58.8h12v58.8zm2.4-76.1L5.3 81.2C13 59.9 33.4 45.5 56.1 45.5h.2v12h-.2c-17.7 0-33.6 11.2-39.6 27.8zm353.6-27.8h-58.8v-12h58.8v12zm-78.5 0h-58.8v-12h58.8v12zm-78.4 0h-58.8v-12h58.8v12zm-78.5 0H75.9v-12h58.8v12z\"}})]),_c('h4',{staticClass:\"drop-text-here\"},[_c('b',[_vm._v(_vm._s(_vm.dropText))])])])]):_c('div',{staticClass:\"image-center position-absolute display-flex flex-column justify-content-center align-items-center\",on:{\"dragover\":function($event){$event.preventDefault();return _vm.onDragover.apply(null, arguments)}}},[_c('div',[_c('svg',{staticClass:\"image-icon-drag\",attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 512 512\"}},[_c('path',{attrs:{\"d\":\"M383.6 229l-.5 1.5.7 1.7c-.2-1.1-.2-2.2-.2-3.2zm-119.7-5.4l-.3 1.4.6 1.3c-.2-.8-.3-1.8-.3-2.7zm62.4 3.8l-.2 1 .5 1.1-.3-2.1z\"}}),_c('path',{attrs:{\"d\":\"M483 326.2l-43.5-100.5c-3.6-8.4-10.3-14.9-18.7-18.4-8.5-3.6-17.8-3.5-26.1.1L391 209c-3.3 1.4-6.1 3.6-8.4 6.3-3.6-8.2-10.2-14.6-18.6-18-8.5-3.4-17.7-3.3-26.1.3-6.1 2.7-10.9 6.8-13.9 12-3.7-8-10.2-14.3-18.4-17.6-8.5-3.4-17.8-3.3-26.1.3l-3.7 1.6c-6.3 2.7-11.2 7.1-14.3 12.4l-20.3-46.9c-4.2-9.8-10.7-16.8-18.7-20.2-8.1-3.5-17.2-3.2-26.5.8l-3.7 1.6c-8 3.5-13.3 9.3-15.5 16.9-2.1 7.3-1 16.2 3.1 25.6l83.4 188.2-64.7-39.8c-11.2-6.8-25.7-4.7-34.4 5.1-11.3 12.5-10.3 31.9 2 43.3l55.8 51.5 50.8 43.4c17.6 16.7 38.2 28.1 59.6 32.9 7.7 1.7 15.5 2.5 23.2 2.5 14.9 0 29.7-3.1 44.2-9.4l27.9-12.1c31.2-13.5 52.8-37.1 62.6-68.4 9.2-29.2 6.6-63-7.3-95.1zM383.6 229c0 1 .1 2.1.2 3.1l-.7-1.7.5-1.4zM281.7 466.6c-.2-.2-.5-.5-.7-.6l-50.4-43.1-55.6-51.5c-7.3-6.7-7.9-18.2-1.2-25.6 4.7-5.3 12.5-6.4 18.5-2.6l65.6 40.2c4.7 2.9 10.4 2.4 14.5-1.3 4.1-3.6 5.3-9.2 3.2-14.2l-83.7-189c-3.2-7.4-3.9-13.4-2.1-18.1 1.7-4.3 5.2-6.5 7.9-7.7l3.7-1.6c12.3-5.3 22.8-.6 28.6 12.9L310.2 350c1.4 3.2 5.1 4.6 8.3 3.3 3.2-1.4 4.7-5.1 3.3-8.3l-48.7-112.5c-2.2-5.2-3-10.8-2-15.4 1.1-5.4 4.5-9.3 9.9-11.7l3.7-1.6c5.3-2.3 11.1-2.3 16.4-.2 5.3 2.2 9.5 6.3 11.8 11.6l43.9 101.5c.7 1.6 1.9 2.7 3.5 3.4 1.6.6 3.3.6 4.8-.1 3.2-1.4 4.7-5.1 3.3-8.3l-32.8-75.9c-8.2-18.9 4.8-25.6 7.5-26.8 10.8-4.7 23.5.4 28.2 11.3l28.9 66.7c1.4 3.2 5.1 4.7 8.3 3.3 3.2-1.4 4.7-5.1 3.3-8.3l-19.4-44.8c-1.3-3-4.9-13.2 3.8-16.9l3.7-1.6c5.2-2.3 11.1-2.3 16.4 0 5.3 2.3 9.6 6.4 11.9 11.8L471.7 331c12.7 29.3 15.1 59.9 6.8 86.3-8.7 27.6-27.9 48.5-55.6 60.5L395 489.9c-38.9 16.9-80.1 8.4-113.3-23.3zm44.6-239.2l.3 2.1-.5-1.1.2-1zm-62.4-3.8l.3 2.7-.6-1.3.3-1.4zM31 217c3.2 0 6-2.6 6-5.7v-40c0-3.2-2.8-5.7-6-5.7s-6 2.6-6 5.7v40c0 3.2 2.8 5.7 6 5.7zm0-66.3c3.2 0 6-2.6 6-5.7v-40c0-3.2-2.8-5.7-6-5.7s-6 2.6-6 5.7v40c0 3.1 2.8 5.7 6 5.7zM148 296h-40c-3.2 0-5.7 2.3-5.7 5.5s2.6 5.5 5.7 5.5h40c3.2 0 5.7-2.3 5.7-5.5s-2.6-5.5-5.7-5.5zM37 237.6c0-3.2-2.8-5.7-6-5.7s-6 2.6-6 5.7v40c0 3.2 2.8 5.7 6 5.7s6-2.6 6-5.7v-40zM31 84.4c3.2 0 6-2.6 6-5.7v-40c0-3.2-2.8-5.7-6-5.7s-6 2.6-6 5.7v40c0 3.1 2.8 5.7 6 5.7zM81.6 296H49.1c-1.7 0-3.4-.6-5-1.3-2.9-1.3-6.3-.1-7.5 2.8-1.3 2.9 0 6.3 2.9 7.5 3 1.3 6.3 2 9.6 2h32.5c3.2 0 5.7-2.3 5.7-5.5s-2.5-5.5-5.7-5.5zm60.6-281c3.2 0 5.7-2.8 5.7-6s-2.6-6-5.7-6h-40c-3.2 0-5.7 2.8-5.7 6s2.6 6 5.7 6h40z\"}}),_c('path',{attrs:{\"d\":\"M323 122.4c-3.2 0-6 2.6-6 5.7v39.2c0 3.2 2.8 5.7 6 5.7s6-2.6 6-5.7v-39.2c0-3.1-2.8-5.7-6-5.7zm6-60.6c0-3.2-2.8-5.7-6-5.7s-6 2.6-6 5.7v40c0 3.2 2.8 5.7 6 5.7s6-2.6 6-5.7v-40zM301.2 15h3.6c6.8 0 12.2 5.6 12.2 12.4v8.1c0 3.2 2.8 5.7 6 5.7s6-2.6 6-5.7v-8.1C329 14.3 317.9 3 304.8 3h-3.6c-3.2 0-5.7 2.8-5.7 6s2.5 6 5.7 6zm-66.3 0h40c3.2 0 5.7-2.8 5.7-6s-2.6-6-5.7-6h-40c-3.2 0-5.7 2.8-5.7 6s2.5 6 5.7 6zm-60.6 292h40c3.2 0 5.7-2.3 5.7-5.5s-2.6-5.5-5.7-5.5h-40c-3.2 0-5.7 2.3-5.7 5.5s2.5 5.5 5.7 5.5zm-5.8-292h40c3.2 0 5.7-2.8 5.7-6s-2.6-6-5.7-6h-40c-3.2 0-5.7 2.8-5.7 6s2.6 6 5.7 6zM37.1 19.8c1.4 0 2.7-.6 3.8-1.5 2.3-2 5.2-3.2 8.2-3.2h26.8c3.2 0 5.7-2.8 5.7-6s-2.6-6-5.7-6H49.1c-5.9 0-11.5 2.5-15.9 6.5-2.3 2.1-2.5 5.9-.4 8.2 1.1 1.2 2.7 2 4.3 2z\"}})])]),_c('div',{staticClass:\"text-center\"},[_c('label',{staticClass:\"drag-text\"},[_vm._v(_vm._s(_vm.dragText))]),_c('br'),_c('a',{staticClass:\"browse-text\"},[_vm._v(_vm._s(_vm.browseText))])]),_c('div',{staticClass:\"image-input position-absolute full-width full-height\"},[_c('label',{staticClass:\"full-width full-height cursor-pointer\",attrs:{\"for\":_vm.idUpload}})])])]):_c('div',{staticClass:\"image-container position-relative text-center image-list\"},[(_vm.isDragover)?_c('div',{staticClass:\"drag-upload-cover position-absolute\",on:{\"drop\":_vm.onDrop}},[_c('div',{staticClass:\"centered full-width text-center text-primary\"},[_c('svg',{staticClass:\"icon-drag-drop\",attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 512 512\"}},[_c('path',{attrs:{\"d\":\"M444.5 15C407.7 15 378 44.8 378 81.5s29.8 66.5 66.5 66.5S511 118.2 511 81.5 481.2 15 444.5 15zm29.4 72.4h-23.5l.1 25.9c0 3.2-2.6 5.8-5.8 5.9-3.2 0-5.8-2.6-5.8-5.8l-.1-26h-23.6c-3.2 0-5.8-2.6-5.8-5.8s2.6-5.8 5.8-5.8h23.5l-.1-25.9c0-3.2 2.6-5.8 5.8-5.9 3.2 0 5.8 2.6 5.8 5.8l.1 26h23.6c3.3 0 5.8 2.6 5.8 5.8s-2.6 5.8-5.8 5.8zM199.3 191.3c21.5 0 38.9 17.6 38.9 39.3s-17.4 39.3-38.9 39.3-38.9-17.6-38.9-39.3c0-21.7 17.5-39.3 38.9-39.3zm185.4 201.3H86.3c-6.5 0-11.9-5.3-11.9-11.9v-32.4c0-2.5.7-4.8 2.1-6.9l41.3-58.4c3.7-5.2 10.8-6.5 16.1-3.1l56.4 36.8c4.5 3 10.3 2.5 14.4-1L313 220.1c5.1-4.5 13.1-3.8 17.2 1.7l61.5 79.7c1.6 2 2.5 4.6 2.5 7.2v74.4c0 5.2-4.3 9.5-9.5 9.5zm7.9 117.6h-58.8v-12h58.8v12zm-78.4 0h-58.8v-12h58.8v12zm-78.5 0h-58.8v-12h58.8v12zm-78.4 0H98.4v-12h58.8v12h.1zm-78.5 0H57.7c-14.3 0-27.9-5.4-38.3-15.3l8.3-8.7c8.2 7.8 18.8 12 30.1 12h21.1l-.1 12zm333.6-.1l-.3-12c17.8-.4 33.4-11.5 39.8-28.2l11.2 4.3c-8.1 21.3-28 35.4-50.7 35.9zM6.8 477c-3.2-7.1-4.7-14.7-4.7-22.5v-38.2h12v38.2c0 6.1 1.3 12.1 3.7 17.6l-11 4.9zm459.9-24.1h-12v-58.8h12v58.8zM14.1 396.7h-12v-58.8h12v58.8zm452.6-22.3h-12v-58.8h12v58.8zM14.1 318.3h-12v-58.8h12v58.8zM466.7 296h-12v-58.8h12V296zM14.1 239.8h-12V181h12v58.8zm452.6-22.2h-12v-58.8h12v58.8zM14.1 161.4h-12v-58.8h12v58.8zm2.4-76.1L5.3 81.2C13 59.9 33.4 45.5 56.1 45.5h.2v12h-.2c-17.7 0-33.6 11.2-39.6 27.8zm353.6-27.8h-58.8v-12h58.8v12zm-78.5 0h-58.8v-12h58.8v12zm-78.4 0h-58.8v-12h58.8v12zm-78.5 0H75.9v-12h58.8v12z\"}})]),_c('h4',{staticClass:\"drop-text-here\"},[_c('b',[_vm._v(_vm._s(_vm.dropText))])])])]):_c('div',{on:{\"dragover\":function($event){$event.preventDefault();return _vm.onDragover.apply(null, arguments)}}},[_c('div',{staticClass:\"preview-image full-width position-relative cursor-pointer\",on:{\"click\":function($event){return _vm.openGallery(_vm.currentIndexImage)}}},[_c('div',{staticClass:\"image-overlay position-relative full-width full-height\"}),_c('div',{staticClass:\"image-overlay-details full-width\"},[_c('svg',{staticClass:\"icon-overlay\",attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 512 512\"}},[_c('path',{attrs:{\"d\":\"M283.9 186.4h-64.6l-.4-71.1c-.1-8.8-7.2-15.9-16-15.9h-.1c-8.8.1-16 7.3-15.9 16.1l.4 70.9h-64.4c-8.8 0-16 7.2-16 16s7.2 16 16 16h64.6l.4 71.1c.1 8.8 7.2 15.9 16 15.9h.1c8.8-.1 16-7.3 15.9-16.1l-.4-70.9h64.4c8.8 0 16-7.2 16-16s-7.1-16-16-16z\"}}),_c('path',{attrs:{\"d\":\"M511.3 465.3L371.2 325.2c-1-1-2.6-1-3.6 0l-11.5 11.5c31.6-35.9 50.8-82.9 50.8-134.3C406.9 90.3 315.6-1 203.4-1 91.3-1 0 90.3 0 202.4s91.3 203.4 203.4 203.4c51.4 0 98.5-19.2 134.3-50.8l-11.5 11.5c-1 1-1 2.6 0 3.6l140.1 140.1c1 1 2.6 1 3.6 0l41.4-41.4c.9-.9.9-2.5 0-3.5zm-307.9-92.5C109.5 372.8 33 296.4 33 202.4S109.5 32.1 203.4 32.1s170.4 76.4 170.4 170.4-76.4 170.3-170.4 170.3z\"}})])]),_c('div',{staticClass:\"show-image centered\"},[_c('img',{staticClass:\"show-img img-responsive\",attrs:{\"src\":_vm.imagePreview}})])]),_c('div',{staticClass:\"image-bottom display-flex position-absolute full-width align-items-center justify-content-between\",class:!_vm.showPrimary && 'justify-content-end'},[(_vm.showPrimary)?_c('div',{staticClass:\"image-bottom-left display-flex align-items-center\"},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.imageDefault),expression:\"imageDefault\"}],staticClass:\"display-flex align-items-center\"},[_c('span',{staticClass:\"image-primary display-flex align-items-center\"},[_c('svg',{staticClass:\"image-icon-primary\",attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 512 512\"}},[_c('circle',{attrs:{\"fill\":\"#10BC83\",\"cx\":\"256\",\"cy\":\"256\",\"r\":\"256\"}}),_c('path',{attrs:{\"fill\":\"#FFF\",\"d\":\"M216.7 350.9h-.1c-5.1 0-9.9-2.1-13.4-5.7l-74.2-76c-7.4-7.5-7.2-19.5.4-26.8 7.5-7.4 19.5-7.2 26.8.4L217 305l139.7-138.5c7.5-7.4 19.5-7.4 26.8.1s7.4 19.5-.1 26.8l-153.2 152c-3.7 3.5-8.5 5.5-13.5 5.5z\"}})]),_vm._v(\"\\n \"+_vm._s(_vm.primaryText)+\"\\n \")]),_c('popper',{attrs:{\"trigger\":\"click\",\"options\":{placement: 'top'}}},[_c('div',{staticClass:\"popper popper-custom\"},[_vm._v(\"\\n \"+_vm._s(_vm.popupText)+\"\\n \")]),_c('i',{staticClass:\"cursor-pointer display-flex align-items-center\",attrs:{\"slot\":\"reference\"},slot:\"reference\"},[_c('svg',{staticClass:\"image-icon-info\",attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 512 512\"}},[_c('path',{attrs:{\"d\":\"M256 32c30.3 0 59.6 5.9 87.2 17.6 26.7 11.3 50.6 27.4 71.2 48s36.7 44.5 48 71.2c11.7 27.6 17.6 56.9 17.6 87.2s-5.9 59.6-17.6 87.2c-11.3 26.7-27.4 50.6-48 71.2s-44.5 36.7-71.2 48C315.6 474.1 286.3 480 256 480s-59.6-5.9-87.2-17.6c-26.7-11.3-50.6-27.4-71.2-48s-36.7-44.5-48-71.2C37.9 315.6 32 286.3 32 256s5.9-59.6 17.6-87.2c11.3-26.7 27.4-50.6 48-71.2s44.5-36.7 71.2-48C196.4 37.9 225.7 32 256 32m0-32C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0z\"}}),_c('path',{attrs:{\"d\":\"M304.2 352H296c-4.4 0-8-3.6-8-8v-94.8c0-15.3-11.5-28.1-26.7-29.8-2.5-.3-4.8-.5-6.7-.5-23.7 0-44.6 11.9-57 30.1l-.1.1v-.1c-1 2-1.7 5.3.7 6.5.6.3 1.2.5 1.8.5h16c4.4 0 8 3.6 8 8v80c0 4.4-3.6 8-8 8h-8.2c-8.7 0-15.8 7.1-15.8 15.8v.3c0 8.7 7.1 15.8 15.8 15.8h96.4c8.7 0 15.8-7.1 15.8-15.8v-.3c0-8.7-7.1-15.8-15.8-15.8zM256 128c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z\"}})])])])],1),_c('a',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.imageDefault),expression:\"!imageDefault\"}],staticClass:\"text-small mark-text-primary cursor-pointer\",on:{\"click\":function($event){$event.preventDefault();return _vm.markIsPrimary(_vm.currentIndexImage)}}},[_vm._v(_vm._s(_vm.markIsPrimaryText))])]):_vm._e(),_c('div',{staticClass:\"display-flex\"},[(_vm.showEdit)?_c('label',{staticClass:\"image-edit display-flex cursor-pointer\",attrs:{\"for\":_vm.idEdit}},[_c('svg',{staticClass:\"image-icon-edit\",attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":\"512\",\"height\":\"512\",\"viewBox\":\"0 0 512 512\"}},[_c('path',{attrs:{\"d\":\"M469.56 42.433C420.927-6.199 382.331-.168 378.087.68l-4.8.96L36.895 338.001 0 512l173.985-36.894 336.431-336.399.941-4.86c.826-4.257 6.65-42.984-41.797-91.414zM41.944 470.057L64.3 364.617c12.448 3.347 31.968 11.255 50.51 29.794 18.96 18.963 27.84 39.986 31.875 53.436l-104.741 22.21zm132.504-41.134c-6.167-16.597-17.199-37.794-36.775-57.371C119 352.88 99.435 342.57 83.739 336.879l155.156-155.15 97.066-97.051c11.069 2.074 34.864 8.95 57.253 31.338 22.708 22.708 30.95 48.358 33.734 60.428l-96.685 96.663-155.815 155.816zm278.41-278.383c-6.167-16.6-17.196-37.8-36.781-57.384-18.669-18.667-38.228-28.977-53.92-34.668l26.118-26.113c8.785.484 30.373 4.87 58.423 32.918l.001.002c28.085 28.074 32.467 49.675 32.946 58.463l-26.787 26.782z\"}})])]):_vm._e(),(_vm.showDelete)?_c('a',{staticClass:\"image-delete display-flex cursor-pointer\",on:{\"click\":function($event){$event.preventDefault();return _vm.deleteImage(_vm.currentIndexImage)}}},[_c('svg',{staticClass:\"image-icon-delete\",attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":\"512\",\"height\":\"512\",\"viewBox\":\"0 0 512 512\"}},[_c('path',{attrs:{\"d\":\"M448 64h-96V0H159.9l.066 64H32v32h32v416h384V96h32V64h-32zM192 32h128v32H192V32zm224 448H96V96h320v384zM192 160h32v256h-32V160zm96 0h32v256h-32V160z\"}})])]):_vm._e()])])])]),(_vm.images.length && _vm.multiple)?_c('div',{staticClass:\"image-list-container display-flex flex-wrap\"},[_vm._l((_vm.images),function(image,index){return _c('div',{key:index,staticClass:\"image-list-item position-relative cursor-pointer\",class:image.highlight && 'image-highlight',on:{\"click\":function($event){return _vm.changeHighlight(index)}}},[_c('div',{staticClass:\"centered\"},[_c('img',{staticClass:\"show-img img-responsive\",attrs:{\"src\":image.path}})])])}),((_vm.images.length < _vm.maxImage) && _vm.showAdd)?_c('div',{staticClass:\"image-list-item position-relative cursor-pointer display-flex justify-content-center align-items-center\"},[_c('svg',{staticClass:\"icon add-image-svg\",attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":\"512\",\"height\":\"512\",\"viewBox\":\"0 0 512 512\"}},[_c('path',{attrs:{\"d\":\"M511.5 227.5h-227V.5h-57v227H-.5v57h228v228h57v-228h227z\"}})]),_c('div',{staticClass:\"input-add-image position-absolute full-width full-height\"},[_c('label',{staticClass:\"display-block full-width full-height cursor-pointer\",attrs:{\"for\":_vm.idUpload}})])]):_vm._e()],2):_vm._e(),_c('div',[_c('input',{staticClass:\"display-none\",attrs:{\"id\":_vm.idUpload,\"name\":\"images\",\"multiple\":_vm.multiple,\"accept\":_vm.accept,\"type\":\"file\",\"disabled\":_vm.disabled},on:{\"change\":_vm.uploadFieldChange}}),_c('input',{staticClass:\"display-none\",attrs:{\"id\":_vm.idEdit,\"name\":\"image\",\"accept\":_vm.accept,\"type\":\"file\",\"disabled\":_vm.disabled},on:{\"change\":_vm.editFieldChange}})]),_c('vue-image-lightbox-carousel',{ref:\"lightbox\",attrs:{\"show\":_vm.showLightbox,\"images\":_vm.images,\"showCaption\":false},on:{\"close\":function($event){_vm.showLightbox = false},\"change\":_vm.changeHighlight}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticStyle:{\"text-align\":\"center\"},attrs:{\"id\":\"my-strictly-unique-vue-image-lightbox-carousel\"}},[_c('button',{on:{\"click\":_vm.openLightbox}},[_vm._v(\"Open Lightbox\")]),_c('vue-image-lightbox-carousel',{ref:\"lightbox\",attrs:{\"show\":_vm.showLightbox,\"images\":_vm.images},on:{\"close\":function($event){_vm.showLightbox = false},\"change\":_vm.changeImage}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('transition',{attrs:{\"name\":\"modal\"}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.show),expression:\"show\"}],staticClass:\"modal-mask\",on:{\"click\":_vm.close}},[_c('div',{staticClass:\"modal-container\",on:{\"click\":function($event){$event.stopPropagation();}}},[_c('div',{staticClass:\"vue-lightbox-content\"},[_c('div',{staticClass:\"vue-lightbox-header\"},[_c('span'),_c('button',{staticClass:\"vue-lightbox-close\",attrs:{\"type\":\"button\",\"title\":\"Close (Esc)\"},on:{\"click\":_vm.close}},[_c('span',[_c('svg',{attrs:{\"fill\":\"white\",\"x\":\"0px\",\"y\":\"0px\",\"width\":\"100%\",\"height\":\"100%\",\"viewBox\":\"0 0 512 512\"}},[_c('path',{attrs:{\"d\":\"M443.6,387.1L312.4,255.4l131.5-130c5.4-5.4,5.4-14.2,0-19.6l-37.4-37.6c-2.6-2.6-6.1-4-9.8-4c-3.7,0-7.2,1.5-9.8,4 L256,197.8L124.9,68.3c-2.6-2.6-6.1-4-9.8-4c-3.7,0-7.2,1.5-9.8,4L68,105.9c-5.4,5.4-5.4,14.2,0,19.6l131.5,130L68.4,387.1 c-2.6,2.6-4.1,6.1-4.1,9.8c0,3.7,1.4,7.2,4.1,9.8l37.4,37.6c2.7,2.7,6.2,4.1,9.8,4.1c3.5,0,7.1-1.3,9.8-4.1L256,313.1l130.7,131.1 c2.7,2.7,6.2,4.1,9.8,4.1c3.5,0,7.1-1.3,9.8-4.1l37.4-37.6c2.6-2.6,4.1-6.1,4.1-9.8C447.7,393.2,446.2,389.7,443.6,387.1z\"}})])])])]),_c('div',{staticClass:\"vue-lightbox-figure\"},[_c('swiper',{ref:\"swiperTop\",staticClass:\"vue-lightbox-figure\",attrs:{\"options\":_vm.swiperOptionTop}},_vm._l((_vm.images),function(image,index){return _c('swiper-slide',{key:index},[_c('img',{staticClass:\"vue-lightbox-modal-image\",attrs:{\"src\":image.path,\"srcset\":\"\"}}),(_vm.showCaption)?_c('div',{staticClass:\"vue-lightbox-info\"},[_c('h4',[_vm._v(_vm._s(image.caption))])]):_vm._e()])}),1),_c('div',{staticClass:\"vue-lightbox-footer\"},[_c('div',{staticClass:\"vue-lightbox-footer-info\"}),_c('div',{staticClass:\"vue-lightbox-footer-count\"},[_vm._v(\"\\n \"+_vm._s(_vm.activeIndex + 1)+\"/\"+_vm._s(_vm.images.length)+\"\\n \")])])],1)]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.images.length > 1 && _vm.showThumbs),expression:\"images.length > 1 && showThumbs\"}],staticClass:\"vue-lightbox-thumbnail-wrapper\"},[_c('div',{staticClass:\"vue-lightbox-thumbnail\"},[_c('button',{staticClass:\"swiper-button-prev vue-lightbox-thumbnail-arrow vue-lightbox-thumbnail-left\",attrs:{\"type\":\"button\",\"title\":\"Previous\"}},[_c('span',[_c('svg',{attrs:{\"fill\":\"white\",\"x\":\"0px\",\"y\":\"0px\",\"width\":\"100%\",\"height\":\"100%\",\"viewBox\":\"0 0 512 512\"}},[_c('path',{attrs:{\"d\":\"M213.7,256L213.7,256L213.7,256L380.9,81.9c4.2-4.3,4.1-11.4-0.2-15.8l-29.9-30.6c-4.3-4.4-11.3-4.5-15.5-0.2L131.1,247.9 c-2.2,2.2-3.2,5.2-3,8.1c-0.1,3,0.9,5.9,3,8.1l204.2,212.7c4.2,4.3,11.2,4.2,15.5-0.2l29.9-30.6c4.3-4.4,4.4-11.5,0.2-15.8 L213.7,256z\"}})])])]),_c('swiper',{ref:\"swiperThumbs\",attrs:{\"options\":_vm.swiperOptionThumbs}},_vm._l((_vm.images),function(image,index){return _c('swiper-slide',{key:index},[_c('div',{directives:[{name:\"lazy\",rawName:\"v-lazy:background-image\",value:(image.path),expression:\"image.path\",arg:\"background-image\"}],staticClass:\"vue-lightbox-modal-thumbnail vue-lightbox-modal-thumbnail-active\",style:(`background-image: url(\"${image.path}\");`),attrs:{\"data-src\":image.path}})])}),1),_c('button',{staticClass:\"swiper-button-next vue-lightbox-thumbnail-arrow vue-lightbox-thumbnail-right\",attrs:{\"type\":\"button\",\"title\":\"Next\"}},[_c('span',[_c('svg',{attrs:{\"fill\":\"white\",\"x\":\"0px\",\"y\":\"0px\",\"width\":\"100%\",\"height\":\"100%\",\"viewBox\":\"0 0 512 512\"}},[_c('path',{attrs:{\"d\":\"M298.3,256L298.3,256L298.3,256L131.1,81.9c-4.2-4.3-4.1-11.4,0.2-15.8l29.9-30.6c4.3-4.4,11.3-4.5,15.5-0.2l204.2,212.7 c2.2,2.2,3.2,5.2,3,8.1c0.1,3-0.9,5.9-3,8.1L176.7,476.8c-4.2,4.3-11.2,4.2-15.5-0.2L131.3,446c-4.3-4.4-4.4-11.5-0.2-15.8 L298.3,256z\"}})])])])],1)]),_c('button',{staticClass:\"swiper-button-prev vue-lightbox-arrow vue-lightbox-left\",attrs:{\"type\":\"button\",\"title\":\"Previous\"}},[_c('span',[_c('svg',{attrs:{\"fill\":\"white\",\"x\":\"0px\",\"y\":\"0px\",\"width\":\"100%\",\"height\":\"100%\",\"viewBox\":\"0 0 512 512\"}},[_c('path',{attrs:{\"d\":\"M213.7,256L213.7,256L213.7,256L380.9,81.9c4.2-4.3,4.1-11.4-0.2-15.8l-29.9-30.6c-4.3-4.4-11.3-4.5-15.5-0.2L131.1,247.9 c-2.2,2.2-3.2,5.2-3,8.1c-0.1,3,0.9,5.9,3,8.1l204.2,212.7c4.2,4.3,11.2,4.2,15.5-0.2l29.9-30.6c4.3-4.4,4.4-11.5,0.2-15.8 L213.7,256z\"}})])])]),_c('button',{staticClass:\"swiper-button-next vue-lightbox-arrow vue-lightbox-right\",attrs:{\"type\":\"button\",\"title\":\"Next\"}},[_c('span',[_c('svg',{attrs:{\"fill\":\"white\",\"x\":\"0px\",\"y\":\"0px\",\"width\":\"100%\",\"height\":\"100%\",\"viewBox\":\"0 0 512 512\",\"xml:space\":\"preserve\"}},[_c('path',{attrs:{\"d\":\"M298.3,256L298.3,256L298.3,256L131.1,81.9c-4.2-4.3-4.1-11.4,0.2-15.8l29.9-30.6c4.3-4.4,11.3-4.5,15.5-0.2l204.2,212.7 c2.2,2.2,3.2,5.2,3,8.1c0.1,3-0.9,5.9-3,8.1L176.7,476.8c-4.2,4.3-11.2,4.2-15.5-0.2L131.3,446c-4.3-4.4-4.4-11.5-0.2-15.8 L298.3,256z\"}})])])])])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../cache-loader/dist/cjs.js??ref--12-0!../../../thread-loader/dist/cjs.js!../../../@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--0-0!../../../vue-loader/lib/index.js??vue-loader-options!./VueImageLightboxCarousel.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../cache-loader/dist/cjs.js??ref--12-0!../../../thread-loader/dist/cjs.js!../../../@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--0-0!../../../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-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 \"-!../../cache-loader/dist/cjs.js??ref--12-0!../../thread-loader/dist/cjs.js!../../@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../cache-loader/dist/cjs.js??ref--12-0!../../thread-loader/dist/cjs.js!../../@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../cache-loader/dist/cjs.js??ref--0-0!../../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-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","/*!\n * Vue-Lazyload.js v1.3.5\n * (c) 2023 Awe \n * Released under the MIT License.\n */\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar assignSymbols$1 = createCommonjsModule(function (module) {\n\n var toString = Object.prototype.toString;\n var isEnumerable = Object.prototype.propertyIsEnumerable;\n var getSymbols = Object.getOwnPropertySymbols;\n\n module.exports = function (target) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n if (!isObject(target)) {\n throw new TypeError('expected the first argument to be an object');\n }\n\n if (args.length === 0 || typeof Symbol !== 'function' || typeof getSymbols !== 'function') {\n return target;\n }\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = args[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var arg = _step.value;\n\n var names = getSymbols(arg);\n\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = names[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var key = _step2.value;\n\n if (isEnumerable.call(arg, key)) {\n target[key] = arg[key];\n }\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return target;\n };\n\n function isObject(val) {\n return typeof val === 'function' || toString.call(val) === '[object Object]' || Array.isArray(val);\n }\n});\n\nvar assignSymbols$2 = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\t'default': assignSymbols$1,\n\t__moduleExports: assignSymbols$1\n});\n\nvar assignSymbols = ( assignSymbols$2 && assignSymbols$1 ) || assignSymbols$2;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar assignDeep = createCommonjsModule(function (module) {\n\n var toString = Object.prototype.toString;\n\n var isValidKey = function isValidKey(key) {\n return key !== '__proto__' && key !== 'constructor' && key !== 'prototype';\n };\n\n var assign = module.exports = function (target) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var i = 0;\n if (isPrimitive(target)) target = args[i++];\n if (!target) target = {};\n for (; i < args.length; i++) {\n if (isObject(args[i])) {\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = Object.keys(args[i])[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var key = _step.value;\n\n if (isValidKey(key)) {\n if (isObject(target[key]) && isObject(args[i][key])) {\n assign(target[key], args[i][key]);\n } else {\n target[key] = args[i][key];\n }\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n assignSymbols(target, args[i]);\n }\n }\n return target;\n };\n\n function isObject(val) {\n return typeof val === 'function' || toString.call(val) === '[object Object]';\n }\n\n function isPrimitive(val) {\n return (typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object' ? val === null : typeof val !== 'function';\n }\n});\n\nvar inBrowser = typeof window !== 'undefined' && window !== null;\n\nvar hasIntersectionObserver = checkIntersectionObserver();\n\nfunction checkIntersectionObserver() {\n if (inBrowser && 'IntersectionObserver' in window && 'IntersectionObserverEntry' in window && 'intersectionRatio' in window.IntersectionObserverEntry.prototype) {\n // Minimal polyfill for Edge 15's lack of `isIntersecting`\n // See: https://github.com/w3c/IntersectionObserver/issues/211\n if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {\n Object.defineProperty(window.IntersectionObserverEntry.prototype, 'isIntersecting', {\n get: function get() {\n return this.intersectionRatio > 0;\n }\n });\n }\n return true;\n }\n return false;\n}\n\nvar modeType = {\n event: 'event',\n observer: 'observer'\n\n // CustomEvent polyfill for IE\n};var CustomEvent = function () {\n if (!inBrowser) return;\n // not IE\n if (typeof window.CustomEvent === 'function') return window.CustomEvent;\n function CustomEvent(event, params) {\n params = params || { bubbles: false, cancelable: false, detail: undefined };\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n }\n CustomEvent.prototype = window.Event.prototype;\n return CustomEvent;\n}();\n\nfunction remove(arr, item) {\n if (!arr.length) return;\n var index = arr.indexOf(item);\n if (index > -1) return arr.splice(index, 1);\n}\n\nfunction some(arr, fn) {\n var has = false;\n for (var i = 0, len = arr.length; i < len; i++) {\n if (fn(arr[i])) {\n has = true;\n break;\n }\n }\n return has;\n}\n\nfunction getBestSelectionFromSrcset(el, scale) {\n if (el.tagName !== 'IMG' || !el.getAttribute('data-srcset')) return;\n\n var options = el.getAttribute('data-srcset');\n var result = [];\n var container = el.parentNode;\n var containerWidth = container.offsetWidth * scale;\n\n var spaceIndex = void 0;\n var tmpSrc = void 0;\n var tmpWidth = void 0;\n\n options = options.trim().split(',');\n\n options.map(function (item) {\n item = item.trim();\n spaceIndex = item.lastIndexOf(' ');\n if (spaceIndex === -1) {\n tmpSrc = item;\n tmpWidth = 999998;\n } else {\n tmpSrc = item.substr(0, spaceIndex);\n tmpWidth = parseInt(item.substr(spaceIndex + 1, item.length - spaceIndex - 2), 10);\n }\n result.push([tmpWidth, tmpSrc]);\n });\n\n result.sort(function (a, b) {\n if (a[0] < b[0]) {\n return 1;\n }\n if (a[0] > b[0]) {\n return -1;\n }\n if (a[0] === b[0]) {\n if (b[1].indexOf('.webp', b[1].length - 5) !== -1) {\n return 1;\n }\n if (a[1].indexOf('.webp', a[1].length - 5) !== -1) {\n return -1;\n }\n }\n return 0;\n });\n var bestSelectedSrc = '';\n var tmpOption = void 0;\n\n for (var i = 0; i < result.length; i++) {\n tmpOption = result[i];\n bestSelectedSrc = tmpOption[1];\n var next = result[i + 1];\n if (next && next[0] < containerWidth) {\n bestSelectedSrc = tmpOption[1];\n break;\n } else if (!next) {\n bestSelectedSrc = tmpOption[1];\n break;\n }\n }\n\n return bestSelectedSrc;\n}\n\nfunction find(arr, fn) {\n var item = void 0;\n for (var i = 0, len = arr.length; i < len; i++) {\n if (fn(arr[i])) {\n item = arr[i];\n break;\n }\n }\n return item;\n}\n\nvar getDPR = function getDPR() {\n var scale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n return inBrowser ? window.devicePixelRatio || scale : scale;\n};\n\nfunction supportWebp() {\n if (!inBrowser) return false;\n\n var support = true;\n\n try {\n var elem = document.createElement('canvas');\n\n if (elem.getContext && elem.getContext('2d')) {\n support = elem.toDataURL('image/webp').indexOf('data:image/webp') === 0;\n }\n } catch (err) {\n support = false;\n }\n\n return support;\n}\n\nfunction throttle(action, delay) {\n var timeout = null;\n var movement = null;\n var lastRun = 0;\n var needRun = false;\n return function () {\n needRun = true;\n if (timeout) {\n return;\n }\n var elapsed = Date.now() - lastRun;\n var context = this;\n var args = arguments;\n var runCallback = function runCallback() {\n lastRun = Date.now();\n timeout = false;\n action.apply(context, args);\n };\n if (elapsed >= delay) {\n runCallback();\n } else {\n timeout = setTimeout(runCallback, delay);\n }\n if (needRun) {\n clearTimeout(movement);\n movement = setTimeout(runCallback, 2 * delay);\n }\n };\n}\n\nfunction testSupportsPassive() {\n if (!inBrowser) return;\n var support = false;\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n support = true;\n }\n });\n window.addEventListener('test', null, opts);\n } catch (e) {}\n return support;\n}\n\nvar supportsPassive = testSupportsPassive();\n\nvar _ = {\n on: function on(el, type, func) {\n var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n if (supportsPassive) {\n el.addEventListener(type, func, {\n capture: capture,\n passive: true\n });\n } else {\n el.addEventListener(type, func, capture);\n }\n },\n off: function off(el, type, func) {\n var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n el.removeEventListener(type, func, capture);\n }\n};\n\nvar loadImageAsync = function loadImageAsync(item, resolve, reject) {\n var image = new Image();\n if (!item || !item.src) {\n var err = new Error('image src is required');\n return reject(err);\n }\n\n image.src = item.src;\n if (item.cors) {\n image.crossOrigin = item.cors;\n }\n\n image.onload = function () {\n resolve({\n naturalHeight: image.naturalHeight,\n naturalWidth: image.naturalWidth,\n src: image.src\n });\n };\n\n image.onerror = function (e) {\n reject(e);\n };\n};\n\nvar style = function style(el, prop) {\n return typeof getComputedStyle !== 'undefined' ? getComputedStyle(el, null).getPropertyValue(prop) : el.style[prop];\n};\n\nvar overflow = function overflow(el) {\n return style(el, 'overflow') + style(el, 'overflow-y') + style(el, 'overflow-x');\n};\n\nvar scrollParent = function scrollParent(el) {\n if (!inBrowser) return;\n if (!(el instanceof HTMLElement)) {\n return window;\n }\n\n var parent = el;\n\n while (parent) {\n if (parent === document.body || parent === document.documentElement) {\n break;\n }\n\n if (!parent.parentNode) {\n break;\n }\n\n if (/(scroll|auto)/.test(overflow(parent))) {\n return parent;\n }\n\n parent = parent.parentNode;\n }\n\n return window;\n};\n\nfunction isObject(obj) {\n return obj !== null && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object';\n}\n\nfunction ObjectKeys(obj) {\n if (!(obj instanceof Object)) return [];\n if (Object.keys) {\n return Object.keys(obj);\n } else {\n var keys = [];\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n keys.push(key);\n }\n }\n return keys;\n }\n}\n\nfunction ArrayFrom(arrLike) {\n var len = arrLike.length;\n var list = [];\n for (var i = 0; i < len; i++) {\n list.push(arrLike[i]);\n }\n return list;\n}\n\nfunction noop() {}\n\nvar ImageCache = function () {\n function ImageCache(_ref) {\n var max = _ref.max;\n classCallCheck(this, ImageCache);\n\n this.options = {\n max: max || 100\n };\n this._caches = [];\n }\n\n createClass(ImageCache, [{\n key: 'has',\n value: function has(key) {\n return this._caches.indexOf(key) > -1;\n }\n }, {\n key: 'add',\n value: function add(key) {\n if (this.has(key)) return;\n this._caches.push(key);\n if (this._caches.length > this.options.max) {\n this.free();\n }\n }\n }, {\n key: 'free',\n value: function free() {\n this._caches.shift();\n }\n }]);\n return ImageCache;\n}();\n\n// el: {\n// state,\n// src,\n// error,\n// loading\n// }\n\nvar ReactiveListener = function () {\n function ReactiveListener(_ref) {\n var el = _ref.el,\n src = _ref.src,\n error = _ref.error,\n loading = _ref.loading,\n bindType = _ref.bindType,\n $parent = _ref.$parent,\n options = _ref.options,\n cors = _ref.cors,\n elRenderer = _ref.elRenderer,\n imageCache = _ref.imageCache;\n classCallCheck(this, ReactiveListener);\n\n this.el = el;\n this.src = src;\n this.error = error;\n this.loading = loading;\n this.bindType = bindType;\n this.attempt = 0;\n this.cors = cors;\n\n this.naturalHeight = 0;\n this.naturalWidth = 0;\n\n this.options = options;\n\n this.rect = null;\n\n this.$parent = $parent;\n this.elRenderer = elRenderer;\n this._imageCache = imageCache;\n this.performanceData = {\n init: Date.now(),\n loadStart: 0,\n loadEnd: 0\n };\n\n this.filter();\n this.initState();\n this.render('loading', false);\n }\n\n /*\r\n * init listener state\r\n * @return\r\n */\n\n\n createClass(ReactiveListener, [{\n key: 'initState',\n value: function initState() {\n if ('dataset' in this.el) {\n this.el.dataset.src = this.src;\n } else {\n this.el.setAttribute('data-src', this.src);\n }\n\n this.state = {\n loading: false,\n error: false,\n loaded: false,\n rendered: false\n };\n }\n\n /*\r\n * record performance\r\n * @return\r\n */\n\n }, {\n key: 'record',\n value: function record(event) {\n this.performanceData[event] = Date.now();\n }\n\n /*\r\n * update image listener data\r\n * @param {String} image uri\r\n * @param {String} loading image uri\r\n * @param {String} error image uri\r\n * @return\r\n */\n\n }, {\n key: 'update',\n value: function update(_ref2) {\n var src = _ref2.src,\n loading = _ref2.loading,\n error = _ref2.error;\n\n var oldSrc = this.src;\n this.src = src;\n this.loading = loading;\n this.error = error;\n this.filter();\n if (oldSrc !== this.src) {\n this.attempt = 0;\n this.initState();\n }\n }\n\n /*\r\n * get el node rect\r\n * @return\r\n */\n\n }, {\n key: 'getRect',\n value: function getRect() {\n this.rect = this.el.getBoundingClientRect();\n }\n\n /*\r\n * check el is in view\r\n * @return {Boolean} el is in view\r\n */\n\n }, {\n key: 'checkInView',\n value: function checkInView() {\n this.getRect();\n return this.rect.top < window.innerHeight * this.options.preLoad && this.rect.bottom > this.options.preLoadTop && this.rect.left < window.innerWidth * this.options.preLoad && this.rect.right > 0;\n }\n\n /*\r\n * listener filter\r\n */\n\n }, {\n key: 'filter',\n value: function filter() {\n var _this = this;\n\n ObjectKeys(this.options.filter).map(function (key) {\n _this.options.filter[key](_this, _this.options);\n });\n }\n\n /*\r\n * render loading first\r\n * @params cb:Function\r\n * @return\r\n */\n\n }, {\n key: 'renderLoading',\n value: function renderLoading(cb) {\n var _this2 = this;\n\n this.state.loading = true;\n loadImageAsync({\n src: this.loading,\n cors: this.cors\n }, function (data) {\n _this2.render('loading', false);\n _this2.state.loading = false;\n cb();\n }, function () {\n // handler `loading image` load failed\n cb();\n _this2.state.loading = false;\n if (!_this2.options.silent) console.warn('VueLazyload log: load failed with loading image(' + _this2.loading + ')');\n });\n }\n\n /*\r\n * try load image and render it\r\n * @return\r\n */\n\n }, {\n key: 'load',\n value: function load() {\n var _this3 = this;\n\n var onFinish = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : noop;\n\n if (this.attempt > this.options.attempt - 1 && this.state.error) {\n if (!this.options.silent) console.log('VueLazyload log: ' + this.src + ' tried too more than ' + this.options.attempt + ' times');\n onFinish();\n return;\n }\n if (this.state.rendered && this.state.loaded) return;\n if (this._imageCache.has(this.src)) {\n this.state.loaded = true;\n this.render('loaded', true);\n this.state.rendered = true;\n return onFinish();\n }\n\n this.renderLoading(function () {\n _this3.attempt++;\n\n _this3.options.adapter['beforeLoad'] && _this3.options.adapter['beforeLoad'](_this3, _this3.options);\n _this3.record('loadStart');\n\n loadImageAsync({\n src: _this3.src,\n cors: _this3.cors\n }, function (data) {\n _this3.naturalHeight = data.naturalHeight;\n _this3.naturalWidth = data.naturalWidth;\n _this3.state.loaded = true;\n _this3.state.error = false;\n _this3.record('loadEnd');\n _this3.render('loaded', false);\n _this3.state.rendered = true;\n _this3._imageCache.add(_this3.src);\n onFinish();\n }, function (err) {\n !_this3.options.silent && console.error(err);\n _this3.state.error = true;\n _this3.state.loaded = false;\n _this3.render('error', false);\n });\n });\n }\n\n /*\r\n * render image\r\n * @param {String} state to render // ['loading', 'src', 'error']\r\n * @param {String} is form cache\r\n * @return\r\n */\n\n }, {\n key: 'render',\n value: function render(state, cache) {\n this.elRenderer(this, state, cache);\n }\n\n /*\r\n * output performance data\r\n * @return {Object} performance data\r\n */\n\n }, {\n key: 'performance',\n value: function performance() {\n var state = 'loading';\n var time = 0;\n\n if (this.state.loaded) {\n state = 'loaded';\n time = (this.performanceData.loadEnd - this.performanceData.loadStart) / 1000;\n }\n\n if (this.state.error) state = 'error';\n\n return {\n src: this.src,\n state: state,\n time: time\n };\n }\n\n /*\r\n * $destroy\r\n * @return\r\n */\n\n }, {\n key: '$destroy',\n value: function $destroy() {\n this.el = null;\n this.src = null;\n this.error = null;\n this.loading = null;\n this.bindType = null;\n this.attempt = 0;\n }\n }]);\n return ReactiveListener;\n}();\n\nvar DEFAULT_URL = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\nvar DEFAULT_EVENTS = ['scroll', 'wheel', 'mousewheel', 'resize', 'animationend', 'transitionend', 'touchmove'];\nvar DEFAULT_OBSERVER_OPTIONS = {\n rootMargin: '0px',\n threshold: 0\n};\n\nfunction Lazy(Vue) {\n return function () {\n function Lazy(_ref) {\n var preLoad = _ref.preLoad,\n error = _ref.error,\n throttleWait = _ref.throttleWait,\n preLoadTop = _ref.preLoadTop,\n dispatchEvent = _ref.dispatchEvent,\n loading = _ref.loading,\n attempt = _ref.attempt,\n _ref$silent = _ref.silent,\n silent = _ref$silent === undefined ? true : _ref$silent,\n scale = _ref.scale,\n listenEvents = _ref.listenEvents;\n _ref.hasbind;\n var filter = _ref.filter,\n adapter = _ref.adapter,\n observer = _ref.observer,\n observerOptions = _ref.observerOptions;\n classCallCheck(this, Lazy);\n\n this.version = '\"1.3.5\"';\n this.mode = modeType.event;\n this.ListenerQueue = [];\n this.TargetIndex = 0;\n this.TargetQueue = [];\n this.options = {\n silent: silent,\n dispatchEvent: !!dispatchEvent,\n throttleWait: throttleWait || 200,\n preLoad: preLoad || 1.3,\n preLoadTop: preLoadTop || 0,\n error: error || DEFAULT_URL,\n loading: loading || DEFAULT_URL,\n attempt: attempt || 3,\n scale: scale || getDPR(scale),\n ListenEvents: listenEvents || DEFAULT_EVENTS,\n hasbind: false,\n supportWebp: supportWebp(),\n filter: filter || {},\n adapter: adapter || {},\n observer: !!observer,\n observerOptions: observerOptions || DEFAULT_OBSERVER_OPTIONS\n };\n this._initEvent();\n this._imageCache = new ImageCache({ max: 200 });\n this.lazyLoadHandler = throttle(this._lazyLoadHandler.bind(this), this.options.throttleWait);\n\n this.setMode(this.options.observer ? modeType.observer : modeType.event);\n }\n\n /**\r\n * update config\r\n * @param {Object} config params\r\n * @return\r\n */\n\n\n createClass(Lazy, [{\n key: 'config',\n value: function config() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n assignDeep(this.options, options);\n }\n\n /**\r\n * output listener's load performance\r\n * @return {Array}\r\n */\n\n }, {\n key: 'performance',\n value: function performance() {\n var list = [];\n\n this.ListenerQueue.map(function (item) {\n list.push(item.performance());\n });\n\n return list;\n }\n\n /*\r\n * add lazy component to queue\r\n * @param {Vue} vm lazy component instance\r\n * @return\r\n */\n\n }, {\n key: 'addLazyBox',\n value: function addLazyBox(vm) {\n this.ListenerQueue.push(vm);\n if (inBrowser) {\n this._addListenerTarget(window);\n this._observer && this._observer.observe(vm.el);\n if (vm.$el && vm.$el.parentNode) {\n this._addListenerTarget(vm.$el.parentNode);\n }\n }\n }\n\n /*\r\n * add image listener to queue\r\n * @param {DOM} el\r\n * @param {object} binding vue directive binding\r\n * @param {vnode} vnode vue directive vnode\r\n * @return\r\n */\n\n }, {\n key: 'add',\n value: function add(el, binding, vnode) {\n var _this = this;\n\n if (some(this.ListenerQueue, function (item) {\n return item.el === el;\n })) {\n this.update(el, binding);\n return Vue.nextTick(this.lazyLoadHandler);\n }\n\n var _valueFormatter2 = this._valueFormatter(binding.value),\n src = _valueFormatter2.src,\n loading = _valueFormatter2.loading,\n error = _valueFormatter2.error,\n cors = _valueFormatter2.cors;\n\n Vue.nextTick(function () {\n src = getBestSelectionFromSrcset(el, _this.options.scale) || src;\n _this._observer && _this._observer.observe(el);\n\n var container = Object.keys(binding.modifiers)[0];\n var $parent = void 0;\n\n if (container) {\n $parent = vnode.context.$refs[container];\n // if there is container passed in, try ref first, then fallback to getElementById to support the original usage\n $parent = $parent ? $parent.$el || $parent : document.getElementById(container);\n }\n\n if (!$parent) {\n $parent = scrollParent(el);\n }\n\n var newListener = new ReactiveListener({\n bindType: binding.arg,\n $parent: $parent,\n el: el,\n loading: loading,\n error: error,\n src: src,\n cors: cors,\n elRenderer: _this._elRenderer.bind(_this),\n options: _this.options,\n imageCache: _this._imageCache\n });\n\n _this.ListenerQueue.push(newListener);\n\n if (inBrowser) {\n _this._addListenerTarget(window);\n _this._addListenerTarget($parent);\n }\n\n _this.lazyLoadHandler();\n Vue.nextTick(function () {\n return _this.lazyLoadHandler();\n });\n });\n }\n\n /**\r\n * update image src\r\n * @param {DOM} el\r\n * @param {object} vue directive binding\r\n * @return\r\n */\n\n }, {\n key: 'update',\n value: function update(el, binding, vnode) {\n var _this2 = this;\n\n var _valueFormatter3 = this._valueFormatter(binding.value),\n src = _valueFormatter3.src,\n loading = _valueFormatter3.loading,\n error = _valueFormatter3.error;\n\n src = getBestSelectionFromSrcset(el, this.options.scale) || src;\n\n var exist = find(this.ListenerQueue, function (item) {\n return item.el === el;\n });\n if (!exist) {\n this.add(el, binding, vnode);\n } else {\n exist.update({\n src: src,\n loading: loading,\n error: error\n });\n }\n if (this._observer) {\n this._observer.unobserve(el);\n this._observer.observe(el);\n }\n this.lazyLoadHandler();\n Vue.nextTick(function () {\n return _this2.lazyLoadHandler();\n });\n }\n\n /**\r\n * remove listener form list\r\n * @param {DOM} el\r\n * @return\r\n */\n\n }, {\n key: 'remove',\n value: function remove$1(el) {\n if (!el) return;\n this._observer && this._observer.unobserve(el);\n var existItem = find(this.ListenerQueue, function (item) {\n return item.el === el;\n });\n if (existItem) {\n this._removeListenerTarget(existItem.$parent);\n this._removeListenerTarget(window);\n remove(this.ListenerQueue, existItem);\n existItem.$destroy();\n }\n }\n\n /*\r\n * remove lazy components form list\r\n * @param {Vue} vm Vue instance\r\n * @return\r\n */\n\n }, {\n key: 'removeComponent',\n value: function removeComponent(vm) {\n if (!vm) return;\n remove(this.ListenerQueue, vm);\n this._observer && this._observer.unobserve(vm.el);\n if (vm.$parent && vm.$el.parentNode) {\n this._removeListenerTarget(vm.$el.parentNode);\n }\n this._removeListenerTarget(window);\n }\n }, {\n key: 'setMode',\n value: function setMode(mode) {\n var _this3 = this;\n\n if (!hasIntersectionObserver && mode === modeType.observer) {\n mode = modeType.event;\n }\n\n this.mode = mode; // event or observer\n\n if (mode === modeType.event) {\n if (this._observer) {\n this.ListenerQueue.forEach(function (listener) {\n _this3._observer.unobserve(listener.el);\n });\n this._observer = null;\n }\n\n this.TargetQueue.forEach(function (target) {\n _this3._initListen(target.el, true);\n });\n } else {\n this.TargetQueue.forEach(function (target) {\n _this3._initListen(target.el, false);\n });\n this._initIntersectionObserver();\n }\n }\n\n /*\r\n *** Private functions ***\r\n */\n\n /*\r\n * add listener target\r\n * @param {DOM} el listener target\r\n * @return\r\n */\n\n }, {\n key: '_addListenerTarget',\n value: function _addListenerTarget(el) {\n if (!el) return;\n var target = find(this.TargetQueue, function (target) {\n return target.el === el;\n });\n if (!target) {\n target = {\n el: el,\n id: ++this.TargetIndex,\n childrenCount: 1,\n listened: true\n };\n this.mode === modeType.event && this._initListen(target.el, true);\n this.TargetQueue.push(target);\n } else {\n target.childrenCount++;\n }\n return this.TargetIndex;\n }\n\n /*\r\n * remove listener target or reduce target childrenCount\r\n * @param {DOM} el or window\r\n * @return\r\n */\n\n }, {\n key: '_removeListenerTarget',\n value: function _removeListenerTarget(el) {\n var _this4 = this;\n\n this.TargetQueue.forEach(function (target, index) {\n if (target.el === el) {\n target.childrenCount--;\n if (!target.childrenCount) {\n _this4._initListen(target.el, false);\n _this4.TargetQueue.splice(index, 1);\n target = null;\n }\n }\n });\n }\n\n /*\r\n * add or remove eventlistener\r\n * @param {DOM} el DOM or Window\r\n * @param {boolean} start flag\r\n * @return\r\n */\n\n }, {\n key: '_initListen',\n value: function _initListen(el, start) {\n var _this5 = this;\n\n this.options.ListenEvents.forEach(function (evt) {\n return _[start ? 'on' : 'off'](el, evt, _this5.lazyLoadHandler);\n });\n }\n }, {\n key: '_initEvent',\n value: function _initEvent() {\n var _this6 = this;\n\n this.Event = {\n listeners: {\n loading: [],\n loaded: [],\n error: []\n }\n };\n\n this.$on = function (event, func) {\n if (!_this6.Event.listeners[event]) _this6.Event.listeners[event] = [];\n _this6.Event.listeners[event].push(func);\n };\n\n this.$once = function (event, func) {\n var vm = _this6;\n function on() {\n vm.$off(event, on);\n func.apply(vm, arguments);\n }\n _this6.$on(event, on);\n };\n\n this.$off = function (event, func) {\n if (!func) {\n if (!_this6.Event.listeners[event]) return;\n _this6.Event.listeners[event].length = 0;\n return;\n }\n remove(_this6.Event.listeners[event], func);\n };\n\n this.$emit = function (event, context, inCache) {\n if (!_this6.Event.listeners[event]) return;\n _this6.Event.listeners[event].forEach(function (func) {\n return func(context, inCache);\n });\n };\n }\n\n /**\r\n * find nodes which in viewport and trigger load\r\n * @return\r\n */\n\n }, {\n key: '_lazyLoadHandler',\n value: function _lazyLoadHandler() {\n var _this7 = this;\n\n var freeList = [];\n this.ListenerQueue.forEach(function (listener, index) {\n if (!listener.el || !listener.el.parentNode) {\n freeList.push(listener);\n }\n var catIn = listener.checkInView();\n if (!catIn) return;\n listener.load();\n });\n freeList.forEach(function (item) {\n remove(_this7.ListenerQueue, item);\n item.$destroy();\n });\n }\n /**\r\n * init IntersectionObserver\r\n * set mode to observer\r\n * @return\r\n */\n\n }, {\n key: '_initIntersectionObserver',\n value: function _initIntersectionObserver() {\n var _this8 = this;\n\n if (!hasIntersectionObserver) return;\n this._observer = new IntersectionObserver(this._observerHandler.bind(this), this.options.observerOptions);\n if (this.ListenerQueue.length) {\n this.ListenerQueue.forEach(function (listener) {\n _this8._observer.observe(listener.el);\n });\n }\n }\n\n /**\r\n * init IntersectionObserver\r\n * @return\r\n */\n\n }, {\n key: '_observerHandler',\n value: function _observerHandler(entries, observer) {\n var _this9 = this;\n\n entries.forEach(function (entry) {\n if (entry.isIntersecting) {\n _this9.ListenerQueue.forEach(function (listener) {\n if (listener.el === entry.target) {\n if (listener.state.loaded) return _this9._observer.unobserve(listener.el);\n listener.load();\n }\n });\n }\n });\n }\n\n /**\r\n * set element attribute with image'url and state\r\n * @param {object} lazyload listener object\r\n * @param {string} state will be rendered\r\n * @param {bool} inCache is rendered from cache\r\n * @return\r\n */\n\n }, {\n key: '_elRenderer',\n value: function _elRenderer(listener, state, cache) {\n if (!listener.el) return;\n var el = listener.el,\n bindType = listener.bindType;\n\n\n var src = void 0;\n switch (state) {\n case 'loading':\n src = listener.loading;\n break;\n case 'error':\n src = listener.error;\n break;\n default:\n src = listener.src;\n break;\n }\n\n if (bindType) {\n el.style[bindType] = 'url(\"' + src + '\")';\n } else if (el.getAttribute('src') !== src) {\n el.setAttribute('src', src);\n }\n\n el.setAttribute('lazy', state);\n\n this.$emit(state, listener, cache);\n this.options.adapter[state] && this.options.adapter[state](listener, this.options);\n\n if (this.options.dispatchEvent) {\n var event = new CustomEvent(state, {\n detail: listener\n });\n el.dispatchEvent(event);\n }\n }\n\n /**\r\n * generate loading loaded error image url\r\n * @param {string} image's src\r\n * @return {object} image's loading, loaded, error url\r\n */\n\n }, {\n key: '_valueFormatter',\n value: function _valueFormatter(value) {\n var src = value;\n var loading = this.options.loading;\n var error = this.options.error;\n\n // value is object\n if (isObject(value)) {\n if (!value.src && !this.options.silent) console.error('Vue Lazyload warning: miss src with ' + value);\n src = value.src;\n loading = value.loading || this.options.loading;\n error = value.error || this.options.error;\n }\n return {\n src: src,\n loading: loading,\n error: error\n };\n }\n }]);\n return Lazy;\n }();\n}\n\nLazy.install = function (Vue) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var LazyClass = Lazy(Vue);\n var lazy = new LazyClass(options);\n\n var isVue2 = Vue.version.split('.')[0] === '2';\n if (isVue2) {\n Vue.directive('lazy', {\n bind: lazy.add.bind(lazy),\n update: lazy.update.bind(lazy),\n componentUpdated: lazy.lazyLoadHandler.bind(lazy),\n unbind: lazy.remove.bind(lazy)\n });\n } else {\n Vue.directive('lazy', {\n bind: lazy.lazyLoadHandler.bind(lazy),\n update: function update(newValue, oldValue) {\n assignDeep(this.vm.$refs, this.vm.$els);\n lazy.add(this.el, {\n modifiers: this.modifiers || {},\n arg: this.arg,\n value: newValue,\n oldValue: oldValue\n }, {\n context: this.vm\n });\n },\n unbind: function unbind() {\n lazy.remove(this.el);\n }\n });\n }\n};\n\nvar LazyComponent = function LazyComponent(lazy) {\n return {\n props: {\n tag: {\n type: String,\n default: 'div'\n }\n },\n render: function render(h) {\n return h(this.tag, null, this.show ? this.$slots.default : null);\n },\n data: function data() {\n return {\n el: null,\n state: {\n loaded: false\n },\n rect: {},\n show: false\n };\n },\n mounted: function mounted() {\n this.el = this.$el;\n lazy.addLazyBox(this);\n lazy.lazyLoadHandler();\n },\n beforeDestroy: function beforeDestroy() {\n lazy.removeComponent(this);\n },\n\n methods: {\n getRect: function getRect() {\n this.rect = this.$el.getBoundingClientRect();\n },\n checkInView: function checkInView() {\n this.getRect();\n return inBrowser && this.rect.top < window.innerHeight * lazy.options.preLoad && this.rect.bottom > 0 && this.rect.left < window.innerWidth * lazy.options.preLoad && this.rect.right > 0;\n },\n load: function load() {\n this.show = true;\n this.state.loaded = true;\n this.$emit('show', this);\n },\n destroy: function destroy() {\n return this.$destroy;\n }\n }\n };\n};\n\nLazyComponent.install = function (Vue) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var LazyClass = Lazy(Vue);\n var lazy = new LazyClass(options);\n Vue.component('lazy-component', LazyComponent(lazy));\n};\n\nvar LazyContainerMananger = function () {\n function LazyContainerMananger(_ref) {\n var lazy = _ref.lazy;\n classCallCheck(this, LazyContainerMananger);\n\n this.lazy = lazy;\n lazy.lazyContainerMananger = this;\n this._queue = [];\n }\n\n createClass(LazyContainerMananger, [{\n key: 'bind',\n value: function bind(el, binding, vnode) {\n var container = new LazyContainer({ el: el, binding: binding, vnode: vnode, lazy: this.lazy });\n this._queue.push(container);\n }\n }, {\n key: 'update',\n value: function update(el, binding, vnode) {\n var container = find(this._queue, function (item) {\n return item.el === el;\n });\n if (!container) return;\n container.update({ el: el, binding: binding, vnode: vnode });\n }\n }, {\n key: 'unbind',\n value: function unbind(el, binding, vnode) {\n var container = find(this._queue, function (item) {\n return item.el === el;\n });\n if (!container) return;\n container.clear();\n remove(this._queue, container);\n }\n }]);\n return LazyContainerMananger;\n}();\n\n\nvar defaultOptions = {\n selector: 'img'\n};\n\nvar LazyContainer = function () {\n function LazyContainer(_ref2) {\n var el = _ref2.el,\n binding = _ref2.binding,\n vnode = _ref2.vnode,\n lazy = _ref2.lazy;\n classCallCheck(this, LazyContainer);\n\n this.el = null;\n this.vnode = vnode;\n this.binding = binding;\n this.options = {};\n this.lazy = lazy;\n\n this._queue = [];\n this.update({ el: el, binding: binding });\n }\n\n createClass(LazyContainer, [{\n key: 'update',\n value: function update(_ref3) {\n var _this = this;\n\n var el = _ref3.el,\n binding = _ref3.binding;\n\n this.el = el;\n this.options = assignDeep({}, defaultOptions, binding.value);\n\n var imgs = this.getImgs();\n imgs.forEach(function (el) {\n _this.lazy.add(el, assignDeep({}, _this.binding, {\n value: {\n src: 'dataset' in el ? el.dataset.src : el.getAttribute('data-src'),\n error: ('dataset' in el ? el.dataset.error : el.getAttribute('data-error')) || _this.options.error,\n loading: ('dataset' in el ? el.dataset.loading : el.getAttribute('data-loading')) || _this.options.loading\n }\n }), _this.vnode);\n });\n }\n }, {\n key: 'getImgs',\n value: function getImgs() {\n return ArrayFrom(this.el.querySelectorAll(this.options.selector));\n }\n }, {\n key: 'clear',\n value: function clear() {\n var _this2 = this;\n\n var imgs = this.getImgs();\n imgs.forEach(function (el) {\n return _this2.lazy.remove(el);\n });\n\n this.vnode = null;\n this.binding = null;\n this.lazy = null;\n }\n }]);\n return LazyContainer;\n}();\n\nLazyContainer.install = function (Vue) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var LazyClass = Lazy(Vue);\n var lazy = new LazyClass(options);\n var lazyContainer = new LazyContainer({ lazy: lazy });\n\n var isVue2 = Vue.version.split('.')[0] === '2';\n if (isVue2) {\n Vue.directive('lazy-container', {\n bind: lazyContainer.bind.bind(lazyContainer),\n componentUpdated: lazyContainer.update.bind(lazyContainer),\n unbind: lazyContainer.unbind.bind(lazyContainer)\n });\n } else {\n Vue.directive('lazy-container', {\n update: function update(newValue, oldValue) {\n lazyContainer.update(this.el, {\n modifiers: this.modifiers || {},\n arg: this.arg,\n value: newValue,\n oldValue: oldValue\n }, {\n context: this.vm\n });\n },\n unbind: function unbind() {\n lazyContainer.unbind(this.el);\n }\n });\n }\n};\n\nvar LazyImage = function LazyImage(lazyManager) {\n return {\n props: {\n src: [String, Object],\n tag: {\n type: String,\n default: 'img'\n }\n },\n render: function render(h) {\n return h(this.tag, {\n attrs: {\n src: this.renderSrc\n }\n }, this.$slots.default);\n },\n data: function data() {\n return {\n el: null,\n options: {\n src: '',\n error: '',\n loading: '',\n attempt: lazyManager.options.attempt\n },\n state: {\n loaded: false,\n error: false,\n attempt: 0\n },\n rect: {},\n renderSrc: ''\n };\n },\n\n watch: {\n src: function src() {\n this.init();\n lazyManager.addLazyBox(this);\n lazyManager.lazyLoadHandler();\n }\n },\n created: function created() {\n this.init();\n this.renderSrc = this.options.loading;\n },\n mounted: function mounted() {\n this.el = this.$el;\n lazyManager.addLazyBox(this);\n lazyManager.lazyLoadHandler();\n },\n beforeDestroy: function beforeDestroy() {\n lazyManager.removeComponent(this);\n },\n\n methods: {\n init: function init() {\n var _lazyManager$_valueFo = lazyManager._valueFormatter(this.src),\n src = _lazyManager$_valueFo.src,\n loading = _lazyManager$_valueFo.loading,\n error = _lazyManager$_valueFo.error;\n\n this.state.loaded = false;\n this.options.src = src;\n this.options.error = error;\n this.options.loading = loading;\n this.renderSrc = this.options.loading;\n },\n getRect: function getRect() {\n this.rect = this.$el.getBoundingClientRect();\n },\n checkInView: function checkInView() {\n this.getRect();\n return inBrowser && this.rect.top < window.innerHeight * lazyManager.options.preLoad && this.rect.bottom > 0 && this.rect.left < window.innerWidth * lazyManager.options.preLoad && this.rect.right > 0;\n },\n load: function load() {\n var _this = this;\n\n var onFinish = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : noop;\n\n if (this.state.attempt > this.options.attempt - 1 && this.state.error) {\n if (!lazyManager.options.silent) console.log('VueLazyload log: ' + this.options.src + ' tried too more than ' + this.options.attempt + ' times');\n onFinish();\n return;\n }\n var src = this.options.src;\n loadImageAsync({ src: src }, function (_ref) {\n var src = _ref.src;\n\n _this.renderSrc = src;\n _this.state.loaded = true;\n }, function (e) {\n _this.state.attempt++;\n _this.renderSrc = _this.options.error;\n _this.state.error = true;\n });\n }\n }\n };\n};\n\nLazyImage.install = function (Vue) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var LazyClass = Lazy(Vue);\n var lazy = new LazyClass(options);\n Vue.component('lazy-image', LazyImage(lazy));\n};\n\nvar index = {\n /*\r\n * install function\r\n * @param {Vue} Vue\r\n * @param {object} options lazyload options\r\n */\n install: function install(Vue) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var LazyClass = Lazy(Vue);\n var lazy = new LazyClass(options);\n var lazyContainer = new LazyContainerMananger({ lazy: lazy });\n\n var isVue2 = Vue.version.split('.')[0] === '2';\n\n Vue.prototype.$Lazyload = lazy;\n\n if (options.lazyComponent) {\n Vue.component('lazy-component', LazyComponent(lazy));\n }\n\n if (options.lazyImage) {\n Vue.component('lazy-image', LazyImage(lazy));\n }\n\n if (isVue2) {\n Vue.directive('lazy', {\n bind: lazy.add.bind(lazy),\n update: lazy.update.bind(lazy),\n componentUpdated: lazy.lazyLoadHandler.bind(lazy),\n unbind: lazy.remove.bind(lazy)\n });\n Vue.directive('lazy-container', {\n bind: lazyContainer.bind.bind(lazyContainer),\n componentUpdated: lazyContainer.update.bind(lazyContainer),\n unbind: lazyContainer.unbind.bind(lazyContainer)\n });\n } else {\n Vue.directive('lazy', {\n bind: lazy.lazyLoadHandler.bind(lazy),\n update: function update(newValue, oldValue) {\n assignDeep(this.vm.$refs, this.vm.$els);\n lazy.add(this.el, {\n modifiers: this.modifiers || {},\n arg: this.arg,\n value: newValue,\n oldValue: oldValue\n }, {\n context: this.vm\n });\n },\n unbind: function unbind() {\n lazy.remove(this.el);\n }\n });\n\n Vue.directive('lazy-container', {\n update: function update(newValue, oldValue) {\n lazyContainer.update(this.el, {\n modifiers: this.modifiers || {},\n arg: this.arg,\n value: newValue,\n oldValue: oldValue\n }, {\n context: this.vm\n });\n },\n unbind: function unbind() {\n lazyContainer.unbind(this.el);\n }\n });\n }\n }\n};\n\nexport { Lazy, LazyComponent, LazyContainerMananger as LazyContainer, LazyImage, index as default };\n","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 \"-!../../../cache-loader/dist/cjs.js??ref--12-0!../../../thread-loader/dist/cjs.js!../../../@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--0-0!../../../vue-loader/lib/index.js??vue-loader-options!./VueUploadMultipleImage.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../cache-loader/dist/cjs.js??ref--12-0!../../../thread-loader/dist/cjs.js!../../../@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--0-0!../../../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-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 \"-!../../cache-loader/dist/cjs.js??ref--12-0!../../thread-loader/dist/cjs.js!../../@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../cache-loader/dist/cjs.js??ref--12-0!../../thread-loader/dist/cjs.js!../../@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../cache-loader/dist/cjs.js??ref--0-0!../../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-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"],"sourceRoot":""}